From 9247c293568958666ecca0c67575a7b06eb30a95 Mon Sep 17 00:00:00 2001 From: Killua Wang Date: Wed, 18 Dec 2024 11:58:13 +0800 Subject: [PATCH 01/16] feat: optimize WebSocket client close time in Python SDK --- .../internal/infra/default_ws_client.py | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/sdk/python/kucoin_universal_sdk/internal/infra/default_ws_client.py b/sdk/python/kucoin_universal_sdk/internal/infra/default_ws_client.py index 7b22169c..d0d6ea67 100644 --- a/sdk/python/kucoin_universal_sdk/internal/infra/default_ws_client.py +++ b/sdk/python/kucoin_universal_sdk/internal/infra/default_ws_client.py @@ -194,18 +194,23 @@ def write_message(self): def keep_alive(self): interval = self.token_info.ping_interval / 1000.0 timeout = self.token_info.ping_timeout / 1000.0 + check_shutdown_interval = 1 + sum = 0 while not self.shutdown.is_set() and not self.close_event.is_set(): - time.sleep(interval) - ping_msg = self.new_ping_message() - try: - self.write(ping_msg, timeout=timeout) - self.metric['ping_success'] += 1 - except TimeoutError: - logging.error("Heartbeat ping timeout") - self.metric['ping_err'] += 1 - except Exception as e: - logging.error(f"Exception in keep_alive: {e}") - self.metric['ping_err'] += 1 + if sum >= interval: + sum = 0 + ping_msg = self.new_ping_message() + try: + self.write(ping_msg, timeout=timeout) + self.metric['ping_success'] += 1 + except TimeoutError: + logging.error("Heartbeat ping timeout") + self.metric['ping_err'] += 1 + except Exception as e: + logging.error(f"Exception in keep_alive: {e}") + self.metric['ping_err'] += 1 + time.sleep(check_shutdown_interval) + sum += check_shutdown_interval def on_error(self, ws, error): logging.error(f"WebSocket error: {error}") @@ -287,6 +292,7 @@ def close(self): self.conn = None self.close_event.set() logging.info("WebSocket connection closed.") + logging.info("Waiting all threads close...") self.token_provider.close() self.write_thread.join() self.keep_alive_thread.join() From ae638a7b723ee9dc846f7f9222d55bd567d4f4e9 Mon Sep 17 00:00:00 2001 From: "Isaac.Tang" Date: Sat, 21 Dec 2024 15:26:03 +0800 Subject: [PATCH 02/16] feat(postman): add post man generator --- generator/postman/collection.py | 329 ++++++++++++++++++++++++++++++++ generator/postman/env.py | 17 ++ generator/postman/main.py | 8 + 3 files changed, 354 insertions(+) create mode 100644 generator/postman/collection.py create mode 100644 generator/postman/env.py create mode 100644 generator/postman/main.py diff --git a/generator/postman/collection.py b/generator/postman/collection.py new file mode 100644 index 00000000..3ddf4cce --- /dev/null +++ b/generator/postman/collection.py @@ -0,0 +1,329 @@ +import json +import sys +from json import JSONDecodeError + +specRoot = "../../spec/" +metaPath = f"{specRoot}/original/meta.json" +docPath = 'https://www.kucoin.com/docs-new/api-' + + +class Collection: + + def __init__(self): + self.path_var = set() + self.title = "" + + def generate_collection(self, subdir, title): + self.title = title + + meta_data = self.parse(metaPath, subdir) + + collection_data = self.gen_data(meta_data) + + collection = self.gen_postman(collection_data) + + self.write(f"{specRoot}postman/collection-{subdir}.json", collection) + + def parse(self, file_path, subdir): + try: + with open(file_path, "r") as file: + file_content = file.read() + meta_data = json.loads(file_content) + if 'apiCollection' not in meta_data: + raise RuntimeError("incomplete meta data") + + api_collection = meta_data['apiCollection'][0] + if 'items' not in api_collection: + raise RuntimeError("incomplete meta data") + + for item in api_collection['items']: + if item['name'] == subdir: + return item + + raise RuntimeError("no rest subdir found") + + except Exception as e: + print(f"An error occurred when read meta file: {e}") + sys.exit(1) + + def write(self, out_path, postman): + try: + with open(out_path, 'w', encoding='utf-8') as file: + json.dump(postman, file, ensure_ascii=False, indent=4) + except Exception as e: + print(f"An error occurred when generate ws specification file: {e}") + sys.exit(1) + + def gen_api(self, item): + if 'api' not in item: + raise RuntimeError(f"incomplete data for api {item}") + + api = item['api'] + path = [part for part in api['path'].split('/') if part] + x_tags = json.loads(api['customApiFields']) + if 'domain' not in x_tags: + raise RuntimeError(f'no domain tag found in {api}') + domain = x_tags['domain'].lower() + + parameters = api['parameters'] + request = api['requestBody'] + responses = api['responseExamples'] + + description_detail = self.gen_markdown(api) + + query = [] + path_var = [] + + # update query + if parameters['query']: + for p in parameters['query']: + query.append({ + 'key': p['name'], + 'value': p['example'] if 'example' in p else None, + 'description': p['description'] + }) + + # update path + if parameters['path']: + for p in parameters['path']: + path_var_name = p['name'] + path_var_name_ext = "{" + path_var_name + "}" + path_var.append(path_var_name) + self.path_var.add(path_var_name) + + if path_var_name_ext in path: + index = path.index(path_var_name_ext) + path[index] = "{{" + path_var_name + "}}" + + # update request + req_body = {} + if 'type' in request and request['type'] == 'application/json': + req_body = { + "mode": "raw", + "raw": request['example'], + "options": { + "raw": { + "language": "json" + } + } + } + + # update response + resp_body_data = '' + for resp_example in responses: + if resp_example['name'] == 'Success': + try: + resp_body_data = json.dumps(json.loads(resp_example['data']), ensure_ascii=False, indent=4) + except JSONDecodeError as e: + resp_body_data = resp_example['data'] + pass + + postman_obj = { + "name": item['name'], + "request": { + "method": api['method'].upper(), + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{%s}}" % (domain + "_endpoint") + ], + "path": path, + 'query': query, + }, + "description": description_detail, + "body": req_body, + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": api['method'].upper(), + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{%s}}" % (domain + "_endpoint") + ], + "path": path, + 'query': query + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + }, + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": resp_body_data, + } + ], + + } + + return postman_obj + + def properties_to_markdown_table(self, prop): + if not prop: + return "" + + headers = prop[0].keys() + + markdown_table = "| " + " | ".join(headers) + " |\n" + markdown_table += "| " + " | ".join(["---" for _ in headers]) + " |\n" + + # Populate the rows + for item in prop: + row = [str(item.get(header, "")) for header in headers] + markdown_table += "| " + " | ".join(row) + " |\n" + + return markdown_table + + def generate_markdown_schema(self, parent, order, schema) -> dict: + + markdown_sections = [] + prop = [] + + if schema['type'] == 'array': + sections = self.generate_markdown_schema(parent, order + 1, schema['items']) + if len(sections) > 0: + markdown_sections.extend(sections) + + if schema['type'] == 'object': + for name, value in schema['properties'].items(): + ref = False + if value['type'] == 'object' or value['type'] == 'array': + inner = self.generate_markdown_schema(name, order + 1, value) + markdown_sections.extend(inner) + ref = True + + description = value['description'] if 'description' in value else '' + if ref: + description = f'Refer to the schema section of {name}' + + prop.append({ + 'name': name, + 'type': value['type'], + 'description': description, + }) + markdown_sections.append({ + 'parent': parent, + 'value': self.properties_to_markdown_table(prop), + 'order': order, + }) + + return markdown_sections + + def gen_markdown(self, api): + api_doc_addr = f'{docPath}{api["id"]}' + api_doc = api['description'] + + request = api['requestBody'] + response = None + for r in api['responses']: + if r['code'] == 200: + response = r + + def gen_inner(obj, title): + markdown_section = {} + if 'jsonSchema' in obj: + schema = obj['jsonSchema'] + markdown_section = self.generate_markdown_schema('root', 0, schema) + else: + markdown_section = [{'parent': 'root', 'value': '', 'order': 0}] + + markdown_section = sorted(markdown_section, key=lambda x: x['order']) + nonlocal api_doc + api_doc += f'\n**{title} Body**\n\n' + + parent = '' + api_doc += '---\n' + for section in markdown_section: + if parent == '' and section['value'] == '': + api_doc += f' **None** \n' + break + if parent == '': + parent = f'root' + else: + parent = f'{parent}.{section["parent"]}' + api_doc += f'**{parent} Schema**\n\n' + api_doc += f'{section["value"]}\n' + api_doc += '---\n' + + api_doc = f'# API Description\n\nFor the complete API documentation, please refer to [doc]({api_doc_addr})\n\n' + api_doc + api_doc += f'# API Schema\n\n' + api_doc += f'## Request Schema\n\n' + gen_inner(request, "Request") + api_doc += f'## Response Schema\n\n' + gen_inner(response, "Response") + + return api_doc + + def gen_data(self, meta_data): + postman_item = [] + + if 'items' in meta_data: + for item in meta_data['items']: + is_dir = 'items' in item + + postman_obj = {} + if is_dir: + postman_obj = { + 'name': item['name'], + 'item': self.gen_data(item), + "description": '' + } + else: + postman_obj = self.gen_api(item) + + postman_item.append(postman_obj) + + return postman_item + + def gen_postman(self, postman_data): + + variables = [] + for var in self.path_var: + variables.append({ + "key": var, + "value": "", + }) + + postman = { + "info": { + "_postman_id": "e22e2bc3-0147-4151-9872-e9f6bda04a9c", + "name": self.title, + "description": f"For the complete API documentation, please refer to https://www.kucoin.com/docs-new", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json", + "_exporter_id": "13641088" + }, + "item": postman_data, + "variable": variables + } + return postman diff --git a/generator/postman/env.py b/generator/postman/env.py new file mode 100644 index 00000000..55b93173 --- /dev/null +++ b/generator/postman/env.py @@ -0,0 +1,17 @@ + +class Env: +# "variable": [ +# { +# "key": "spot_domain", +# "value": "https://api.kucoin.com" +# }, +# { +# "key": "futures_domain", +# "value": "https://api-futures.kucoin.com" +# }, +# { +# "key": "broker_domain", +# "value": "https://api-broker.kucoin.com" +# } +# ] + pass \ No newline at end of file diff --git a/generator/postman/main.py b/generator/postman/main.py new file mode 100644 index 00000000..e845ad1d --- /dev/null +++ b/generator/postman/main.py @@ -0,0 +1,8 @@ +import collection + +if __name__ == '__main__': + rest_collection = collection.Collection() + rest_collection.generate_collection("REST", "Kucoin REST API") + + res_collection = collection.Collection() + res_collection.generate_collection("Abandoned Endpoints", "Kucoin REST API(Abandoned)") From 1962a9782364003b6087d1ae509cf18cfaea0c67 Mon Sep 17 00:00:00 2001 From: "Isaac.Tang" Date: Mon, 23 Dec 2024 14:07:54 +0800 Subject: [PATCH 03/16] feat(postman): add postman doc support --- generator/postman/collection.py | 40 +++++++++++++++++++++++++--- generator/preprocessor/meta_tools.py | 20 ++++++++++++++ spec/original/meta.json | 27 +++++++++++++++++++ 3 files changed, 84 insertions(+), 3 deletions(-) diff --git a/generator/postman/collection.py b/generator/postman/collection.py index 3ddf4cce..dd182558 100644 --- a/generator/postman/collection.py +++ b/generator/postman/collection.py @@ -1,10 +1,12 @@ import json +import re import sys from json import JSONDecodeError specRoot = "../../spec/" metaPath = f"{specRoot}/original/meta.json" -docPath = 'https://www.kucoin.com/docs-new/api-' +apiPath = 'https://www.kucoin.com/docs-new/api-' +docPath = 'https://www.kucoin.com/docs-new/doc-' class Collection: @@ -12,6 +14,7 @@ class Collection: def __init__(self): self.path_var = set() self.title = "" + self.doc_id = set() def generate_collection(self, subdir, title): self.title = title @@ -29,6 +32,8 @@ def parse(self, file_path, subdir): with open(file_path, "r") as file: file_content = file.read() meta_data = json.loads(file_content) + + self.doc_id = set(meta_data['doc_id']) if 'apiCollection' not in meta_data: raise RuntimeError("incomplete meta data") @@ -205,6 +210,32 @@ def properties_to_markdown_table(self, prop): return markdown_table + + def gen_doc_api_url(self, id, doc :bool): + if doc: + return f'{docPath}{id}' + return f'{apiPath}{id}' + + + def escape_markdown(self, markdown): + markdown = markdown.replace('\n', '
') + markdown = markdown.replace('|', '\\|') + return markdown + + def escape_url(self, markdown): + pattern = r"apidog://link/pages/(\d+)" + match = re.search(pattern, markdown) + if match: + number = match.group(1) + url = '' + if self.doc_id.__contains__(number): + url = self.gen_doc_api_url(number, True) + else: + url = self.gen_doc_api_url(number, False) + markdown = re.sub(pattern, url, markdown) + return markdown + + def generate_markdown_schema(self, parent, order, schema) -> dict: markdown_sections = [] @@ -227,6 +258,9 @@ def generate_markdown_schema(self, parent, order, schema) -> dict: if ref: description = f'Refer to the schema section of {name}' + description = self.escape_url(description) + description = self.escape_markdown(description) + prop.append({ 'name': name, 'type': value['type'], @@ -241,7 +275,7 @@ def generate_markdown_schema(self, parent, order, schema) -> dict: return markdown_sections def gen_markdown(self, api): - api_doc_addr = f'{docPath}{api["id"]}' + api_doc_addr = self.gen_doc_api_url(api['id'], False) api_doc = api['description'] request = api['requestBody'] @@ -277,7 +311,7 @@ def gen_inner(obj, title): api_doc += '---\n' api_doc = f'# API Description\n\nFor the complete API documentation, please refer to [doc]({api_doc_addr})\n\n' + api_doc - api_doc += f'# API Schema\n\n' + api_doc += f'\n# API Schema\n\n' api_doc += f'## Request Schema\n\n' gen_inner(request, "Request") api_doc += f'## Response Schema\n\n' diff --git a/generator/preprocessor/meta_tools.py b/generator/preprocessor/meta_tools.py index 41107b76..b87f34a4 100644 --- a/generator/preprocessor/meta_tools.py +++ b/generator/preprocessor/meta_tools.py @@ -57,12 +57,32 @@ def clear_api_collection(data): for k in clear_keys: del data['api'][k] + def gen_doc_id_collection(self, collection): + id = set() + + if 'items' in collection: + for item in collection['items']: + id.add(item['id']) + + for doc in collection['children']: + id.update(self.gen_doc_id_collection(doc)) + + return id + + def clear_garbage(self): MetaTools.clear_api_collection(self.data['apiCollection']) + + if 'docCollection' in self.data: + doc_id = self.gen_doc_id_collection(self.data['docCollection'][0]) + else: + doc_id = self.data['doc_id'] + self.data = { 'apiCollection' : self.data['apiCollection'], 'schemaCollection': self.data['schemaCollection'], + 'doc_id': list(doc_id), } diff --git a/spec/original/meta.json b/spec/original/meta.json index 50553130..09455773 100644 --- a/spec/original/meta.json +++ b/spec/original/meta.json @@ -51562,5 +51562,32 @@ } ] } + ], + "doc_id": [ + 338144, + 338145, + 338146, + 338147, + 338148, + 338149, + 338150, + 338151, + 338152, + 338153, + 338154, + 338155, + 338156, + 338157, + 338158, + 338159, + 338160, + 338161, + 338162, + 338163, + 338164, + 338165, + 338166, + 338167, + 338168 ] } \ No newline at end of file From ee5d862cef0030e6b245ea9b69e219acecda7572 Mon Sep 17 00:00:00 2001 From: "Isaac.Tang" Date: Mon, 23 Dec 2024 16:08:17 +0800 Subject: [PATCH 04/16] feat(postman): add postman env --- generator/postman/collection.py | 16 ++--- generator/postman/costant.py | 6 ++ generator/postman/env.py | 101 +++++++++++++++++++++++++++----- generator/postman/main.py | 5 ++ 4 files changed, 102 insertions(+), 26 deletions(-) create mode 100644 generator/postman/costant.py diff --git a/generator/postman/collection.py b/generator/postman/collection.py index dd182558..8caf6b0c 100644 --- a/generator/postman/collection.py +++ b/generator/postman/collection.py @@ -3,10 +3,7 @@ import sys from json import JSONDecodeError -specRoot = "../../spec/" -metaPath = f"{specRoot}/original/meta.json" -apiPath = 'https://www.kucoin.com/docs-new/api-' -docPath = 'https://www.kucoin.com/docs-new/doc-' +from costant import docPath, apiPath, metaPath, outputPath class Collection: @@ -25,7 +22,7 @@ def generate_collection(self, subdir, title): collection = self.gen_postman(collection_data) - self.write(f"{specRoot}postman/collection-{subdir}.json", collection) + self.write(f"{outputPath}/collection-{subdir}.json", collection) def parse(self, file_path, subdir): try: @@ -56,7 +53,7 @@ def write(self, out_path, postman): with open(out_path, 'w', encoding='utf-8') as file: json.dump(postman, file, ensure_ascii=False, indent=4) except Exception as e: - print(f"An error occurred when generate ws specification file: {e}") + print(f"An error occurred when generate postman specification file: {e}") sys.exit(1) def gen_api(self, item): @@ -210,17 +207,15 @@ def properties_to_markdown_table(self, prop): return markdown_table - - def gen_doc_api_url(self, id, doc :bool): + def gen_doc_api_url(self, id, doc: bool): if doc: return f'{docPath}{id}' return f'{apiPath}{id}' - def escape_markdown(self, markdown): markdown = markdown.replace('\n', '
') markdown = markdown.replace('|', '\\|') - return markdown + return markdown def escape_url(self, markdown): pattern = r"apidog://link/pages/(\d+)" @@ -235,7 +230,6 @@ def escape_url(self, markdown): markdown = re.sub(pattern, url, markdown) return markdown - def generate_markdown_schema(self, parent, order, schema) -> dict: markdown_sections = [] diff --git a/generator/postman/costant.py b/generator/postman/costant.py new file mode 100644 index 00000000..f98a0998 --- /dev/null +++ b/generator/postman/costant.py @@ -0,0 +1,6 @@ + +specRoot = "../../spec/" +metaPath = f"{specRoot}/original/meta.json" +outputPath = f"../../sdk/postman" +apiPath = 'https://www.kucoin.com/docs-new/api-' +docPath = 'https://www.kucoin.com/docs-new/doc-' \ No newline at end of file diff --git a/generator/postman/env.py b/generator/postman/env.py index 55b93173..aea15293 100644 --- a/generator/postman/env.py +++ b/generator/postman/env.py @@ -1,17 +1,88 @@ +import json +import sys + +from costant import outputPath + class Env: -# "variable": [ -# { -# "key": "spot_domain", -# "value": "https://api.kucoin.com" -# }, -# { -# "key": "futures_domain", -# "value": "https://api-futures.kucoin.com" -# }, -# { -# "key": "broker_domain", -# "value": "https://api-broker.kucoin.com" -# } -# ] - pass \ No newline at end of file + def gen_env(self): + values = [ + { + "key": "spot_endpoint", + "value": "api.kucoin.com", + "type": "default", + "enable": True, + }, + { + "key": "futures_endpoint", + "value": "api-futures.kucoin.com", + "type": "default", + "enable": True, + }, + { + "key": "broker_endpoint", + "value": "api-broker.kucoin.com", + "type": "default", + "enable": True, + }, + { + "key": "API_KEY", + "value": "", + "type": "secret", + "enabled": True + }, + { + "key": "API_SECRET", + "value": "", + "type": "secret", + "enabled": True + }, + { + "key": "API_PASSPHRASE", + "value": "", + "type": "secret", + "enabled": True + } + , + { + "key": "BROKER_NAME", + "value": "", + "type": "secret", + "enabled": True + } + , + { + "key": "BROKER_PARTNER", + "value": "", + "type": "secret", + "enabled": True + } + , + { + "key": "BROKER_KEY", + "value": "", + "type": "secret", + "enabled": True + } + ] + + env_obj = { + "id": "0deee4de-080a-4246-a95d-3eee14126248", + "name": "KuCoin API Production", + "values": values, + "_postman_variable_scope": "environment", + } + return env_obj + + def write_env(self, env_obj): + try: + out_path = f"{outputPath}/env.json" + with open(out_path, 'w', encoding='utf-8') as file: + json.dump(env_obj, file, ensure_ascii=False, indent=4) + except Exception as e: + print(f"An error occurred when generate postman env file: {e}") + sys.exit(1) + + def generate(self): + env_obj = self.gen_env() + self.write_env(env_obj) diff --git a/generator/postman/main.py b/generator/postman/main.py index e845ad1d..4a916e4c 100644 --- a/generator/postman/main.py +++ b/generator/postman/main.py @@ -1,4 +1,5 @@ import collection +import env if __name__ == '__main__': rest_collection = collection.Collection() @@ -6,3 +7,7 @@ res_collection = collection.Collection() res_collection.generate_collection("Abandoned Endpoints", "Kucoin REST API(Abandoned)") + + env = env.Env() + env.generate() + From b93ffc12b96766134b37123e130fccd1d03b8dd1 Mon Sep 17 00:00:00 2001 From: "Isaac.Tang" Date: Tue, 24 Dec 2024 20:59:09 +0800 Subject: [PATCH 05/16] feat(postman): add postman script --- generator/postman/collection.py | 60 +++++++++++++-- generator/postman/costant.py | 1 + generator/postman/script.py | 15 ++++ generator/postman/script_broker_template.js | 83 +++++++++++++++++++++ generator/postman/script_template.js | 69 +++++++++++++++++ 5 files changed, 221 insertions(+), 7 deletions(-) create mode 100644 generator/postman/script.py create mode 100644 generator/postman/script_broker_template.js create mode 100644 generator/postman/script_template.js diff --git a/generator/postman/collection.py b/generator/postman/collection.py index 8caf6b0c..193ead0c 100644 --- a/generator/postman/collection.py +++ b/generator/postman/collection.py @@ -3,7 +3,8 @@ import sys from json import JSONDecodeError -from costant import docPath, apiPath, metaPath, outputPath +import script +from costant import docPath, apiPath, metaPath, outputPath, brokerFolderName class Collection: @@ -82,7 +83,7 @@ def gen_api(self, item): query.append({ 'key': p['name'], 'value': p['example'] if 'example' in p else None, - 'description': p['description'] + 'description': self.escape_url(p['description']) }) # update path @@ -218,10 +219,10 @@ def escape_markdown(self, markdown): return markdown def escape_url(self, markdown): - pattern = r"apidog://link/pages/(\d+)" + pattern = r"apidog://link/(pages|endpoint)/(\d+)" match = re.search(pattern, markdown) if match: - number = match.group(1) + number = match.group(2) url = '' if self.doc_id.__contains__(number): url = self.gen_doc_api_url(number, True) @@ -325,8 +326,32 @@ def gen_data(self, meta_data): postman_obj = { 'name': item['name'], 'item': self.gen_data(item), - "description": '' + "description": '', } + + if item['name'] == brokerFolderName: + postman_obj["event"] = [ + { + "listen": "prerequest", + "script": { + "type": "text/javascript", + "packages": {}, + "exec": [ + script.get_script(True) + ] + } + }, + { + "listen": "test", + "script": { + "type": "text/javascript", + "packages": {}, + "exec": [ + "" + ] + } + } + ] else: postman_obj = self.gen_api(item) @@ -349,9 +374,30 @@ def gen_postman(self, postman_data): "name": self.title, "description": f"For the complete API documentation, please refer to https://www.kucoin.com/docs-new", "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json", - "_exporter_id": "13641088" }, "item": postman_data, - "variable": variables + "variable": variables, + "event": [ + { + "listen": "prerequest", + "script": { + "type": "text/javascript", + "packages": {}, + "exec": [ + script.get_script(False) + ] + } + }, + { + "listen": "test", + "script": { + "type": "text/javascript", + "packages": {}, + "exec": [ + "" + ] + } + } + ], } return postman diff --git a/generator/postman/costant.py b/generator/postman/costant.py index f98a0998..b40484b9 100644 --- a/generator/postman/costant.py +++ b/generator/postman/costant.py @@ -2,5 +2,6 @@ specRoot = "../../spec/" metaPath = f"{specRoot}/original/meta.json" outputPath = f"../../sdk/postman" +brokerFolderName = 'Broker' apiPath = 'https://www.kucoin.com/docs-new/api-' docPath = 'https://www.kucoin.com/docs-new/doc-' \ No newline at end of file diff --git a/generator/postman/script.py b/generator/postman/script.py new file mode 100644 index 00000000..99cd7b6e --- /dev/null +++ b/generator/postman/script.py @@ -0,0 +1,15 @@ +import os + + +def get_script(broker: bool) -> str: + + sdk_version = os.getenv("SDK_VERSION", '') + + file_name = 'script_template.js' + if broker: + file_name = 'script_broker_template.js' + + with open(file_name, 'r', encoding='utf-8') as file: + content = file.read() + content = content.replace('{{SDK-VERSION}}', sdk_version) + return content \ No newline at end of file diff --git a/generator/postman/script_broker_template.js b/generator/postman/script_broker_template.js new file mode 100644 index 00000000..1870727c --- /dev/null +++ b/generator/postman/script_broker_template.js @@ -0,0 +1,83 @@ + +function extractPathVariable(str) { + const regex = /^\{\{(.+?)\}\}$/; + const match = str.match(regex); + if (match) { + return match[1]; + } + return null; +} + +function hasAnyFieldEmpty(obj) { + for (const key in obj) { + if (obj[key] === "" || obj[key] === null || obj[key] === undefined) { + return true; + } + } + return false; +} + +function sign(text, secret) { + const hash = CryptoJS.HmacSHA256(text, secret); + return CryptoJS.enc.Base64.stringify(hash) +} + +function auth(apiKey, method, url, data) { + if (hasAnyFieldEmpty(apiKey)) { + console.warn('The API key-related (or broker-related) information is not configured. Please check the fields in the environment variables.') + return {'User-Agent': `Kucoin-Universal-Postman-SDK/{{SDK-VERSION}}`} + } + + + const timestamp = Date.now(); + const text = timestamp + method.toUpperCase() + url + data; + const signature = sign(text, apiKey.secret); + const brokerText = timestamp + apiKey.partner + apiKey.key; + const brokerSignature = sign(brokerText, apiKey.brokerKey); + return { + 'KC-API-KEY': apiKey.key, + 'KC-API-SIGN': signature, + 'KC-API-TIMESTAMP': timestamp.toString(), + 'KC-API-PASSPHRASE': sign(apiKey.passphrase || '', apiKey.secret), + 'Content-Type': 'application/json', + 'User-Agent': `Kucoin-Universal-Postman-SDK/{{SDK-VERSION}}`, + 'KC-API-KEY-VERSION': 2, + 'KC-API-PARTNER': apiKey.partner, + 'KC-BROKER-NAME': apiKey.brokerName, + 'KC-API-PARTNER-VERIFY': 'true', + 'KC-API-PARTNER-SIGN': brokerSignature, + }; +} + +let key = pm.environment.get('API_KEY') +let secret = pm.environment.get('API_SECRET') +let passphrase = pm.environment.get('API_PASSPHRASE') + +let brokerName = pm.environment.get('BROKER_NAME') +let partner = pm.environment.get('BROKER_PARTNER') +let brokerKey = pm.environment.get('BROKER_KEY') + +let url = pm.request.url.getPathWithQuery() +let method = pm.request.method +let body = pm.request.body ? pm.request.body.toString() : '' + +for (const index in pm.request.url.path) { + path = pm.request.url.path[index] + pathVar = extractPathVariable(path) + if (pathVar != null) { + let collectionVariable = pm.collectionVariables.get(pathVar); + if (collectionVariable != null) { + url = url.replace(path, collectionVariable) + } else { + console.warn('no path variable set: ' + path) + } + } +} + +header = auth({ + key: key, passphrase: passphrase, secret: secret, brokerName: brokerName, partner: partner, brokerKey: brokerKey +}, method, url, body) + +for (const [headerName, headerValue] of Object.entries(header)) { + pm.request.headers.add({ key: headerName, value: headerValue }) +} \ No newline at end of file diff --git a/generator/postman/script_template.js b/generator/postman/script_template.js new file mode 100644 index 00000000..fd0d8991 --- /dev/null +++ b/generator/postman/script_template.js @@ -0,0 +1,69 @@ +function extractPathVariable(str) { + const regex = /^\{\{(.+?)\}\}$/; + const match = str.match(regex); + if (match) { + return match[1]; + } + return null; +} + +function hasAnyFieldEmpty(obj) { + for (const key in obj) { + if (obj[key] === "" || obj[key] === null || obj[key] === undefined) { + return true; + } + } + return false; +} + +function sign(text, secret) { + const hash = CryptoJS.HmacSHA256(text, secret); + return CryptoJS.enc.Base64.stringify(hash) +} + +function auth(apiKey, method, url, data) { + if (hasAnyFieldEmpty(apiKey)) { + console.warn('The API key-related information is not configured; only the public channel API is accessible.') + return {'User-Agent': `Kucoin-Universal-Postman-SDK/{{SDK-VERSION}}`} + } + + const timestamp = Date.now(); + const text = timestamp + method.toUpperCase() + url + data; + const signature = sign(text, apiKey.secret); + return { + 'KC-API-KEY': apiKey.key, + 'KC-API-SIGN': signature, + 'KC-API-TIMESTAMP': timestamp.toString(), + 'KC-API-PASSPHRASE': sign(apiKey.passphrase || '', apiKey.secret), + 'Content-Type': 'application/json', + 'User-Agent': `Kucoin-Universal-Postman-SDK/{{SDK-VERSION}}`, + 'KC-API-KEY-VERSION': 2, + }; +} + +let key = pm.environment.get('API_KEY') +let secret = pm.environment.get('API_SECRET') +let passphrase = pm.environment.get('API_PASSPHRASE') + +let url = pm.request.url.getPathWithQuery() +let method = pm.request.method +let body = pm.request.body ? pm.request.body.toString() : '' + +for (const index in pm.request.url.path) { + path = pm.request.url.path[index] + pathVar = extractPathVariable(path) + if (pathVar != null) { + let collectionVariable = pm.collectionVariables.get(pathVar); + if (collectionVariable != null) { + url = url.replace(path, collectionVariable) + } else { + console.warn('no path variable set: ' + path) + } + } +} + +header = auth({ key: key, passphrase: passphrase, secret: secret }, method, url, body) + +for (const [headerName, headerValue] of Object.entries(header)) { + pm.request.headers.add({ key: headerName, value: headerValue }) +} \ No newline at end of file From e889229bcd33ef8dbc4e56c81a64d359128b7270 Mon Sep 17 00:00:00 2001 From: killua Date: Wed, 25 Dec 2024 04:55:40 +0000 Subject: [PATCH 06/16] fix(python sdk): fix utilizes cpu high --- .../internal/infra/default_ws_client.py | 17 +++++++++-------- .../internal/infra/default_ws_service.py | 4 ++-- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/sdk/python/kucoin_universal_sdk/internal/infra/default_ws_client.py b/sdk/python/kucoin_universal_sdk/internal/infra/default_ws_client.py index d0d6ea67..3f1a8dd2 100644 --- a/sdk/python/kucoin_universal_sdk/internal/infra/default_ws_client.py +++ b/sdk/python/kucoin_universal_sdk/internal/infra/default_ws_client.py @@ -194,11 +194,11 @@ def write_message(self): def keep_alive(self): interval = self.token_info.ping_interval / 1000.0 timeout = self.token_info.ping_timeout / 1000.0 - check_shutdown_interval = 1 - sum = 0 + last_ping_time = time.time() + while not self.shutdown.is_set() and not self.close_event.is_set(): - if sum >= interval: - sum = 0 + current_time = time.time() + if current_time - last_ping_time >= interval: ping_msg = self.new_ping_message() try: self.write(ping_msg, timeout=timeout) @@ -209,8 +209,9 @@ def keep_alive(self): except Exception as e: logging.error(f"Exception in keep_alive: {e}") self.metric['ping_err'] += 1 - time.sleep(check_shutdown_interval) - sum += check_shutdown_interval + last_ping_time = current_time + + time.sleep(1) def on_error(self, ws, error): logging.error(f"WebSocket error: {error}") @@ -224,10 +225,10 @@ def on_close(self, ws, close_status_code, close_msg): def reconnect(self): def reconnect_loop(): while True: - if self.reconnect_close_event.is_set(): + if self.reconnect_close_event.wait(timeout=1): return - if self.disconnect_event.is_set(): + if self.disconnect_event.wait(timeout=1): if self.shutdown.is_set(): continue diff --git a/sdk/python/kucoin_universal_sdk/internal/infra/default_ws_service.py b/sdk/python/kucoin_universal_sdk/internal/infra/default_ws_service.py index 2026b7bc..9985d5d1 100644 --- a/sdk/python/kucoin_universal_sdk/internal/infra/default_ws_service.py +++ b/sdk/python/kucoin_universal_sdk/internal/infra/default_ws_service.py @@ -29,8 +29,8 @@ def __init__(self, client_option: ClientOption, domain: DomainType, private: boo def recovery(self): def recovery_loop(): - while not self.stop_event.is_set(): - event_triggered = self.client.reconnected_event.wait(timeout=1) + while not self.stop_event.wait(timeout=1): + event_triggered = self.client.reconnected_event.is_set() if self.stop_event.is_set(): return if event_triggered: From a6014d1cfa04543ca5e07b85da7d483cdb34d7e2 Mon Sep 17 00:00:00 2001 From: "Isaac.Tang" Date: Wed, 25 Dec 2024 19:27:32 +0800 Subject: [PATCH 07/16] feat(python): update sdk --- README.md | 4 ++-- sdk/golang/README.md | 5 ++++- sdk/python/README.md | 7 +++++-- sdk/python/setup.py | 2 +- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 75d002db..f14ab67a 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ The **KuCoin Universal SDK** is the official SDK provided by KuCoin, offering a ### Python Installation ```bash -pip install kucoin-universal-sdk==0.1.1a +pip install kucoin-universal-sdk==0.1.1a1 ``` ### Golang Installation @@ -119,7 +119,7 @@ For other languages, refer to the [Examples](#-examples) section. ## ๐Ÿ“š Documentation -- Official Documentation: [KuCoin API Docs](https://www.kucoin.com/docs-new/doc-338144) +- Official Documentation: [KuCoin API Docs](https://www.kucoin.com/docs-new) - **[Python Documentation](sdk/python/README.md)** - **[Go Documentation](sdk/golang/README.md)** diff --git a/sdk/golang/README.md b/sdk/golang/README.md index af7d942e..ffd9c983 100644 --- a/sdk/golang/README.md +++ b/sdk/golang/README.md @@ -1,4 +1,7 @@ # Go SDK Documentation +![License Badge](https://img.shields.io/badge/license-MIT-green) +![Language](https://img.shields.io/badge/Go-blue) + Welcome to the **Go** implementation of the KuCoin Universal SDK. This SDK is built based on KuCoin API specifications to provide a comprehensive and optimized interface for interacting with the KuCoin platform. For an overview of the project and SDKs in other languages, refer to the [Main README](https://github.com/kucoin/kucoin-universal-sdk). @@ -79,7 +82,7 @@ func example() { } ``` ## ๐Ÿ“š Documentation -Official Documentation: [KuCoin API Docs](https://www.kucoin.com/docs) +Official Documentation: [KuCoin API Docs](https://www.kucoin.com/docs-new) ## ๐Ÿ“‚ Examples diff --git a/sdk/python/README.md b/sdk/python/README.md index 38535e5f..fa8b7264 100644 --- a/sdk/python/README.md +++ b/sdk/python/README.md @@ -1,4 +1,7 @@ # Python SDK Documentation +![License Badge](https://img.shields.io/badge/license-MIT-green) +![Language](https://img.shields.io/badge/Python-blue) + Welcome to the **Python** implementation of the KuCoin Universal SDK. This SDK is built based on KuCoin API specifications to provide a comprehensive and optimized interface for interacting with the KuCoin platform. For an overview of the project and SDKs in other languages, refer to the [Main README](https://github.com/kucoin/kucoin-universal-sdk). @@ -9,7 +12,7 @@ For an overview of the project and SDKs in other languages, refer to the [Main R Install the Python SDK using `pip`: ```bash -pip install kucoin-universal-sdk==0.1.1a +pip install kucoin-universal-sdk==0.1.1a1 ``` ## ๐Ÿ“– Getting Started @@ -80,7 +83,7 @@ if __name__ == "__main__": ``` ## ๐Ÿ“š Documentation -Official Documentation: [KuCoin API Docs](https://www.kucoin.com/docs) +Official Documentation: [KuCoin API Docs](https://www.kucoin.com/docs-new) ## ๐Ÿ“‚ Examples diff --git a/sdk/python/setup.py b/sdk/python/setup.py index 653d6134..dc38b7da 100644 --- a/sdk/python/setup.py +++ b/sdk/python/setup.py @@ -2,7 +2,7 @@ setup( name="kucoin-universal-sdk", - version="0.1.1a", + version="0.1.1a1", description="Official KuCoin Universal SDK", author="KuCoin", author_email="api@kucoin.com", From 017bb8851e0584f07593ec82c50a181cd423311c Mon Sep 17 00:00:00 2001 From: "Isaac.Tang" Date: Thu, 26 Dec 2024 17:22:37 +0800 Subject: [PATCH 08/16] doc(postman): add README.md --- Makefile | 9 ++++ generate.mk | 11 +++- sdk/postman/LICENSE | 21 ++++++++ sdk/postman/README.md | 91 ++++++++++++++++++++++++++++++++++ sdk/postman/img/endpoints.png | Bin 0 -> 33457 bytes sdk/postman/img/env.png | Bin 0 -> 219188 bytes sdk/postman/img/overview.png | Bin 0 -> 745560 bytes sdk/postman/img/response.png | Bin 0 -> 64482 bytes sdk/postman/img/send.png | Bin 0 -> 238885 bytes 9 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 sdk/postman/LICENSE create mode 100644 sdk/postman/README.md create mode 100644 sdk/postman/img/endpoints.png create mode 100644 sdk/postman/img/env.png create mode 100644 sdk/postman/img/overview.png create mode 100644 sdk/postman/img/response.png create mode 100644 sdk/postman/img/send.png diff --git a/Makefile b/Makefile index e7a339a5..b1188552 100644 --- a/Makefile +++ b/Makefile @@ -74,6 +74,10 @@ define generate-code @echo "$(GREEN)lang: $(lang), done!$(NC)" endef +define generate-postman + @make -f generate.mk generate-postman +endef + SUBDIRS := $(shell find ./sdk -mindepth 1 -maxdepth 1 -type d) .PHONY: test $(SUBDIRS) @@ -86,9 +90,14 @@ $(SUBDIRS): .PHONY: generate generate: setup-logs + $(call generate-postman) $(call generate-code,golang,/pkg/generate) $(call generate-code,python,/kucoin_universal_sdk/generate) +.PHONY: gen-postman +gen-postman: preprocessor + $(call generate-postman) + .PHONY: fastgen fastgen: build-tools preprocessor @make generate diff --git a/generate.mk b/generate.mk index fc9e3a41..0c3e64f3 100644 --- a/generate.mk +++ b/generate.mk @@ -7,6 +7,12 @@ RED=\033[0;31m GREEN=\033[0;32m NC=\033[0m +define generate-postman-func + docker run --rm -v "${PWD}:/local" -w /local/generator/postman -e SDK_VERSION=$(VERSION) python:3.9.20-alpine3.20 \ + python main.py + + @echo "$(GREEN)lang: postman, done!$(NC)" +endef define generate-api @echo "$(GREEN)lang: $(2). generate api for $(service)...$(NC)" @@ -79,7 +85,10 @@ REST_FILES := $(wildcard ./spec/rest/api/*.json) ENTRY_FILES := $(wildcard ./spec/rest/entry/*.json) WS_FILES := $(wildcard ./spec/ws/*.json) -.PHONY: generate $(REST_FILES) $(ENTRY_FILES) $(WS_FILES) force +.PHONY: generate $(REST_FILES) $(ENTRY_FILES) $(WS_FILES) generate-postman force + +generate-postman: + $(call generate-postman-func) generate: $(patsubst ./spec/rest/api/%.json,generate-rest-%, $(REST_FILES)) $(patsubst ./spec/rest/entry/%.json,generate-entry-%, $(ENTRY_FILES)) $(patsubst ./spec/ws/%.json,generate-ws-%, $(WS_FILES)) diff --git a/sdk/postman/LICENSE b/sdk/postman/LICENSE new file mode 100644 index 00000000..b894b056 --- /dev/null +++ b/sdk/postman/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 KuCoin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/sdk/postman/README.md b/sdk/postman/README.md new file mode 100644 index 00000000..2daf91c8 --- /dev/null +++ b/sdk/postman/README.md @@ -0,0 +1,91 @@ +# Postman API Collection Documentation + +Welcome to the **Postman API Collection** for the KuCoin Universal SDK. This collection is designed to provide a quick and interactive way to explore and test the KuCoin APIs directly within Postman. + +For an overview of the KuCoin Universal SDK and implementations in other languages, refer to the [README](https://github.com/kucoin/kucoin-universal-sdk). + +![Overview](img/overview.png) + +## ๐Ÿ“ฆ Installation + +**Note:** The API collection is actively maintained and updated in line with KuCoin's API specifications. Feedback and contributions to improve the collection are highly encouraged. + +1. Visit the official Postman collection shared link: [KuCoin API Collection on Postman](https://www.postman.com/kucoin-api/kucoin-api/overview). +2. Log in to your Postman account on the web (or create one if you don't have an account). +3. Click **Run in Postman** or **Fork Collection** to add the collection directly to your Postman workspace. +4. Once added, navigate to your workspace, where the collection will be available for immediate use. +5. If you are using the Postman desktop app, the collection will automatically sync with your desktop workspace once added to your account. +6. Configure the environment variables according to your API credentials and begin testing KuCoin's APIs. + +## Set Up Environment Variables + +![Overview](img/env.png) + +To use the collection effectively, follow these steps: + +#### Steps to Configure + +1. In Postman, select the preconfigured environment named **`KuCoin API Production`** from the **Environment** dropdown. +2. Fill in the following variables based on your usage needs: + - **Mandatory Variables** (required only for private API endpoints): + - `API_KEY`: Your KuCoin API key. + - `API_SECRET`: Your KuCoin API secret. + - `API_PASSPHRASE`: Your KuCoin API passphrase. + - **Optional Variables** (only required for broker-related APIs): + - `BROKER_NAME`: Name of the broker account. + - `BROKER_PARTNER`: Partner information associated with the broker account. + - `BROKER_KEY`: Key associated with the broker account for authentication. +3. For public API endpoints (e.g., market data), the mandatory variables are not required and can be left blank. +4. Save the environment to ensure all variables are correctly applied. +5. Return to the Postman main interface and select **`KuCoin API Production`** from the **Environment** dropdown to activate the configuration. +6. Once configured, you're ready to use the Postman collection. + +#### Variable Reference + +| Variable | Description | Example Value | +|-------------------|-----------------------------------------------------------------|---------------------------| +| `spot_endpoint` | Base URL for Spot API endpoints. | `https://api.kucoin.com` | +| `futures_endpoint`| Base URL for Futures API endpoints. | `https://api-futures.kucoin.com` | +| `broker_endpoint` | Base URL for Broker API endpoints. | `https://api-broker.kucoin.com` | +| `API_KEY` | Your KuCoin API key. | | +| `API_SECRET` | Your KuCoin API secret. | | +| `API_PASSPHRASE` | Your KuCoin API passphrase. | | +| `BROKER_NAME` | *(Optional)* Name of the broker account. Required only for broker-related APIs. | | +| `BROKER_PARTNER` | *(Optional)* Partner information associated with the broker account. Required only for broker-related APIs. | | +| `BROKER_KEY` | *(Optional)* Key associated with the broker account for authentication. Required only for broker-related APIs. | | + +## ๐Ÿ“– Getting Started + +Here's a quick guide to interact with KuCoin APIs using the Postman collection: + +### Step 1: Open the Collection + +![Open Collection](img/endpoints.png) + +### Step 2: Send a Request + +![Send Request](img/send.png) + +### Step 3: View Responses + +![View Response](img/response.png) + +## ๐Ÿ“ Documentation + +For detailed information about the API endpoints, refer to the official KuCoin API documentation: + +- [KuCoin API Docs](https://www.kucoin.com/docs-new) + +## ๐Ÿ“ง Contact Support + +If you encounter any issues or have questions, feel free to reach out through: + +- GitHub Issues: [Submit an Issue](https://github.com/kucoin/kucoin-universal-sdk/issues) + +## โš ๏ธ Disclaimer + +- **Financial Risk**: This Postman collection is provided as a tool to explore KuCoin's APIs. It does not provide financial advice. Trading cryptocurrencies involves substantial risk, including the risk of loss. Users should assess their financial circumstances and consult with financial advisors before engaging in trading. +- **No Warranty**: The collection is provided "as is" without any guarantees of accuracy, reliability, or suitability for a specific purpose. Use it at your own risk. +- **Compliance**: Users are responsible for ensuring compliance with all applicable laws and regulations in their jurisdiction when using this collection. + +By using this Postman collection, you acknowledge that you have read, understood, and agreed to this disclaimer. diff --git a/sdk/postman/img/endpoints.png b/sdk/postman/img/endpoints.png new file mode 100644 index 0000000000000000000000000000000000000000..ac2a44f7fcfd7afc73292c0079bd43629c009c54 GIT binary patch literal 33457 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 P_@{P5Td7*XBJBSF4B^Z3 literal 0 HcmV?d00001 diff --git a/sdk/postman/img/env.png b/sdk/postman/img/env.png new file mode 100644 index 0000000000000000000000000000000000000000..2431aadb4d9ae92ddfdf184b048c2561506c30a4 GIT binary patch literal 219188 zcmeFZ1yEdDwg8F*OK{gfaCi3vcXtB8gS&eO!QEW~!QGt%m&Ss-LvVNbhdXoMn>%yo zCNuS`e*LOPRnw=t&)$3OwU^5Yl9v@jc#iuV3=9lGLR?r83=DA-3=HNOECle)2bHh; zU|`QPOofExC4_{C%;$f6yW>9?&AM*k}V!9!;NLYjCe0&*vMos++ z4p}nLm*|}urkV|1eqd&$kCcjyLNF~gaj?IL!t3G}#Lssc)yuO^yq1yYJ-1q%7gOz7 zmXZbs(;Bui?4iM!)BCpa+M~g8PMDv4)hQkC&3{jAg&zrqA`XF(*78Nx+UE6Is@(f>Jh1nuU@oXJRN`PhIX=?`NyX1dk%B&z<3xZqUZn<> zE18+$;;rC*JVznq|5kNvYP+-{aiulHsUS8AFAJtzCDKExPf4S3b}k9(;<8zj3^W?SAkSgK1egq{+Gy+gN?)}SsBAf`K*^pdJD3}kz$eg=nj zeafOO;(V+GA@Y!l&Je}N$0CfL;_DF^QsJA;A+3M&jGi&@nNB;Zx(_3A?AN~jM9X%% zunf9oa#CaYAH9aQ`S33X4B;le4Ssv>GsBhk2)~F30uho1=vHs2K$JVc`X-B{v_XN% z^ujCHVOeU5=a4d2ZGlNq_NLZlnRqky-bsPsWWtX7V2;3aiyN`GgV%#0Eki;GQU*fM zfWIL9piBg2-p*Z)v+fH~j<*LxmI<%?0oMkf)mL={e8^8~8MhuBy4{lzzPtSeBiy2& zDeMOuWSnfl;7INqNSxQ0$Ov{Hc!>lkv4cP8XFUsqfy;6nQOyUV{wSGgmydaa!Htj> zP%3yo^7j3+WS>RB3_Wz|4@U1))Unw8O&JL;{DoF9Y#^F(hkWf<(rlQt!3q7emQRn^ zT)!0-tc?fU#IA0gjE8Kn?n!pBVPJku)clLCW6#)vvA zl#B@8XM&N%ZAR7?Ex0Y z$AWLH2K4&Sj0TC9>a?neMFBNkZU&#rC8lep38p)yMJ*_533-CkzOC2*+_BuTzK+fmDyMjcJpIw) z8~rzhH#{rcdZCOmvBWzl1VLGyq^rjIOclN^QCB`!s?yTZN`tbr;-NIP624+5zPkW2CGZ=*p{$BMjZ29=ENG|x zME#Z8T!mW2P34R7gmR1Wbs>xjLw>7rjFP>Al;T{Tld9#LwCsbNA(f>(FWGx8m3Ya# zFY+M;3*!<97zow~S)vW18Qs-i(v1^0F+rlB08L@KWYy+L{u25U2}?&y?|sMF^Vv%W zSZ>xd;WS8YK5jyXa|aTKx*xSW;k#7ZOlNjyJLfOAW6smg)ppgkm)P5JN8qCo5b@?2 zKO&SMpdm;hl;M39Wf#@{+#z}|#VEBGe-y7w+h8Eg`~}YhcM2~eu{Y@|$%4t0&DE&T z64$b^r@H4XC8c5`f#e^YC44z#3>tyxYhNoS=MO~*≈@cZTFYFys!mXW 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%0ANDZj0BA?r;_nHneL7`BY*{ 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

5IN)e+S@;=nFr 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

3MGI*ak-&rR8hX_<>*<0HM4d2n=FIg~ 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⫬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

wn(ZF1|QnP}com%Nkr#FrGr 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

rnfBsaR6nb{WJ{pY9a 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 X+xqUXo1rSlTrqm$Pv?F#-S~e2pg2n< literal 0 HcmV?d00001 diff --git a/sdk/postman/img/response.png b/sdk/postman/img/response.png new file mode 100644 index 0000000000000000000000000000000000000000..9d382d74bc319e6930b9d40bd91ab175a838a73a GIT binary patch literal 64482 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 literal 0 HcmV?d00001 diff --git a/sdk/postman/img/send.png b/sdk/postman/img/send.png new file mode 100644 index 0000000000000000000000000000000000000000..328221079b057f1f93850bf8ad4e19464adb3024 GIT binary patch literal 238885 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 z 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

8;yY&)ag#Oj8US9-xP#wK2`)Z~LH&_V-ec0EP#p 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 z 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 JeK+st{|CAK7B~O^ literal 0 HcmV?d00001 From cfc113eb7ac6d8278ba3c0515b11c8c6326b2f82 Mon Sep 17 00:00:00 2001 From: "Isaac.Tang" Date: Thu, 26 Dec 2024 17:43:35 +0800 Subject: [PATCH 09/16] doc(postman): update READEME.md --- README.md | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index f14ab67a..299994e3 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,9 @@ go get github.com/Kucoin/kucoin-universal-sdk/sdk/golang@v0.1.1-alpha go mod tidy ``` +### Postman Installation +Visit the [KuCoin API Collection on Postman](https://www.postman.com/kucoin-api/kucoin-api/overview) + ## ๐Ÿ“– Getting Started Here's a quick example to get you started with the SDK in **Python**. @@ -122,6 +125,7 @@ For other languages, refer to the [Examples](#-examples) section. - Official Documentation: [KuCoin API Docs](https://www.kucoin.com/docs-new) - **[Python Documentation](sdk/python/README.md)** - **[Go Documentation](sdk/golang/README.md)** +- **[Postman Documentation](sdk/postman/README.md)** ## ๐Ÿ“‚ Examples Find usage examples for your desired language by selecting the corresponding link below: @@ -131,6 +135,7 @@ Find usage examples for your desired language by selecting the corresponding lin | Python | [sdk/python/examples/](sdk/python/example/)| | Go | [sdk/go/examples/](sdk/golang/example/) | + ## ๐Ÿ—๏ธ Technical Design The KuCoin Universal SDK is built with a code-generation-first approach to ensure consistency, scalability, and rapid updates across all supported languages. By leveraging the OpenAPI Specification and a custom code generator, the SDK achieves the following advantages: @@ -181,18 +186,8 @@ The following table describes the key components of the project directory: | `README.md` | Main documentation file. | | `generate.mk` | Additional Makefile specifically for code generation tasks. | | `generator/` | Directory containing the code generation logic. | -| `generator/plugin/` | Custom plugins for generating SDKs. | -| `generator/preprocessor/`| Scripts or tools for preprocessing API specifications. | | `sdk/` | Directory for generated SDKs organized by language. | -| `sdk/golang/` | Generated SDK for Golang. | -| `sdk/python/` | Generated SDK for Python. | | `spec/` | Directory containing API specification files. | -| `spec/apis.csv` | List of all APIs. | -| `spec/original/` | Original unprocessed API specifications. | -| `spec/rest/` | REST API specifications. | -| `spec/ws/` | WebSocket API specifications. | -| `spec/ws.csv` | List of WebSocket-specific APIs. - ## โš™๏ธ Build and Test Guide From 8eecaf48a23c8f6b2232f23f3d201a340045ceef Mon Sep 17 00:00:00 2001 From: "Isaac.Tang" Date: Mon, 30 Dec 2024 11:25:04 +0800 Subject: [PATCH 10/16] feat(sdk): update api --- VERSION | 2 +- .../generate/account/account/api_account.go | 2 +- .../account/account/api_account.template | 2 +- .../account/account/api_account_test.go | 6 +-- .../generate/account/deposit/api_deposit.go | 2 +- .../account/deposit/api_deposit.template | 2 +- .../account/deposit/api_deposit_test.go | 4 +- .../pkg/generate/futures/order/api_order.go | 2 +- .../margin/order/types_add_order_v1_req.go | 8 ++-- .../spot/order/types_get_trade_history_req.go | 4 +- sdk/golang/pkg/generate/version.go | 4 +- .../generate/account/account/api_account.py | 2 +- .../account/account/api_account.template | 2 +- .../account/account/api_account_test.py | 6 +-- .../generate/account/deposit/api_deposit.py | 2 +- .../account/deposit/api_deposit.template | 2 +- .../account/deposit/api_deposit_test.py | 4 +- .../generate/futures/order/api_order.py | 2 +- .../margin/order/model_add_order_v1_req.py | 12 +++--- .../spot/order/model_get_trade_history_req.py | 6 +-- .../kucoin_universal_sdk/generate/version.py | 4 +- spec/apis.csv | 4 +- spec/original/meta.json | 37 ++++++++++++------- spec/rest/api/openapi-account-account.json | 4 +- spec/rest/api/openapi-account-deposit.json | 2 +- spec/rest/api/openapi-account-withdrawal.json | 8 +++- spec/rest/api/openapi-futures-order.json | 2 +- spec/rest/api/openapi-margin-order.json | 4 +- spec/rest/api/openapi-spot-order.json | 2 +- spec/rest/entry/openapi-account.json | 14 +++++-- spec/rest/entry/openapi-futures.json | 2 +- spec/rest/entry/openapi-margin.json | 4 +- spec/rest/entry/openapi-spot.json | 2 +- 33 files changed, 93 insertions(+), 72 deletions(-) diff --git a/VERSION b/VERSION index e4774dc4..60453e69 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v0.1.1-alpha \ No newline at end of file +v1.0.0 \ No newline at end of file diff --git a/sdk/golang/pkg/generate/account/account/api_account.go b/sdk/golang/pkg/generate/account/account/api_account.go index 6dd0ad3a..323d2aff 100644 --- a/sdk/golang/pkg/generate/account/account/api_account.go +++ b/sdk/golang/pkg/generate/account/account/api_account.go @@ -142,7 +142,7 @@ type AccountAPI interface { // +---------------------+---------+ GetFuturesLedger(req *GetFuturesLedgerReq, ctx context.Context) (*GetFuturesLedgerResp, error) - // GetApikeyInfo Get API Key Info + // GetApikeyInfo Get Apikey Info // Description: Get the information of the api key. Use the api key pending to be checked to call the endpoint. Both master and sub user's api key are applicable. // +---------------------+------------+ // | Extra API Info | Value | diff --git a/sdk/golang/pkg/generate/account/account/api_account.template b/sdk/golang/pkg/generate/account/account/api_account.template index bcdd30a5..2794c19b 100644 --- a/sdk/golang/pkg/generate/account/account/api_account.template +++ b/sdk/golang/pkg/generate/account/account/api_account.template @@ -227,7 +227,7 @@ func TestAccountGetFuturesLedgerReq(t *testing.T) { func TestAccountGetApikeyInfoReq(t *testing.T) { // GetApikeyInfo - // Get API Key Info + // Get Apikey Info // /api/v1/user/api-key diff --git a/sdk/golang/pkg/generate/account/account/api_account_test.go b/sdk/golang/pkg/generate/account/account/api_account_test.go index dff76903..64ea172d 100644 --- a/sdk/golang/pkg/generate/account/account/api_account_test.go +++ b/sdk/golang/pkg/generate/account/account/api_account_test.go @@ -108,7 +108,7 @@ func TestAccountGetSpotLedgerRespModel(t *testing.T) { // Get Account Ledgers - Spot/Margin // /api/v1/accounts/ledgers - data := "{\n \"code\": \"200000\",\n \"data\": {\n \"currentPage\": 1,\n \"pageSize\": 50,\n \"totalNum\": 1,\n \"totalPage\": 1,\n \"items\": [\n {\n \"id\": \"265329987780896\",\n \"currency\": \"USDT\",\n \"amount\": \"0.01\",\n \"fee\": \"0\",\n \"balance\": \"0\",\n \"accountType\": \"TRADE\",\n \"bizType\": \"\u5b50\u8d26\u53f7\u8f6c\u8d26\",\n \"direction\": \"out\",\n \"createdAt\": 1728658481484,\n \"context\": \"\"\n }\n ]\n }\n}" + data := "{\n \"code\": \"200000\",\n \"data\": {\n \"currentPage\": 1,\n \"pageSize\": 50,\n \"totalNum\": 1,\n \"totalPage\": 1,\n \"items\": [\n {\n \"id\": \"265329987780896\",\n \"currency\": \"USDT\",\n \"amount\": \"0.01\",\n \"fee\": \"0\",\n \"balance\": \"0\",\n \"accountType\": \"TRADE\",\n \"bizType\": \"SUB_TRANSFER\",\n \"direction\": \"out\",\n \"createdAt\": 1728658481484,\n \"context\": \"\"\n }\n ]\n }\n}" commonResp := &types.RestResponse{} err := json.Unmarshal([]byte(data), commonResp) assert.Nil(t, err) @@ -279,14 +279,14 @@ func TestAccountGetFuturesLedgerRespModel(t *testing.T) { func TestAccountGetApikeyInfoReqModel(t *testing.T) { // GetApikeyInfo - // Get API Key Info + // Get Apikey Info // /api/v1/user/api-key } func TestAccountGetApikeyInfoRespModel(t *testing.T) { // GetApikeyInfo - // Get API Key Info + // Get Apikey Info // /api/v1/user/api-key data := "{\n \"code\": \"200000\",\n \"data\": {\n \"remark\": \"account1\",\n \"apiKey\": \"6705f5c311545b000157d3eb\",\n \"apiVersion\": 3,\n \"permission\": \"General,Futures,Spot,Earn,InnerTransfer,Transfer,Margin\",\n \"ipWhitelist\": \"203.**.154,103.**.34\",\n \"createdAt\": 1728443843000,\n \"uid\": 165111215,\n \"isMaster\": true\n }\n}" diff --git a/sdk/golang/pkg/generate/account/deposit/api_deposit.go b/sdk/golang/pkg/generate/account/deposit/api_deposit.go index 6eb47f71..abea4985 100644 --- a/sdk/golang/pkg/generate/account/deposit/api_deposit.go +++ b/sdk/golang/pkg/generate/account/deposit/api_deposit.go @@ -91,7 +91,7 @@ type DepositAPI interface { // +---------------------+------------+ AddDepositAddressV3(req *AddDepositAddressV3Req, ctx context.Context) (*AddDepositAddressV3Resp, error) - // GetDepositAddressV3 Get Deposit Addresses(V3) + // GetDepositAddressV3 Get Deposit Address(V3) // Description: Get all deposit addresses for the currency you intend to deposit. If the returned data is empty, you may need to Add Deposit Address first. // +---------------------+------------+ // | Extra API Info | Value | diff --git a/sdk/golang/pkg/generate/account/deposit/api_deposit.template b/sdk/golang/pkg/generate/account/deposit/api_deposit.template index 1cf0e2f6..451a3fc0 100644 --- a/sdk/golang/pkg/generate/account/deposit/api_deposit.template +++ b/sdk/golang/pkg/generate/account/deposit/api_deposit.template @@ -141,7 +141,7 @@ func TestDepositAddDepositAddressV3Req(t *testing.T) { func TestDepositGetDepositAddressV3Req(t *testing.T) { // GetDepositAddressV3 - // Get Deposit Addresses(V3) + // Get Deposit Address(V3) // /api/v3/deposit-addresses builder := deposit.NewGetDepositAddressV3ReqBuilder() diff --git a/sdk/golang/pkg/generate/account/deposit/api_deposit_test.go b/sdk/golang/pkg/generate/account/deposit/api_deposit_test.go index c94e103d..ff6b1cee 100644 --- a/sdk/golang/pkg/generate/account/deposit/api_deposit_test.go +++ b/sdk/golang/pkg/generate/account/deposit/api_deposit_test.go @@ -177,7 +177,7 @@ func TestDepositAddDepositAddressV3RespModel(t *testing.T) { func TestDepositGetDepositAddressV3ReqModel(t *testing.T) { // GetDepositAddressV3 - // Get Deposit Addresses(V3) + // Get Deposit Address(V3) // /api/v3/deposit-addresses data := "{\"currency\": \"BTC\", \"amount\": \"example_string_default_value\", \"chain\": \"example_string_default_value\"}" @@ -189,7 +189,7 @@ func TestDepositGetDepositAddressV3ReqModel(t *testing.T) { func TestDepositGetDepositAddressV3RespModel(t *testing.T) { // GetDepositAddressV3 - // Get Deposit Addresses(V3) + // Get Deposit Address(V3) // /api/v3/deposit-addresses data := "{\"code\":\"200000\",\"data\":[{\"address\":\"TSv3L1fS7yA3SxzKD8c1qdX4nLP6rqNxYz\",\"memo\":\"\",\"chainId\":\"trx\",\"to\":\"TRADE\",\"expirationDate\":0,\"currency\":\"USDT\",\"contractAddress\":\"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t\",\"chainName\":\"TRC20\"},{\"address\":\"0x551e823a3b36865e8c5dc6e6ac6cc0b00d98533e\",\"memo\":\"\",\"chainId\":\"kcc\",\"to\":\"TRADE\",\"expirationDate\":0,\"currency\":\"USDT\",\"contractAddress\":\"0x0039f574ee5cc39bdd162e9a88e3eb1f111baf48\",\"chainName\":\"KCC\"},{\"address\":\"EQCA1BI4QRZ8qYmskSRDzJmkucGodYRTZCf_b9hckjla6dZl\",\"memo\":\"2085202643\",\"chainId\":\"ton\",\"to\":\"TRADE\",\"expirationDate\":0,\"currency\":\"USDT\",\"contractAddress\":\"EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs\",\"chainName\":\"TON\"},{\"address\":\"0x0a2586d5a901c8e7e68f6b0dc83bfd8bd8600ff5\",\"memo\":\"\",\"chainId\":\"eth\",\"to\":\"MAIN\",\"expirationDate\":0,\"currency\":\"USDT\",\"contractAddress\":\"0xdac17f958d2ee523a2206206994597c13d831ec7\",\"chainName\":\"ERC20\"}]}" diff --git a/sdk/golang/pkg/generate/futures/order/api_order.go b/sdk/golang/pkg/generate/futures/order/api_order.go index 30fb4a84..ff30f23b 100644 --- a/sdk/golang/pkg/generate/futures/order/api_order.go +++ b/sdk/golang/pkg/generate/futures/order/api_order.go @@ -70,7 +70,7 @@ type OrderAPI interface { // | API-CHANNEL | PRIVATE | // | API-PERMISSION | FUTURES | // | API-RATE-LIMIT-POOL | FUTURES | - // | API-RATE-LIMIT | 30 | + // | API-RATE-LIMIT | 200 | // +---------------------+---------+ // Deprecated CancelAllOrdersV1(req *CancelAllOrdersV1Req, ctx context.Context) (*CancelAllOrdersV1Resp, error) diff --git a/sdk/golang/pkg/generate/margin/order/types_add_order_v1_req.go b/sdk/golang/pkg/generate/margin/order/types_add_order_v1_req.go index 0fefd25f..29a9d00f 100644 --- a/sdk/golang/pkg/generate/margin/order/types_add_order_v1_req.go +++ b/sdk/golang/pkg/generate/margin/order/types_add_order_v1_req.go @@ -12,13 +12,13 @@ type AddOrderV1Req struct { Symbol string `json:"symbol,omitempty"` // specify if the order is an 'limit' order or 'market' order. The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine. When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels. Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. Type *string `json:"type,omitempty"` - // [Self Trade Prevention](doc://link/pages/5176570) is divided into four strategies: CN, CO, CB , and DC + // [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC Stp *string `json:"stp,omitempty"` // Specify price for order When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. Price *string `json:"price,omitempty"` // Specify quantity for order When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize. When **type** is market, select one out of two: size or funds Size *string `json:"size,omitempty"` - // [Time in force](doc://link/pages/5176570) is a special strategy used during trading + // [Time in force](doc://link/pages/338146) is a special strategy used during trading TimeInForce *string `json:"timeInForce,omitempty"` // passive order labels, this is disabled when the order timing strategy is IOC or FOK PostOnly *bool `json:"postOnly,omitempty"` @@ -143,7 +143,7 @@ func (builder *AddOrderV1ReqBuilder) SetType(value string) *AddOrderV1ReqBuilder return builder } -// [Self Trade Prevention](doc://link/pages/5176570) is divided into four strategies: CN, CO, CB , and DC +// [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC func (builder *AddOrderV1ReqBuilder) SetStp(value string) *AddOrderV1ReqBuilder { builder.obj.Stp = &value return builder @@ -161,7 +161,7 @@ func (builder *AddOrderV1ReqBuilder) SetSize(value string) *AddOrderV1ReqBuilder return builder } -// [Time in force](doc://link/pages/5176570) is a special strategy used during trading +// [Time in force](doc://link/pages/338146) is a special strategy used during trading func (builder *AddOrderV1ReqBuilder) SetTimeInForce(value string) *AddOrderV1ReqBuilder { builder.obj.TimeInForce = &value return builder diff --git a/sdk/golang/pkg/generate/spot/order/types_get_trade_history_req.go b/sdk/golang/pkg/generate/spot/order/types_get_trade_history_req.go index 79d64e76..9c3ca587 100644 --- a/sdk/golang/pkg/generate/spot/order/types_get_trade_history_req.go +++ b/sdk/golang/pkg/generate/spot/order/types_get_trade_history_req.go @@ -14,7 +14,7 @@ type GetTradeHistoryReq struct { Type *string `json:"type,omitempty" url:"type,omitempty"` // The id of the last set of data from the previous batch of data. By default, the latest information is given. lastId is used to filter data and paginate. If lastId is not entered, the default is a maximum of 100 returned data items. The return results include lastId๏ผŒwhich can be used as a query parameter to look up new data from the next page. LastId *int64 `json:"lastId,omitempty" url:"lastId,omitempty"` - // Default100๏ผŒMax100 + // Default20๏ผŒMax100 Limit *int32 `json:"limit,omitempty" url:"limit,omitempty"` // Start time (milisecond) StartAt *int64 `json:"startAt,omitempty" url:"startAt,omitempty"` @@ -91,7 +91,7 @@ func (builder *GetTradeHistoryReqBuilder) SetLastId(value int64) *GetTradeHistor return builder } -// Default100๏ผŒMax100 +// Default20๏ผŒMax100 func (builder *GetTradeHistoryReqBuilder) SetLimit(value int32) *GetTradeHistoryReqBuilder { builder.obj.Limit = &value return builder diff --git a/sdk/golang/pkg/generate/version.go b/sdk/golang/pkg/generate/version.go index 0d85aa19..e85b7c0d 100644 --- a/sdk/golang/pkg/generate/version.go +++ b/sdk/golang/pkg/generate/version.go @@ -1,6 +1,6 @@ package generate const ( - SdkVersion = "v0.1.1-alpha" - SdkGenerateDate = "2024-12-17" + SdkVersion = "v1.0.0" + SdkGenerateDate = "2024-12-30" ) diff --git a/sdk/python/kucoin_universal_sdk/generate/account/account/api_account.py b/sdk/python/kucoin_universal_sdk/generate/account/account/api_account.py index 639937d5..c0aafc91 100644 --- a/sdk/python/kucoin_universal_sdk/generate/account/account/api_account.py +++ b/sdk/python/kucoin_universal_sdk/generate/account/account/api_account.py @@ -221,7 +221,7 @@ def get_futures_ledger(self, req: GetFuturesLedgerReq, @abstractmethod def get_apikey_info(self, **kwargs: Any) -> GetApikeyInfoResp: """ - summary: Get API Key Info + summary: Get Apikey Info description: Get the information of the api key. Use the api key pending to be checked to call the endpoint. Both master and sub user's api key are applicable. +---------------------+------------+ | Extra API Info | Value | diff --git a/sdk/python/kucoin_universal_sdk/generate/account/account/api_account.template b/sdk/python/kucoin_universal_sdk/generate/account/account/api_account.template index 8bfb1696..2eb462fc 100644 --- a/sdk/python/kucoin_universal_sdk/generate/account/account/api_account.template +++ b/sdk/python/kucoin_universal_sdk/generate/account/account/api_account.template @@ -188,7 +188,7 @@ def test_get_futures_ledger_req(self): def test_get_apikey_info_req(self): """ get_apikey_info - Get API Key Info + Get Apikey Info /api/v1/user/api-key """ diff --git a/sdk/python/kucoin_universal_sdk/generate/account/account/api_account_test.py b/sdk/python/kucoin_universal_sdk/generate/account/account/api_account_test.py index 070fa6ca..214e5291 100644 --- a/sdk/python/kucoin_universal_sdk/generate/account/account/api_account_test.py +++ b/sdk/python/kucoin_universal_sdk/generate/account/account/api_account_test.py @@ -103,7 +103,7 @@ def test_get_spot_ledger_resp_model(self): Get Account Ledgers - Spot/Margin /api/v1/accounts/ledgers """ - data = "{\n \"code\": \"200000\",\n \"data\": {\n \"currentPage\": 1,\n \"pageSize\": 50,\n \"totalNum\": 1,\n \"totalPage\": 1,\n \"items\": [\n {\n \"id\": \"265329987780896\",\n \"currency\": \"USDT\",\n \"amount\": \"0.01\",\n \"fee\": \"0\",\n \"balance\": \"0\",\n \"accountType\": \"TRADE\",\n \"bizType\": \"\u5b50\u8d26\u53f7\u8f6c\u8d26\",\n \"direction\": \"out\",\n \"createdAt\": 1728658481484,\n \"context\": \"\"\n }\n ]\n }\n}" + data = "{\n \"code\": \"200000\",\n \"data\": {\n \"currentPage\": 1,\n \"pageSize\": 50,\n \"totalNum\": 1,\n \"totalPage\": 1,\n \"items\": [\n {\n \"id\": \"265329987780896\",\n \"currency\": \"USDT\",\n \"amount\": \"0.01\",\n \"fee\": \"0\",\n \"balance\": \"0\",\n \"accountType\": \"TRADE\",\n \"bizType\": \"SUB_TRANSFER\",\n \"direction\": \"out\",\n \"createdAt\": 1728658481484,\n \"context\": \"\"\n }\n ]\n }\n}" common_response = RestResponse.from_json(data) resp = GetSpotLedgerResp.from_dict(common_response.data) @@ -222,14 +222,14 @@ def test_get_futures_ledger_resp_model(self): def test_get_apikey_info_req_model(self): """ get_apikey_info - Get API Key Info + Get Apikey Info /api/v1/user/api-key """ def test_get_apikey_info_resp_model(self): """ get_apikey_info - Get API Key Info + Get Apikey Info /api/v1/user/api-key """ data = "{\n \"code\": \"200000\",\n \"data\": {\n \"remark\": \"account1\",\n \"apiKey\": \"6705f5c311545b000157d3eb\",\n \"apiVersion\": 3,\n \"permission\": \"General,Futures,Spot,Earn,InnerTransfer,Transfer,Margin\",\n \"ipWhitelist\": \"203.**.154,103.**.34\",\n \"createdAt\": 1728443843000,\n \"uid\": 165111215,\n \"isMaster\": true\n }\n}" diff --git a/sdk/python/kucoin_universal_sdk/generate/account/deposit/api_deposit.py b/sdk/python/kucoin_universal_sdk/generate/account/deposit/api_deposit.py index 4ae5f49f..f1c95285 100644 --- a/sdk/python/kucoin_universal_sdk/generate/account/deposit/api_deposit.py +++ b/sdk/python/kucoin_universal_sdk/generate/account/deposit/api_deposit.py @@ -138,7 +138,7 @@ def add_deposit_address_v3(self, req: AddDepositAddressV3Req, def get_deposit_address_v3(self, req: GetDepositAddressV3Req, **kwargs: Any) -> GetDepositAddressV3Resp: """ - summary: Get Deposit Addresses(V3) + summary: Get Deposit Address(V3) description: Get all deposit addresses for the currency you intend to deposit. If the returned data is empty, you may need to Add Deposit Address first. +---------------------+------------+ | Extra API Info | Value | diff --git a/sdk/python/kucoin_universal_sdk/generate/account/deposit/api_deposit.template b/sdk/python/kucoin_universal_sdk/generate/account/deposit/api_deposit.template index db9da050..cd98ad4a 100644 --- a/sdk/python/kucoin_universal_sdk/generate/account/deposit/api_deposit.template +++ b/sdk/python/kucoin_universal_sdk/generate/account/deposit/api_deposit.template @@ -118,7 +118,7 @@ def test_add_deposit_address_v3_req(self): def test_get_deposit_address_v3_req(self): """ get_deposit_address_v3 - Get Deposit Addresses(V3) + Get Deposit Address(V3) /api/v3/deposit-addresses """ diff --git a/sdk/python/kucoin_universal_sdk/generate/account/deposit/api_deposit_test.py b/sdk/python/kucoin_universal_sdk/generate/account/deposit/api_deposit_test.py index bd91fafe..8b3a6d0b 100644 --- a/sdk/python/kucoin_universal_sdk/generate/account/deposit/api_deposit_test.py +++ b/sdk/python/kucoin_universal_sdk/generate/account/deposit/api_deposit_test.py @@ -136,7 +136,7 @@ def test_add_deposit_address_v3_resp_model(self): def test_get_deposit_address_v3_req_model(self): """ get_deposit_address_v3 - Get Deposit Addresses(V3) + Get Deposit Address(V3) /api/v3/deposit-addresses """ data = "{\"currency\": \"BTC\", \"amount\": \"example_string_default_value\", \"chain\": \"example_string_default_value\"}" @@ -145,7 +145,7 @@ def test_get_deposit_address_v3_req_model(self): def test_get_deposit_address_v3_resp_model(self): """ get_deposit_address_v3 - Get Deposit Addresses(V3) + Get Deposit Address(V3) /api/v3/deposit-addresses """ data = "{\"code\":\"200000\",\"data\":[{\"address\":\"TSv3L1fS7yA3SxzKD8c1qdX4nLP6rqNxYz\",\"memo\":\"\",\"chainId\":\"trx\",\"to\":\"TRADE\",\"expirationDate\":0,\"currency\":\"USDT\",\"contractAddress\":\"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t\",\"chainName\":\"TRC20\"},{\"address\":\"0x551e823a3b36865e8c5dc6e6ac6cc0b00d98533e\",\"memo\":\"\",\"chainId\":\"kcc\",\"to\":\"TRADE\",\"expirationDate\":0,\"currency\":\"USDT\",\"contractAddress\":\"0x0039f574ee5cc39bdd162e9a88e3eb1f111baf48\",\"chainName\":\"KCC\"},{\"address\":\"EQCA1BI4QRZ8qYmskSRDzJmkucGodYRTZCf_b9hckjla6dZl\",\"memo\":\"2085202643\",\"chainId\":\"ton\",\"to\":\"TRADE\",\"expirationDate\":0,\"currency\":\"USDT\",\"contractAddress\":\"EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs\",\"chainName\":\"TON\"},{\"address\":\"0x0a2586d5a901c8e7e68f6b0dc83bfd8bd8600ff5\",\"memo\":\"\",\"chainId\":\"eth\",\"to\":\"MAIN\",\"expirationDate\":0,\"currency\":\"USDT\",\"contractAddress\":\"0xdac17f958d2ee523a2206206994597c13d831ec7\",\"chainName\":\"ERC20\"}]}" diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/order/api_order.py b/sdk/python/kucoin_universal_sdk/generate/futures/order/api_order.py index a958d6f2..70985eb4 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/order/api_order.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/order/api_order.py @@ -131,7 +131,7 @@ def cancel_all_orders_v1(self, req: CancelAllOrdersV1Req, | API-CHANNEL | PRIVATE | | API-PERMISSION | FUTURES | | API-RATE-LIMIT-POOL | FUTURES | - | API-RATE-LIMIT | 30 | + | API-RATE-LIMIT | 200 | +---------------------+---------+ """ pass diff --git a/sdk/python/kucoin_universal_sdk/generate/margin/order/model_add_order_v1_req.py b/sdk/python/kucoin_universal_sdk/generate/margin/order/model_add_order_v1_req.py index 5d24a913..b9eeb0eb 100644 --- a/sdk/python/kucoin_universal_sdk/generate/margin/order/model_add_order_v1_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/margin/order/model_add_order_v1_req.py @@ -20,10 +20,10 @@ class AddOrderV1Req(BaseModel): side (SideEnum): specify if the order is to 'buy' or 'sell' symbol (str): symbol type (TypeEnum): specify if the order is an 'limit' order or 'market' order. The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine. When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels. Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. - stp (StpEnum): [Self Trade Prevention](doc://link/pages/5176570) is divided into four strategies: CN, CO, CB , and DC + stp (StpEnum): [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC price (str): Specify price for order When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. size (str): Specify quantity for order When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize. When **type** is market, select one out of two: size or funds - time_in_force (TimeInForceEnum): [Time in force](doc://link/pages/5176570) is a special strategy used during trading + time_in_force (TimeInForceEnum): [Time in force](doc://link/pages/338146) is a special strategy used during trading post_only (bool): passive order labels, this is disabled when the order timing strategy is IOC or FOK hidden (bool): Hidden or not (not shown in order book) iceberg (bool): Whether or not only visible portions of orders are shown in iceberg orders @@ -104,7 +104,7 @@ class MarginModelEnum(Enum): stp: Optional[StpEnum] = Field( default=None, description= - "[Self Trade Prevention](doc://link/pages/5176570) is divided into four strategies: CN, CO, CB , and DC" + "[Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC" ) price: Optional[str] = Field( default=None, @@ -119,7 +119,7 @@ class MarginModelEnum(Enum): time_in_force: Optional[TimeInForceEnum] = Field( default=TimeInForceEnum.GTC, description= - "[Time in force](doc://link/pages/5176570) is a special strategy used during trading", + "[Time in force](doc://link/pages/338146) is a special strategy used during trading", alias="timeInForce") post_only: Optional[bool] = Field( default=False, @@ -278,7 +278,7 @@ def set_type(self, value: AddOrderV1Req.TypeEnum) -> AddOrderV1ReqBuilder: def set_stp(self, value: AddOrderV1Req.StpEnum) -> AddOrderV1ReqBuilder: """ - [Self Trade Prevention](doc://link/pages/5176570) is divided into four strategies: CN, CO, CB , and DC + [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC """ self.obj['stp'] = value return self @@ -301,7 +301,7 @@ def set_time_in_force( self, value: AddOrderV1Req.TimeInForceEnum) -> AddOrderV1ReqBuilder: """ - [Time in force](doc://link/pages/5176570) is a special strategy used during trading + [Time in force](doc://link/pages/338146) is a special strategy used during trading """ self.obj['timeInForce'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/spot/order/model_get_trade_history_req.py b/sdk/python/kucoin_universal_sdk/generate/spot/order/model_get_trade_history_req.py index 179f2886..f988295b 100644 --- a/sdk/python/kucoin_universal_sdk/generate/spot/order/model_get_trade_history_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/spot/order/model_get_trade_history_req.py @@ -22,7 +22,7 @@ class GetTradeHistoryReq(BaseModel): side (SideEnum): specify if the order is to 'buy' or 'sell' type (TypeEnum): specify if the order is an 'limit' order or 'market' order. last_id (int): The id of the last set of data from the previous batch of data. By default, the latest information is given. lastId is used to filter data and paginate. If lastId is not entered, the default is a maximum of 100 returned data items. The return results include lastId๏ผŒwhich can be used as a query parameter to look up new data from the next page. - limit (int): Default100๏ผŒMax100 + limit (int): Default20๏ผŒMax100 start_at (int): Start time (milisecond) end_at (int): End time (milisecond) """ @@ -63,7 +63,7 @@ class TypeEnum(Enum): "The id of the last set of data from the previous batch of data. By default, the latest information is given. lastId is used to filter data and paginate. If lastId is not entered, the default is a maximum of 100 returned data items. The return results include lastId๏ผŒwhich can be used as a query parameter to look up new data from the next page.", alias="lastId") limit: Optional[Annotated[int, Field(le=100, strict=True, ge=1)]] = Field( - default=20, description="Default100๏ผŒMax100") + default=20, description="Default20๏ผŒMax100") start_at: Optional[int] = Field(default=None, description="Start time (milisecond)", alias="startAt") @@ -176,7 +176,7 @@ def set_last_id(self, value: int) -> GetTradeHistoryReqBuilder: def set_limit(self, value: int) -> GetTradeHistoryReqBuilder: """ - Default100๏ผŒMax100 + Default20๏ผŒMax100 """ self.obj['limit'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/version.py b/sdk/python/kucoin_universal_sdk/generate/version.py index 5224fcbf..f09ff019 100644 --- a/sdk/python/kucoin_universal_sdk/generate/version.py +++ b/sdk/python/kucoin_universal_sdk/generate/version.py @@ -1,2 +1,2 @@ -sdk_version = "v0.1.1-alpha" -sdk_generate_date = "2024-12-17" +sdk_version = "v1.0.0" +sdk_generate_date = "2024-12-30" diff --git a/spec/apis.csv b/spec/apis.csv index ec85c89f..a9eb5a6c 100644 --- a/spec/apis.csv +++ b/spec/apis.csv @@ -10,7 +10,7 @@ account,account,/api/v1/accounts/{accountId},get,Get Account Detail - Spot account,account,/api/v3/margin/accounts,get,Get Account - Cross Margin account,account,/api/v3/isolated/accounts,get,Get Account - Isolated Margin account,account,/api/v1/account-overview,get,Get Account - Futures -account,account,/api/v1/user/api-key,get,Get API Key Info +account,account,/api/v1/user/api-key,get,Get Apikey Info account,account,/api/v1/margin/account,get,Get Account Detail - Margin account,account,/api/v1/isolated/accounts,get,Get Account List - Isolated Margin - V1 account,account,/api/v1/isolated/account/{symbol},get,Get Account Detail - Isolated Margin - V1 @@ -27,7 +27,7 @@ account,subaccount,/api/v1/sub/api-key,post,Add SubAccount API account,subaccount,/api/v1/sub/api-key/update,post,Modify SubAccount API account,subaccount,/api/v1/sub/user,get,Get SubAccount List - Summary Info(V1) account,subaccount,/api/v1/sub-accounts,get,Get SubAccount List - Spot Balance(V1) -account,deposit,/api/v3/deposit-addresses,get,Get Deposit Addresses(V3) +account,deposit,/api/v3/deposit-addresses,get,Get Deposit Address(V3) account,deposit,/api/v1/deposits,get,Get Deposit History account,deposit,/api/v3/deposit-address/create,post,Add Deposit Address(V3) account,deposit,/api/v2/deposit-addresses,get,Get Deposit Addresses(V2) diff --git a/spec/original/meta.json b/spec/original/meta.json index 50553130..f2247d8b 100644 --- a/spec/original/meta.json +++ b/spec/original/meta.json @@ -6,7 +6,7 @@ "description": "", "items": [ { - "name": "API User Service", + "name": "User Service", "id": 348126, "description": "", "items": [] @@ -428,7 +428,7 @@ "responseExamples": [ { "name": "Success", - "data": "{\n \"code\": \"200000\",\n \"data\": {\n \"currentPage\": 1,\n \"pageSize\": 50,\n \"totalNum\": 1,\n \"totalPage\": 1,\n \"items\": [\n {\n \"id\": \"265329987780896\",\n \"currency\": \"USDT\",\n \"amount\": \"0.01\",\n \"fee\": \"0\",\n \"balance\": \"0\",\n \"accountType\": \"TRADE\",\n \"bizType\": \"ๅญ่ดฆๅท่ฝฌ่ดฆ\",\n \"direction\": \"out\",\n \"createdAt\": 1728658481484,\n \"context\": \"\"\n }\n ]\n }\n}", + "data": "{\n \"code\": \"200000\",\n \"data\": {\n \"currentPage\": 1,\n \"pageSize\": 50,\n \"totalNum\": 1,\n \"totalPage\": 1,\n \"items\": [\n {\n \"id\": \"265329987780896\",\n \"currency\": \"USDT\",\n \"amount\": \"0.01\",\n \"fee\": \"0\",\n \"balance\": \"0\",\n \"accountType\": \"TRADE\",\n \"bizType\": \"SUB_TRANSFER\",\n \"direction\": \"out\",\n \"createdAt\": 1728658481484,\n \"context\": \"\"\n }\n ]\n }\n}", "responseId": 10085, "ordering": 1 } @@ -2061,7 +2061,7 @@ } }, { - "name": "Get API Key Info", + "name": "Get Apikey Info", "api": { "id": "3470130", "method": "get", @@ -3912,13 +3912,12 @@ "description": "", "items": [ { - "name": "Get Deposit Addresses(V3)", + "name": "Get Deposit Address(V3)", "api": { "id": "3470140", "method": "get", "path": "/api/v3/deposit-addresses", "parameters": { - "path": [], "query": [ { "id": "iIrspuNh6x", @@ -3934,23 +3933,27 @@ "ETH", "USDT" ] - } + }, + "enable": true }, { "id": "xpmD1ldX5o", "name": "amount", "required": false, "description": "Deposit amount. This parameter is only used when applying for invoices on the Lightning Network. This parameter is invalid if it is not passed through the Lightning Network.", - "type": "string" + "type": "string", + "enable": true }, { "id": "eO27DXUL3U", "name": "chain", "required": false, "description": "The chain Id of currency.", - "type": "string" + "type": "string", + "enable": true } ], + "path": [], "cookie": [], "header": [] }, @@ -5087,8 +5090,8 @@ "method": "post", "path": "/api/v3/withdrawals", "parameters": { - "path": [], "query": [], + "path": [], "cookie": [], "header": [] }, @@ -5191,7 +5194,13 @@ }, "toAddress": { "type": "string", - "description": "Withdrawal address" + "description": "Withdrawal address", + "examples": [ + "0x023****2355", + "1572**401", + "a431***1e@gmail.com", + "55-12341234" + ] }, "withdrawType": { "type": "string", @@ -15877,7 +15886,7 @@ "id": "heQ8W6yKwm", "name": "limit", "required": false, - "description": "Default100๏ผŒMax100", + "description": "Default20๏ผŒMax100", "example": "100", "type": "integer", "schema": { @@ -45518,7 +45527,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](apidog://link/pages/5176570) is divided into four strategies: CN, CO, CB , and DC", + "description": "[Self Trade Prevention](apidog://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC", "enum": [ "DC", "CO", @@ -45558,7 +45567,7 @@ }, "timeInForce": { "type": "string", - "description": "[Time in force](apidog://link/pages/5176570) is a special strategy used during trading", + "description": "[Time in force](apidog://link/pages/338146) is a special strategy used during trading", "enum": [ "GTC", "GTT", @@ -46590,7 +46599,7 @@ "mediaType": "" }, "description": ":::tip[TIPS]\nIt is recommended to use the **DELETE /api/v3/orders** endpoint instead of this endpoint\n:::\n\n:::info[Description]\nUsing this endpoint, all open orders (excluding stop orders) can be canceled in batches.\n\nThe response is a list of orderIDs of the canceled orders.\n:::\n", - "customApiFields": "{\"abandon\":\"abandon\",\"domain\":\"Futures\",\"api-channel\":\"Private\",\"api-permission\":\"Futures\",\"api-rate-limit-pool\":\"Futures\",\"sdk-service\":\"Futures\",\"sdk-sub-service\":\"Order\",\"sdk-method-name\":\"cancelAllOrdersV1\",\"sdk-method-description\":\"Cancel all open orders (excluding stop orders). The response is a list of orderIDs of the canceled orders.\",\"api-rate-limit\":30}" + "customApiFields": "{\"abandon\":\"abandon\",\"domain\":\"Futures\",\"api-channel\":\"Private\",\"api-permission\":\"Futures\",\"api-rate-limit-pool\":\"Futures\",\"sdk-service\":\"Futures\",\"sdk-sub-service\":\"Order\",\"sdk-method-name\":\"cancelAllOrdersV1\",\"sdk-method-description\":\"Cancel all open orders (excluding stop orders). The response is a list of orderIDs of the canceled orders.\",\"api-rate-limit\":200}" } } ] diff --git a/spec/rest/api/openapi-account-account.json b/spec/rest/api/openapi-account-account.json index 8c4404e8..39ccfa80 100644 --- a/spec/rest/api/openapi-account-account.json +++ b/spec/rest/api/openapi-account-account.json @@ -361,7 +361,7 @@ "x-sdk-method-name": "getSpotLedger", "x-sdk-method-description": "This interface is for transaction records from all types of your accounts, supporting inquiry of various currencies. Items are paginated and sorted to show the latest first. See the Pagination section for retrieving additional entries after the first page.", "x-api-rate-limit": 2, - "x-response-example": "{\\n \\\"code\\\": \\\"200000\\\",\\n \\\"data\\\": {\\n \\\"currentPage\\\": 1,\\n \\\"pageSize\\\": 50,\\n \\\"totalNum\\\": 1,\\n \\\"totalPage\\\": 1,\\n \\\"items\\\": [\\n {\\n \\\"id\\\": \\\"265329987780896\\\",\\n \\\"currency\\\": \\\"USDT\\\",\\n \\\"amount\\\": \\\"0.01\\\",\\n \\\"fee\\\": \\\"0\\\",\\n \\\"balance\\\": \\\"0\\\",\\n \\\"accountType\\\": \\\"TRADE\\\",\\n \\\"bizType\\\": \\\"\\u5b50\\u8d26\\u53f7\\u8f6c\\u8d26\\\",\\n \\\"direction\\\": \\\"out\\\",\\n \\\"createdAt\\\": 1728658481484,\\n \\\"context\\\": \\\"\\\"\\n }\\n ]\\n }\\n}", + "x-response-example": "{\\n \\\"code\\\": \\\"200000\\\",\\n \\\"data\\\": {\\n \\\"currentPage\\\": 1,\\n \\\"pageSize\\\": 50,\\n \\\"totalNum\\\": 1,\\n \\\"totalPage\\\": 1,\\n \\\"items\\\": [\\n {\\n \\\"id\\\": \\\"265329987780896\\\",\\n \\\"currency\\\": \\\"USDT\\\",\\n \\\"amount\\\": \\\"0.01\\\",\\n \\\"fee\\\": \\\"0\\\",\\n \\\"balance\\\": \\\"0\\\",\\n \\\"accountType\\\": \\\"TRADE\\\",\\n \\\"bizType\\\": \\\"SUB_TRANSFER\\\",\\n \\\"direction\\\": \\\"out\\\",\\n \\\"createdAt\\\": 1728658481484,\\n \\\"context\\\": \\\"\\\"\\n }\\n ]\\n }\\n}", "x-request-example": "{\\\"currency\\\": \\\"BTC\\\", \\\"direction\\\": \\\"in\\\", \\\"bizType\\\": \\\"TRANSFER\\\", \\\"startAt\\\": 1728663338000, \\\"endAt\\\": 1728692138000, \\\"currentPage\\\": 1, \\\"pageSize\\\": 50}" } }, @@ -1795,7 +1795,7 @@ }, "/api/v1/user/api-key": { "get": { - "summary": "Get API Key Info", + "summary": "Get Apikey Info", "deprecated": false, "description": "Get the information of the api key. Use the api key pending to be checked to call the endpoint. Both master and sub user's api key are applicable.", "tags": [], diff --git a/spec/rest/api/openapi-account-deposit.json b/spec/rest/api/openapi-account-deposit.json index 74a68a3b..096c1418 100644 --- a/spec/rest/api/openapi-account-deposit.json +++ b/spec/rest/api/openapi-account-deposit.json @@ -9,7 +9,7 @@ "paths": { "/api/v3/deposit-addresses": { "get": { - "summary": "Get Deposit Addresses(V3)", + "summary": "Get Deposit Address(V3)", "deprecated": false, "description": "Get all deposit addresses for the currency you intend to deposit. If the returned data is empty, you may need to Add Deposit Address first.", "tags": [], diff --git a/spec/rest/api/openapi-account-withdrawal.json b/spec/rest/api/openapi-account-withdrawal.json index 48d13a5c..450cd0a4 100644 --- a/spec/rest/api/openapi-account-withdrawal.json +++ b/spec/rest/api/openapi-account-withdrawal.json @@ -727,7 +727,13 @@ }, "toAddress": { "type": "string", - "description": "Withdrawal address" + "description": "Withdrawal address", + "example": [ + "0x023****2355", + "1572**401", + "a431***1e@gmail.com", + "55-12341234" + ] }, "withdrawType": { "type": "string", diff --git a/spec/rest/api/openapi-futures-order.json b/spec/rest/api/openapi-futures-order.json index a18d86b6..de769cb7 100644 --- a/spec/rest/api/openapi-futures-order.json +++ b/spec/rest/api/openapi-futures-order.json @@ -780,7 +780,7 @@ "x-sdk-sub-service": "Order", "x-sdk-method-name": "cancelAllOrdersV1", "x-sdk-method-description": "Cancel all open orders (excluding stop orders). The response is a list of orderIDs of the canceled orders.", - "x-api-rate-limit": 30, + "x-api-rate-limit": 200, "x-response-example": "{\\n \\\"code\\\": \\\"200000\\\",\\n \\\"data\\\": {\\n \\\"cancelledOrderIds\\\": [\\n \\\"235919172150824960\\\",\\n \\\"235919172150824961\\\"\\n ]\\n }\\n}", "x-request-example": "{\\\"symbol\\\": \\\"XBTUSDTM\\\"}" } diff --git a/spec/rest/api/openapi-margin-order.json b/spec/rest/api/openapi-margin-order.json index 87eecaec..501103e6 100644 --- a/spec/rest/api/openapi-margin-order.json +++ b/spec/rest/api/openapi-margin-order.json @@ -2847,7 +2847,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/5176570) is divided into four strategies: CN, CO, CB , and DC", + "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC", "enum": [ "DC", "CO", @@ -2887,7 +2887,7 @@ }, "timeInForce": { "type": "string", - "description": "[Time in force](doc://link/pages/5176570) is a special strategy used during trading", + "description": "[Time in force](doc://link/pages/338146) is a special strategy used during trading", "enum": [ "GTC", "GTT", diff --git a/spec/rest/api/openapi-spot-order.json b/spec/rest/api/openapi-spot-order.json index 6d798521..d01a3101 100644 --- a/spec/rest/api/openapi-spot-order.json +++ b/spec/rest/api/openapi-spot-order.json @@ -4354,7 +4354,7 @@ { "name": "limit", "in": "query", - "description": "Default100๏ผŒMax100", + "description": "Default20๏ผŒMax100", "required": false, "schema": { "type": "integer", diff --git a/spec/rest/entry/openapi-account.json b/spec/rest/entry/openapi-account.json index 772dce28..b900392e 100644 --- a/spec/rest/entry/openapi-account.json +++ b/spec/rest/entry/openapi-account.json @@ -361,7 +361,7 @@ "x-sdk-method-name": "getSpotLedger", "x-sdk-method-description": "This interface is for transaction records from all types of your accounts, supporting inquiry of various currencies. Items are paginated and sorted to show the latest first. See the Pagination section for retrieving additional entries after the first page.", "x-api-rate-limit": 2, - "x-response-example": "{\\n \\\"code\\\": \\\"200000\\\",\\n \\\"data\\\": {\\n \\\"currentPage\\\": 1,\\n \\\"pageSize\\\": 50,\\n \\\"totalNum\\\": 1,\\n \\\"totalPage\\\": 1,\\n \\\"items\\\": [\\n {\\n \\\"id\\\": \\\"265329987780896\\\",\\n \\\"currency\\\": \\\"USDT\\\",\\n \\\"amount\\\": \\\"0.01\\\",\\n \\\"fee\\\": \\\"0\\\",\\n \\\"balance\\\": \\\"0\\\",\\n \\\"accountType\\\": \\\"TRADE\\\",\\n \\\"bizType\\\": \\\"\\u5b50\\u8d26\\u53f7\\u8f6c\\u8d26\\\",\\n \\\"direction\\\": \\\"out\\\",\\n \\\"createdAt\\\": 1728658481484,\\n \\\"context\\\": \\\"\\\"\\n }\\n ]\\n }\\n}", + "x-response-example": "{\\n \\\"code\\\": \\\"200000\\\",\\n \\\"data\\\": {\\n \\\"currentPage\\\": 1,\\n \\\"pageSize\\\": 50,\\n \\\"totalNum\\\": 1,\\n \\\"totalPage\\\": 1,\\n \\\"items\\\": [\\n {\\n \\\"id\\\": \\\"265329987780896\\\",\\n \\\"currency\\\": \\\"USDT\\\",\\n \\\"amount\\\": \\\"0.01\\\",\\n \\\"fee\\\": \\\"0\\\",\\n \\\"balance\\\": \\\"0\\\",\\n \\\"accountType\\\": \\\"TRADE\\\",\\n \\\"bizType\\\": \\\"SUB_TRANSFER\\\",\\n \\\"direction\\\": \\\"out\\\",\\n \\\"createdAt\\\": 1728658481484,\\n \\\"context\\\": \\\"\\\"\\n }\\n ]\\n }\\n}", "x-request-example": "{\\\"currency\\\": \\\"BTC\\\", \\\"direction\\\": \\\"in\\\", \\\"bizType\\\": \\\"TRANSFER\\\", \\\"startAt\\\": 1728663338000, \\\"endAt\\\": 1728692138000, \\\"currentPage\\\": 1, \\\"pageSize\\\": 50}" } }, @@ -1795,7 +1795,7 @@ }, "/api/v1/user/api-key": { "get": { - "summary": "Get API Key Info", + "summary": "Get Apikey Info", "deprecated": false, "description": "Get the information of the api key. Use the api key pending to be checked to call the endpoint. Both master and sub user's api key are applicable.", "tags": [], @@ -3486,7 +3486,7 @@ }, "/api/v3/deposit-addresses": { "get": { - "summary": "Get Deposit Addresses(V3)", + "summary": "Get Deposit Address(V3)", "deprecated": false, "description": "Get all deposit addresses for the currency you intend to deposit. If the returned data is empty, you may need to Add Deposit Address first.", "tags": [], @@ -4763,7 +4763,13 @@ }, "toAddress": { "type": "string", - "description": "Withdrawal address" + "description": "Withdrawal address", + "example": [ + "0x023****2355", + "1572**401", + "a431***1e@gmail.com", + "55-12341234" + ] }, "withdrawType": { "type": "string", diff --git a/spec/rest/entry/openapi-futures.json b/spec/rest/entry/openapi-futures.json index 779d5ff6..4d3b0f05 100644 --- a/spec/rest/entry/openapi-futures.json +++ b/spec/rest/entry/openapi-futures.json @@ -3241,7 +3241,7 @@ "x-sdk-sub-service": "Order", "x-sdk-method-name": "cancelAllOrdersV1", "x-sdk-method-description": "Cancel all open orders (excluding stop orders). The response is a list of orderIDs of the canceled orders.", - "x-api-rate-limit": 30, + "x-api-rate-limit": 200, "x-response-example": "{\\n \\\"code\\\": \\\"200000\\\",\\n \\\"data\\\": {\\n \\\"cancelledOrderIds\\\": [\\n \\\"235919172150824960\\\",\\n \\\"235919172150824961\\\"\\n ]\\n }\\n}", "x-request-example": "{\\\"symbol\\\": \\\"XBTUSDTM\\\"}" } diff --git a/spec/rest/entry/openapi-margin.json b/spec/rest/entry/openapi-margin.json index faf22597..eee328fa 100644 --- a/spec/rest/entry/openapi-margin.json +++ b/spec/rest/entry/openapi-margin.json @@ -5451,7 +5451,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/5176570) is divided into four strategies: CN, CO, CB , and DC", + "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC", "enum": [ "DC", "CO", @@ -5491,7 +5491,7 @@ }, "timeInForce": { "type": "string", - "description": "[Time in force](doc://link/pages/5176570) is a special strategy used during trading", + "description": "[Time in force](doc://link/pages/338146) is a special strategy used during trading", "enum": [ "GTC", "GTT", diff --git a/spec/rest/entry/openapi-spot.json b/spec/rest/entry/openapi-spot.json index 59ce9b4b..e7f65bbd 100644 --- a/spec/rest/entry/openapi-spot.json +++ b/spec/rest/entry/openapi-spot.json @@ -10267,7 +10267,7 @@ { "name": "limit", "in": "query", - "description": "Default100๏ผŒMax100", + "description": "Default20๏ผŒMax100", "required": false, "schema": { "type": "integer", From 0a4a204b5e6069fc34a7ac54da785640cb8cb040 Mon Sep 17 00:00:00 2001 From: "Isaac.Tang" Date: Mon, 30 Dec 2024 11:35:12 +0800 Subject: [PATCH 11/16] feat(doc): upgrade version --- README.md | 7 +++---- sdk/golang/README.md | 4 ++-- sdk/python/README.md | 4 ++-- sdk/python/setup.py | 2 +- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index f14ab67a..896409f8 100644 --- a/README.md +++ b/README.md @@ -32,19 +32,18 @@ The **KuCoin Universal SDK** is the official SDK provided by KuCoin, offering a ## ๐Ÿ› ๏ธ Installation -### Latest Version: `0.1.1-alpha` -**Note:** This SDK is currently in the **Alpha phase**. We are actively iterating and improving its features, stability, and documentation. Feedback and contributions are highly encouraged to help us refine the SDK. +### Latest Version: `1.0.0` ### Python Installation ```bash -pip install kucoin-universal-sdk==0.1.1a1 +pip install kucoin-universal-sdk ``` ### Golang Installation ```bash -go get github.com/Kucoin/kucoin-universal-sdk/sdk/golang@v0.1.1-alpha +go get github.com/Kucoin/kucoin-universal-sdk/sdk/golang go mod tidy ``` diff --git a/sdk/golang/README.md b/sdk/golang/README.md index ffd9c983..13e179b7 100644 --- a/sdk/golang/README.md +++ b/sdk/golang/README.md @@ -8,12 +8,12 @@ For an overview of the project and SDKs in other languages, refer to the [Main R ## ๐Ÿ“ฆ Installation -**Note:** This SDK is currently in the **Alpha phase**. We are actively iterating and improving its features, stability, and documentation. Feedback and contributions are highly encouraged to help us refine the SDK. +### Latest Version: `1.0.0` Install the Golang SDK using `go get`: ```bash -go get github.com/Kucoin/kucoin-universal-sdk/sdk/golang@v0.1.1-alpha +go get github.com/Kucoin/kucoin-universal-sdk/sdk/golang go mod tidy ``` diff --git a/sdk/python/README.md b/sdk/python/README.md index fa8b7264..5b97c19e 100644 --- a/sdk/python/README.md +++ b/sdk/python/README.md @@ -7,12 +7,12 @@ Welcome to the **Python** implementation of the KuCoin Universal SDK. This SDK i For an overview of the project and SDKs in other languages, refer to the [Main README](https://github.com/kucoin/kucoin-universal-sdk). ## ๐Ÿ“ฆ Installation -**Note:** This SDK is currently in the **Alpha phase**. We are actively iterating and improving its features, stability, and documentation. Feedback and contributions are highly encouraged to help us refine the SDK. +### Latest Version: `1.0.0` Install the Python SDK using `pip`: ```bash -pip install kucoin-universal-sdk==0.1.1a1 +pip install kucoin-universal-sdk ``` ## ๐Ÿ“– Getting Started diff --git a/sdk/python/setup.py b/sdk/python/setup.py index dc38b7da..aed9d180 100644 --- a/sdk/python/setup.py +++ b/sdk/python/setup.py @@ -2,7 +2,7 @@ setup( name="kucoin-universal-sdk", - version="0.1.1a1", + version="1.0.0", description="Official KuCoin Universal SDK", author="KuCoin", author_email="api@kucoin.com", From 2b4a7997d6068ddcf5fd433f6b7bd9efadf23d12 Mon Sep 17 00:00:00 2001 From: "Isaac.Tang" Date: Mon, 30 Dec 2024 11:48:47 +0800 Subject: [PATCH 12/16] feat(postman): add api collection config --- .../collection-Abandoned Endpoints.json | 3124 +++ sdk/postman/collection-REST.json | 18921 ++++++++++++++++ sdk/postman/env.json | 61 + 3 files changed, 22106 insertions(+) create mode 100644 sdk/postman/collection-Abandoned Endpoints.json create mode 100644 sdk/postman/collection-REST.json create mode 100644 sdk/postman/env.json diff --git a/sdk/postman/collection-Abandoned Endpoints.json b/sdk/postman/collection-Abandoned Endpoints.json new file mode 100644 index 00000000..0268ad56 --- /dev/null +++ b/sdk/postman/collection-Abandoned Endpoints.json @@ -0,0 +1,3124 @@ +{ + "info": { + "_postman_id": "e22e2bc3-0147-4151-9872-e9f6bda04a9c", + "name": "Kucoin REST API(Abandoned)", + "description": "For the complete API documentation, please refer to https://www.kucoin.com/docs-new", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" + }, + "item": [ + { + "name": "Account & Funding", + "item": [ + { + "name": "Get SubAccount List - Summary Info(V1)", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "sub", + "user" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470298)\n\n:::tip[]\nIt is recommended to use the **GET /api/v2/sub/user** endpoint instead of this endpoint\n:::\n\n:::info[Description]\nYou can get the user info of all sub-account via this interface.\n:::\n\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| userId | string | |\n| uid | integer | |\n| subName | string | |\n| type | integer | |\n| remarks | string | |\n| access | string | Sub-account Permission |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "sub", + "user" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"userId\": \"63743f07e0c5230001761d08\",\n \"uid\": 169579801,\n \"subName\": \"testapi6\",\n \"type\": 0,\n \"remarks\": \"remarks\",\n \"access\": \"All\"\n },\n {\n \"userId\": \"670538a31037eb000115b076\",\n \"uid\": 225139445,\n \"subName\": \"Name1234567\",\n \"type\": 0,\n \"remarks\": \"TheRemark\",\n \"access\": \"All\"\n }\n ]\n}" + } + ] + }, + { + "name": "Get SubAccount List - Spot Balance(V1)", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "sub-accounts" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470299)\n\n:::tip[TIPS]\nIt is recommended to use the **GET /api/v2/sub-accounts** endpoint instead of this endpoint\n:::\n\n:::info[Description]\nThis endpoint returns the account info of all sub-users.\n:::\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| subUserId | string | The user ID of the sub-user. |\n| subName | string | The username of the sub-user. |\n| mainAccounts | array | Refer to the schema section of mainAccounts |\n| tradeAccounts | array | Refer to the schema section of tradeAccounts |\n| marginAccounts | array | Refer to the schema section of marginAccounts |\n| tradeHFAccounts | array | Refer to the schema section of tradeHFAccounts |\n\n**root.data.mainAccounts Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | The currency of the account. |\n| balance | string | Total funds in the account. |\n| available | string | Funds available to withdraw or trade. |\n| holds | string | Funds on hold (not available for use). |\n| baseCurrency | string | Calculated on this currency. |\n| baseCurrencyPrice | string | The base currency price. |\n| baseAmount | string | The base currency amount. |\n| tag | string | |\n\n**root.data.mainAccounts.tradeAccounts Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | The currency of the account. |\n| balance | string | Total funds in the account. |\n| available | string | Funds available to withdraw or trade. |\n| holds | string | Funds on hold (not available for use). |\n| baseCurrency | string | Calculated on this currency. |\n| baseCurrencyPrice | string | The base currency price. |\n| baseAmount | string | The base currency amount. |\n| tag | string | |\n\n**root.data.mainAccounts.tradeAccounts.marginAccounts Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | The currency of the account. |\n| balance | string | Total funds in the account. |\n| available | string | Funds available to withdraw or trade. |\n| holds | string | Funds on hold (not available for use). |\n| baseCurrency | string | Calculated on this currency. |\n| baseCurrencyPrice | string | The base currency price. |\n| baseAmount | string | The base currency amount. |\n| tag | string | |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "sub-accounts" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"subUserId\": \"63743f07e0c5230001761d08\",\n \"subName\": \"testapi6\",\n \"mainAccounts\": [\n {\n \"currency\": \"USDT\",\n \"balance\": \"0.01\",\n \"available\": \"0.01\",\n \"holds\": \"0\",\n \"baseCurrency\": \"BTC\",\n \"baseCurrencyPrice\": \"62489.8\",\n \"baseAmount\": \"0.00000016\",\n \"tag\": \"DEFAULT\"\n }\n ],\n \"tradeAccounts\": [\n {\n \"currency\": \"USDT\",\n \"balance\": \"0.01\",\n \"available\": \"0.01\",\n \"holds\": \"0\",\n \"baseCurrency\": \"BTC\",\n \"baseCurrencyPrice\": \"62489.8\",\n \"baseAmount\": \"0.00000016\",\n \"tag\": \"DEFAULT\"\n }\n ],\n \"marginAccounts\": [\n {\n \"currency\": \"USDT\",\n \"balance\": \"0.01\",\n \"available\": \"0.01\",\n \"holds\": \"0\",\n \"baseCurrency\": \"BTC\",\n \"baseCurrencyPrice\": \"62489.8\",\n \"baseAmount\": \"0.00000016\",\n \"tag\": \"DEFAULT\"\n }\n ],\n \"tradeHFAccounts\": []\n },\n {\n \"subUserId\": \"670538a31037eb000115b076\",\n \"subName\": \"Name1234567\",\n \"mainAccounts\": [],\n \"tradeAccounts\": [],\n \"marginAccounts\": [],\n \"tradeHFAccounts\": []\n },\n {\n \"subUserId\": \"66b0c0905fc1480001c14c36\",\n \"subName\": \"LTkucoin1491\",\n \"mainAccounts\": [],\n \"tradeAccounts\": [],\n \"marginAccounts\": [],\n \"tradeHFAccounts\": []\n }\n ]\n}" + } + ] + }, + { + "name": "Get Deposit Addresses(V2)", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v2", + "deposit-addresses" + ], + "query": [ + { + "key": "currency", + "value": "", + "description": "currency" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470300)\n\n:::tip[TIPS]\nIt is recommended to use the **GET /api/v3/deposit-addresses** endpoint instead of this endpoint\n:::\n\n:::info[Description]\nGet all deposit addresses for the currency you intend to deposit. If the returned data is empty, you may need to Add Deposit Address first.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| address | string | Deposit address |\n| memo | string | Address remark. If thereโ€™s no remark, it is empty. When you withdraw from other platforms to the KuCoin, you need to fill in memo(tag). If you do not fill memo (tag), your deposit may not be available, please be cautious. |\n| chain | string | The chainName of currency |\n| chainId | string | The chainId of currency |\n| to | string | Deposit account type: main (funding account), trade (spot trading account) |\n| currency | string | currency |\n| contractAddress | string | The token contract address. |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v2", + "deposit-addresses" + ], + "query": [ + { + "key": "currency", + "value": "", + "description": "currency" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"address\": \"0x02028456*****87ede7a73d7c\",\n \"memo\": \"\",\n \"chain\": \"ERC20\",\n \"chainId\": \"eth\",\n \"to\": \"MAIN\",\n \"currency\": \"ETH\",\n \"contractAddress\": \"\"\n }\n ]\n}" + } + ] + }, + { + "name": "SubAccount Transfer", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v2", + "accounts", + "sub-transfer" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470301)\n\n:::tip[TIPS]\nIt is recommended to use the **GET /api/v3/accounts/universal-transfer** endpoint instead of this endpoint\n:::\n\n:::info[Description]\nFunds in the main account, trading account and margin account of a Master Account can be transferred to the main account, trading account, futures account and margin account of its Sub-Account. The futures account of both the Master Account and Sub-Account can only accept funds transferred in from the main account, trading account and margin account and cannot transfer out to these accounts.\n:::\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Unique order id created by users to identify their orders, e.g. UUID, with a maximum length of 128 bits |\n| currency | string | currency |\n| amount | string | Transfer amount, the amount is a positive integer multiple of the currency precision. |\n| direction | string | OUT โ€” the master user to sub user
IN โ€” the sub user to the master user. |\n| accountType | string | Account type๏ผšMAINใ€TRADEใ€CONTRACTใ€MARGIN |\n| subAccountType | string | Sub Account type๏ผšMAINใ€TRADEใ€CONTRACTใ€MARGIN |\n| subUserId | string | the user ID of a sub-account. |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | Transfer order ID |\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"clientOid\": \"64ccc0f164781800010d8c09\",\n \"currency\": \"USDT\",\n \"amount\": \"0.01\",\n \"direction\": \"OUT\",\n \"accountType\": \"MAIN\",\n \"subAccountType\": \"MAIN\",\n \"subUserId\": \"63743f07e0c5230001761d08\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v2", + "accounts", + "sub-transfer" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"orderId\": \"670be6b0b1b9080007040a9b\"\n }\n}" + } + ] + }, + { + "name": "Inner Transfer", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v2", + "accounts", + "inner-transfer" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470302)\n\n:::tip[TIPS]\nIt is recommended to use the **GET /api/v3/accounts/universal-transfer** endpoint instead of this endpoint\n:::\n\n:::info[Description]\nThis API endpoint can be used to transfer funds between accounts internally. Users can transfer funds between their account free of charge. \n:::\n\nnotice:\nIt is not supported to transfer funds from contract account to other accounts.\nThe margin_v2 account currently only supports mutual transfers with margin accounts, and cannot be directly transferred from other accounts to margin_v2\nThe isolated_v2 account currently only supports mutual transfer with the margin account, and cannot be directly transferred from other accounts to isolated_v2\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Unique order id created by users to identify their orders, e.g. UUID, with a maximum length of 128 bits |\n| currency | string | currency |\n| amount | string | Transfer amount, the amount is a positive integer multiple of the currency precision. |\n| to | string | Receiving Account Type: main, trade, margin, isolated, margin_v2, isolated_v2, contract |\n| fromTag | string | Trading pair, required when the payment account type is isolated, e.g.: BTC-USDT |\n| toTag | string | Trading pair, required when the payment account type is isolated, e.g.: BTC-USDT |\n| from | string | Payment Account Type: main, trade, margin, isolated, margin_v2, isolated_v2 |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | Transfer order ID |\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"clientOid\": \"64ccc0f164781800010d8c09\",\n \"currency\": \"USDT\",\n \"amount\": \"0.01\",\n \"from\": \"main\",\n \"to\": \"trade\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v2", + "accounts", + "inner-transfer" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"orderId\": \"670beb3482a1bb0007dec644\"\n }\n}" + } + ] + }, + { + "name": "Futures Account Transfer Out", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v3", + "transfer-out" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470303)\n\n:::tip[TIPS]\nIt is recommended to use the **GET /api/v3/accounts/universal-transfer** endpoint instead of this endpoint\n:::\n\n:::info[Description]\nThe amount to be transferred will be deducted from the KuCoin Futures Account. Please ensure that you have sufficient funds in your KuCoin Futures Account, or the transfer will fail.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | Currency, including XBT,USDT... |\n| amount | number | Amount to be transfered out, the maximum cannot exceed 1000000000 |\n| recAccountType | string | Receive account type, including MAIN,TRADE |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| applyId | string | Transfer order ID |\n| bizNo | string | Business number |\n| payAccountType | string | Pay account type |\n| payTag | string | Pay account sub type |\n| remark | string | User remark |\n| recAccountType | string | Receive account type |\n| recTag | string | Receive account sub type |\n| recRemark | string | Receive account tx remark |\n| recSystem | string | Receive system |\n| status | string | Status:APPLY, PROCESSING, PENDING_APPROVAL, APPROVED, REJECTED, PENDING_CANCEL, CANCEL, SUCCESS |\n| currency | string | Currency |\n| amount | string | Transfer amout |\n| fee | string | Transfer fee |\n| sn | integer | Serial number |\n| reason | string | Fail Reason |\n| createdAt | integer | Create time |\n| updatedAt | integer | Update time |\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"currency\": \"USDT\",\n \"amount\": 0.01,\n \"recAccountType\": \"MAIN\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v3", + "transfer-out" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"applyId\": \"670bf84c577f6c00017a1c48\",\n \"bizNo\": \"670bf84c577f6c00017a1c47\",\n \"payAccountType\": \"CONTRACT\",\n \"payTag\": \"DEFAULT\",\n \"remark\": \"\",\n \"recAccountType\": \"MAIN\",\n \"recTag\": \"DEFAULT\",\n \"recRemark\": \"\",\n \"recSystem\": \"KUCOIN\",\n \"status\": \"PROCESSING\",\n \"currency\": \"USDT\",\n \"amount\": \"0.01\",\n \"fee\": \"0\",\n \"sn\": 1519769124134806,\n \"reason\": \"\",\n \"createdAt\": 1728837708000,\n \"updatedAt\": 1728837708000\n }\n}" + } + ] + }, + { + "name": "Futures Account Transfer In", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "transfer-in" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470304)\n\n:::tip[TIPS]\nIt is recommended to use the **GET /api/v3/accounts/universal-transfer** endpoint instead of this endpoint\n:::\n\n:::info[Description]\nThe amount to be transferred will be deducted from the payAccount. Please ensure that you have sufficient funds in your payAccount Account, or the transfer will fail.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | Currency, including XBT,USDT... |\n| amount | number | Amount to be transfered in |\n| payAccountType | string | Payment account type, including MAIN,TRADE |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | string | |\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"currency\": \"USDT\",\n \"amount\": 0.01,\n \"payAccountType\": \"MAIN\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "transfer-in" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": null\n}" + } + ] + }, + { + "name": "Get Deposit Addresses - V1", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "deposit-addresses" + ], + "query": [ + { + "key": "currency", + "value": "", + "description": "currency" + }, + { + "key": "chain", + "value": null, + "description": "The chainId of currency, e.g. The available value for USDT are OMNI, ERC20, TRC20, default is ERC20. The available value for BTC are Native, Segwit, TRC20, the parameters are bech32, btc, trx, default is Native. This only apply for multi-chain currency, and there is no need for single chain currency." + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470305)\n\n:::tip[TIPS]\nIt is recommended to use the **GET /api/v3/deposit-addresses** endpoint instead of this endpoint\n:::\n\n:::info[Description]\nGet all deposit addresses for the currency you intend to deposit. If the returned data is empty, you may need to Add Deposit Address first.\n:::\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| address | string | Deposit address |\n| memo | string | Address remark. If thereโ€™s no remark, it is empty. When you withdraw from other platforms to the KuCoin, you need to fill in memo(tag). If you do not fill memo (tag), your deposit may not be available, please be cautious. |\n| chain | string | The chainName of currency |\n| chainId | string | The chainId of currency |\n| to | string | Deposit account type: main (funding account), trade (spot trading account) |\n| currency | string | currency |\n| contractAddress | string | The token contract address. |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "deposit-addresses" + ], + "query": [ + { + "key": "currency", + "value": "", + "description": "currency" + }, + { + "key": "chain", + "value": null, + "description": "The chainId of currency, e.g. The available value for USDT are OMNI, ERC20, TRC20, default is ERC20. The available value for BTC are Native, Segwit, TRC20, the parameters are bech32, btc, trx, default is Native. This only apply for multi-chain currency, and there is no need for single chain currency." + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"address\": \"0xea220bf61c3c2b0adc2cfa29fec3d2677745a379\",\n \"memo\": \"\",\n \"chain\": \"ERC20\",\n \"chainId\": \"eth\",\n \"to\": \"MAIN\",\n \"currency\": \"USDT\"\n }\n}" + } + ] + }, + { + "name": "Get Deposit History - Old", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hist-deposits" + ], + "query": [ + { + "key": "currency", + "value": "", + "description": "currency" + }, + { + "key": "status", + "value": "SUCCESS", + "description": "Status. Available value: PROCESSING, SUCCESS, and FAILURE" + }, + { + "key": "startAt", + "value": "1728663338000", + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": "1728692138000", + "description": "End time (milisecond)" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470306)\n\n:::tip[TIPS]\nIt is recommended to use the **GET /api/v1/deposits** endpoint instead of this endpoint\n:::\n\n:::info[Description]\nRequest via this endpoint to get the V1 historical deposits list on KuCoin. The return value is the data after Pagination, sorted in descending order according to time.\n:::\n\n:::tip[TIPS]\nDefault query for one month of data.\nThis request is paginated\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currentPage | integer | current page |\n| pageSize | integer | page size |\n| totalNum | integer | total number |\n| totalPage | integer | total page |\n| items | array | Refer to the schema section of items |\n\n**root.data.items Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | Currency |\n| createAt | integer | Creation time of the database record |\n| amount | string | Deposit amount |\n| walletTxId | string | Wallet Txid |\n| isInner | boolean | Internal deposit or not |\n| status | string | |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hist-deposits" + ], + "query": [ + { + "key": "currency", + "value": "", + "description": "currency" + }, + { + "key": "status", + "value": "SUCCESS", + "description": "Status. Available value: PROCESSING, SUCCESS, and FAILURE" + }, + { + "key": "startAt", + "value": "1728663338000", + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": "1728692138000", + "description": "End time (milisecond)" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"currentPage\": 1,\n \"pageSize\": 50,\n \"totalNum\": 0,\n \"totalPage\": 0,\n \"items\": [\n {\n \"currency\": \"BTC\",\n \"createAt\": 1528536998,\n \"amount\": \"0.03266638\",\n \"walletTxId\": \"55c643bc2c68d6f17266383ac1be9e454038864b929ae7cee0bc408cc5c869e8@12ffGWmMMD1zA1WbFm7Ho3JZ1w6NYXjpFk@234\",\n \"isInner\": false,\n \"status\": \"SUCCESS\"\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Get Futures Account Transfer Out Ledger", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "transfer-list" + ], + "query": [ + { + "key": "currency", + "value": "", + "description": "currency" + }, + { + "key": "type", + "value": "MAIN", + "description": "Status PROCESSING, SUCCESS, FAILURE" + }, + { + "key": "tag", + "value": null, + "description": "Status List PROCESSING, SUCCESS, FAILURE" + }, + { + "key": "startAt", + "value": "1728663338000", + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": "1728692138000", + "description": "End time (milisecond)" + }, + { + "key": "currentPage", + "value": null, + "description": "Current request page, The default currentPage is 1" + }, + { + "key": "pageSize", + "value": null, + "description": "pageSize, The default pageSize is 50" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470307)\n\n:::info[Description]\nThis endpoint can get futures account transfer out ledger\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currentPage | integer | current page |\n| pageSize | integer | page size |\n| totalNum | integer | total number |\n| totalPage | integer | total page |\n| items | array | Refer to the schema section of items |\n\n**root.data.items Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| applyId | string | Transfer order ID |\n| currency | string | Currency |\n| recRemark | string | Receive account tx remark |\n| recSystem | string | Receive system |\n| status | string | Status PROCESSING, SUCCESS, FAILURE |\n| amount | string | Transaction amount |\n| reason | string | Reason caused the failure |\n| offset | integer | Offset |\n| createdAt | integer | Request application time |\n| remark | string | User remark |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "transfer-list" + ], + "query": [ + { + "key": "currency", + "value": "", + "description": "currency" + }, + { + "key": "type", + "value": "MAIN", + "description": "Status PROCESSING, SUCCESS, FAILURE" + }, + { + "key": "tag", + "value": null, + "description": "Status List PROCESSING, SUCCESS, FAILURE" + }, + { + "key": "startAt", + "value": "1728663338000", + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": "1728692138000", + "description": "End time (milisecond)" + }, + { + "key": "currentPage", + "value": null, + "description": "Current request page, The default currentPage is 1" + }, + { + "key": "pageSize", + "value": null, + "description": "pageSize, The default pageSize is 50" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"currentPage\": 1,\n \"pageSize\": 50,\n \"totalNum\": 1,\n \"totalPage\": 1,\n \"items\": [\n {\n \"applyId\": \"670bf84c577f6c00017a1c48\",\n \"currency\": \"USDT\",\n \"recRemark\": \"\",\n \"recSystem\": \"KUCOIN\",\n \"status\": \"SUCCESS\",\n \"amount\": \"0.01\",\n \"reason\": \"\",\n \"offset\": 1519769124134806,\n \"createdAt\": 1728837708000,\n \"remark\": \"\"\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Get Withdrawal History - Old", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hist-withdrawals" + ], + "query": [ + { + "key": "currency", + "value": "", + "description": "currency" + }, + { + "key": "status", + "value": "SUCCESS", + "description": "Status. Available value: PROCESSING, SUCCESS, and FAILURE" + }, + { + "key": "startAt", + "value": "1728663338000", + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": "1728692138000", + "description": "End time (milisecond)" + }, + { + "key": "currentPage", + "value": "1", + "description": "Current request page." + }, + { + "key": "pageSize", + "value": "50", + "description": "Number of results per request. Minimum is 10, maximum is 500." + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470308)\n\n:::tip[TIPS]\nIt is recommended to use the **GET /api/v1/withdrawals** endpoint instead of this endpoint\n:::\n\n:::info[Description]\nRequest via this endpoint to get withdrawal list Items are paginated and sorted to show the latest first. See the Pagination section for retrieving additional entries after the first page.\n:::\n\n:::tip[TIPS]\nDefault query for one month of data.\n:::\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currentPage | integer | current page |\n| pageSize | integer | page size |\n| totalNum | integer | total number |\n| totalPage | integer | total page |\n| items | array | Refer to the schema section of items |\n\n**root.data.items Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | Currency |\n| createAt | integer | Creation time of the database record |\n| amount | string | Withdrawal amount |\n| address | string | Withdrawal address |\n| walletTxId | string | Wallet Txid |\n| isInner | boolean | Internal deposit or not |\n| status | string | Status |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hist-withdrawals" + ], + "query": [ + { + "key": "currency", + "value": "", + "description": "currency" + }, + { + "key": "status", + "value": "SUCCESS", + "description": "Status. Available value: PROCESSING, SUCCESS, and FAILURE" + }, + { + "key": "startAt", + "value": "1728663338000", + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": "1728692138000", + "description": "End time (milisecond)" + }, + { + "key": "currentPage", + "value": "1", + "description": "Current request page." + }, + { + "key": "pageSize", + "value": "50", + "description": "Number of results per request. Minimum is 10, maximum is 500." + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"currentPage\": 1,\n \"pageSize\": 50,\n \"totalNum\": 1,\n \"totalPage\": 1,\n \"items\": [\n {\n \"currency\": \"BTC\",\n \"createAt\": 1526723468,\n \"amount\": \"0.534\",\n \"address\": \"33xW37ZSW4tQvg443Pc7NLCAs167Yc2XUV\",\n \"walletTxId\": \"aeacea864c020acf58e51606169240e96774838dcd4f7ce48acf38e3651323f4\",\n \"isInner\": false,\n \"status\": \"SUCCESS\"\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Add Deposit Address - V1", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "deposit-addresses" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470309)\n\n:::tip[TIPS]\nIt is recommended to use the **POST /v3/deposit-address/create** endpoint instead of this endpoint\n:::\n\n:::info[Description]\nRequest via this endpoint to create a deposit address for a currency you intend to deposit.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | currency |\n| chain | string | The chainId of currency, e.g. The available value for USDT are OMNI, ERC20, TRC20, default is ERC20. The available value for BTC are Native, Segwit, TRC20, the parameters are bech32, btc, trx, default is Native. This only apply for multi-chain currency, and there is no need for single chain currency. |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| address | string | Deposit address |\n| memo | string | Address remark. If thereโ€™s no remark, it is empty. When you withdraw from other platforms to the KuCoin, you need to fill in memo(tag). If you do not fill memo (tag), your deposit may not be available, please be cautious. |\n| chain | string | The chainName of currency |\n| chainId | string | The chainId of currency |\n| to | string | Deposit account type: main (funding account), trade (spot trading account) |\n| currency | string | currency |\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"currency\": \"ETH\",\n \"chain\": \"eth\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "deposit-addresses" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"address\": \"0x02028456f38e78609904e8a002c787ede7a73d7c\",\n \"memo\": null,\n \"chain\": \"ERC20\",\n \"chainId\": \"eth\",\n \"to\": \"MAIN\",\n \"currency\": \"ETH\"\n }\n}" + } + ] + }, + { + "name": "Withdraw - V1", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "withdrawals" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470310)\n\n:::tip[TIPS]\nIt is recommended to use the **POST /api/v3/withdrawals** endpoint instead of this endpoint\n:::\n\n:::info[Description]\nUse this interface to withdraw the specified currency\n:::\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | currency |\n| chain | string | The chainId of currency, For a currency with multiple chains, it is recommended to specify chain parameter instead of using the default chain; you can query the chainId through the response of the GET /api/v3/currencies/{currency} interface. |\n| address | string | Withdrawal address |\n| amount | integer | Withdrawal amount, a positive number which is a multiple of the amount precision |\n| memo | string | Address remark. If thereโ€™s no remark, it is empty. When you withdraw from other platforms to the KuCoin, you need to fill in memo(tag). If you do not fill memo (tag), your deposit may not be available, please be cautious. |\n| isInner | boolean | Internal withdrawal or not. Default : false |\n| remark | string | remark |\n| feeDeductType | string | Withdrawal fee deduction type: INTERNAL or EXTERNAL or not specified

1. INTERNAL- deduct the transaction fees from your withdrawal amount
2. EXTERNAL- deduct the transaction fees from your main account
3. If you don't specify the feeDeductType parameter, when the balance in your main account is sufficient to support the withdrawal, the system will initially deduct the transaction fees from your main account. But if the balance in your main account is not sufficient to support the withdrawal, the system will deduct the fees from your withdrawal amount. For example: Suppose you are going to withdraw 1 BTC from the KuCoin platform (transaction fee: 0.0001BTC), if the balance in your main account is insufficient, the system will deduct the transaction fees from your withdrawal amount. In this case, you will be receiving 0.9999BTC. |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| withdrawalId | string | Withdrawal id, a unique ID for a withdrawal |\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"currency\": \"USDT\",\n \"address\": \"TKFRQXSDc****16GmLrjJggwX8\",\n \"amount\": 3,\n \"chain\": \"trx\",\n \"isInner\": true\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "withdrawals" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"withdrawalId\": \"670a973cf07b3800070e216c\"\n }\n}" + } + ] + } + ], + "description": "" + }, + { + "name": "Spot Trading", + "item": [ + { + "name": "Orders", + "item": [ + { + "name": "Cancel Order By OrderId - Old", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "orders", + "{{orderId}}" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470343)\n\n:::tip[]\nIt is recommended to use the **DELETE /api/v1/hf/orders/{orderId}** endpoint instead of this endpoint\n:::\n\n:::info[Description]\nThis endpoint can be used to cancel a spot order by orderId.\nThis endpoint only sends cancellation requests. The results of the requests must be obtained by checking the order status or subscribing to websocket.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| cancelledOrderIds | array | Refer to the schema section of cancelledOrderIds |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "orders", + "{{orderId}}" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"cancelledOrderIds\": [\n \"674a97dfef434f0007efc431\"\n ]\n }\n}" + } + ] + }, + { + "name": "Get Orders List - Old", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "orders" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + }, + { + "key": "status", + "value": null, + "description": "active or done(done as default), Only list orders with a specific status ." + }, + { + "key": "side", + "value": null, + "description": "buy or sell" + }, + { + "key": "type", + "value": null, + "description": "limit, market, limit_stop or market_stop" + }, + { + "key": "tradeType", + "value": null, + "description": "The type of trading:TRADE - Spot Trading(TRADE as default), MARGIN_TRADE - Cross Margin Trading, MARGIN_ISOLATED_TRADE - Isolated Margin Trading." + }, + { + "key": "startAt", + "value": null, + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": null, + "description": "End time (milisecond)" + }, + { + "key": "currentPage", + "value": null, + "description": "Current request page." + }, + { + "key": "pageSize", + "value": null, + "description": "Number of results per request. Minimum is 10, maximum is 500." + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470346)\n\n:::tip[]\nIt is recommended to use the **GET /api/v1/hf/orders/active** endpoint instead of this endpoint\n:::\n\n:::info[Description]\nRequest via this endpoint to get your current order list. The return value is the data after Pagination, sorted in descending order according to time.\n:::\n\n:::tip[Tips]\nWhen you query orders in active status, there is no time limit. However, when you query orders in done status, the start and end time range cannot exceed 7* 24 hours. An error will occur if the specified time window exceeds the range. If you specify the end time only, the system will automatically calculate the start time as end time minus 7*24 hours, and vice versa.\n\nThe history for cancelled orders is only kept for one month. The history for Filled orders is only kept for six month.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currentPage | integer | |\n| pageSize | integer | |\n| totalNum | integer | |\n| totalPage | integer | |\n| items | array | Refer to the schema section of items |\n\n**root.data.items Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | |\n| symbol | string | |\n| opType | string | |\n| type | string | |\n| side | string | |\n| price | string | |\n| size | string | |\n| funds | string | |\n| dealFunds | string | |\n| dealSize | string | |\n| fee | string | |\n| feeCurrency | string | |\n| stp | string | |\n| stop | string | |\n| stopTriggered | boolean | |\n| stopPrice | string | |\n| timeInForce | string | |\n| postOnly | boolean | |\n| hidden | boolean | |\n| iceberg | boolean | |\n| visibleSize | string | |\n| cancelAfter | integer | |\n| channel | string | |\n| clientOid | string | |\n| remark | string | |\n| tags | string | |\n| isActive | boolean | |\n| cancelExist | boolean | |\n| createdAt | integer | |\n| tradeType | string | |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "orders" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + }, + { + "key": "status", + "value": null, + "description": "active or done(done as default), Only list orders with a specific status ." + }, + { + "key": "side", + "value": null, + "description": "buy or sell" + }, + { + "key": "type", + "value": null, + "description": "limit, market, limit_stop or market_stop" + }, + { + "key": "tradeType", + "value": null, + "description": "The type of trading:TRADE - Spot Trading(TRADE as default), MARGIN_TRADE - Cross Margin Trading, MARGIN_ISOLATED_TRADE - Isolated Margin Trading." + }, + { + "key": "startAt", + "value": null, + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": null, + "description": "End time (milisecond)" + }, + { + "key": "currentPage", + "value": null, + "description": "Current request page." + }, + { + "key": "pageSize", + "value": null, + "description": "Number of results per request. Minimum is 10, maximum is 500." + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"currentPage\": 1,\n \"pageSize\": 50,\n \"totalNum\": 1,\n \"totalPage\": 1,\n \"items\": [\n {\n \"id\": \"674a9a872033a50007e2790d\",\n \"symbol\": \"BTC-USDT\",\n \"opType\": \"DEAL\",\n \"type\": \"limit\",\n \"side\": \"buy\",\n \"price\": \"50000\",\n \"size\": \"0.00001\",\n \"funds\": \"0\",\n \"dealFunds\": \"0\",\n \"dealSize\": \"0\",\n \"fee\": \"0\",\n \"feeCurrency\": \"USDT\",\n \"stp\": \"\",\n \"stop\": \"\",\n \"stopTriggered\": false,\n \"stopPrice\": \"0\",\n \"timeInForce\": \"GTC\",\n \"postOnly\": false,\n \"hidden\": false,\n \"iceberg\": false,\n \"visibleSize\": \"0\",\n \"cancelAfter\": 0,\n \"channel\": \"API\",\n \"clientOid\": \"5c52e11203aa677f33e4923fb\",\n \"remark\": \"order remarks\",\n \"tags\": null,\n \"isActive\": false,\n \"cancelExist\": true,\n \"createdAt\": 1732942471752,\n \"tradeType\": \"TRADE\"\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Get Recent Orders List - Old", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "limit", + "orders" + ], + "query": [ + { + "key": "currentPage", + "value": null, + "description": "Current request page." + }, + { + "key": "pageSize", + "value": null, + "description": "Number of results per request. Minimum is 10, maximum is 500." + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470347)\n\n:::tip[]\nIt is recommended to use the **GET /api/v1/hf/orders/active** endpoint instead of this endpoint\n:::\n\n:::info[Description]\nRequest via this endpoint to get 1000 orders in the last 24 hours. The return value is the data after Pagination, sorted in descending order according to time.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | |\n| symbol | string | |\n| opType | string | |\n| type | string | |\n| side | string | |\n| price | string | |\n| size | string | |\n| funds | string | |\n| dealFunds | string | |\n| dealSize | string | |\n| fee | string | |\n| feeCurrency | string | |\n| stp | string | |\n| stop | string | |\n| stopTriggered | boolean | |\n| stopPrice | string | |\n| timeInForce | string | |\n| postOnly | boolean | |\n| hidden | boolean | |\n| iceberg | boolean | |\n| visibleSize | string | |\n| cancelAfter | integer | |\n| channel | string | |\n| clientOid | string | |\n| remark | string | |\n| tags | string | |\n| isActive | boolean | |\n| cancelExist | boolean | |\n| createdAt | integer | |\n| tradeType | string | |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "limit", + "orders" + ], + "query": [ + { + "key": "currentPage", + "value": null, + "description": "Current request page." + }, + { + "key": "pageSize", + "value": null, + "description": "Number of results per request. Minimum is 10, maximum is 500." + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"id\": \"674a9a872033a50007e2790d\",\n \"symbol\": \"BTC-USDT\",\n \"opType\": \"DEAL\",\n \"type\": \"limit\",\n \"side\": \"buy\",\n \"price\": \"50000\",\n \"size\": \"0.00001\",\n \"funds\": \"0\",\n \"dealFunds\": \"0\",\n \"dealSize\": \"0\",\n \"fee\": \"0\",\n \"feeCurrency\": \"USDT\",\n \"stp\": \"\",\n \"stop\": \"\",\n \"stopTriggered\": false,\n \"stopPrice\": \"0\",\n \"timeInForce\": \"GTC\",\n \"postOnly\": false,\n \"hidden\": false,\n \"iceberg\": false,\n \"visibleSize\": \"0\",\n \"cancelAfter\": 0,\n \"channel\": \"API\",\n \"clientOid\": \"5c52e11203aa677f33e4923fb\",\n \"remark\": \"order remarks\",\n \"tags\": null,\n \"isActive\": false,\n \"cancelExist\": true,\n \"createdAt\": 1732942471752,\n \"tradeType\": \"TRADE\"\n }\n ]\n}" + } + ] + }, + { + "name": "Get Order By OrderId - Old", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "orders", + "{{orderId}}" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470348)\n\n:::tip[]\nIt is recommended to use the **GET /api/v1/hf/orders/{orderId}** endpoint instead of this endpoint\n:::\n\n:::info[Description]\nRequest via this endpoint to get a single order info by order ID.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | |\n| symbol | string | |\n| opType | string | |\n| type | string | |\n| side | string | |\n| price | string | |\n| size | string | |\n| funds | string | |\n| dealFunds | string | |\n| dealSize | string | |\n| fee | string | |\n| feeCurrency | string | |\n| stp | string | |\n| stop | string | |\n| stopTriggered | boolean | |\n| stopPrice | string | |\n| timeInForce | string | |\n| postOnly | boolean | |\n| hidden | boolean | |\n| iceberg | boolean | |\n| visibleSize | string | |\n| cancelAfter | integer | |\n| channel | string | |\n| clientOid | string | |\n| remark | string | |\n| tags | string | |\n| isActive | boolean | |\n| cancelExist | boolean | |\n| createdAt | integer | |\n| tradeType | string | |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "orders", + "{{orderId}}" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"id\": \"674a97dfef434f0007efc431\",\n \"symbol\": \"BTC-USDT\",\n \"opType\": \"DEAL\",\n \"type\": \"limit\",\n \"side\": \"buy\",\n \"price\": \"50000\",\n \"size\": \"0.0001\",\n \"funds\": \"0\",\n \"dealFunds\": \"0\",\n \"dealSize\": \"0\",\n \"fee\": \"0\",\n \"feeCurrency\": \"USDT\",\n \"stp\": \"\",\n \"stop\": \"\",\n \"stopTriggered\": false,\n \"stopPrice\": \"0\",\n \"timeInForce\": \"GTC\",\n \"postOnly\": false,\n \"hidden\": false,\n \"iceberg\": false,\n \"visibleSize\": \"0\",\n \"cancelAfter\": 0,\n \"channel\": \"API\",\n \"clientOid\": \"3d07008668054da6b3cb12e432c2b13a\",\n \"remark\": null,\n \"tags\": null,\n \"isActive\": false,\n \"cancelExist\": true,\n \"createdAt\": 1732941791518,\n \"tradeType\": \"TRADE\"\n }\n}" + } + ] + }, + { + "name": "Get Order By ClientOid - Old", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "order", + "client-order", + "{{clientOid}}" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470349)\n\n:::tip[]\nIt is recommended to use the **GET /api/v1/hf/orders/client-order/{clientOid}** endpoint instead of this endpoint\n:::\n\n:::info[Description]\nRequest via this interface to check the information of a single active order via clientOid. The system will prompt that the order does not exists if the order does not exist or has been settled.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | |\n| symbol | string | |\n| opType | string | |\n| type | string | |\n| side | string | |\n| price | string | |\n| size | string | |\n| funds | string | |\n| dealFunds | string | |\n| dealSize | string | |\n| fee | string | |\n| feeCurrency | string | |\n| stp | string | |\n| stop | string | |\n| stopTriggered | boolean | |\n| stopPrice | string | |\n| timeInForce | string | |\n| postOnly | boolean | |\n| hidden | boolean | |\n| iceberg | boolean | |\n| visibleSize | string | |\n| cancelAfter | integer | |\n| channel | string | |\n| clientOid | string | |\n| remark | string | |\n| tags | string | |\n| isActive | boolean | |\n| cancelExist | boolean | |\n| createdAt | integer | |\n| tradeType | string | |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "order", + "client-order", + "{{clientOid}}" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"id\": \"674a97dfef434f0007efc431\",\n \"symbol\": \"BTC-USDT\",\n \"opType\": \"DEAL\",\n \"type\": \"limit\",\n \"side\": \"buy\",\n \"price\": \"50000\",\n \"size\": \"0.0001\",\n \"funds\": \"0\",\n \"dealFunds\": \"0\",\n \"dealSize\": \"0\",\n \"fee\": \"0\",\n \"feeCurrency\": \"USDT\",\n \"stp\": \"\",\n \"stop\": \"\",\n \"stopTriggered\": false,\n \"stopPrice\": \"0\",\n \"timeInForce\": \"GTC\",\n \"postOnly\": false,\n \"hidden\": false,\n \"iceberg\": false,\n \"visibleSize\": \"0\",\n \"cancelAfter\": 0,\n \"channel\": \"API\",\n \"clientOid\": \"3d07008668054da6b3cb12e432c2b13a\",\n \"remark\": null,\n \"tags\": null,\n \"isActive\": false,\n \"cancelExist\": true,\n \"createdAt\": 1732941791518,\n \"tradeType\": \"TRADE\"\n }\n}" + } + ] + }, + { + "name": "Batch Cancel Order - Old", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "orders" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + }, + { + "key": "tradeType", + "value": "TRADE", + "description": "The type of trading :TRADE(Spot Trading), MARGIN_TRADE(Cross Margin Trading), MARGIN_ISOLATED_TRADE(Isolated Margin Trading), and the default is TRADE to cancel the spot trading orders." + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470345)\n\n:::tip[]\nIt is recommended to use the **DELETE /api/v1/hf/orders/cancelAll** endpoint instead of this endpoint\n:::\n\n:::info[Description]\nRequest via this endpoint to cancel all open orders. The response is a list of ids of the canceled orders.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| cancelledOrderIds | array | Refer to the schema section of cancelledOrderIds |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "orders" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + }, + { + "key": "tradeType", + "value": "TRADE", + "description": "The type of trading :TRADE(Spot Trading), MARGIN_TRADE(Cross Margin Trading), MARGIN_ISOLATED_TRADE(Isolated Margin Trading), and the default is TRADE to cancel the spot trading orders." + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"cancelledOrderIds\": [\n \"674a8635b38d120007709c0f\",\n \"674a8630439c100007d3bce1\"\n ]\n }\n}" + } + ] + }, + { + "name": "Get Trade History - Old", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "fills" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + }, + { + "key": "orderId", + "value": null, + "description": "The unique order id generated by the trading system (If orderId is specified๏ผŒplease ignore the other query parameters)" + }, + { + "key": "side", + "value": null, + "description": "specify if the order is to 'buy' or 'sell'" + }, + { + "key": "type", + "value": null, + "description": "limit, market, limit_stop or market_stop\n" + }, + { + "key": "tradeType", + "value": null, + "description": "The type of trading:TRADE - Spot Trading(TRADE as default), MARGIN_TRADE - Cross Margin Trading, MARGIN_ISOLATED_TRADE - Isolated Margin Trading." + }, + { + "key": "startAt", + "value": "1728663338000", + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": "1728692138000", + "description": "End time (milisecond)" + }, + { + "key": "currentPage", + "value": null, + "description": "Current request page." + }, + { + "key": "pageSize", + "value": null, + "description": "Number of results per request. Minimum is 10, maximum is 500." + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470350)\n\n:::tip[]\nIt is recommended to use the **GET /api/v1/hf/fills** endpoint instead of this endpoint\n:::\n\n:::info[Description]\nRequest via this endpoint to get the recent fills.\nThe return value is the data after Pagination, sorted in descending order according to time.\n:::\n\n:::tip[Tips]\nThe system allows you to retrieve data up to one week (start from the last day by default). If the time period of the queried data exceeds one week (time range from the start time to end time exceeded 7*24 hours), the system will prompt to remind you that you have exceeded the time limit. If you only specified the start time, the system will automatically calculate the end time (end time = start time + 7 * 24 hours). On the contrary, if you only specified the end time, the system will calculate the start time (start time= end time - 7 * 24 hours) the same way.\n\nThe total number of items retrieved cannot exceed 50,000. If it is exceeded, please shorten the query time range.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currentPage | integer | |\n| pageSize | integer | |\n| totalNum | integer | |\n| totalPage | integer | |\n| items | array | Refer to the schema section of items |\n\n**root.data.items Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | symbol |\n| tradeId | string | |\n| orderId | string | The unique order id generated by the trading system |\n| counterOrderId | string | Counterparty order Id |\n| side | string | Buy or sell |\n| liquidity | string | Liquidity type: taker or maker |\n| forceTaker | boolean | |\n| price | string | Order price |\n| size | string | Order size |\n| funds | string | Order Funds |\n| fee | string | [Handling fees](https://www.kucoin.com/docs-new/api-5327739) |\n| feeRate | string | Fee rate
|\n| feeCurrency | string | currency used to calculate trading fee |\n| stop | string | Take Profit and Stop Loss type, currently HFT does not support the Take Profit and Stop Loss type, so it is empty |\n| tradeType | string | Trade type, redundancy param |\n| type | string | Specify if the order is an 'limit' order or 'market' order. |\n| createdAt | integer | |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "fills" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + }, + { + "key": "orderId", + "value": null, + "description": "The unique order id generated by the trading system (If orderId is specified๏ผŒplease ignore the other query parameters)" + }, + { + "key": "side", + "value": null, + "description": "specify if the order is to 'buy' or 'sell'" + }, + { + "key": "type", + "value": null, + "description": "limit, market, limit_stop or market_stop\n" + }, + { + "key": "tradeType", + "value": null, + "description": "The type of trading:TRADE - Spot Trading(TRADE as default), MARGIN_TRADE - Cross Margin Trading, MARGIN_ISOLATED_TRADE - Isolated Margin Trading." + }, + { + "key": "startAt", + "value": "1728663338000", + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": "1728692138000", + "description": "End time (milisecond)" + }, + { + "key": "currentPage", + "value": null, + "description": "Current request page." + }, + { + "key": "pageSize", + "value": null, + "description": "Number of results per request. Minimum is 10, maximum is 500." + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"currentPage\": 1,\n \"pageSize\": 50,\n \"totalNum\": 1,\n \"totalPage\": 1,\n \"items\": [\n {\n \"symbol\": \"DOGE-USDT\",\n \"tradeId\": \"10862827223795713\",\n \"orderId\": \"6745698ef4f1200007c561a8\",\n \"counterOrderId\": \"6745695ef15b270007ac5076\",\n \"side\": \"buy\",\n \"liquidity\": \"taker\",\n \"forceTaker\": false,\n \"price\": \"0.40739\",\n \"size\": \"10\",\n \"funds\": \"4.0739\",\n \"fee\": \"0.0040739\",\n \"feeRate\": \"0.001\",\n \"feeCurrency\": \"USDT\",\n \"stop\": \"\",\n \"tradeType\": \"TRADE\",\n \"type\": \"market\",\n \"createdAt\": 1732602254928\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Get Recent Trade History - Old", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "limit", + "fills" + ], + "query": [ + { + "key": "currentPage", + "value": null, + "description": "Current request page." + }, + { + "key": "pageSize", + "value": null, + "description": "Number of results per request. Minimum is 10, maximum is 500." + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470351)\n\n:::tip[]\nIt is recommended to use the **GET /api/v1/hf/fills** endpoint instead of this endpoint\n:::\n\n:::info[Description]\nRequest via this endpoint to get a list of 1000 fills in the last 24 hours. The return value is the data after Pagination, sorted in descending order according to time.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | |\n| tradeId | string | |\n| orderId | string | |\n| counterOrderId | string | |\n| side | string | |\n| liquidity | string | |\n| forceTaker | boolean | |\n| price | string | |\n| size | string | |\n| funds | string | |\n| fee | string | |\n| feeRate | string | |\n| feeCurrency | string | |\n| stop | string | |\n| tradeType | string | |\n| type | string | |\n| createdAt | integer | |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "limit", + "fills" + ], + "query": [ + { + "key": "currentPage", + "value": null, + "description": "Current request page." + }, + { + "key": "pageSize", + "value": null, + "description": "Number of results per request. Minimum is 10, maximum is 500." + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"symbol\": \"BTC-USDT\",\n \"tradeId\": \"11732720444522497\",\n \"orderId\": \"674aab24754b1e00077dbc69\",\n \"counterOrderId\": \"674aab1fb26bfb0007a18b67\",\n \"side\": \"buy\",\n \"liquidity\": \"taker\",\n \"forceTaker\": false,\n \"price\": \"96999.6\",\n \"size\": \"0.00001\",\n \"funds\": \"0.969996\",\n \"fee\": \"0.000969996\",\n \"feeRate\": \"0.001\",\n \"feeCurrency\": \"USDT\",\n \"stop\": \"\",\n \"tradeType\": \"TRADE\",\n \"type\": \"limit\",\n \"createdAt\": 1732946724082\n }\n ]\n}" + } + ] + }, + { + "name": "Cancel Order By ClientOid - Old", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "order", + "client-order", + "{{clientOid}}" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470344)\n\n:::tip[]\nIt is recommended to use the **DELETE /api/v1/hf/orders/client-order/{clientOid}** endpoint instead of this endpoint\n:::\n\n:::info[Description]\nThis endpoint can be used to cancel a spot order by clientOid.\nThis endpoint only sends cancellation requests. The results of the requests must be obtained by checking the order status or subscribing to websocket.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒunique identifier created by the user |\n| cancelledOrderId | string | |\n| cancelledOcoOrderIds | string | |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "order", + "client-order", + "{{clientOid}}" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"cancelledOrderId\": \"674a9a872033a50007e2790d\",\n \"clientOid\": \"5c52e11203aa677f33e4923fb\",\n \"cancelledOcoOrderIds\": null\n }\n}" + } + ] + }, + { + "name": "Add Order - Old", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "orders" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470333)\n\n:::tip[]\nIt is recommended to use the **POST /api/v1/hf/orders** endpoint instead of this endpoint\n:::\n\n:::info[Description]\nPlace order to the Spot trading system, you can place two major types of orders: limit and market. Orders can only be placed if your account has sufficient funds. Once an order is placed, your funds will be put on hold for the duration of the order. The amount of funds on hold depends on the order type and parameters specified.\n:::\n\n:::tip[Tips]\nPlease note that once your order enters the order book, the system will freeze the handling fees for the order ahead of time.\n\nBefore placing orders, please be sure to fully understand the meaning of the parameters for each trading pair.\n:::\n\n:::tip[Tips]\nThe maximum number of active orders per account is 2000, with a maximum of 200 active orders per trading pair.(including stop orders).\n:::\n\n**Public order placement request parameters**\n\n| Param | Type | Mandatory | Description |\n| --------- | ------ | --------- | ----------- |\n| clientOid | String | Yes | clientOid, the unique identifier created by the client, use of UUID, with a maximum length of 128 bits. |\n| side | String | Yes | **buy** or **sell** |\n| symbol | String | Yes | symbol, e.g. ETH-BTC |\n| type | String | No | **limit** or **market** (default is **limit**) |\n| remark | String | No | remark, length cannot exceed 50 characters (ASCII) |\n| stp | String | No | self trade prevention, **CN**, **CO**, **CB** or **DC** |\n| tradeType | String | No | The type of trading : **TRADE**๏ผˆSpot Trade๏ผ‰, **MARGIN_TRADE** (Margin Trade). Default is **TRADE**. **Note: To improve the system performance and to accelerate order placing and processing, KuCoin has added a new interface for order placing of margin. For traders still using the current interface, please move to the new one as soon as possible. The current one will no longer accept margin orders by May 1st, 2021 (UTC). At the time, KuCoin will notify users via the announcement, please pay attention to it.** |\n\n##### Additional Request Parameters Required by `limit` Orders\n\n| Param | Type | Mandatory | Description |\n| ----------- | ------- | --------- | ------------ |\n| price | String | Yes | Specify price for currency |\n| size | String | Yes | Specify quantity for currency |\n| timeInForce | String | No | Order timing strategy `GTC`, `GTT`, `IOC`, `FOK` (The default is `GTC`) |\n| cancelAfter | long | No | Cancel after `n` seconds๏ผŒthe order timing strategy is `GTT` |\n| postOnly | boolean | No | passive order labels, this is disabled when the order timing strategy is `IOC` or `FOK` |\n| hidden | boolean | No | Hidden or not (not shown in order book) |\n| iceberg | boolean | No | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | String | No | Maximum visible quantity in iceberg orders |\n\n##### Additional request parameters required by `market` orders\n\n| Param | Type | Mandatory | Description |\n| ----- | ------ | --------- | ------------------------------------------ |\n| size | String | No | (Select one out of two: `size` or `funds`) |\n| funds | String | No | (Select one out of two: `size` or `funds`) |\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.

Please remember the orderId created by the service provider, it used to check for updates in order status. |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | symbol |\n| type | string | specify if the order is an 'limit' order or 'market' order.

The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine.

When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels.

Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. |\n| remark | string | Order placement remarks, length cannot exceed 20 characters (ASCII) |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into four strategies: CN, CO, CB , and DC |\n| price | string | Specify price for order

When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. |\n| size | string | Specify quantity for order

When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.

When **type** is market, select one out of two: size or funds |\n| timeInForce | string | [Time in force](https://www.kucoin.com/docs-new/api-338146) is a special strategy used during trading |\n| postOnly | boolean | passive order labels, this is disabled when the order timing strategy is IOC or FOK |\n| hidden | boolean | Hidden or not (not shown in order book) |\n| iceberg | boolean | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | string | Maximum visible quantity in iceberg orders |\n| cancelAfter | integer | Cancel after n seconds๏ผŒthe order timing strategy is GTT |\n| funds | string | When **type** is market, select one out of two: size or funds |\n| tradeType | string | The type of trading : **TRADE**๏ผˆSpot Trade๏ผ‰, **MARGIN_TRADE** (Margin Trade). Default is **TRADE**. **Note: To improve the system performance and to accelerate order placing and processing, KuCoin has added a new interface for order placing of margin. For traders still using the current interface, please move to the new one as soon as possible. The current one will no longer accept margin orders by May 1st, 2021 (UTC). At the time, KuCoin will notify users via the announcement, please pay attention to it.** |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n\n---\n", + "body": { + "mode": "raw", + "raw": "//limit order\n{\n \"type\": \"limit\",\n \"symbol\": \"BTC-USDT\",\n \"side\": \"buy\",\n \"price\": \"50000\",\n \"size\": \"0.00001\",\n \"clientOid\": \"5c52e11203aa677f33e493fb\",\n \"remark\": \"order remarks\"\n}\n\n//market order 1\n// {\n// \"type\": \"market\",\n// \"symbol\": \"BTC-USDT\",\n// \"side\": \"buy\",\n// \"size\": \"0.00001\",\n// \"clientOid\": \"5c52e11203aa677f33e493fc\",\n// \"remark\": \"order remarks\"\n// }\n\n//market order 2\n// {\n// \"type\": \"market\",\n// \"symbol\": \"BTC-USDT\",\n// \"side\": \"buy\",\n// \"funds\": \"1\",\n// \"clientOid\": \"5c52e11203aa677f33e493fc\",\n// \"remark\": \"order remarks\"\n// }\n", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "orders" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"orderId\": \"674a8635b38d120007709c0f\"\n }\n}" + } + ] + }, + { + "name": "Batch Add Orders - Old", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "orders", + "multi" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470342)\n\n:::tip[]\nIt is recommended to use the **POST /api/v1/hf/orders/multi** endpoint instead of this endpoint\n:::\n\n:::info[Description]\nRequest via this endpoint to place 5 orders at the same time. The order type must be a limit order of the same symbol.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderList | array | Refer to the schema section of orderList |\n| symbol | string | |\n\n**root.orderList Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.

Please remember the orderId created by the service provider, it used to check for updates in order status. |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | symbol |\n| type | string | only limit (default is limit) |\n| remark | string | Order placement remarks, length cannot exceed 20 characters (ASCII) |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into four strategies: CN, CO, CB , and DC |\n| price | string | Specify price for order

When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. |\n| size | string | Specify quantity for order

When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.

When **type** is market, select one out of two: size or funds |\n| timeInForce | string | [Time in force](https://www.kucoin.com/docs-new/api-338146) is a special strategy used during trading |\n| postOnly | boolean | passive order labels, this is disabled when the order timing strategy is IOC or FOK |\n| hidden | boolean | Hidden or not (not shown in order book) |\n| iceberg | boolean | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | string | Maximum visible quantity in iceberg orders |\n| cancelAfter | integer | Cancel after n seconds๏ผŒthe order timing strategy is GTT |\n| tradeType | string | The type of trading : **TRADE**๏ผˆSpot Trade๏ผ‰ |\n| stop | string | Either loss or entry. Requires stopPrice to be defined |\n| stopPrice | string | Stop price, Need to be defined if stop is specified. |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| data | array | Refer to the schema section of data |\n\n**root.data.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | |\n| type | string | |\n| side | string | |\n| price | string | |\n| size | string | |\n| funds | string | |\n| stp | string | |\n| stop | string | |\n| stopPrice | string | |\n| timeInForce | string | |\n| cancelAfter | integer | |\n| postOnly | boolean | |\n| hidden | boolean | |\n| iceberge | boolean | |\n| iceberg | boolean | |\n| visibleSize | string | |\n| channel | string | |\n| id | string | |\n| status | string | |\n| failMsg | string | |\n| clientOid | string | |\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"symbol\": \"BTC-USDT\",\n \"orderList\": [\n {\n \"clientOid\": \"3d07008668054da6b3cb12e432c2b13a\",\n \"side\": \"buy\",\n \"type\": \"limit\",\n \"price\": \"50000\",\n \"size\": \"0.0001\"\n },\n {\n \"clientOid\": \"37245dbe6e134b5c97732bfb36cd4a9d\",\n \"side\": \"buy\",\n \"type\": \"limit\",\n \"price\": \"49999\",\n \"size\": \"0.0001\"\n }\n ]\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "orders", + "multi" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"data\": [\n {\n \"symbol\": \"BTC-USDT\",\n \"type\": \"limit\",\n \"side\": \"buy\",\n \"price\": \"50000\",\n \"size\": \"0.0001\",\n \"funds\": null,\n \"stp\": \"\",\n \"stop\": \"\",\n \"stopPrice\": null,\n \"timeInForce\": \"GTC\",\n \"cancelAfter\": 0,\n \"postOnly\": false,\n \"hidden\": false,\n \"iceberge\": false,\n \"iceberg\": false,\n \"visibleSize\": null,\n \"channel\": \"API\",\n \"id\": \"674a97dfef434f0007efc431\",\n \"status\": \"success\",\n \"failMsg\": null,\n \"clientOid\": \"3d07008668054da6b3cb12e432c2b13a\"\n },\n {\n \"symbol\": \"BTC-USDT\",\n \"type\": \"limit\",\n \"side\": \"buy\",\n \"price\": \"49999\",\n \"size\": \"0.0001\",\n \"funds\": null,\n \"stp\": \"\",\n \"stop\": \"\",\n \"stopPrice\": null,\n \"timeInForce\": \"GTC\",\n \"cancelAfter\": 0,\n \"postOnly\": false,\n \"hidden\": false,\n \"iceberge\": false,\n \"iceberg\": false,\n \"visibleSize\": null,\n \"channel\": \"API\",\n \"id\": \"674a97dffb378b00077b9c20\",\n \"status\": \"fail\",\n \"failMsg\": \"Balance insufficient!\",\n \"clientOid\": \"37245dbe6e134b5c97732bfb36cd4a9d\"\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Add Order Test - Old", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "orders", + "test" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470341)\n\n:::tip[]\nIt is recommended to use the **POST /api/v1/hf/orders/test** endpoint instead of this endpoint\n:::\n\n:::info[Description]\nOrder test endpoint, the request parameters and return parameters of this endpoint are exactly the same as the order endpoint, and can be used to verify whether the signature is correct and other operations. After placing an order, the order will not enter the matching system, and the order cannot be queried.\n:::\n\n:::tip[Tips]\nPlease note that once your order enters the order book, the system will freeze the handling fees for the order ahead of time.\n\nBefore placing orders, please be sure to fully understand the meaning of the parameters for each trading pair.\n:::\n\n:::tip[Tips]\nThe maximum number of active orders per account is 2000, with a maximum of 200 active orders per trading pair.(including stop orders).\n:::\n\n**Public order placement request parameters**\n\n| Param | Type | Mandatory | Description |\n| --------- | ------ | --------- | ----------- |\n| clientOid | String | Yes | clientOid, the unique identifier created by the client, use of UUID, with a maximum length of 128 bits. |\n| side | String | Yes | **buy** or **sell** |\n| symbol | String | Yes | symbol, e.g. ETH-BTC |\n| type | String | No | **limit** or **market** (default is **limit**) |\n| remark | String | No | remark, length cannot exceed 50 characters (ASCII) |\n| stp | String | No | self trade prevention, **CN**, **CO**, **CB** or **DC** |\n| tradeType | String | No | The type of trading : **TRADE**๏ผˆSpot Trade๏ผ‰, **MARGIN_TRADE** (Margin Trade). Default is **TRADE**. **Note: To improve the system performance and to accelerate order placing and processing, KuCoin has added a new interface for order placing of margin. For traders still using the current interface, please move to the new one as soon as possible. The current one will no longer accept margin orders by May 1st, 2021 (UTC). At the time, KuCoin will notify users via the announcement, please pay attention to it.** |\n\n##### Additional Request Parameters Required by `limit` Orders\n\n| Param | Type | Mandatory | Description |\n| ----------- | ------- | --------- | ------------ |\n| price | String | Yes | Specify price for currency |\n| size | String | Yes | Specify quantity for currency |\n| timeInForce | String | No | Order timing strategy `GTC`, `GTT`, `IOC`, `FOK` (The default is `GTC`) |\n| cancelAfter | long | No | Cancel after `n` seconds๏ผŒthe order timing strategy is `GTT` |\n| postOnly | boolean | No | passive order labels, this is disabled when the order timing strategy is `IOC` or `FOK` |\n| hidden | boolean | No | Hidden or not (not shown in order book) |\n| iceberg | boolean | No | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | String | No | Maximum visible quantity in iceberg orders |\n\n##### Additional request parameters required by `market` orders\n\n| Param | Type | Mandatory | Description |\n| ----- | ------ | --------- | ------------------------------------------ |\n| size | String | No | (Select one out of two: `size` or `funds`) |\n| funds | String | No | (Select one out of two: `size` or `funds`) |\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.

Please remember the orderId created by the service provider, it used to check for updates in order status. |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | symbol |\n| type | string | specify if the order is an 'limit' order or 'market' order.

The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine.

When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels.

Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. |\n| remark | string | Order placement remarks, length cannot exceed 20 characters (ASCII) |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into four strategies: CN, CO, CB , and DC |\n| price | string | Specify price for order

When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. |\n| size | string | Specify quantity for order

When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.

When **type** is market, select one out of two: size or funds |\n| timeInForce | string | [Time in force](https://www.kucoin.com/docs-new/api-338146) is a special strategy used during trading |\n| postOnly | boolean | passive order labels, this is disabled when the order timing strategy is IOC or FOK |\n| hidden | boolean | Hidden or not (not shown in order book) |\n| iceberg | boolean | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | string | Maximum visible quantity in iceberg orders |\n| cancelAfter | integer | Cancel after n seconds๏ผŒthe order timing strategy is GTT |\n| funds | string | When **type** is market, select one out of two: size or funds |\n| tradeType | string | The type of trading : **TRADE**๏ผˆSpot Trade๏ผ‰, **MARGIN_TRADE** (Margin Trade). Default is **TRADE**. **Note: To improve the system performance and to accelerate order placing and processing, KuCoin has added a new interface for order placing of margin. For traders still using the current interface, please move to the new one as soon as possible. The current one will no longer accept margin orders by May 1st, 2021 (UTC). At the time, KuCoin will notify users via the announcement, please pay attention to it.** |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n\n---\n", + "body": { + "mode": "raw", + "raw": "//limit order\n{\n \"type\": \"limit\",\n \"symbol\": \"BTC-USDT\",\n \"side\": \"buy\",\n \"price\": \"50000\",\n \"size\": \"0.00001\",\n \"clientOid\": \"5c52e11203aa677f33e493fb\",\n \"remark\": \"order remarks\"\n}\n\n//market order 1\n// {\n// \"type\": \"market\",\n// \"symbol\": \"BTC-USDT\",\n// \"side\": \"buy\",\n// \"size\": \"0.00001\",\n// \"clientOid\": \"5c52e11203aa677f33e493fc\",\n// \"remark\": \"order remarks\"\n// }\n\n//market order 2\n// {\n// \"type\": \"market\",\n// \"symbol\": \"BTC-USDT\",\n// \"side\": \"buy\",\n// \"funds\": \"1\",\n// \"clientOid\": \"5c52e11203aa677f33e493fc\",\n// \"remark\": \"order remarks\"\n// }\n", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "orders", + "test" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"orderId\": \"674a8776291d9e00074f1edf\"\n }\n}" + } + ] + } + ], + "description": "" + } + ], + "description": "" + }, + { + "name": "Margin Trading", + "item": [ + { + "name": "Get Account Detail - Margin", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "margin", + "account" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470311)\n\n:::tip[TIPS]\nIt is recommended to use the **GET /api/v3/margin/accounts** endpoint instead of this endpoint\n:::\n\n:::info[Description]\nRequest via this endpoint to get the info of the margin account.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| debtRatio | string | Debt ratio |\n| accounts | array | Refer to the schema section of accounts |\n\n**root.data.accounts Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | Currency |\n| totalBalance | string | Total funds in the account |\n| availableBalance | string | Available funds in the account |\n| holdBalance | string | Funds on hold in the account |\n| liability | string | Total liabilities |\n| maxBorrowSize | string | Available size to borrow |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "margin", + "account" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"debtRatio\": \"0\",\n \"accounts\": [\n {\n \"currency\": \"USDT\",\n \"totalBalance\": \"0.03\",\n \"availableBalance\": \"0.02\",\n \"holdBalance\": \"0.01\",\n \"liability\": \"0\",\n \"maxBorrowSize\": \"0\"\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Add Order - V1", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "margin", + "order" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470312)\n\n:::tip[TIPS]\nIt is recommended to use the **POST /api/v3/hf/margin/order** endpoint instead of this endpoint\n:::\n\n:::info[Description]\nPlace order to the Cross-margin or Isolated-margin trading system, you can place two major types of orders: limit and market. Orders can only be placed if your account has sufficient funds. Once an order is placed, your funds will be put on hold for the duration of the order. The amount of funds on hold depends on the order type and parameters specified.\n:::\n\n:::tip[Tips]\nPlease note that once your order enters the order book, the system will freeze the handling fees for the order ahead of time.\n\nBefore placing orders, please be sure to fully understand the meaning of the parameters for each trading pair.\n:::\n\n:::tip[Tips]\nThe maximum number of active orders per account is 2000, with a maximum of 200 active orders per trading pair.\n:::\n\n\n**Public order placement request parameters**\n\n| Param | Type | Mandatory | Description |\n| --------- | ------ | --------- | ----------- |\n| clientOid | String | Yes | Client Order Id๏ผŒunique identifier created by the user, the use of UUID is recommended |\n| symbol | String | Yes | symbol |\n| side | String | Yes | `buy` or `sell` |\n| type | String | No | Order type `limit` and `market`, defult is limit |\n| stp | String | No | self trade prevention is divided into four strategies: `CN`, `CO`, `CB` , and `DC` |\n| marginModel | String | No | The type of trading, including cross (cross mode) and isolated (isolated mode). It is set at cross by default. |\n| autoBorrow | boolean | No | When Margin Account has inefficient balance, our system autoborrows inefficient assets and opens positions according to the lowest market interest rate. |\n| autoRepay | boolean | No | AutoPay allows returning borrowed assets when you close a position. Our system automatically triggers the repayment and the maximum repayment amount equals to the filled-order amount. |\n\n**Additional Request Parameters Required by `limit` Orders**\n\n| Param | Type | Mandatory | Description |\n| ----------- | ------- | --------- | ----------- |\n| price | String | Yes | Specify price for currency |\n| size | String | Yes | Specify quantity for currency |\n| timeInForce | String | No | Order timing strategy `GTC`, `GTT`, `IOC`, `FOK` (The default is `GTC`) |\n| cancelAfter | long | No | Cancel after `n` seconds๏ผŒthe order timing strategy is `GTT` |\n| postOnly | boolean | No | passive order labels, this is disabled when the order timing strategy is `IOC` or `FOK` |\n| hidden | boolean | No | Hidden or not (not shown in order book) |\n| iceberg | boolean | No | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | String | No | Maximum visible quantity in iceberg orders |\n\n**Additional request parameters required by `market` orders**\n\n| Param | Type | Mandatory | Description |\n| ----- | ------ | --------- | ------------------------------------------ |\n| size | String | No | (Select one out of two: `size` or `funds`) |\n| funds | String | No | (Select one out of two: `size` or `funds`) |\n\n\n\n**Hidden Orders and Iceberg Orders (Hidden & Iceberg)**\n\nHidden orders and iceberg orders can be set in advanced settings (iceberg orders are a special type of hidden orders). When placing limit orders or stop limit orders, you can choose to execute according to hidden orders or iceberg orders.\n\nHidden orders are not shown in order books.\n\nUnlike hidden orders, iceberg orders are divided into visible and hidden portions. When engaging in iceberg orders, visible order sizes must be set. The minimum visible size for an iceberg order is 1/20 of the total order size.\n\nWhen matching, the visible portions of iceberg orders are matched first. Once the visible portions are fully matched, hidden portions will emerge. This will continue until the order is fully filled.\n\nNote:\n\n- The system will charge taker fees for hidden orders and iceberg orders.\n- If you simultaneously set iceberg orders and hidden orders, your order will default to an iceberg order for execution.\n\n**Hold**\n\nFor limit price purchase orders, we will hold the amount of funds (price * size) required for your purchase order. Similarly, for limit price sell orders, we will also hold you sell order assets. When the transaction is executed, the service fees will be calculated. If you cancel a portion of a filled or unfilled order, then the remaining funds or amounts will be released and returned to your account. For market price buy/sell orders that require specific funds, we will hold the required funds in from your account. If only the size is specified, we may freeze (usually for a very short amount of time) all of the funds in your account prior to the order being filled or cancelled.\n\n\n**Order Lifecycle**\n\nWhen an order placement request is successful (the matching engine receives the order) or denied (due to there being insufficient funds or illegal parameter values, etc.), the system will respond to the HTTP request. When an order is successfully placed, the order ID is returned. The order will be matched, which could result in it being fully or partially filled. When an order is fully or partially filled, the remaining portions of the order will be in an active state awaiting to be matched (this does not include IOC orders). Orders that are fully or partially filled(already cancelled) will be put into the โ€œdoneโ€ state.\n\nUsers that have subscribed to the Market Data Channel can use the order ID ๏ผˆorderId๏ผ‰ and client ID ๏ผˆclientOid๏ผ‰ to identify messages.\n\n**Price Protection Mechanisms**\n\nPrice protection mechanisms ae enabled for order placements. Rules are detailed below:\n\n- If the spot trading market order/limit order placed by the user can be directly matched with an order in the current order book, the system will judge whether deviation between the price corresponding to the transaction depth and the spread exceeds the threshold value ๏ผˆthe threshold value can be obtained using the symbol API endpoint๏ผ‰๏ผ›\n\n- If it is exceeded, for limit orders, the order will be directly cancelled;\n\n- If it is a market order, then the system will partially execute the order. The execution limit will be the order size within the price range corresponding to the threshold value. The remaining orders will not be filled.\n\nFor example: if the threshold value is 10%, when a user places a market price purchase order in the KCS/USDT trading market for 10,000 USDT (the selling price is currently 1.20000), the system will determine that after the order is completely filled, the final price will be 1.40000. (1.40000-1.20000)/1.20000=16.7%>10%. The threshold value is 1.32000. The userโ€™s market price purchase order will be filled only to a maximum of 1.32000. The remaining order portions will not be matched with orders in the order book. Note: this feature may not be able to determine depth with complete accuracy. If your order is not completely filled, it may be because the portion exceeding the threshold value was not filled.\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.

Please remember the orderId created by the service provider, it used to check for updates in order status. |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | symbol |\n| type | string | specify if the order is an 'limit' order or 'market' order.

The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine.

When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels.

Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into four strategies: CN, CO, CB , and DC |\n| price | string | Specify price for order

When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. |\n| size | string | Specify quantity for order

When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.

When **type** is market, select one out of two: size or funds |\n| timeInForce | string | [Time in force](https://www.kucoin.com/docs-new/api-338146) is a special strategy used during trading |\n| postOnly | boolean | passive order labels, this is disabled when the order timing strategy is IOC or FOK |\n| hidden | boolean | Hidden or not (not shown in order book) |\n| iceberg | boolean | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | string | Maximum visible quantity in iceberg orders |\n| cancelAfter | integer | Cancel after n seconds๏ผŒthe order timing strategy is GTT |\n| funds | string | When **type** is market, select one out of two: size or funds |\n| autoBorrow | boolean | When Margin Account has inefficient balance, our system autoborrows inefficient assets and opens positions according to the lowest market interest rate. |\n| autoRepay | boolean | AutoPay allows returning borrowed assets when you close a position. Our system automatically triggers the repayment and the maximum repayment amount equals to the filled-order amount. |\n| marginModel | string | The type of trading, including cross (cross mode) and isolated (isolated mode). It is set at cross by default. |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| loanApplyId | string | Borrow order id. The field is returned only after placing the order under the mode of Auto-Borrow. |\n| borrowSize | string | Borrowed amount. The field is returned only after placing the order under the mode of Auto-Borrow. |\n| clientOid | string | This return value is invalid |\n\n---\n", + "body": { + "mode": "raw", + "raw": "//limit order\n{\n \"type\": \"limit\",\n \"symbol\": \"BTC-USDT\",\n \"side\": \"buy\",\n \"price\": \"50000\",\n \"size\": \"0.00001\",\n \"clientOid\": \"5c52e11203aa677f33e4193fb\",\n \"remark\": \"order remarks\"\n}\n\n//market order 1\n// {\n// \"type\": \"market\",\n// \"symbol\": \"BTC-USDT\",\n// \"side\": \"buy\",\n// \"size\": \"0.00001\",\n// \"clientOid\": \"5c52e11203aa677f33e493fc\",\n// \"remark\": \"order remarks\"\n// }\n\n//market order 2\n// {\n// \"type\": \"market\",\n// \"symbol\": \"BTC-USDT\",\n// \"side\": \"buy\",\n// \"funds\": \"1\",\n// \"clientOid\": \"5c52e11203aa677f33e493fc\",\n// \"remark\": \"order remarks\"\n// }\n", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "margin", + "order" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"orderId\": \"671bb90194422f00073ff4f0\",\n \"loanApplyId\": null,\n \"borrowSize\": null,\n \"clientOid\": null\n }\n}" + } + ] + }, + { + "name": "Add Order Test - V1", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "margin", + "order", + "test" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470313)\n\n:::tip[TIPS]\nIt is recommended to use the **POST /api/v3/hf/margin/order/test** endpoint instead of this endpoint\n:::\n\n:::info[Description]\nOrder test endpoint, the request parameters and return parameters of this endpoint are exactly the same as the order endpoint, and can be used to verify whether the signature is correct and other operations. After placing an order, the order will not enter the matching system, and the order cannot be queried.\n:::\n\n:::tip[Tips]\nPlease note that once your order enters the order book, the system will freeze the handling fees for the order ahead of time.\n\nBefore placing orders, please be sure to fully understand the meaning of the parameters for each trading pair.\n:::\n\n:::tip[Tips]\nThe maximum number of active orders per account is 2000, with a maximum of 200 active orders per trading pair.\n:::\n\n\n**Public order placement request parameters**\n\n| Param | Type | Mandatory | Description |\n| --------- | ------ | --------- | ----------- |\n| clientOid | String | Yes | Client Order Id๏ผŒunique identifier created by the user, the use of UUID is recommended |\n| symbol | String | Yes | symbol |\n| side | String | Yes | `buy` or `sell` |\n| type | String | No | Order type `limit` and `market`, defult is limit |\n| stp | String | No | self trade prevention is divided into four strategies: `CN`, `CO`, `CB` , and `DC` |\n| marginModel | String | No | The type of trading, including cross (cross mode) and isolated (isolated mode). It is set at cross by default. |\n| autoBorrow | boolean | No | When Margin Account has inefficient balance, our system autoborrows inefficient assets and opens positions according to the lowest market interest rate. |\n| autoRepay | boolean | No | AutoPay allows returning borrowed assets when you close a position. Our system automatically triggers the repayment and the maximum repayment amount equals to the filled-order amount. |\n\n**Additional Request Parameters Required by `limit` Orders**\n\n| Param | Type | Mandatory | Description |\n| ----------- | ------- | --------- | ----------- |\n| price | String | Yes | Specify price for currency |\n| size | String | Yes | Specify quantity for currency |\n| timeInForce | String | No | Order timing strategy `GTC`, `GTT`, `IOC`, `FOK` (The default is `GTC`) |\n| cancelAfter | long | No | Cancel after `n` seconds๏ผŒthe order timing strategy is `GTT` |\n| postOnly | boolean | No | passive order labels, this is disabled when the order timing strategy is `IOC` or `FOK` |\n| hidden | boolean | No | Hidden or not (not shown in order book) |\n| iceberg | boolean | No | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | String | No | Maximum visible quantity in iceberg orders |\n\n**Additional request parameters required by `market` orders**\n\n| Param | Type | Mandatory | Description |\n| ----- | ------ | --------- | ------------------------------------------ |\n| size | String | No | (Select one out of two: `size` or `funds`) |\n| funds | String | No | (Select one out of two: `size` or `funds`) |\n\n\n\n**Hidden Orders and Iceberg Orders (Hidden & Iceberg)**\n\nHidden orders and iceberg orders can be set in advanced settings (iceberg orders are a special type of hidden orders). When placing limit orders or stop limit orders, you can choose to execute according to hidden orders or iceberg orders.\n\nHidden orders are not shown in order books.\n\nUnlike hidden orders, iceberg orders are divided into visible and hidden portions. When engaging in iceberg orders, visible order sizes must be set. The minimum visible size for an iceberg order is 1/20 of the total order size.\n\nWhen matching, the visible portions of iceberg orders are matched first. Once the visible portions are fully matched, hidden portions will emerge. This will continue until the order is fully filled.\n\nNote:\n\n- The system will charge taker fees for hidden orders and iceberg orders.\n- If you simultaneously set iceberg orders and hidden orders, your order will default to an iceberg order for execution.\n\n**Hold**\n\nFor limit price purchase orders, we will hold the amount of funds (price * size) required for your purchase order. Similarly, for limit price sell orders, we will also hold you sell order assets. When the transaction is executed, the service fees will be calculated. If you cancel a portion of a filled or unfilled order, then the remaining funds or amounts will be released and returned to your account. For market price buy/sell orders that require specific funds, we will hold the required funds in from your account. If only the size is specified, we may freeze (usually for a very short amount of time) all of the funds in your account prior to the order being filled or cancelled.\n\n\n**Order Lifecycle**\n\nWhen an order placement request is successful (the matching engine receives the order) or denied (due to there being insufficient funds or illegal parameter values, etc.), the system will respond to the HTTP request. When an order is successfully placed, the order ID is returned. The order will be matched, which could result in it being fully or partially filled. When an order is fully or partially filled, the remaining portions of the order will be in an active state awaiting to be matched (this does not include IOC orders). Orders that are fully or partially filled(already cancelled) will be put into the โ€œdoneโ€ state.\n\nUsers that have subscribed to the Market Data Channel can use the order ID ๏ผˆorderId๏ผ‰ and client ID ๏ผˆclientOid๏ผ‰ to identify messages.\n\n**Price Protection Mechanisms**\n\nPrice protection mechanisms ae enabled for order placements. Rules are detailed below:\n\n- If the spot trading market order/limit order placed by the user can be directly matched with an order in the current order book, the system will judge whether deviation between the price corresponding to the transaction depth and the spread exceeds the threshold value ๏ผˆthe threshold value can be obtained using the symbol API endpoint๏ผ‰๏ผ›\n\n- If it is exceeded, for limit orders, the order will be directly cancelled;\n\n- If it is a market order, then the system will partially execute the order. The execution limit will be the order size within the price range corresponding to the threshold value. The remaining orders will not be filled.\n\nFor example: if the threshold value is 10%, when a user places a market price purchase order in the KCS/USDT trading market for 10,000 USDT (the selling price is currently 1.20000), the system will determine that after the order is completely filled, the final price will be 1.40000. (1.40000-1.20000)/1.20000=16.7%>10%. The threshold value is 1.32000. The userโ€™s market price purchase order will be filled only to a maximum of 1.32000. The remaining order portions will not be matched with orders in the order book. Note: this feature may not be able to determine depth with complete accuracy. If your order is not completely filled, it may be because the portion exceeding the threshold value was not filled.\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.

Please remember the orderId created by the service provider, it used to check for updates in order status. |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | symbol |\n| type | string | specify if the order is an 'limit' order or 'market' order.

The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine.

When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels.

Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-5176570) is divided into four strategies: CN, CO, CB , and DC |\n| price | string | Specify price for order

When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. |\n| size | string | Specify quantity for order

When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.

When **type** is market, select one out of two: size or funds |\n| timeInForce | string | [Time in force](https://www.kucoin.com/docs-new/api-5176570) is a special strategy used during trading |\n| postOnly | boolean | passive order labels, this is disabled when the order timing strategy is IOC or FOK |\n| hidden | boolean | Hidden or not (not shown in order book) |\n| iceberg | boolean | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | string | Maximum visible quantity in iceberg orders |\n| cancelAfter | integer | Cancel after n seconds๏ผŒthe order timing strategy is GTT |\n| funds | string | When **type** is market, select one out of two: size or funds |\n| autoBorrow | boolean | When Margin Account has inefficient balance, our system autoborrows inefficient assets and opens positions according to the lowest market interest rate. |\n| autoRepay | boolean | AutoPay allows returning borrowed assets when you close a position. Our system automatically triggers the repayment and the maximum repayment amount equals to the filled-order amount. |\n| marginModel | string | The type of trading, including cross (cross mode) and isolated (isolated mode). It is set at cross by default. |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| loanApplyId | string | Borrow order id. The field is returned only after placing the order under the mode of Auto-Borrow. |\n| borrowSize | string | Borrowed amount. The field is returned only after placing the order under the mode of Auto-Borrow. |\n| clientOid | string | This return value is invalid |\n\n---\n", + "body": { + "mode": "raw", + "raw": "//limit order\n{\n \"type\": \"limit\",\n \"symbol\": \"BTC-USDT\",\n \"side\": \"buy\",\n \"price\": \"50000\",\n \"size\": \"0.00001\",\n \"clientOid\": \"5c52e11203aa677f33e4193fb\",\n \"remark\": \"order remarks\"\n}\n\n//market order 1\n// {\n// \"type\": \"market\",\n// \"symbol\": \"BTC-USDT\",\n// \"side\": \"buy\",\n// \"size\": \"0.00001\",\n// \"clientOid\": \"5c52e11203aa677f33e493fc\",\n// \"remark\": \"order remarks\"\n// }\n\n//market order 2\n// {\n// \"type\": \"market\",\n// \"symbol\": \"BTC-USDT\",\n// \"side\": \"buy\",\n// \"funds\": \"1\",\n// \"clientOid\": \"5c52e11203aa677f33e493fc\",\n// \"remark\": \"order remarks\"\n// }\n", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "margin", + "order", + "test" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"orderId\": \"671bb90194422f00073ff4f0\",\n \"loanApplyId\": null,\n \"borrowSize\": null,\n \"clientOid\": null\n }\n}" + } + ] + }, + { + "name": "Get Account List - Isolated Margin - V1", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "isolated", + "accounts" + ], + "query": [ + { + "key": "balanceCurrency", + "value": "USDT", + "description": "quote currency, currently only supports USDT, KCS, BTC, USDT as default" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470314)\n\n:::tip[TIPS]\nIt is recommended to use the **GET /api/v3/isolated/accounts** endpoint instead of this endpoint\n:::\n\n:::info[Description]\nRequest via this endpoint to get the info list of the isolated margin account.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| totalConversionBalance | string | The total balance of the isolated margin account(in the request coin) |\n| liabilityConversionBalance | string | Total liabilities of the isolated margin account(in the request coin) |\n| assets | array | Refer to the schema section of assets |\n\n**root.data.assets Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | Symbol |\n| status | string | The position status: Existing liabilities-DEBT, No liabilities-CLEAR, Bankrupcy (after position enters a negative balance)-BANKRUPTCY, Existing borrowings-IN_BORROW, Existing repayments-IN_REPAY, Under liquidation-IN_LIQUIDATION, Under auto-renewal assets-IN_AUTO_RENEW . |\n| debtRatio | string | debt ratio |\n| baseAsset | object | Refer to the schema section of baseAsset |\n| quoteAsset | object | Refer to the schema section of quoteAsset |\n\n**root.data.assets.baseAsset Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | currency |\n| totalBalance | string | Current currency total asset amount |\n| holdBalance | string | Current currency holding asset amount |\n| availableBalance | string | Current available asset amount |\n| liability | string | Liabilities |\n| interest | string | |\n| borrowableAmount | string | |\n\n**root.data.assets.baseAsset.quoteAsset Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | currency |\n| totalBalance | string | Current currency total asset amount |\n| holdBalance | string | Current currency holding asset amount |\n| availableBalance | string | Current available asset amount |\n| liability | string | Liabilities |\n| interest | string | |\n| borrowableAmount | string | |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "isolated", + "accounts" + ], + "query": [ + { + "key": "balanceCurrency", + "value": "USDT", + "description": "quote currency, currently only supports USDT, KCS, BTC, USDT as default" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"totalConversionBalance\": \"0.01\",\n \"liabilityConversionBalance\": \"0\",\n \"assets\": [\n {\n \"symbol\": \"BTC-USDT\",\n \"status\": \"CLEAR\",\n \"debtRatio\": \"0\",\n \"baseAsset\": {\n \"currency\": \"BTC\",\n \"totalBalance\": \"0\",\n \"holdBalance\": \"0\",\n \"availableBalance\": \"0\",\n \"liability\": \"0\",\n \"interest\": \"0\",\n \"borrowableAmount\": \"0\"\n },\n \"quoteAsset\": {\n \"currency\": \"USDT\",\n \"totalBalance\": \"0.01\",\n \"holdBalance\": \"0\",\n \"availableBalance\": \"0.01\",\n \"liability\": \"0\",\n \"interest\": \"0\",\n \"borrowableAmount\": \"0\"\n }\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Get Account Detail - Isolated Margin - V1", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "isolated", + "account", + "{{symbol}}" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470315)\n\n:::tip[TIPS]\nIt is recommended to use the **GET /api/v3/isolated/accounts** endpoint instead of this endpoint\n:::\n\n:::info[Description]\nRequest via this endpoint to get the info of the isolated margin account.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | Symbol |\n| status | string | The position status: Existing liabilities-DEBT, No liabilities-CLEAR, Bankrupcy (after position enters a negative balance)-BANKRUPTCY, Existing borrowings-IN_BORROW, Existing repayments-IN_REPAY, Under liquidation-IN_LIQUIDATION, Under auto-renewal assets-IN_AUTO_RENEW . |\n| debtRatio | string | debt ratio |\n| baseAsset | object | Refer to the schema section of baseAsset |\n| quoteAsset | object | Refer to the schema section of quoteAsset |\n\n**root.data.baseAsset Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | currency |\n| totalBalance | string | Current currency total asset amount |\n| holdBalance | string | Current currency holding asset amount |\n| availableBalance | string | Current available asset amount |\n| liability | string | Liabilities |\n| interest | string | |\n| borrowableAmount | string | |\n\n**root.data.baseAsset.quoteAsset Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | currency |\n| totalBalance | string | Current currency total asset amount |\n| holdBalance | string | Current currency holding asset amount |\n| availableBalance | string | Current available asset amount |\n| liability | string | Liabilities |\n| interest | string | |\n| borrowableAmount | string | |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "isolated", + "account", + "{{symbol}}" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"symbol\": \"BTC-USDT\",\n \"status\": \"CLEAR\",\n \"debtRatio\": \"0\",\n \"baseAsset\": {\n \"currency\": \"BTC\",\n \"totalBalance\": \"0\",\n \"holdBalance\": \"0\",\n \"availableBalance\": \"0\",\n \"liability\": \"0\",\n \"interest\": \"0\",\n \"borrowableAmount\": \"0\"\n },\n \"quoteAsset\": {\n \"currency\": \"USDT\",\n \"totalBalance\": \"0.01\",\n \"holdBalance\": \"0\",\n \"availableBalance\": \"0.01\",\n \"liability\": \"0\",\n \"interest\": \"0\",\n \"borrowableAmount\": \"0\"\n }\n }\n}" + } + ] + } + ], + "description": "" + }, + { + "name": "Futures Trading", + "item": [ + { + "name": "Modify Isolated Margin Auto-Deposit Status", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "position", + "margin", + "auto-deposit-status" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470255)\n\n:::tip[TIPS]\nCurrently, it is not recommended to use the Isolated margin + auto deposit margin . It is recommended to switch to the cross margin mode.\nPlease refer to **POST /api/v2/position/changeMarginMode** endpoint\n:::\n\n:::info[Description]\nThis endpoint is only applicable to isolated margin and is no longer recommended. It is recommended to use cross margin instead.\n:::\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | Symbol of the contract
|\n| status | boolean | Status |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | boolean | |\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"symbol\": \"XBTUSDTM\",\n \"status\": true\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "position", + "margin", + "auto-deposit-status" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": true\n}" + } + ] + }, + { + "name": "Cancel All Orders - V1", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "orders" + ], + "query": [ + { + "key": "symbol", + "value": "XBTUSDTM", + "description": "Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470362)\n\n:::tip[TIPS]\nIt is recommended to use the **DELETE /api/v3/orders** endpoint instead of this endpoint\n:::\n\n:::info[Description]\nUsing this endpoint, all open orders (excluding stop orders) can be canceled in batches.\n\nThe response is a list of orderIDs of the canceled orders.\n:::\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| cancelledOrderIds | array | Refer to the schema section of cancelledOrderIds |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "orders" + ], + "query": [ + { + "key": "symbol", + "value": "XBTUSDTM", + "description": "Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"cancelledOrderIds\": [\n \"235919172150824960\",\n \"235919172150824961\"\n ]\n }\n}" + } + ] + } + ], + "description": "" + } + ], + "variable": [ + { + "key": "symbol", + "value": "" + }, + { + "key": "clientOid", + "value": "" + }, + { + "key": "orderId", + "value": "" + } + ], + "event": [ + { + "listen": "prerequest", + "script": { + "type": "text/javascript", + "packages": {}, + "exec": [ + "function extractPathVariable(str) {\n const regex = /^\\{\\{(.+?)\\}\\}$/;\n const match = str.match(regex);\n if (match) {\n return match[1];\n }\n return null;\n}\n\nfunction hasAnyFieldEmpty(obj) {\n for (const key in obj) {\n if (obj[key] === \"\" || obj[key] === null || obj[key] === undefined) {\n return true;\n }\n }\n return false;\n}\n\nfunction sign(text, secret) {\n const hash = CryptoJS.HmacSHA256(text, secret);\n return CryptoJS.enc.Base64.stringify(hash)\n}\n\nfunction auth(apiKey, method, url, data) {\n if (hasAnyFieldEmpty(apiKey)) {\n console.warn('The API key-related information is not configured; only the public channel API is accessible.')\n return {'User-Agent': `Kucoin-Universal-Postman-SDK/v1.0.0`}\n }\n\n const timestamp = Date.now();\n const text = timestamp + method.toUpperCase() + url + data;\n const signature = sign(text, apiKey.secret);\n return {\n 'KC-API-KEY': apiKey.key,\n 'KC-API-SIGN': signature,\n 'KC-API-TIMESTAMP': timestamp.toString(),\n 'KC-API-PASSPHRASE': sign(apiKey.passphrase || '', apiKey.secret),\n 'Content-Type': 'application/json',\n 'User-Agent': `Kucoin-Universal-Postman-SDK/v1.0.0`,\n 'KC-API-KEY-VERSION': 2,\n };\n}\n\nlet key = pm.environment.get('API_KEY')\nlet secret = pm.environment.get('API_SECRET')\nlet passphrase = pm.environment.get('API_PASSPHRASE')\n\nlet url = pm.request.url.getPathWithQuery()\nlet method = pm.request.method\nlet body = pm.request.body ? pm.request.body.toString() : ''\n\nfor (const index in pm.request.url.path) {\n path = pm.request.url.path[index]\n pathVar = extractPathVariable(path)\n if (pathVar != null) {\n let collectionVariable = pm.collectionVariables.get(pathVar);\n if (collectionVariable != null) {\n url = url.replace(path, collectionVariable)\n } else {\n console.warn('no path variable set: ' + path)\n }\n }\n}\n\nheader = auth({ key: key, passphrase: passphrase, secret: secret }, method, url, body)\n\nfor (const [headerName, headerValue] of Object.entries(header)) {\n pm.request.headers.add({ key: headerName, value: headerValue })\n}" + ] + } + }, + { + "listen": "test", + "script": { + "type": "text/javascript", + "packages": {}, + "exec": [ + "" + ] + } + } + ] +} \ No newline at end of file diff --git a/sdk/postman/collection-REST.json b/sdk/postman/collection-REST.json new file mode 100644 index 00000000..cf79574a --- /dev/null +++ b/sdk/postman/collection-REST.json @@ -0,0 +1,18921 @@ +{ + "info": { + "_postman_id": "e22e2bc3-0147-4151-9872-e9f6bda04a9c", + "name": "Kucoin REST API", + "description": "For the complete API documentation, please refer to https://www.kucoin.com/docs-new", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" + }, + "item": [ + { + "name": "Account Info", + "item": [ + { + "name": "Account & Funding", + "item": [ + { + "name": "Get Account Summary Info", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v2", + "user-info" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470119)\n\n:::info[Description]\nThis endpoint can be used to obtain account summary information.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| level | integer | User VIP level
|\n| subQuantity | integer | Number of sub-accounts |\n| spotSubQuantity | integer | Number of sub-accounts with spot trading permissions enabled |\n| marginSubQuantity | integer | Number of sub-accounts with margin trading permissions enabled |\n| futuresSubQuantity | integer | Number of sub-accounts with futures trading permissions enabled |\n| optionSubQuantity | integer | Number of sub-accounts with option trading permissions enabled |\n| maxSubQuantity | integer | Max number of sub-accounts = maxDefaultSubQuantity + maxSpotSubQuantity |\n| maxDefaultSubQuantity | integer | Max number of default open sub-accounts (according to VIP level) |\n| maxSpotSubQuantity | integer | Max number of sub-accounts with additional Spot trading permissions |\n| maxMarginSubQuantity | integer | Max number of sub-accounts with additional margin trading permissions |\n| maxFuturesSubQuantity | integer | Max number of sub-accounts with additional futures trading permissions |\n| maxOptionSubQuantity | integer | Max number of sub-accounts with additional Option trading permissions |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v2", + "user-info" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"level\": 0,\n \"subQuantity\": 3,\n \"spotSubQuantity\": 3,\n \"marginSubQuantity\": 2,\n \"futuresSubQuantity\": 2,\n \"optionSubQuantity\": 0,\n \"maxSubQuantity\": 5,\n \"maxDefaultSubQuantity\": 5,\n \"maxSpotSubQuantity\": 0,\n \"maxMarginSubQuantity\": 0,\n \"maxFuturesSubQuantity\": 0,\n \"maxOptionSubQuantity\": 0\n }\n}" + } + ] + }, + { + "name": "Get Account Type - Spot ", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "accounts", + "opened" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470120)\n\n:::info[Description]\nThis interface determines whether the current user is a spot high-frequency user or a spot low-frequency user.\n:::\n\n:::tip[Tips]\nThis interface is a compatibility interface left over from the old version upgrade. Only some old users need to use it (high frequency will be opened before 2024 and trade_hf has been used). Most user do not need to use this interface. When the return is true, you need to use trade_hf to transfer assets and query assets When the return is false, you need to use trade to transfer assets and query assets.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | boolean | Spot account type. True means the current user is a high-frequency spot user, False means the current user is a low-frequency spot user |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "accounts", + "opened" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": false\n}" + } + ] + }, + { + "name": "Get Account Ledgers - Spot/Margin", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "accounts", + "ledgers" + ], + "query": [ + { + "key": "currency", + "value": "BTC", + "description": "Currency ( you can choose more than one currency). You can specify 10 currencies at most for one time. If not specified, all currencies will be inquired by default." + }, + { + "key": "direction", + "value": "in", + "description": "direction: in, out" + }, + { + "key": "bizType", + "value": "TRANSFER", + "description": "Type: DEPOSIT -deposit, WITHDRAW -withdraw, TRANSFER -transfer, SUB_TRANSFER -subaccount transfer,TRADE_EXCHANGE -trade, MARGIN_EXCHANGE -margin trade, KUCOIN_BONUS -bonus, BROKER_TRANSFER -Broker transfer record" + }, + { + "key": "startAt", + "value": "1728663338000", + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": "1728692138000", + "description": "End time (milisecond)" + }, + { + "key": "currentPage", + "value": "1", + "description": "Current request page." + }, + { + "key": "pageSize", + "value": "50", + "description": "Number of results per request. Minimum is 10, maximum is 500." + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470121)\n\n:::info[Description]\nThis interface is for transaction records from all types of your accounts, supporting inquiry of various currencies. Items are paginated and sorted to show the latest first. See the Pagination section for retrieving additional entries after the first page.\n:::\n\n:::tip[Tips]\nthe start and end time range cannot exceed 24 hours. An error will occur if the specified time window exceeds the range. If you specify the end time only, the system will automatically calculate the start time as end time minus 24 hours, and vice versa.\n:::\n\n:::tip[Tips]\nSupport to obtain 1 year historical data, if need to obtain longer historical data, please submit a ticket: https://kucoin.zendesk.com/hc/en-us/requests/new\n:::\n\n**context**\n\nIf the returned value under bizType is โ€œtrade exchangeโ€, the additional info. (such as order ID and trade ID, trading pair, etc.) of the trade will be returned in field context.\n\n**BizType Description**\n\n| Field | Description |\n| ------ | ---------- |\n| Assets Transferred in After Upgrading | Assets Transferred in After V1 to V2 Upgrading |\n| Deposit | Deposit |\n| Withdrawal | Withdrawal |\n| Transfer | Transfer |\n| Trade_Exchange | Trade |\n| Vote for Coin | Vote for Coin |\n| KuCoin Bonus | KuCoin Bonus |\n| Referral Bonus | Referral Bonus |\n| Rewards | Activities Rewards |\n| Distribution | Distribution, such as get GAS by holding NEO |\n| Airdrop/Fork | Airdrop/Fork |\n| Other rewards | Other rewards, except Vote, Airdrop, Fork |\n| Fee Rebate | Fee Rebate |\n| Buy Crypto | Use credit card to buy crypto |\n| Sell Crypto | Use credit card to sell crypto |\n| Public Offering Purchase | Public Offering Purchase for Spotlight |\n| Send red envelope | Send red envelope |\n| Open red envelope | Open red envelope |\n| Staking | Staking |\n| LockDrop Vesting | LockDrop Vesting |\n| Staking Profits | Staking Profits |\n| Redemption | Redemption |\n| Refunded Fees | Refunded Fees |\n| KCS Pay Fees | KCS Pay Fees |\n| Margin Trade | Margin Trade |\n| Loans | Loans |\n| Borrowings | Borrowings |\n| Debt Repayment | Debt Repayment |\n| Loans Repaid | Loans Repaid |\n| Lendings | Lendings |\n| Pool transactions | Pool-X transactions |\n| Instant Exchange | Instant Exchange |\n| Sub Account Transfer | Sub-account transfer |\n| Liquidation Fees | Liquidation Fees |\n| Soft Staking Profits | Soft Staking Profits |\n| Voting Earnings | Voting Earnings on Pool-X |\n| Redemption of Voting | Redemption of Voting on Pool-X |\n| Convert to KCS | Convert to KCS |\n| BROKER_TRANSFER | Broker transfer record |\n\n\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currentPage | integer | current page |\n| pageSize | integer | page size |\n| totalNum | integer | total number |\n| totalPage | integer | total page |\n| items | array | Refer to the schema section of items |\n\n**root.data.items Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | unique id |\n| currency | string | The currency of an account |\n| amount | string | The total amount of assets (fees included) involved in assets changes such as transaction, withdrawal and bonus distribution. |\n| fee | string | Fees generated in transaction, withdrawal, etc. |\n| balance | string | Remaining funds after the transaction. |\n| accountType | string | The account type of the master user: MAIN, TRADE, MARGIN or CONTRACT. |\n| bizType | string | Business type leading to the changes in funds, such as exchange, withdrawal, deposit, KUCOIN_BONUS, REFERRAL_BONUS, Lendings etc. |\n| direction | string | Side, out or in |\n| createdAt | integer | Time of the event |\n| context | string | Business related information such as order ID, serial No., etc. |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "accounts", + "ledgers" + ], + "query": [ + { + "key": "currency", + "value": "BTC", + "description": "Currency ( you can choose more than one currency). You can specify 10 currencies at most for one time. If not specified, all currencies will be inquired by default." + }, + { + "key": "direction", + "value": "in", + "description": "direction: in, out" + }, + { + "key": "bizType", + "value": "TRANSFER", + "description": "Type: DEPOSIT -deposit, WITHDRAW -withdraw, TRANSFER -transfer, SUB_TRANSFER -subaccount transfer,TRADE_EXCHANGE -trade, MARGIN_EXCHANGE -margin trade, KUCOIN_BONUS -bonus, BROKER_TRANSFER -Broker transfer record" + }, + { + "key": "startAt", + "value": "1728663338000", + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": "1728692138000", + "description": "End time (milisecond)" + }, + { + "key": "currentPage", + "value": "1", + "description": "Current request page." + }, + { + "key": "pageSize", + "value": "50", + "description": "Number of results per request. Minimum is 10, maximum is 500." + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"currentPage\": 1,\n \"pageSize\": 50,\n \"totalNum\": 1,\n \"totalPage\": 1,\n \"items\": [\n {\n \"id\": \"265329987780896\",\n \"currency\": \"USDT\",\n \"amount\": \"0.01\",\n \"fee\": \"0\",\n \"balance\": \"0\",\n \"accountType\": \"TRADE\",\n \"bizType\": \"SUB_TRANSFER\",\n \"direction\": \"out\",\n \"createdAt\": 1728658481484,\n \"context\": \"\"\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Get Account Ledgers - Trade_hf", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "accounts", + "ledgers" + ], + "query": [ + { + "key": "currency", + "value": "BTC", + "description": "Currency ( you can choose more than one currency). You can specify 10 currencies at most for one time. If not specified, all currencies will be inquired by default." + }, + { + "key": "direction", + "value": "in", + "description": "direction: in, out" + }, + { + "key": "bizType", + "value": "TRANSFER", + "description": "Transaction type: TRANSFER-transfer funds,TRADE_EXCHANGE-Trade" + }, + { + "key": "lastId", + "value": "254062248624417", + "description": "The id of the last set of data from the previous batch of data. By default, the latest information is given." + }, + { + "key": "limit", + "value": "100", + "description": "Default100๏ผŒMax200" + }, + { + "key": "startAt", + "value": "1728663338000", + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": "1728692138000", + "description": "End time (milisecond)" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470122)\n\n:::info[Description]\nThis API endpoint returns all transfer (in and out) records in high-frequency trading account and supports multi-coin queries. The query results are sorted in descending order by createdAt and id.\n:::\n\n\n\n:::tip[Tips]\nIf lastId is configured, the information obtained < lastId. Otherwise, it will go back to the latest information.\n\nYou can only obtain data from within a 3 _ 24 hour time range (i.e., from 3 _ 24 hours ago up to now) If you specify a time range that exceeds this limit, the system will default to data from within 3 * 24 hours.\n:::\n\n**context**\n\nIf the bizType is TRADE_EXCHANGE, the context field will include additional transaction information (order id, transaction id, and trading pair).\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | Unique id |\n| currency | string | currency |\n| amount | string | Change in funds balance |\n| fee | string | Deposit or withdrawal fee |\n| tax | string | |\n| balance | string | Total balance of funds after change |\n| accountType | string | Master account type TRADE_HF |\n| bizType | string | Trnasaction type๏ผŒsuch as TRANSFER, TRADE_EXCHANGE, etc. |\n| direction | string | Direction of transfer( out or in) |\n| createdAt | string | Created time |\n| context | string | Core transaction parameter |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "accounts", + "ledgers" + ], + "query": [ + { + "key": "currency", + "value": "BTC", + "description": "Currency ( you can choose more than one currency). You can specify 10 currencies at most for one time. If not specified, all currencies will be inquired by default." + }, + { + "key": "direction", + "value": "in", + "description": "direction: in, out" + }, + { + "key": "bizType", + "value": "TRANSFER", + "description": "Transaction type: TRANSFER-transfer funds,TRADE_EXCHANGE-Trade" + }, + { + "key": "lastId", + "value": "254062248624417", + "description": "The id of the last set of data from the previous batch of data. By default, the latest information is given." + }, + { + "key": "limit", + "value": "100", + "description": "Default100๏ผŒMax200" + }, + { + "key": "startAt", + "value": "1728663338000", + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": "1728692138000", + "description": "End time (milisecond)" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"id\": \"254062248624417\",\n \"currency\": \"USDT\",\n \"amount\": \"1.59760080\",\n \"fee\": \"0.00159920\",\n \"tax\": \"0\",\n \"balance\": \"26.73759503\",\n \"accountType\": \"TRADE_HF\",\n \"bizType\": \"TRADE_EXCHANGE\",\n \"direction\": \"in\",\n \"createdAt\": \"1728443957539\",\n \"context\": \"{\\\"symbol\\\":\\\"KCS-USDT\\\",\\\"orderId\\\":\\\"6705f6350dc7210007d6a36d\\\",\\\"tradeId\\\":\\\"10046097631627265\\\"}\"\n }\n ]\n}" + } + ] + }, + { + "name": "Get Account Ledgers - Margin_hf", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "hf", + "margin", + "account", + "ledgers" + ], + "query": [ + { + "key": "currency", + "value": "BTC", + "description": "currency, optional๏ผŒcan select more than one๏ผŒseparate with commas๏ผŒselect no more than 10 currencys๏ผŒthe default will be to query for all currencys if left empty" + }, + { + "key": "direction", + "value": "in", + "description": "direction: in, out" + }, + { + "key": "bizType", + "value": "TRANSFER", + "description": "Transaction type: TRANSFER- transfer funds, MARGIN_EXCHANGE - cross margin trade, ISOLATED_EXCHANGE - isolated margin trade, LIQUIDATION - liquidation, ASSERT_RETURN - forced liquidation asset return" + }, + { + "key": "lastId", + "value": "254062248624417", + "description": "The id of the last set of data from the previous batch of data. By default, the latest information is given." + }, + { + "key": "limit", + "value": "100", + "description": "Default100๏ผŒMax200" + }, + { + "key": "startAt", + "value": "1728663338000", + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": "1728692138000", + "description": "End time (milisecond)" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470123)\n\n:::info[Description]\nThis API endpoint returns all transfer (in and out) records in high-frequency margin trading account and supports multi-coin queries. The query results are sorted in descending order by createdAt and id.\n:::\n\n\n:::tip[Tips]\nIf lastId is configured, the information obtained < lastId. Otherwise, it will go back to the latest information.\n\nYou can only obtain data from within a 3 _ 24 hour time range (i.e., from 3 _ 24 hours ago up to now) If you specify a time range that exceeds this limit, the system will default to data from within 3 * 24 hours.\n\nIf bizType is MARGIN_EXCHANGE or ISOLATED_EXCHANGE, the context field will contain additional information about the transaction (order id, transaction id, transaction pair).\n:::\n\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | integer | |\n| currency | string | currency |\n| amount | string | Change in funds balance |\n| fee | string | Deposit or withdrawal fee |\n| balance | string | Total balance of funds after change |\n| accountType | string | Master account type TRADE_HF |\n| bizType | string | Trnasaction type๏ผŒsuch as TRANSFER, TRADE_EXCHANGE, etc. |\n| direction | string | Direction of transfer( out or in) |\n| createdAt | integer | Ledger creation time |\n| context | string | Core transaction parameter |\n| tax | string | |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "hf", + "margin", + "account", + "ledgers" + ], + "query": [ + { + "key": "currency", + "value": "BTC", + "description": "currency, optional๏ผŒcan select more than one๏ผŒseparate with commas๏ผŒselect no more than 10 currencys๏ผŒthe default will be to query for all currencys if left empty" + }, + { + "key": "direction", + "value": "in", + "description": "direction: in, out" + }, + { + "key": "bizType", + "value": "TRANSFER", + "description": "Transaction type: TRANSFER- transfer funds, MARGIN_EXCHANGE - cross margin trade, ISOLATED_EXCHANGE - isolated margin trade, LIQUIDATION - liquidation, ASSERT_RETURN - forced liquidation asset return" + }, + { + "key": "lastId", + "value": "254062248624417", + "description": "The id of the last set of data from the previous batch of data. By default, the latest information is given." + }, + { + "key": "limit", + "value": "100", + "description": "Default100๏ผŒMax200" + }, + { + "key": "startAt", + "value": "1728663338000", + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": "1728692138000", + "description": "End time (milisecond)" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"id\": 1949641706720,\n \"currency\": \"USDT\",\n \"amount\": \"0.01000000\",\n \"fee\": \"0.00000000\",\n \"balance\": \"0.01000000\",\n \"accountType\": \"MARGIN_V2\",\n \"bizType\": \"TRANSFER\",\n \"direction\": \"in\",\n \"createdAt\": 1728664091208,\n \"context\": \"{}\",\n \"tax\": \"0.00000000\"\n }\n ]\n}" + } + ] + }, + { + "name": "Get Account Ledgers - Futures", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "transaction-history" + ], + "query": [ + { + "key": "currency", + "value": "XBT", + "description": "Currency of transaction history, XBT or USDT" + }, + { + "key": "type", + "value": "Transferin", + "description": "Type RealisedPNL-Realised profit and loss, Deposit-Deposit, Withdrawal-withdraw, Transferin-Transfer in, TransferOut-Transfer out" + }, + { + "key": "offset", + "value": "254062248624417", + "description": "Start offset. Generally, the only attribute of the last returned result of the previous request is used, and the first page is returned by default" + }, + { + "key": "forward", + "value": "false", + "description": "This parameter functions to judge whether the lookup is forward or not. True means โ€œyesโ€ and False means โ€œnoโ€. This parameter is set as true by default" + }, + { + "key": "maxCount", + "value": "50", + "description": "Displayed size per page. The default size is 50" + }, + { + "key": "startAt", + "value": "1728663338000", + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": "1728692138000", + "description": "End time (milisecond)" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470124)\n\n:::info[Description]\nThis interface can query the ledger records of the futures business line\n:::\n\n\n\n:::tip[Tips]\nIf there are open positions, the status of the first page returned will be Pending, indicating the realised profit and loss in the current 8-hour settlement period. Please specify the minimum offset number of the current page into the offset field to turn the page.\n:::\n\n:::tip[Tips]\nSupplementary instructions for startAt and endAt: startAt must be less than endAt; and the interval cannot exceed 1 day; only one field is allowed, and if only one field is passed, another field will be automatically added or subtracted by the system 1 day to complete\n:::\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| dataList | array | Refer to the schema section of dataList |\n| hasMore | boolean | Is it the last page. If it is false, it means it is the last page, and if it is true, it means need to turn the page. |\n\n**root.data.dataList Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| time | integer | ledger time |\n| type | string | Type: RealisedPNL, Deposit, Withdrawal, TransferIn, TransferOut |\n| amount | number | Transaction amount |\n| fee | number | Fee |\n| accountEquity | number | Account equity |\n| status | string | Status: Completed, Pending |\n| remark | string | Ticker symbol of the contract |\n| offset | integer | Offset |\n| currency | string | Currency |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "transaction-history" + ], + "query": [ + { + "key": "currency", + "value": "XBT", + "description": "Currency of transaction history, XBT or USDT" + }, + { + "key": "type", + "value": "Transferin", + "description": "Type RealisedPNL-Realised profit and loss, Deposit-Deposit, Withdrawal-withdraw, Transferin-Transfer in, TransferOut-Transfer out" + }, + { + "key": "offset", + "value": "254062248624417", + "description": "Start offset. Generally, the only attribute of the last returned result of the previous request is used, and the first page is returned by default" + }, + { + "key": "forward", + "value": "false", + "description": "This parameter functions to judge whether the lookup is forward or not. True means โ€œyesโ€ and False means โ€œnoโ€. This parameter is set as true by default" + }, + { + "key": "maxCount", + "value": "50", + "description": "Displayed size per page. The default size is 50" + }, + { + "key": "startAt", + "value": "1728663338000", + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": "1728692138000", + "description": "End time (milisecond)" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"dataList\": [\n {\n \"time\": 1728665747000,\n \"type\": \"TransferIn\",\n \"amount\": 0.01,\n \"fee\": 0.0,\n \"accountEquity\": 14.02924938,\n \"status\": \"Completed\",\n \"remark\": \"Transferred from High-Frequency Trading Account\",\n \"offset\": 51360793,\n \"currency\": \"USDT\"\n },\n {\n \"time\": 1728648000000,\n \"type\": \"RealisedPNL\",\n \"amount\": 0.00630042,\n \"fee\": 0.0,\n \"accountEquity\": 20.0,\n \"status\": \"Completed\",\n \"remark\": \"XBTUSDTM\",\n \"offset\": 51352430,\n \"currency\": \"USDT\"\n }\n ],\n \"hasMore\": false\n }\n}" + } + ] + }, + { + "name": "Get Account List - Spot", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "accounts" + ], + "query": [ + { + "key": "currency", + "value": "USDT", + "description": "currency" + }, + { + "key": "type", + "value": "main", + "description": "Account type mainใ€trade" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470125)\n\n:::info[Description]\nGet a list of accounts. Please Deposit to the main account firstly, then transfer the funds to the trade account via Inner Transfer before transaction.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | Account ID |\n| currency | string | Currency |\n| type | string | Account type:๏ผŒmainใ€tradeใ€isolated(abandon)ใ€margin(abandon)
|\n| balance | string | Total funds in the account |\n| available | string | Funds available to withdraw or trade |\n| holds | string | Funds on hold (not available for use) |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "accounts" + ], + "query": [ + { + "key": "currency", + "value": "USDT", + "description": "currency" + }, + { + "key": "type", + "value": "main", + "description": "Account type mainใ€trade" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"id\": \"548674591753\",\n \"currency\": \"USDT\",\n \"type\": \"trade\",\n \"balance\": \"26.66759503\",\n \"available\": \"26.66759503\",\n \"holds\": \"0\"\n },\n {\n \"id\": \"63355cd156298d0001b66e61\",\n \"currency\": \"USDT\",\n \"type\": \"main\",\n \"balance\": \"0.01\",\n \"available\": \"0.01\",\n \"holds\": \"0\"\n }\n ]\n}" + } + ] + }, + { + "name": "Get Account Detail - Spot", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "accounts", + "{{accountId}}" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470126)\n\n:::info[Description]\nget Information for a single spot account. Use this endpoint when you know the accountId.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | The currency of the account |\n| balance | string | Total funds in the account |\n| available | string | Funds available to withdraw or trade |\n| holds | string | Funds on hold (not available for use) |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "accounts", + "{{accountId}}" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"currency\": \"USDT\",\n \"balance\": \"26.66759503\",\n \"available\": \"26.66759503\",\n \"holds\": \"0\"\n }\n}" + } + ] + }, + { + "name": "Get Account - Cross Margin", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "margin", + "accounts" + ], + "query": [ + { + "key": "quoteCurrency", + "value": "USDT", + "description": "quote currency, currently only supports USDT, KCS, BTC, USDT as default" + }, + { + "key": "queryType", + "value": "MARGIN", + "description": "Query account type (default MARGIN), MARGIN - only query low frequency cross margin account, MARGIN_V2-only query high frequency cross margin account, ALL - consistent aggregate query with the web side" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470127)\n\n:::info[Description]\nRequest via this endpoint to get the info of the cross margin account.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| totalAssetOfQuoteCurrency | string | Total Assets in Quote Currency |\n| totalLiabilityOfQuoteCurrency | string | Total Liability in Quote Currency |\n| debtRatio | string | debt ratio |\n| status | string | Position status; EFFECTIVE-effective, BANKRUPTCY-bankruptcy liquidation, LIQUIDATION-closing, REPAY-repayment, BORROW borrowing |\n| accounts | array | Refer to the schema section of accounts |\n\n**root.data.accounts Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | currency |\n| total | string | Total Assets |\n| available | string | Account available assets (total assets - frozen) |\n| hold | string | Account frozen assets |\n| liability | string | Liabilities |\n| maxBorrowSize | string | The user's remaining maximum loan amount |\n| borrowEnabled | boolean | Support borrow or not |\n| transferInEnabled | boolean | Support transfer or not |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "margin", + "accounts" + ], + "query": [ + { + "key": "quoteCurrency", + "value": "USDT", + "description": "quote currency, currently only supports USDT, KCS, BTC, USDT as default" + }, + { + "key": "queryType", + "value": "MARGIN", + "description": "Query account type (default MARGIN), MARGIN - only query low frequency cross margin account, MARGIN_V2-only query high frequency cross margin account, ALL - consistent aggregate query with the web side" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"totalAssetOfQuoteCurrency\": \"0.02\",\n \"totalLiabilityOfQuoteCurrency\": \"0\",\n \"debtRatio\": \"0\",\n \"status\": \"EFFECTIVE\",\n \"accounts\": [\n {\n \"currency\": \"USDT\",\n \"total\": \"0.02\",\n \"available\": \"0.02\",\n \"hold\": \"0\",\n \"liability\": \"0\",\n \"maxBorrowSize\": \"0\",\n \"borrowEnabled\": true,\n \"transferInEnabled\": true\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Get Account - Isolated Margin", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "isolated", + "accounts" + ], + "query": [ + { + "key": "symbol", + "value": null, + "description": "For isolated trading pairs, query all without passing" + }, + { + "key": "quoteCurrency", + "value": "USDT", + "description": "quote currency, currently only supports USDT, KCS, BTC, USDT as default" + }, + { + "key": "queryType", + "value": "ISOLATED", + "description": "Query account type (default ISOLATED), ISOLATED- - only query low frequency isolated margin account, ISOLATED_V2-only query high frequency isolated margin account, ALL - consistent aggregate query with the web side" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470128)\n\n:::info[Description]\nRequest via this endpoint to get the info of the isolated margin account.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| totalAssetOfQuoteCurrency | string | Total Assets in Quote Currency |\n| totalLiabilityOfQuoteCurrency | string | Total Liability in Quote Currency |\n| timestamp | integer | timestamp |\n| assets | array | Refer to the schema section of assets |\n\n**root.data.assets Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | Symbol |\n| status | string | Position status; EFFECTIVE-effective, BANKRUPTCY-bankruptcy liquidation, LIQUIDATION-closing, REPAY-repayment, BORROW borrowing |\n| debtRatio | string | debt ratio |\n| baseAsset | object | Refer to the schema section of baseAsset |\n| quoteAsset | object | Refer to the schema section of quoteAsset |\n\n**root.data.assets.baseAsset Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | currency |\n| borrowEnabled | boolean | Support borrow or not |\n| transferInEnabled | boolean | Support transfer or not |\n| liability | string | Liabilities |\n| total | string | Total Assets |\n| available | string | Account available assets (total assets - frozen) |\n| hold | string | Account frozen assets |\n| maxBorrowSize | string | The user's remaining maximum loan amount |\n\n**root.data.assets.baseAsset.quoteAsset Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | currency |\n| borrowEnabled | boolean | Support borrow or not |\n| transferInEnabled | boolean | Support transfer or not |\n| liability | string | Liabilities |\n| total | string | Total Assets |\n| available | string | Account available assets (total assets - frozen) |\n| hold | string | Account frozen assets |\n| maxBorrowSize | string | The user's remaining maximum loan amount |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "isolated", + "accounts" + ], + "query": [ + { + "key": "symbol", + "value": null, + "description": "For isolated trading pairs, query all without passing" + }, + { + "key": "quoteCurrency", + "value": "USDT", + "description": "quote currency, currently only supports USDT, KCS, BTC, USDT as default" + }, + { + "key": "queryType", + "value": "ISOLATED", + "description": "Query account type (default ISOLATED), ISOLATED- - only query low frequency isolated margin account, ISOLATED_V2-only query high frequency isolated margin account, ALL - consistent aggregate query with the web side" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"totalAssetOfQuoteCurrency\": \"0.01\",\n \"totalLiabilityOfQuoteCurrency\": \"0\",\n \"timestamp\": 1728725465994,\n \"assets\": [\n {\n \"symbol\": \"BTC-USDT\",\n \"status\": \"EFFECTIVE\",\n \"debtRatio\": \"0\",\n \"baseAsset\": {\n \"currency\": \"BTC\",\n \"borrowEnabled\": true,\n \"transferInEnabled\": true,\n \"liability\": \"0\",\n \"total\": \"0\",\n \"available\": \"0\",\n \"hold\": \"0\",\n \"maxBorrowSize\": \"0\"\n },\n \"quoteAsset\": {\n \"currency\": \"USDT\",\n \"borrowEnabled\": true,\n \"transferInEnabled\": true,\n \"liability\": \"0\",\n \"total\": \"0.01\",\n \"available\": \"0.01\",\n \"hold\": \"0\",\n \"maxBorrowSize\": \"0\"\n }\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Get Account - Futures", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "account-overview" + ], + "query": [ + { + "key": "currency", + "value": "", + "description": "Currecny, Default XBT" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470129)\n\n:::info[Description]\nRequest via this endpoint to get the info of the futures account.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| accountEquity | number | Account equity = marginBalance + Unrealised PNL |\n| unrealisedPNL | number | Unrealised profit and loss |\n| marginBalance | number | Margin balance = positionMargin + orderMargin + frozenFunds + availableBalance - unrealisedPNL |\n| positionMargin | number | Position margin |\n| orderMargin | number | Order margin |\n| frozenFunds | number | Frozen funds for out-transfer |\n| availableBalance | number | Available balance |\n| currency | string | Currency |\n| riskRatio | number | Cross margin risk rate |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "account-overview" + ], + "query": [ + { + "key": "currency", + "value": "", + "description": "Currecny, Default XBT" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"currency\": \"USDT\",\n \"accountEquity\": 48.921913718,\n \"unrealisedPNL\": 1.59475,\n \"marginBalance\": 47.548728628,\n \"positionMargin\": 34.1577964733,\n \"orderMargin\": 0,\n \"frozenFunds\": 0,\n \"availableBalance\": 14.7876172447,\n \"riskRatio\": 0.0090285199\n }\n}" + } + ] + }, + { + "name": "Get Apikey Info", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "user", + "api-key" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470130)\n\n:::info[Description]\nGet the information of the api key. Use the api key pending to be checked to call the endpoint. Both master and sub user's api key are applicable.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| remark | string | Remarks |\n| apiKey | string | Apikey |\n| apiVersion | integer | API Version |\n| permission | string | [Permissions](https://www.kucoin.com/docs-new/api-338144), possible values: General, Spot, Margin, Futures, InnerTransfer, Transfer, Earn |\n| ipWhitelist | string | IP whitelist

|\n| createdAt | integer | Apikey create time |\n| uid | integer | Account UID |\n| isMaster | boolean | Whether it is the master account. |\n| subName | string | Sub Name, There is no such param for the master account |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "user", + "api-key" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"remark\": \"account1\",\n \"apiKey\": \"6705f5c311545b000157d3eb\",\n \"apiVersion\": 3,\n \"permission\": \"General,Futures,Spot,Earn,InnerTransfer,Transfer,Margin\",\n \"ipWhitelist\": \"203.**.154,103.**.34\",\n \"createdAt\": 1728443843000,\n \"uid\": 165111215,\n \"isMaster\": true\n }\n}" + } + ] + } + ], + "description": "" + }, + { + "name": "Sub Account", + "item": [ + { + "name": "Get SubAccount List - Summary Info", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v2", + "sub", + "user" + ], + "query": [ + { + "key": "currentPage", + "value": "1", + "description": "Current request page. Default is 1" + }, + { + "key": "pageSize", + "value": "10", + "description": "Number of results per request. Minimum is 1, maximum is 100, default is 10." + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470131)\n\n:::info[Description]\nThis endpoint can be used to get a paginated list of sub-accounts. Pagination is required.\n:::\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currentPage | integer | Current request page |\n| pageSize | integer | Number of results per request. Minimum is 1, maximum is 100 |\n| totalNum | integer | Total number of messages |\n| totalPage | integer | Total number of page |\n| items | array | Refer to the schema section of items |\n\n**root.data.items Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| userId | string | Sub-account User Id |\n| uid | integer | Sub-account UID |\n| subName | string | Sub-account name |\n| status | integer | Sub-account; 2:Enable, 3:Frozen |\n| type | integer | Sub-account type |\n| access | string | Sub-account Permission |\n| createdAt | integer | Time of the event |\n| remarks | string | Remarks |\n| tradeTypes | array | Refer to the schema section of tradeTypes |\n| openedTradeTypes | array | Refer to the schema section of openedTradeTypes |\n| hostedStatus | string | |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v2", + "sub", + "user" + ], + "query": [ + { + "key": "currentPage", + "value": "1", + "description": "Current request page. Default is 1" + }, + { + "key": "pageSize", + "value": "10", + "description": "Number of results per request. Minimum is 1, maximum is 100, default is 10." + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"currentPage\": 1,\n \"pageSize\": 10,\n \"totalNum\": 1,\n \"totalPage\": 1,\n \"items\": [\n {\n \"userId\": \"63743f07e0c5230001761d08\",\n \"uid\": 169579801,\n \"subName\": \"testapi6\",\n \"status\": 2,\n \"type\": 0,\n \"access\": \"All\",\n \"createdAt\": 1668562696000,\n \"remarks\": \"remarks\",\n \"tradeTypes\": [\n \"Spot\",\n \"Futures\",\n \"Margin\"\n ],\n \"openedTradeTypes\": [\n \"Spot\"\n ],\n \"hostedStatus\": null\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Get SubAccount Detail - Balance", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "sub-accounts", + "{{subUserId}}" + ], + "query": [ + { + "key": "includeBaseAmount", + "value": "false", + "description": "false: do not display the currency which asset is 0, true: display all currency" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470132)\n\n:::info[Description]\nThis endpoint returns the account info of a sub-user specified by the subUserId.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| subUserId | string | The user ID of a sub-user. |\n| subName | string | The username of a sub-user. |\n| mainAccounts | array | Refer to the schema section of mainAccounts |\n| tradeAccounts | array | Refer to the schema section of tradeAccounts |\n| marginAccounts | array | Refer to the schema section of marginAccounts |\n| tradeHFAccounts | array | Refer to the schema section of tradeHFAccounts |\n\n**root.data.mainAccounts Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | Currency |\n| balance | string | Total funds in an account. |\n| available | string | Funds available to withdraw or trade. |\n| holds | string | Funds on hold (not available for use). |\n| baseCurrency | string | Calculated on this currency. |\n| baseCurrencyPrice | string | The base currency price. |\n| baseAmount | string | The base currency amount. |\n| tag | string | |\n\n**root.data.mainAccounts.tradeAccounts Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | Currency |\n| balance | string | Total funds in an account. |\n| available | string | Funds available to withdraw or trade. |\n| holds | string | Funds on hold (not available for use). |\n| baseCurrency | string | Calculated on this currency. |\n| baseCurrencyPrice | string | The base currency price. |\n| baseAmount | string | The base currency amount. |\n| tag | string | |\n\n**root.data.mainAccounts.tradeAccounts.marginAccounts Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | Currency |\n| balance | string | Total funds in an account. |\n| available | string | Funds available to withdraw or trade. |\n| holds | string | Funds on hold (not available for use). |\n| baseCurrency | string | Calculated on this currency. |\n| baseCurrencyPrice | string | The base currency price. |\n| baseAmount | string | The base currency amount. |\n| tag | string | |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "sub-accounts", + "{{subUserId}}" + ], + "query": [ + { + "key": "includeBaseAmount", + "value": "false", + "description": "false: do not display the currency which asset is 0, true: display all currency" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"subUserId\": \"63743f07e0c5230001761d08\",\n \"subName\": \"testapi6\",\n \"mainAccounts\": [\n {\n \"currency\": \"USDT\",\n \"balance\": \"0.01\",\n \"available\": \"0.01\",\n \"holds\": \"0\",\n \"baseCurrency\": \"BTC\",\n \"baseCurrencyPrice\": \"62384.3\",\n \"baseAmount\": \"0.00000016\",\n \"tag\": \"DEFAULT\"\n }\n ],\n \"tradeAccounts\": [\n {\n \"currency\": \"USDT\",\n \"balance\": \"0.01\",\n \"available\": \"0.01\",\n \"holds\": \"0\",\n \"baseCurrency\": \"BTC\",\n \"baseCurrencyPrice\": \"62384.3\",\n \"baseAmount\": \"0.00000016\",\n \"tag\": \"DEFAULT\"\n }\n ],\n \"marginAccounts\": [\n {\n \"currency\": \"USDT\",\n \"balance\": \"0.01\",\n \"available\": \"0.01\",\n \"holds\": \"0\",\n \"baseCurrency\": \"BTC\",\n \"baseCurrencyPrice\": \"62384.3\",\n \"baseAmount\": \"0.00000016\",\n \"tag\": \"DEFAULT\"\n }\n ],\n \"tradeHFAccounts\": []\n }\n}" + } + ] + }, + { + "name": "Get SubAccount List - Spot Balance(V2)", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v2", + "sub-accounts" + ], + "query": [ + { + "key": "currentPage", + "value": "1", + "description": "Current request page. Default is 1" + }, + { + "key": "pageSize", + "value": "10", + "description": "Number of results per request. Minimum is 10, maximum is 100, default is 10.\n" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470133)\n\n:::info[Description]\nThis endpoint can be used to get paginated Spot sub-account information. Pagination is required.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currentPage | integer | |\n| pageSize | integer | |\n| totalNum | integer | |\n| totalPage | integer | |\n| items | array | Refer to the schema section of items |\n\n**root.data.items Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| subUserId | string | The user ID of the sub-user. |\n| subName | string | The username of the sub-user. |\n| mainAccounts | array | Refer to the schema section of mainAccounts |\n| tradeAccounts | array | Refer to the schema section of tradeAccounts |\n| marginAccounts | array | Refer to the schema section of marginAccounts |\n| tradeHFAccounts | array | Refer to the schema section of tradeHFAccounts |\n\n**root.data.items.mainAccounts Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | The currency of the account. |\n| balance | string | Total funds in the account. |\n| available | string | Funds available to withdraw or trade. |\n| holds | string | Funds on hold (not available for use). |\n| baseCurrency | string | Calculated on this currency. |\n| baseCurrencyPrice | string | The base currency price. |\n| baseAmount | string | The base currency amount. |\n| tag | string | |\n\n**root.data.items.mainAccounts.tradeAccounts Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | The currency of the account. |\n| balance | string | Total funds in the account. |\n| available | string | Funds available to withdraw or trade. |\n| holds | string | Funds on hold (not available for use). |\n| baseCurrency | string | Calculated on this currency. |\n| baseCurrencyPrice | string | The base currency price. |\n| baseAmount | string | The base currency amount. |\n| tag | string | |\n\n**root.data.items.mainAccounts.tradeAccounts.marginAccounts Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | The currency of the account. |\n| balance | string | Total funds in the account. |\n| available | string | Funds available to withdraw or trade. |\n| holds | string | Funds on hold (not available for use). |\n| baseCurrency | string | Calculated on this currency. |\n| baseCurrencyPrice | string | The base currency price. |\n| baseAmount | string | The base currency amount. |\n| tag | string | |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v2", + "sub-accounts" + ], + "query": [ + { + "key": "currentPage", + "value": "1", + "description": "Current request page. Default is 1" + }, + { + "key": "pageSize", + "value": "10", + "description": "Number of results per request. Minimum is 10, maximum is 100, default is 10.\n" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"currentPage\": 1,\n \"pageSize\": 10,\n \"totalNum\": 3,\n \"totalPage\": 1,\n \"items\": [\n {\n \"subUserId\": \"63743f07e0c5230001761d08\",\n \"subName\": \"testapi6\",\n \"mainAccounts\": [\n {\n \"currency\": \"USDT\",\n \"balance\": \"0.01\",\n \"available\": \"0.01\",\n \"holds\": \"0\",\n \"baseCurrency\": \"BTC\",\n \"baseCurrencyPrice\": \"62514.5\",\n \"baseAmount\": \"0.00000015\",\n \"tag\": \"DEFAULT\"\n }\n ],\n \"tradeAccounts\": [\n {\n \"currency\": \"USDT\",\n \"balance\": \"0.01\",\n \"available\": \"0.01\",\n \"holds\": \"0\",\n \"baseCurrency\": \"BTC\",\n \"baseCurrencyPrice\": \"62514.5\",\n \"baseAmount\": \"0.00000015\",\n \"tag\": \"DEFAULT\"\n }\n ],\n \"marginAccounts\": [\n {\n \"currency\": \"USDT\",\n \"balance\": \"0.01\",\n \"available\": \"0.01\",\n \"holds\": \"0\",\n \"baseCurrency\": \"BTC\",\n \"baseCurrencyPrice\": \"62514.5\",\n \"baseAmount\": \"0.00000015\",\n \"tag\": \"DEFAULT\"\n }\n ],\n \"tradeHFAccounts\": []\n },\n {\n \"subUserId\": \"670538a31037eb000115b076\",\n \"subName\": \"Name1234567\",\n \"mainAccounts\": [],\n \"tradeAccounts\": [],\n \"marginAccounts\": [],\n \"tradeHFAccounts\": []\n },\n {\n \"subUserId\": \"66b0c0905fc1480001c14c36\",\n \"subName\": \"LTkucoin1491\",\n \"mainAccounts\": [],\n \"tradeAccounts\": [],\n \"marginAccounts\": [],\n \"tradeHFAccounts\": []\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Get SubAccount List - Futures Balance(V2)", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "account-overview-all" + ], + "query": [ + { + "key": "currency", + "value": "USDT", + "description": "Currecny, Default XBT" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470134)\n\n:::info[Description]\nThis endpoint can be used to get Futures sub-account information. \n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| summary | object | Refer to the schema section of summary |\n| accounts | array | Refer to the schema section of accounts |\n\n**root.data.summary Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| accountEquityTotal | number | Total Account Equity |\n| unrealisedPNLTotal | number | Total unrealisedPNL |\n| marginBalanceTotal | number | Total Margin Balance |\n| positionMarginTotal | number | Total Position margin |\n| orderMarginTotal | number | |\n| frozenFundsTotal | number | Total frozen funds for withdrawal and out-transfer |\n| availableBalanceTotal | number | total available balance |\n| currency | string | |\n\n**root.data.summary.accounts Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| accountName | string | Account name, main account is main |\n| accountEquity | number | |\n| unrealisedPNL | number | |\n| marginBalance | number | |\n| positionMargin | number | |\n| orderMargin | number | |\n| frozenFunds | number | |\n| availableBalance | number | |\n| currency | string | currency |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "account-overview-all" + ], + "query": [ + { + "key": "currency", + "value": "USDT", + "description": "Currecny, Default XBT" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"summary\": {\n \"accountEquityTotal\": 103.899081508,\n \"unrealisedPNLTotal\": 38.81075,\n \"marginBalanceTotal\": 65.336985668,\n \"positionMarginTotal\": 68.9588320683,\n \"orderMarginTotal\": 0,\n \"frozenFundsTotal\": 0,\n \"availableBalanceTotal\": 67.2492494397,\n \"currency\": \"USDT\"\n },\n \"accounts\": [\n {\n \"accountName\": \"Name1234567\",\n \"accountEquity\": 0,\n \"unrealisedPNL\": 0,\n \"marginBalance\": 0,\n \"positionMargin\": 0,\n \"orderMargin\": 0,\n \"frozenFunds\": 0,\n \"availableBalance\": 0,\n \"currency\": \"USDT\"\n },\n {\n \"accountName\": \"LTkucoin1491\",\n \"accountEquity\": 0,\n \"unrealisedPNL\": 0,\n \"marginBalance\": 0,\n \"positionMargin\": 0,\n \"orderMargin\": 0,\n \"frozenFunds\": 0,\n \"availableBalance\": 0,\n \"currency\": \"USDT\"\n },\n {\n \"accountName\": \"manage112233\",\n \"accountEquity\": 0,\n \"unrealisedPNL\": 0,\n \"marginBalance\": 0,\n \"positionMargin\": 0,\n \"orderMargin\": 0,\n \"frozenFunds\": 0,\n \"availableBalance\": 0,\n \"currency\": \"USDT\"\n },\n {\n \"accountName\": \"testapi6\",\n \"accountEquity\": 27.30545128,\n \"unrealisedPNL\": 22.549,\n \"marginBalance\": 4.75645128,\n \"positionMargin\": 24.1223749975,\n \"orderMargin\": 0,\n \"frozenFunds\": 0,\n \"availableBalance\": 25.7320762825,\n \"currency\": \"USDT\"\n },\n {\n \"accountName\": \"main\",\n \"accountEquity\": 76.593630228,\n \"unrealisedPNL\": 16.26175,\n \"marginBalance\": 60.580534388,\n \"positionMargin\": 44.8364570708,\n \"orderMargin\": 0,\n \"frozenFunds\": 0,\n \"availableBalance\": 41.5171731572,\n \"currency\": \"USDT\"\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Add SubAccount", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v2", + "sub", + "user", + "created" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470135)\n\n:::info[Description]\nThis endpoint can be used to create sub-accounts.\n:::\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| password | string | Password(7-24 characters, must contain letters and numbers, cannot only contain numbers or include special characters) |\n| remarks | string | Remarks(1~24 characters) |\n| subName | string | Sub-account name(must contain 7-32 characters, at least one number and one letter. Cannot contain any spaces.) |\n| access | string | Permission (types include Spot, Futures, Margin permissions, which can be used alone or in combination). |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| uid | integer | Sub-account UID |\n| subName | string | Sub-account name |\n| remarks | string | Remarks |\n| access | string | Permission |\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"password\": \"1234567\",\n \"remarks\": \"TheRemark\",\n \"subName\": \"Name1234567\",\n \"access\": \"Spot\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v2", + "sub", + "user", + "created" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"currentPage\": 1,\n \"pageSize\": 10,\n \"totalNum\": 1,\n \"totalPage\": 1,\n \"items\": [\n {\n \"userId\": \"63743f07e0c5230001761d08\",\n \"uid\": 169579801,\n \"subName\": \"testapi6\",\n \"status\": 2,\n \"type\": 0,\n \"access\": \"All\",\n \"createdAt\": 1668562696000,\n \"remarks\": \"remarks\",\n \"tradeTypes\": [\n \"Spot\",\n \"Futures\",\n \"Margin\"\n ],\n \"openedTradeTypes\": [\n \"Spot\"\n ],\n \"hostedStatus\": null\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Add SubAccount Margin Permission", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "sub", + "user", + "margin", + "enable" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470331)\n\n:::info[Description]\nThis endpoint can be used to add sub-accounts Margin permission. Before using this endpoints, you need to ensure that the master account apikey has Margin permissions and the Margin function has been activated.\n:::\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| uid | string | Sub account UID |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | string | |\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"uid\": \"169579801\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "sub", + "user", + "margin", + "enable" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": null\n}" + } + ] + }, + { + "name": "Add SubAccount Futures Permission", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "sub", + "user", + "futures", + "enable" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470332)\n\n:::info[Description]\nThis endpoint can be used to add sub-accounts Futures permission. Before using this endpoints, you need to ensure that the master account apikey has Futures permissions and the Futures function has been activated.\n:::\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| uid | string | Sub account UID |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | boolean | |\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"uid\": \"169579801\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "sub", + "user", + "futures", + "enable" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": null\n}" + } + ] + } + ], + "description": "" + }, + { + "name": "Sub Account API", + "item": [ + { + "name": "Get SubAccount API List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "sub", + "api-key" + ], + "query": [ + { + "key": "apiKey", + "value": "", + "description": "API-Key" + }, + { + "key": "subName", + "value": "testapi6", + "description": "Sub-account name." + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470136)\n\n:::info[Description]\nThis endpoint can be used to obtain a list of APIs pertaining to a sub-account.(Not contain ND Broker Sub Account)\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| subName | string | Sub Name |\n| remark | string | Remarks |\n| apiKey | string | API Key |\n| apiVersion | integer | API Version |\n| permission | string | [Permissions](https://www.kucoin.com/docs-new/api-338144) |\n| ipWhitelist | string | IP whitelist |\n| createdAt | integer | Apikey create time |\n| uid | integer | Sub-account UID |\n| isMaster | boolean | Whether it is the master account. |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "sub", + "api-key" + ], + "query": [ + { + "key": "apiKey", + "value": "", + "description": "API-Key" + }, + { + "key": "subName", + "value": "testapi6", + "description": "Sub-account name." + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"subName\": \"apiSdkTest\",\n \"remark\": \"sdk_test_integration\",\n \"apiKey\": \"673eab2a955ebf000195d7e4\",\n \"apiVersion\": 3,\n \"permission\": \"General\",\n \"ipWhitelist\": \"10.**.1\",\n \"createdAt\": 1732160298000,\n \"uid\": 215112467,\n \"isMaster\": false\n }\n ]\n}" + } + ] + }, + { + "name": "Delete SubAccount API", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "sub", + "api-key" + ], + "query": [ + { + "key": "apiKey", + "value": "670621e3a25958000159c82f", + "description": "API-Key" + }, + { + "key": "subName", + "value": "testapi6", + "description": "Sub-account name." + }, + { + "key": "passphrase", + "value": "11223344", + "description": "Password(Password of the API key)" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470137)\n\n:::info[Description]\nThis endpoint can be used to delete sub-account APIs.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| subName | string | The username of a sub-user. |\n| apiKey | string | The APIKEY of a sub-user. |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "sub", + "api-key" + ], + "query": [ + { + "key": "apiKey", + "value": "670621e3a25958000159c82f", + "description": "API-Key" + }, + { + "key": "subName", + "value": "testapi6", + "description": "Sub-account name." + }, + { + "key": "passphrase", + "value": "11223344", + "description": "Password(Password of the API key)" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"subName\": \"testapi6\",\n \"apiKey\": \"670621e3a25958000159c82f\"\n }\n}" + } + ] + }, + { + "name": "Add SubAccount API", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "sub", + "api-key" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470138)\n\n:::info[Description]\nThis endpoint can be used to create APIs for sub-accounts.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| passphrase | string | Password(Must contain 7-32 characters. Cannot contain any spaces.) |\n| remark | string | Remarks(1~24 characters) |\n| permission | string | [Permissions](https://www.kucoin.com/docs-new/api-338144)(Only Generalใ€Spotใ€Futuresใ€Marginใ€InnerTransfer(Flex Transfer) permissions can be set, such as \"General, Trade\". The default is \"General\") |\n| ipWhitelist | string | IP whitelist(You may add up to 20 IPs. Use a halfwidth comma to each IP) |\n| expire | string | API expiration time; Never expire(default)-1๏ผŒ30Day30๏ผŒ90Day90๏ผŒ180Day180๏ผŒ360Day360 |\n| subName | string | Sub-account name, create sub account name of API Key. |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| subName | string | Sub-account name |\n| remark | string | Remarks |\n| apiKey | string | API Key |\n| apiSecret | string | API Secret Key
|\n| apiVersion | integer | API Version |\n| passphrase | string | Password |\n| permission | string | [Permissions](https://www.kucoin.com/docs-new/api-338144) |\n| ipWhitelist | string | IP whitelist |\n| createdAt | integer | Time of the event |\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"subName\": \"testapi6\",\n \"passphrase\": \"11223344\",\n \"remark\": \"TheRemark\",\n \"permission\": \"General,Spot,Futures\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "sub", + "api-key" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"subName\": \"testapi6\",\n \"remark\": \"TheRemark\",\n \"apiKey\": \"670621e3a25958000159c82f\",\n \"apiSecret\": \"46fd8974******896f005b2340\",\n \"apiVersion\": 3,\n \"passphrase\": \"11223344\",\n \"permission\": \"General,Futures\",\n \"createdAt\": 1728455139000\n }\n}" + } + ] + }, + { + "name": "Modify SubAccount API", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "sub", + "api-key", + "update" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470139)\n\n:::info[Description]\nThis endpoint can be used to modify sub-account APIs.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| passphrase | string | Password(Must contain 7-32 characters. Cannot contain any spaces.) |\n| permission | string | [Permissions](https://www.kucoin.com/docs-new/api-338144)(Only Generalใ€Spotใ€Futuresใ€Marginใ€InnerTransfer(Flex Transfer) permissions can be set, such as \"General, Trade\". The default is \"General\") |\n| ipWhitelist | string | IP whitelist(You may add up to 20 IPs. Use a halfwidth comma to each IP) |\n| expire | string | API expiration time; Never expire(default)-1๏ผŒ30Day30๏ผŒ90Day90๏ผŒ180Day180๏ผŒ360Day360 |\n| subName | string | Sub-account name, create sub account name of API Key. |\n| apiKey | string | API-Key(Sub-account APIKey) |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| subName | string | Sub-account name |\n| apiKey | string | API Key |\n| permission | string | [Permissions](https://www.kucoin.com/docs-new/api-338144) |\n| ipWhitelist | string | IP whitelist |\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"subName\": \"testapi6\",\n \"apiKey\": \"670621e3a25958000159c82f\",\n \"passphrase\": \"11223344\",\n \"permission\": \"General,Spot,Futures\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "sub", + "api-key", + "update" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"subName\": \"testapi6\",\n \"apiKey\": \"670621e3a25958000159c82f\",\n \"permission\": \"General,Futures,Spot\"\n }\n}" + } + ] + } + ], + "description": "" + }, + { + "name": "Deposit", + "item": [ + { + "name": "Get Deposit Address(V3)", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "deposit-addresses" + ], + "query": [ + { + "key": "currency", + "value": "", + "description": "currency" + }, + { + "key": "amount", + "value": null, + "description": "Deposit amount. This parameter is only used when applying for invoices on the Lightning Network. This parameter is invalid if it is not passed through the Lightning Network." + }, + { + "key": "chain", + "value": null, + "description": "The chain Id of currency." + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470140)\n\n:::info[Description]\nGet all deposit addresses for the currency you intend to deposit. If the returned data is empty, you may need to Add Deposit Address first.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| address | string | Deposit address |\n| memo | string | Address remark. If thereโ€™s no remark, it is empty. When you withdraw from other platforms to the KuCoin, you need to fill in memo(tag). If you do not fill memo (tag), your deposit may not be available, please be cautious. |\n| chainId | string | The chainId of currency |\n| to | string | Deposit account type: main (funding account), trade (spot trading account) |\n| expirationDate | integer | Expiration time, Lightning network expiration time, non-Lightning network this field is invalid |\n| currency | string | currency |\n| contractAddress | string | The token contract address. |\n| chainName | string | The chainName of currency |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "deposit-addresses" + ], + "query": [ + { + "key": "currency", + "value": "", + "description": "currency" + }, + { + "key": "amount", + "value": null, + "description": "Deposit amount. This parameter is only used when applying for invoices on the Lightning Network. This parameter is invalid if it is not passed through the Lightning Network." + }, + { + "key": "chain", + "value": null, + "description": "The chain Id of currency." + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"address\": \"TSv3L1fS7yA3SxzKD8c1qdX4nLP6rqNxYz\",\n \"memo\": \"\",\n \"chainId\": \"trx\",\n \"to\": \"TRADE\",\n \"expirationDate\": 0,\n \"currency\": \"USDT\",\n \"contractAddress\": \"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t\",\n \"chainName\": \"TRC20\"\n },\n {\n \"address\": \"0x551e823a3b36865e8c5dc6e6ac6cc0b00d98533e\",\n \"memo\": \"\",\n \"chainId\": \"kcc\",\n \"to\": \"TRADE\",\n \"expirationDate\": 0,\n \"currency\": \"USDT\",\n \"contractAddress\": \"0x0039f574ee5cc39bdd162e9a88e3eb1f111baf48\",\n \"chainName\": \"KCC\"\n },\n {\n \"address\": \"EQCA1BI4QRZ8qYmskSRDzJmkucGodYRTZCf_b9hckjla6dZl\",\n \"memo\": \"2085202643\",\n \"chainId\": \"ton\",\n \"to\": \"TRADE\",\n \"expirationDate\": 0,\n \"currency\": \"USDT\",\n \"contractAddress\": \"EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs\",\n \"chainName\": \"TON\"\n },\n {\n \"address\": \"0x0a2586d5a901c8e7e68f6b0dc83bfd8bd8600ff5\",\n \"memo\": \"\",\n \"chainId\": \"eth\",\n \"to\": \"MAIN\",\n \"expirationDate\": 0,\n \"currency\": \"USDT\",\n \"contractAddress\": \"0xdac17f958d2ee523a2206206994597c13d831ec7\",\n \"chainName\": \"ERC20\"\n }\n ]\n}" + } + ] + }, + { + "name": "Get Deposit History", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "deposits" + ], + "query": [ + { + "key": "currency", + "value": "", + "description": "currency" + }, + { + "key": "status", + "value": "SUCCESS", + "description": "Status. Available value: PROCESSING, SUCCESS, and FAILURE" + }, + { + "key": "startAt", + "value": "1728663338000", + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": "1728692138000", + "description": "End time (milisecond)" + }, + { + "key": "currentPage", + "value": "1", + "description": "Current request page." + }, + { + "key": "pageSize", + "value": "50", + "description": "Number of results per request. Minimum is 10, maximum is 500." + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470141)\n\n:::info[Description]\nRequest via this endpoint to get deposit list Items are paginated and sorted to show the latest first. See the Pagination section for retrieving additional entries after the first page.\n:::\n\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currentPage | integer | current page |\n| pageSize | integer | page size |\n| totalNum | integer | total number |\n| totalPage | integer | total page |\n| items | array | Refer to the schema section of items |\n\n**root.data.items Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | Currency |\n| chain | string | The chainName of currency |\n| status | string | Status |\n| address | string | Deposit address |\n| memo | string | Address remark. If thereโ€™s no remark, it is empty. |\n| isInner | boolean | Internal deposit or not |\n| amount | string | Deposit amount |\n| fee | string | Fees charged for deposit |\n| walletTxId | string | Wallet Txid |\n| createdAt | integer | Creation time of the database record |\n| updatedAt | integer | Update time of the database record |\n| remark | string | remark |\n| arrears | boolean | Whether there is any debt.A quick rollback will cause the deposit to fail. If the deposit fails, you will need to repay the balance. |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "deposits" + ], + "query": [ + { + "key": "currency", + "value": "", + "description": "currency" + }, + { + "key": "status", + "value": "SUCCESS", + "description": "Status. Available value: PROCESSING, SUCCESS, and FAILURE" + }, + { + "key": "startAt", + "value": "1728663338000", + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": "1728692138000", + "description": "End time (milisecond)" + }, + { + "key": "currentPage", + "value": "1", + "description": "Current request page." + }, + { + "key": "pageSize", + "value": "50", + "description": "Number of results per request. Minimum is 10, maximum is 500." + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"currentPage\": 1,\n \"pageSize\": 50,\n \"totalNum\": 5,\n \"totalPage\": 1,\n \"items\": [\n {\n \"currency\": \"USDT\",\n \"chain\": \"\",\n \"status\": \"SUCCESS\",\n \"address\": \"a435*****@gmail.com\",\n \"memo\": \"\",\n \"isInner\": true,\n \"amount\": \"1.00000000\",\n \"fee\": \"0.00000000\",\n \"walletTxId\": null,\n \"createdAt\": 1728555875000,\n \"updatedAt\": 1728555875000,\n \"remark\": \"\",\n \"arrears\": false\n },\n {\n \"currency\": \"USDT\",\n \"chain\": \"trx\",\n \"status\": \"SUCCESS\",\n \"address\": \"TSv3L1fS7******X4nLP6rqNxYz\",\n \"memo\": \"\",\n \"isInner\": true,\n \"amount\": \"6.00000000\",\n \"fee\": \"0.00000000\",\n \"walletTxId\": null,\n \"createdAt\": 1721730920000,\n \"updatedAt\": 1721730920000,\n \"remark\": \"\",\n \"arrears\": false\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Add Deposit Address(V3)", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "deposit-address", + "create" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470142)\n\n:::info[Description]\nRequest via this endpoint to create a deposit address for a currency you intend to deposit.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | currency |\n| chain | string | The chainId of currency, e.g. The available value for USDT are OMNI, ERC20, TRC20, default is ERC20. The available value for BTC are Native, Segwit, TRC20, the parameters are bech32, btc, trx, default is Native. This only apply for multi-chain currency, and there is no need for single chain currency. |\n| to | string | Deposit account type: main (funding account), trade (spot trading account), the default is main |\n| amount | string | Deposit amount. This parameter is only used when applying for invoices on the Lightning Network. This parameter is invalid if it is not passed through the Lightning Network. |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| address | string | Deposit address |\n| memo | string | Address remark. If thereโ€™s no remark, it is empty. When you withdraw from other platforms to the KuCoin, you need to fill in memo(tag). If you do not fill memo (tag), your deposit may not be available, please be cautious. |\n| chainId | string | The chainId of currency |\n| to | string | Deposit account type: main (funding account), trade (spot trading account) |\n| expirationDate | integer | Expiration time, Lightning network expiration time, non-Lightning network this field is invalid |\n| currency | string | currency |\n| chainName | string | The chainName of currency |\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"currency\": \"TON\",\n \"chain\": \"ton\",\n \"to\": \"trade\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "deposit-address", + "create" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"address\": \"EQCA1BI4QRZ8qYmskSRDzJmkucGodYRTZCf_b9hckjla6dZl\",\n \"memo\": \"2090821203\",\n \"chainId\": \"ton\",\n \"to\": \"TRADE\",\n \"expirationDate\": 0,\n \"currency\": \"TON\",\n \"chainName\": \"TON\"\n }\n}" + } + ] + } + ], + "description": "" + }, + { + "name": "Withdrawals", + "item": [ + { + "name": "Get Withdrawal Quotas", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "withdrawals", + "quotas" + ], + "query": [ + { + "key": "currency", + "value": "", + "description": "currency" + }, + { + "key": "chain", + "value": null, + "description": "The chainId of currency, e.g. The available value for USDT are OMNI, ERC20, TRC20, default is ERC20. The available value for BTC are Native, Segwit, TRC20, the parameters are bech32, btc, trx, default is Native. This only apply for multi-chain currency, and there is no need for single chain currency." + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470143)\n\n:::info[Description]\nThis interface can obtain the withdrawal quotas information of this currency.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | |\n| limitBTCAmount | string | |\n| usedBTCAmount | string | |\n| quotaCurrency | string | withdrawal limit currency |\n| limitQuotaCurrencyAmount | string | The intraday available withdrawal amount(withdrawal limit currency) |\n| usedQuotaCurrencyAmount | string | The intraday cumulative withdrawal amount(withdrawal limit currency) |\n| remainAmount | string | Remaining amount available to withdraw the current day
|\n| availableAmount | string | Current available withdrawal amount |\n| withdrawMinFee | string | Minimum withdrawal fee |\n| innerWithdrawMinFee | string | Fees for internal withdrawal |\n| withdrawMinSize | string | Minimum withdrawal amount |\n| isWithdrawEnabled | boolean | Is the withdraw function enabled or not |\n| precision | integer | Floating point precision. |\n| chain | string | The chainName of currency |\n| reason | string | Reasons for restriction, Usually empty |\n| lockedAmount | string | Total locked amount (including the amount locked into USDT for each currency) |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "withdrawals", + "quotas" + ], + "query": [ + { + "key": "currency", + "value": "", + "description": "currency" + }, + { + "key": "chain", + "value": null, + "description": "The chainId of currency, e.g. The available value for USDT are OMNI, ERC20, TRC20, default is ERC20. The available value for BTC are Native, Segwit, TRC20, the parameters are bech32, btc, trx, default is Native. This only apply for multi-chain currency, and there is no need for single chain currency." + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"currency\": \"BTC\",\n \"limitBTCAmount\": \"15.79590095\",\n \"usedBTCAmount\": \"0.00000000\",\n \"quotaCurrency\": \"USDT\",\n \"limitQuotaCurrencyAmount\": \"999999.00000000\",\n \"usedQuotaCurrencyAmount\": \"0\",\n \"remainAmount\": \"15.79590095\",\n \"availableAmount\": \"0\",\n \"withdrawMinFee\": \"0.0005\",\n \"innerWithdrawMinFee\": \"0\",\n \"withdrawMinSize\": \"0.001\",\n \"isWithdrawEnabled\": true,\n \"precision\": 8,\n \"chain\": \"BTC\",\n \"reason\": null,\n \"lockedAmount\": \"0\"\n }\n}" + } + ] + }, + { + "name": "Cancel Withdrawal", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "withdrawals", + "{{withdrawalId}}" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470144)\n\n:::info[Description]\nThis interface can cancel the withdrawal, Only withdrawals requests of PROCESSING status could be canceled.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | string | |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "withdrawals", + "{{withdrawalId}}" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": null\n}" + } + ] + }, + { + "name": "Get Withdrawal History", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "withdrawals" + ], + "query": [ + { + "key": "currency", + "value": "", + "description": "currency" + }, + { + "key": "status", + "value": "SUCCESS", + "description": "Status. Available value: PROCESSING, WALLET_PROCESSING, SUCCESS, and FAILURE" + }, + { + "key": "startAt", + "value": "1728663338000", + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": "1728692138000", + "description": "End time (milisecond)" + }, + { + "key": "currentPage", + "value": "1", + "description": "Current request page." + }, + { + "key": "pageSize", + "value": "50", + "description": "Number of results per request. Minimum is 10, maximum is 500." + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470145)\n\n:::info[Description]\nRequest via this endpoint to get withdrawal list Items are paginated and sorted to show the latest first. See the Pagination section for retrieving additional entries after the first page.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currentPage | integer | current page |\n| pageSize | integer | page size |\n| totalNum | integer | total number |\n| totalPage | integer | total page |\n| items | array | Refer to the schema section of items |\n\n**root.data.items Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | Unique id |\n| currency | string | Currency |\n| chain | string | The id of currency |\n| status | string | Status |\n| address | string | Deposit address |\n| memo | string | Address remark. If thereโ€™s no remark, it is empty. |\n| isInner | boolean | Internal deposit or not |\n| amount | string | Deposit amount |\n| fee | string | Fees charged for deposit |\n| walletTxId | string | Wallet Txid |\n| createdAt | integer | Creation time of the database record |\n| updatedAt | integer | Update time of the database record |\n| remark | string | remark |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "withdrawals" + ], + "query": [ + { + "key": "currency", + "value": "", + "description": "currency" + }, + { + "key": "status", + "value": "SUCCESS", + "description": "Status. Available value: PROCESSING, WALLET_PROCESSING, SUCCESS, and FAILURE" + }, + { + "key": "startAt", + "value": "1728663338000", + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": "1728692138000", + "description": "End time (milisecond)" + }, + { + "key": "currentPage", + "value": "1", + "description": "Current request page." + }, + { + "key": "pageSize", + "value": "50", + "description": "Number of results per request. Minimum is 10, maximum is 500." + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"currentPage\": 1,\n \"pageSize\": 50,\n \"totalNum\": 5,\n \"totalPage\": 1,\n \"items\": [\n {\n \"currency\": \"USDT\",\n \"chain\": \"\",\n \"status\": \"SUCCESS\",\n \"address\": \"a435*****@gmail.com\",\n \"memo\": \"\",\n \"isInner\": true,\n \"amount\": \"1.00000000\",\n \"fee\": \"0.00000000\",\n \"walletTxId\": null,\n \"createdAt\": 1728555875000,\n \"updatedAt\": 1728555875000,\n \"remark\": \"\",\n \"arrears\": false\n },\n {\n \"currency\": \"USDT\",\n \"chain\": \"trx\",\n \"status\": \"SUCCESS\",\n \"address\": \"TSv3L1fS7******X4nLP6rqNxYz\",\n \"memo\": \"\",\n \"isInner\": true,\n \"amount\": \"6.00000000\",\n \"fee\": \"0.00000000\",\n \"walletTxId\": null,\n \"createdAt\": 1721730920000,\n \"updatedAt\": 1721730920000,\n \"remark\": \"\",\n \"arrears\": false\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Withdraw(V3)", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "withdrawals" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470146)\n\n:::info[Description]\nUse this interface to withdraw the specified currency\n:::\n\n:::tip[Tips]\nOn the WEB end, you can open the switch of specified favorite addresses for withdrawal, and when it is turned on, it will verify whether your withdrawal address(including chain) is a favorite address(it is case sensitive); if it fails validation, it will respond with the error message {\"msg\":\"Already set withdraw whitelist, this address is not favorite address\",\"code\":\"260325\"}.\n:::\n\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | currency |\n| chain | string | The chainId of currency, For a currency with multiple chains, it is recommended to specify chain parameter instead of using the default chain; you can query the chainId through the response of the GET /api/v3/currencies/{currency} interface. |\n| amount | integer | Withdrawal amount, a positive number which is a multiple of the amount precision |\n| memo | string | Address remark. If thereโ€™s no remark, it is empty. When you withdraw from other platforms to the KuCoin, you need to fill in memo(tag). If you do not fill memo (tag), your deposit may not be available, please be cautious. |\n| isInner | boolean | Internal withdrawal or not. Default : false |\n| remark | string | remark |\n| feeDeductType | string | Withdrawal fee deduction type: INTERNAL or EXTERNAL or not specified

1. INTERNAL- deduct the transaction fees from your withdrawal amount
2. EXTERNAL- deduct the transaction fees from your main account
3. If you don't specify the feeDeductType parameter, when the balance in your main account is sufficient to support the withdrawal, the system will initially deduct the transaction fees from your main account. But if the balance in your main account is not sufficient to support the withdrawal, the system will deduct the fees from your withdrawal amount. For example: Suppose you are going to withdraw 1 BTC from the KuCoin platform (transaction fee: 0.0001BTC), if the balance in your main account is insufficient, the system will deduct the transaction fees from your withdrawal amount. In this case, you will be receiving 0.9999BTC. |\n| toAddress | string | Withdrawal address |\n| withdrawType | string | Withdrawal type, ADDRESS (withdrawal address), UID, MAIL (email), PHONE (mobile phone number). Note: If you withdraw by uid/mail/phone, there will have rate limited: 3 times/10 seconds, 50 times/24 hours (calculated on a rolling basis based on the first request time) |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| withdrawalId | string | Withdrawal id, a unique ID for a withdrawal |\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"currency\": \"USDT\",\n \"toAddress\": \"TKFRQXSDcY****GmLrjJggwX8\",\n \"amount\": 3,\n \"withdrawType\": \"ADDRESS\",\n \"chain\": \"trx\",\n \"isInner\": true,\n \"remark\": \"this is Remark\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "withdrawals" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"withdrawalId\": \"670deec84d64da0007d7c946\"\n }\n}" + } + ] + } + ], + "description": "" + }, + { + "name": "Transfer", + "item": [ + { + "name": "Flex Transfer", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "accounts", + "universal-transfer" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470147)\n\n:::info[Description]\nThis interface can be used for transfers between master and sub accounts and inner transfers\n:::\n\n\n\nThe API Key needs to have universal transfer permission when calling.\n\nSupport internal transfer,do not support transfers between sub-accounts.\n\nSupport transfer between master and sub accounts (only applicable to master account APIKey).\n\nMARGIN_V2 only supports internal transfers between MARGIN and does not support transfers between master and sub accounts.\n\nISOLATED_V2 only supports internal transfers between ISOLATED and does not support transfers between master and sub accounts.\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Unique order id created by users to identify their orders, e.g. UUID, with a maximum length of 128 bits |\n| currency | string | currency |\n| amount | string | Transfer amount, the amount is a positive integer multiple of the currency precision. |\n| fromUserId | string | Transfer out UserId๏ผŒ This is required when transferring sub-account to master-account. It is optional for internal transfers. |\n| fromAccountType | string | Account type๏ผšMAINใ€TRADEใ€CONTRACTใ€MARGINใ€ISOLATEDใ€MARGIN_V2ใ€ISOLATED_V2 |\n| fromAccountTag | string | Symbol, required when the account type is ISOLATED or ISOLATED_V2, for example: BTC-USDT |\n| type | string | Transfer type๏ผšINTERNAL(Transfer within account)ใ€PARENT_TO_SUB(Transfer from master-account to sub-account)๏ผŒSUB_TO_PARENT(Transfer from sub-account to master-account) |\n| toUserId | string | Transfer in UserId๏ผŒ This is required when transferring master-account to sub-account. It is optional for internal transfers. |\n| toAccountType | string | Account type๏ผšMAINใ€TRADEใ€CONTRACTใ€MARGINใ€ISOLATEDใ€MARGIN_V2ใ€ISOLATED_V2 |\n| toAccountTag | string | Symbol, required when the account type is ISOLATED or ISOLATED_V2, for example: BTC-USDT |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | Transfer order ID |\n\n---\n", + "body": { + "mode": "raw", + "raw": "//transfer from master-account to sub-account\n{\n \"clientOid\": \"64ccc0f164781800010d8c09\",\n \"type\": \"PARENT_TO_SUB\",\n \"currency\": \"USDT\",\n \"amount\": \"0.01\",\n \"fromAccountType\": \"TRADE\",\n \"toUserId\": \"63743f07e0c5230001761d08\",\n \"toAccountType\": \"TRADE\"\n}\n\n//transfer from sub-account to master-account\n// {\n// \"clientOid\": \"64ccc0f164781800010d8c09\",\n// \"type\": \"SUB_TO_PARENT\",\n// \"currency\": \"BTC\",\n// \"amount\": 1,\n// \"fromUserId\": \"62f5f5d4d72aaf000122707e\",\n// \"fromAccountType\": \"TRADE\",\n// \"toAccountType\": \"CONTRACT\"\n// }\n\n// internal transfer\n// {\n// \"clientOid\": \"53666633336123\",\n// \"type\": \"INTERNAL\",\n// \"currency\": \"BTC\",\n// \"amount\": 0.0003,\n// \"fromAccountType\": \"TRADE\",\n// \"toAccountType\": \"MAIN\"\n// }\n\n\n\n\n\n", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "accounts", + "universal-transfer" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"orderId\": \"6705f7248c6954000733ecac\"\n }\n}" + } + ] + }, + { + "name": "Get Transfer Quotas", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "accounts", + "transferable" + ], + "query": [ + { + "key": "currency", + "value": "", + "description": "currency" + }, + { + "key": "type", + "value": "MAIN", + "description": "The account type:MAINใ€TRADEใ€MARGINใ€ISOLATED" + }, + { + "key": "tag", + "value": null, + "description": "Trading pair, required when the account type is ISOLATED; other types are not passed, e.g.: BTC-USDT" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470148)\n\n:::info[Description]\nThis endpoint returns the transferable balance of a specified account.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | Currency |\n| balance | string | Total funds in an account. |\n| available | string | Funds available to withdraw or trade. |\n| holds | string | Funds on hold (not available for use). |\n| transferable | string | Funds available to transfer. |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "accounts", + "transferable" + ], + "query": [ + { + "key": "currency", + "value": "", + "description": "currency" + }, + { + "key": "type", + "value": "MAIN", + "description": "The account type:MAINใ€TRADEใ€MARGINใ€ISOLATED" + }, + { + "key": "tag", + "value": null, + "description": "Trading pair, required when the account type is ISOLATED; other types are not passed, e.g.: BTC-USDT" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"currency\": \"USDT\",\n \"balance\": \"10.5\",\n \"available\": \"10.5\",\n \"holds\": \"0\",\n \"transferable\": \"10.5\"\n }\n}" + } + ] + } + ], + "description": "" + }, + { + "name": "Trade Fee", + "item": [ + { + "name": "Get Basic Fee - Spot/Margin", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "base-fee" + ], + "query": [ + { + "key": "currencyType", + "value": "", + "description": "Currency type: 0-crypto currency, 1-fiat currency. default is 0-crypto currency\n" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470149)\n\n:::info[Description]\nThis interface is for the spot/margin basic fee rate of users\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| takerFeeRate | string | Base taker fee rate |\n| makerFeeRate | string | Base maker fee rate |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "base-fee" + ], + "query": [ + { + "key": "currencyType", + "value": "", + "description": "Currency type: 0-crypto currency, 1-fiat currency. default is 0-crypto currency\n" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"takerFeeRate\": \"0.001\",\n \"makerFeeRate\": \"0.001\"\n }\n}" + } + ] + }, + { + "name": "Get Actual Fee - Spot/Margin", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "trade-fees" + ], + "query": [ + { + "key": "symbols", + "value": "", + "description": "Trading pair (optional, you can inquire fee rates of 10 trading pairs each time at most)" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470150)\n\n:::info[Description]\nThis interface is for the actual fee rate of the trading pair. You can inquire about fee rates of 10 trading pairs each time at most. The fee rate of your sub-account is the same as that of the master account.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | The unique identity of the trading pair and will not change even if the trading pair is renamed |\n| takerFeeRate | string | Actual taker fee rate of the symbol |\n| makerFeeRate | string | Actual maker fee rate of the symbol |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "trade-fees" + ], + "query": [ + { + "key": "symbols", + "value": "", + "description": "Trading pair (optional, you can inquire fee rates of 10 trading pairs each time at most)" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"symbol\": \"BTC-USDT\",\n \"takerFeeRate\": \"0.001\",\n \"makerFeeRate\": \"0.001\"\n },\n {\n \"symbol\": \"ETH-USDT\",\n \"takerFeeRate\": \"0.001\",\n \"makerFeeRate\": \"0.001\"\n }\n ]\n}" + } + ] + }, + { + "name": "Get Actual Fee - Futures", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "trade-fees" + ], + "query": [ + { + "key": "symbol", + "value": "", + "description": "Trading pair" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470151)\n\n:::info[Description]\nThis interface is for the actual futures fee rate of the trading pair. The fee rate of your sub-account is the same as that of the master account.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | The unique identity of the trading pair and will not change even if the trading pair is renamed |\n| takerFeeRate | string | Actual taker fee rate of the trading pair |\n| makerFeeRate | string | Actual maker fee rate of the trading pair |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "trade-fees" + ], + "query": [ + { + "key": "symbol", + "value": "", + "description": "Trading pair" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"symbol\": \"XBTUSDTM\",\n \"takerFeeRate\": \"0.0006\",\n \"makerFeeRate\": \"0.0002\"\n }\n}" + } + ] + } + ], + "description": "" + } + ], + "description": "" + }, + { + "name": "Spot Trading", + "item": [ + { + "name": "Market Data", + "item": [ + { + "name": "Get All Currencies", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "currencies" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470152)\n\n:::info[Description]\nRequest via this endpoint to get the currency list. Not all currencies currently can be used for trading.\n:::\n\n:::tip[Tips]\n**CURRENCY CODES**\n\nCurrency codes will conform to the ISO 4217 standard where possible. Currencies which have or had no representation in ISO 4217 may use a custom code.\n\n\n| Code | Description |\n| --- | --- |\n| BTC | Bitcoin |\n| ETH | Ethereum |\n| KCS | Kucoin Shares |\n\nFor a coin, the \"**currency**\" is a fixed value and works as the only recognized identity of the coin. As the \"**name**\", \"**fullnane**\" and \"**precision**\" of a coin are modifiable values, when the \"name\" of a coin is changed, you should use \"**currency**\" to get the coin.\n\nFor example: The \"**currency**\" of XRB is \"XRB\", if the \"**name**\" of XRB is changed into \"**Nano**\", you should use \"XRB\" (the currency of XRB) to search the coin.\n:::\n\n\n\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | A unique currency code that will never change |\n| name | string | Currency name, will change after renaming |\n| fullName | string | Full name of a currency, will change after renaming |\n| precision | integer | Currency precision |\n| confirms | integer | Number of block confirmations |\n| contractAddress | string | Contract address |\n| isMarginEnabled | boolean | Support margin or not |\n| isDebitEnabled | boolean | Support debit or not |\n| chains | array | Refer to the schema section of chains |\n\n**root.data.chains Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| chainName | string | chain name of currency |\n| withdrawalMinSize | string | Minimum withdrawal amount |\n| depositMinSize | string | Minimum deposit amount |\n| withdrawFeeRate | string | withdraw fee rate |\n| withdrawalMinFee | string | Minimum fees charged for withdrawal |\n| isWithdrawEnabled | boolean | Support withdrawal or not |\n| isDepositEnabled | boolean | Support deposit or not |\n| confirms | integer | Number of block confirmations |\n| preConfirms | integer | The number of blocks (confirmations) for advance on-chain verification |\n| contractAddress | string | Contract address |\n| withdrawPrecision | integer | Withdrawal precision bit, indicating the maximum supported length after the decimal point of the withdrawal amount |\n| maxWithdraw | string | Maximum amount of single withdrawal |\n| maxDeposit | string | Maximum amount of single deposit (only applicable to Lightning Network) |\n| needTag | boolean | whether memo/tag is needed |\n| chainId | string | chain id of currency |\n| depositFeeRate | string | deposit fee rate (some currencies have this param, the default is empty) |\n| withdrawMaxFee | string | withdraw max fee(some currencies have this param, the default is empty) |\n| depositTierFee | string | |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "currencies" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"currency\": \"BTC\",\n \"name\": \"BTC\",\n \"fullName\": \"Bitcoin\",\n \"precision\": 8,\n \"confirms\": null,\n \"contractAddress\": null,\n \"isMarginEnabled\": true,\n \"isDebitEnabled\": true,\n \"chains\": [\n {\n \"chainName\": \"BTC\",\n \"withdrawalMinSize\": \"0.001\",\n \"depositMinSize\": \"0.0002\",\n \"withdrawFeeRate\": \"0\",\n \"withdrawalMinFee\": \"0.0005\",\n \"isWithdrawEnabled\": true,\n \"isDepositEnabled\": true,\n \"confirms\": 3,\n \"preConfirms\": 1,\n \"contractAddress\": \"\",\n \"withdrawPrecision\": 8,\n \"maxWithdraw\": null,\n \"maxDeposit\": null,\n \"needTag\": false,\n \"chainId\": \"btc\"\n },\n {\n \"chainName\": \"Lightning Network\",\n \"withdrawalMinSize\": \"0.00001\",\n \"depositMinSize\": \"0.00001\",\n \"withdrawFeeRate\": \"0\",\n \"withdrawalMinFee\": \"0.000015\",\n \"isWithdrawEnabled\": true,\n \"isDepositEnabled\": true,\n \"confirms\": 1,\n \"preConfirms\": 1,\n \"contractAddress\": \"\",\n \"withdrawPrecision\": 8,\n \"maxWithdraw\": null,\n \"maxDeposit\": \"0.03\",\n \"needTag\": false,\n \"chainId\": \"btcln\"\n },\n {\n \"chainName\": \"KCC\",\n \"withdrawalMinSize\": \"0.0008\",\n \"depositMinSize\": null,\n \"withdrawFeeRate\": \"0\",\n \"withdrawalMinFee\": \"0.00002\",\n \"isWithdrawEnabled\": true,\n \"isDepositEnabled\": true,\n \"confirms\": 20,\n \"preConfirms\": 20,\n \"contractAddress\": \"0xfa93c12cd345c658bc4644d1d4e1b9615952258c\",\n \"withdrawPrecision\": 8,\n \"maxWithdraw\": null,\n \"maxDeposit\": null,\n \"needTag\": false,\n \"chainId\": \"kcc\"\n },\n {\n \"chainName\": \"BTC-Segwit\",\n \"withdrawalMinSize\": \"0.0008\",\n \"depositMinSize\": \"0.0002\",\n \"withdrawFeeRate\": \"0\",\n \"withdrawalMinFee\": \"0.0005\",\n \"isWithdrawEnabled\": false,\n \"isDepositEnabled\": true,\n \"confirms\": 2,\n \"preConfirms\": 2,\n \"contractAddress\": \"\",\n \"withdrawPrecision\": 8,\n \"maxWithdraw\": null,\n \"maxDeposit\": null,\n \"needTag\": false,\n \"chainId\": \"bech32\"\n }\n ]\n },\n {\n \"currency\": \"BTCP\",\n \"name\": \"BTCP\",\n \"fullName\": \"Bitcoin Private\",\n \"precision\": 8,\n \"confirms\": null,\n \"contractAddress\": null,\n \"isMarginEnabled\": false,\n \"isDebitEnabled\": false,\n \"chains\": [\n {\n \"chainName\": \"BTCP\",\n \"withdrawalMinSize\": \"0.100000\",\n \"depositMinSize\": null,\n \"withdrawFeeRate\": \"0\",\n \"withdrawalMinFee\": \"0.010000\",\n \"isWithdrawEnabled\": false,\n \"isDepositEnabled\": false,\n \"confirms\": 6,\n \"preConfirms\": 6,\n \"contractAddress\": \"\",\n \"withdrawPrecision\": 8,\n \"maxWithdraw\": null,\n \"maxDeposit\": null,\n \"needTag\": false,\n \"chainId\": \"btcp\"\n }\n ]\n }\n ]\n}" + } + ] + }, + { + "name": "Get Fiat Price", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "prices" + ], + "query": [ + { + "key": "base", + "value": "", + "description": "Ticker symbol of a base currency,eg.USD,EUR. Default is USD" + }, + { + "key": "currencies", + "value": "", + "description": "Comma-separated cryptocurrencies to be converted into fiat, e.g.: BTC,ETH, etc. Default to return the fiat price of all currencies." + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470153)\n\n:::info[Description]\nRequest via this endpoint to get the fiat price of the currencies for the available trading pairs.\n:::\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| AGLD | string | |\n| DFI | string | |\n| PYTHUP | string | |\n| ISLM | string | |\n| NEAR | string | |\n| AIOZ | string | |\n| AUDIO | string | |\n| BBL | string | |\n| WLD | string | |\n| HNT | string | |\n| ETHFI | string | |\n| DMAIL | string | |\n| OPUP | string | |\n| VET3S | string | |\n| MANA3S | string | |\n| TIDAL | string | |\n| HALO | string | |\n| OPUL | string | |\n| MANA3L | string | |\n| DGB | string | |\n| AA | string | |\n| BCH | string | |\n| GMEE | string | |\n| JST | string | |\n| PBUX | string | |\n| AR | string | |\n| SEI | string | |\n| PSTAKE | string | |\n| LMWR | string | |\n| UNFIDOWN | string | |\n| BB | string | |\n| JTO | string | |\n| WEMIX | string | |\n| G | string | |\n| MARSH | string | |\n| BN | string | |\n| FLIP | string | |\n| FLR | string | |\n| BIGTIME | string | |\n| FLY | string | |\n| T | string | |\n| W | string | |\n| BDX | string | |\n| BABYDOGE | string | |\n| SFP | string | |\n| DIA | string | |\n| ISME | string | |\n| LYM | string | |\n| VET3L | string | |\n| JUP | string | |\n| LYX | string | |\n| AIEPK | string | |\n| SILLY | string | |\n| SCPT | string | |\n| WOO | string | |\n| BLUR | string | |\n| STRK | string | |\n| BFC | string | |\n| DC | string | |\n| KARATE | string | |\n| SUSHI3L | string | |\n| NETVR | string | |\n| WAVES | string | |\n| LITH | string | |\n| HAPI | string | |\n| SUSHI3S | string | |\n| CEEK | string | |\n| FLOKI | string | |\n| SHR | string | |\n| SAND | string | |\n| TURT | string | |\n| UMA | string | |\n| BEPRO | string | |\n| SCRT | string | |\n| TUSD | string | |\n| COOKIE | string | |\n| LRDS | string | |\n| SIN | string | |\n| OAS | string | |\n| ROOT | string | |\n| ADA3L | string | |\n| TIAUP | string | |\n| HTR | string | |\n| UNB | string | |\n| UNA | string | |\n| HARD | string | |\n| G3 | string | |\n| ADA3S | string | |\n| MYRO | string | |\n| HTX | string | |\n| FT | string | |\n| BTCDOWN | string | |\n| UNI | string | |\n| FX | string | |\n| OBI | string | |\n| UNO | string | |\n| WRX | string | |\n| TIADOWN | string | |\n| ETHDOWN | string | |\n| WELL | string | |\n| SWFTC | string | |\n| SKL | string | |\n| UOS | string | |\n| AIPAD | string | |\n| BRETT | string | |\n| SKY | string | |\n| FRM | string | |\n| VISION | string | |\n| LENDS | string | |\n| SLF | string | |\n| BULL | string | |\n| FLOW | string | |\n| ODDZ | string | |\n| SLN | string | |\n| UPO | string | |\n| SLP | string | |\n| ID | string | |\n| SLIM | string | |\n| SPOT | string | |\n| DOP | string | |\n| ISSP | string | |\n| UQC | string | |\n| IO | string | |\n| DOT | string | |\n| 1INCH | string | |\n| SMH | string | |\n| MAK | string | |\n| TOKO | string | |\n| TURBO | string | |\n| UNFI | string | |\n| MAN | string | |\n| EVER | string | |\n| FTM | string | |\n| SHRAP | string | |\n| MAV | string | |\n| MAX | string | |\n| DPR | string | |\n| FTT | string | |\n| ARKM | string | |\n| ATOM | string | |\n| PENDLE | string | |\n| QUICK | string | |\n| BLZ | string | |\n| BOBA | string | |\n| MBL | string | |\n| OFN | string | |\n| UNIO | string | |\n| SNS | string | |\n| SNX | string | |\n| NXRA | string | |\n| TAIKO | string | |\n| AVAX3L | string | |\n| L3 | string | |\n| API3 | string | |\n| XRP3S | string | |\n| QKC | string | |\n| AVAX3S | string | |\n| ROSE | string | |\n| SATS | string | |\n| BMX | string | |\n| PORTAL | string | |\n| TOMI | string | |\n| XRP3L | string | |\n| SOL | string | |\n| SON | string | |\n| BNC | string | |\n| SOCIAL | string | |\n| CGPT | string | |\n| CELR | string | |\n| BNB | string | |\n| OGN | string | |\n| CELO | string | |\n| AUCTION | string | |\n| MANTA | string | |\n| LAYER | string | |\n| AERO | string | |\n| CETUS | string | |\n| LL | string | |\n| SPA | string | |\n| PYTHDOWN | string | |\n| NEIROCTO | string | |\n| UTK | string | |\n| GMRX | string | |\n| BOB | string | |\n| HOTCROSS | string | |\n| AERGO | string | |\n| MOCA | string | |\n| SQD | string | |\n| MV | string | |\n| BNB3L | string | |\n| BNB3S | string | |\n| GALAX3L | string | |\n| KAI | string | |\n| SQR | string | |\n| GALAX3S | string | |\n| EGLD | string | |\n| ZBCN | string | |\n| KAS | string | |\n| MEW | string | |\n| PUNDIX | string | |\n| LOOKS | string | |\n| FXS | string | |\n| BOSON | string | |\n| BRISE | string | |\n| AEVO | string | |\n| FLUX | string | |\n| PRCL | string | |\n| UNFIUP | string | |\n| SEIDOWN | string | |\n| DOAI | string | |\n| QNT | string | |\n| REDO | string | |\n| STRIKE | string | |\n| ETHW | string | |\n| OM | string | |\n| OP | string | |\n| WHALE | string | |\n| 1CAT | string | |\n| NEON | string | |\n| GTAI | string | |\n| SSV | string | |\n| ETH2 | string | |\n| KCS | string | |\n| ARPA | string | |\n| ARTFI | string | |\n| BRL | string | |\n| ALEX | string | |\n| STG | string | |\n| SHIB | string | |\n| IOTX | string | |\n| OLE | string | |\n| KDA | string | |\n| CERE | string | |\n| DOCK | string | |\n| STX | string | |\n| OLT | string | |\n| QI | string | |\n| SDAO | string | |\n| BLAST | string | |\n| LINK3S | string | |\n| IOST | string | |\n| SUI | string | |\n| CAKE | string | |\n| BSW | string | |\n| OMG | string | |\n| VOLT | string | |\n| LINK3L | string | |\n| GEEQ | string | |\n| PYUSD | string | |\n| SUN | string | |\n| TOWER | string | |\n| BTC | string | |\n| IOTA | string | |\n| REEF | string | |\n| TRIAS | string | |\n| KEY | string | |\n| ETH3L | string | |\n| BTT | string | |\n| ONE | string | |\n| RENDER | string | |\n| ETH3S | string | |\n| ANKR | string | |\n| ALGO | string | |\n| SYLO | string | |\n| ZCX | string | |\n| SD | string | |\n| ONT | string | |\n| MJT | string | |\n| DYM | string | |\n| DYP | string | |\n| BAKEUP | string | |\n| OOE | string | |\n| ZELIX | string | |\n| DOGE3L | string | |\n| ARTY | string | |\n| QORPO | string | |\n| ICE | string | |\n| NOTAI | string | |\n| DOGE3S | string | |\n| NAKA | string | |\n| GALAX | string | |\n| MKR | string | |\n| DODO | string | |\n| ICP | string | |\n| ZEC | string | |\n| ZEE | string | |\n| ICX | string | |\n| KMNO | string | |\n| TT | string | |\n| DOT3L | string | |\n| XAI | string | |\n| ZEN | string | |\n| DOGE | string | |\n| ALPHA | string | |\n| DUSK | string | |\n| DOT3S | string | |\n| SXP | string | |\n| HBAR | string | |\n| SYNT | string | |\n| ZEX | string | |\n| BONDLY | string | |\n| MLK | string | |\n| KICKS | string | |\n| PEPE | string | |\n| OUSD | string | |\n| LUNCDOWN | string | |\n| DOGS | string | |\n| REV3L | string | |\n| CTSI | string | |\n| C98 | string | |\n| OSMO | string | |\n| NTRN | string | |\n| CFX2S | string | |\n| SYN | string | |\n| VIDT | string | |\n| SYS | string | |\n| GAS | string | |\n| BOME | string | |\n| COMBO | string | |\n| XCH | string | |\n| VR | string | |\n| CFX2L | string | |\n| VSYS | string | |\n| PANDORA | string | |\n| THETA | string | |\n| XCN | string | |\n| NEXG | string | |\n| MELOS | string | |\n| XCV | string | |\n| ORN | string | |\n| WLKN | string | |\n| AAVE | string | |\n| MNT | string | |\n| BONK | string | |\n| PERP | string | |\n| XDC | string | |\n| MNW | string | |\n| XDB | string | |\n| BOND | string | |\n| SUIA | string | |\n| MOG | string | |\n| SUTER | string | |\n| TIME | string | |\n| RACA | string | |\n| BICO | string | |\n| MON | string | |\n| SWEAT | string | |\n| MOXIE | string | |\n| BABYBNB | string | |\n| IGU | string | |\n| HMSTR | string | |\n| XEC | string | |\n| MONI | string | |\n| XR | string | |\n| PEOPLE | string | |\n| PUMLX | string | |\n| ZIL | string | |\n| WLDDOWN | string | |\n| VAI | string | |\n| XEN | string | |\n| MPC | string | |\n| XEM | string | |\n| JASMY3S | string | |\n| OTK | string | |\n| TRAC | string | |\n| DFYN | string | |\n| BIDP | string | |\n| JASMY3L | string | |\n| INJDOWN | string | |\n| KLV | string | |\n| WAXL | string | |\n| TRBDOWN | string | |\n| BCH3L | string | |\n| GMT3S | string | |\n| KMD | string | |\n| BCH3S | string | |\n| ECOX | string | |\n| AAVE3S | string | |\n| GMT3L | string | |\n| EPIK | string | |\n| SUIP | string | |\n| AAVE3L | string | |\n| ZK | string | |\n| ZKF | string | |\n| OMNIA | string | |\n| ZKJ | string | |\n| ZKL | string | |\n| GAFI | string | |\n| CARV | string | |\n| KNC | string | |\n| CATS | string | |\n| PROM | string | |\n| ALEPH | string | |\n| PONKE | string | |\n| OVR | string | |\n| CATI | string | |\n| ORDER | string | |\n| GFT | string | |\n| BIFI | string | |\n| GGC | string | |\n| GGG | string | |\n| DAPPX | string | |\n| SUKU | string | |\n| ULTI | string | |\n| CREDI | string | |\n| ERTHA | string | |\n| FURY | string | |\n| KARRAT | string | |\n| MOBILE | string | |\n| SIDUS | string | |\n| NAVI | string | |\n| TAO | string | |\n| USDJ | string | |\n| MTL | string | |\n| VET | string | |\n| FITFI | string | |\n| USDT | string | |\n| OXT | string | |\n| CANDY | string | |\n| USDP | string | |\n| MTS | string | |\n| TADA | string | |\n| MTV | string | |\n| NAVX | string | |\n| ILV | string | |\n| VINU | string | |\n| GHX | string | |\n| EDU | string | |\n| HYVE | string | |\n| BTC3L | string | |\n| ANYONE | string | |\n| BEAT | string | |\n| KING | string | |\n| CREAM | string | |\n| CAS | string | |\n| IMX | string | |\n| CAT | string | |\n| BTC3S | string | |\n| USDE | string | |\n| USDD | string | |\n| CWAR | string | |\n| USDC | string | |\n| KRL | string | |\n| INJ | string | |\n| GAME | string | |\n| TRIBL | string | |\n| XLM | string | |\n| TRBUP | string | |\n| VRADOWN | string | |\n| SUPER | string | |\n| EIGEN | string | |\n| IOI | string | |\n| KSM | string | |\n| CCD | string | |\n| EGO | string | |\n| EGP | string | |\n| MXC | string | |\n| TEL | string | |\n| MOVR | string | |\n| XMR | string | |\n| MXM | string | |\n| OORT | string | |\n| GLM | string | |\n| RAY | string | |\n| XTAG | string | |\n| GLQ | string | |\n| CWEB | string | |\n| REVU | string | |\n| REVV | string | |\n| ZRO | string | |\n| XNL | string | |\n| XNO | string | |\n| SAROS | string | |\n| KACE | string | |\n| ZRX | string | |\n| WLTH | string | |\n| ATOM3L | string | |\n| GMM | string | |\n| BEER | string | |\n| GMT | string | |\n| HEART | string | |\n| GMX | string | |\n| ABBC | string | |\n| OMNI | string | |\n| ATOM3S | string | |\n| IRL | string | |\n| CFG | string | |\n| WSDM | string | |\n| GNS | string | |\n| VANRY | string | |\n| CFX | string | |\n| GRAIL | string | |\n| BEFI | string | |\n| VELO | string | |\n| XPR | string | |\n| DOVI | string | |\n| ACE | string | |\n| ACH | string | |\n| ISP | string | |\n| XCAD | string | |\n| MINA | string | |\n| TIA | string | |\n| DRIFT | string | |\n| ACQ | string | |\n| ACS | string | |\n| MIND | string | |\n| STORE | string | |\n| REN | string | |\n| ELA | string | |\n| DREAMS | string | |\n| ADA | string | |\n| ELF | string | |\n| REQ | string | |\n| STORJ | string | |\n| LADYS | string | |\n| PAXG | string | |\n| REZ | string | |\n| XRD | string | |\n| CHO | string | |\n| CHR | string | |\n| ADS | string | |\n| CHZ | string | |\n| ADX | string | |\n| XRP | string | |\n| JASMY | string | |\n| KAGI | string | |\n| FIDA | string | |\n| PBR | string | |\n| AEG | string | |\n| H2O | string | |\n| CHMB | string | |\n| SAND3L | string | |\n| PBX | string | |\n| SOLVE | string | |\n| DECHAT | string | |\n| GARI | string | |\n| SHIB2L | string | |\n| SHIB2S | string | |\n| ENA | string | |\n| VEMP | string | |\n| ENJ | string | |\n| AFG | string | |\n| RATS | string | |\n| GRT | string | |\n| FORWARD | string | |\n| TFUEL | string | |\n| ENS | string | |\n| KASDOWN | string | |\n| XTM | string | |\n| DEGEN | string | |\n| TLM | string | |\n| DYDXDOWN | string | |\n| CKB | string | |\n| LUNC | string | |\n| AURORA | string | |\n| LUNA | string | |\n| XTZ | string | |\n| ELON | string | |\n| DMTR | string | |\n| EOS | string | |\n| GST | string | |\n| FORT | string | |\n| FLAME | string | |\n| PATEX | string | |\n| DEEP | string | |\n| ID3L | string | |\n| GTC | string | |\n| ID3S | string | |\n| RIO | string | |\n| CLH | string | |\n| BURGER | string | |\n| VRA | string | |\n| SUNDOG | string | |\n| GTT | string | |\n| INJUP | string | |\n| CPOOL | string | |\n| EPX | string | |\n| CLV | string | |\n| FEAR | string | |\n| MEME | string | |\n| ROOBEE | string | |\n| DEFI | string | |\n| TOKEN | string | |\n| GRAPE | string | |\n| KASUP | string | |\n| XWG | string | |\n| SKEY | string | |\n| SFUND | string | |\n| EQX | string | |\n| ORDIUP | string | |\n| TON | string | |\n| DEGO | string | |\n| IZI | string | |\n| ERG | string | |\n| ERN | string | |\n| VENOM | string | |\n| VOXEL | string | |\n| RLC | string | |\n| PHA | string | |\n| DYDXUP | string | |\n| APE3S | string | |\n| ORBS | string | |\n| OPDOWN | string | |\n| ESE | string | |\n| APE3L | string | |\n| HMND | string | |\n| COQ | string | |\n| AURY | string | |\n| CULT | string | |\n| AKT | string | |\n| GLMR | string | |\n| XYM | string | |\n| ORAI | string | |\n| XYO | string | |\n| ETC | string | |\n| LAI | string | |\n| PIP | string | |\n| ETH | string | |\n| NEO | string | |\n| RMV | string | |\n| KLAY | string | |\n| PIT | string | |\n| TARA | string | |\n| KALT | string | |\n| PIX | string | |\n| ETN | string | |\n| CSIX | string | |\n| TRADE | string | |\n| MAVIA | string | |\n| HIGH | string | |\n| TRB | string | |\n| ORDI | string | |\n| TRVL | string | |\n| AMB | string | |\n| TRU | string | |\n| LOGX | string | |\n| FINC | string | |\n| INFRA | string | |\n| NATIX | string | |\n| NFP | string | |\n| TRY | string | |\n| TRX | string | |\n| LBP | string | |\n| LBR | string | |\n| EUL | string | |\n| NFT | string | |\n| SEIUP | string | |\n| PUFFER | string | |\n| EUR | string | |\n| ORCA | string | |\n| NEAR3L | string | |\n| AMP | string | |\n| XDEFI | string | |\n| HIFI | string | |\n| TRUF | string | |\n| AITECH | string | |\n| AMU | string | |\n| USTC | string | |\n| KNGL | string | |\n| FOXY | string | |\n| NGC | string | |\n| TENET | string | |\n| NEAR3S | string | |\n| MAHA | string | |\n| NGL | string | |\n| TST | string | |\n| HIPPO | string | |\n| AXS3S | string | |\n| CRO | string | |\n| ZPAY | string | |\n| MNDE | string | |\n| CRV | string | |\n| SWASH | string | |\n| AXS3L | string | |\n| VERSE | string | |\n| RPK | string | |\n| RPL | string | |\n| AZERO | string | |\n| SOUL | string | |\n| VXV | string | |\n| LDO | string | |\n| MAGIC | string | |\n| ALICE | string | |\n| SEAM | string | |\n| PLU | string | |\n| AOG | string | |\n| SMOLE | string | |\n| EWT | string | |\n| TSUGT | string | |\n| PMG | string | |\n| OPAI | string | |\n| LOCUS | string | |\n| CTA | string | |\n| NIM | string | |\n| CTC | string | |\n| APE | string | |\n| MERL | string | |\n| JAM | string | |\n| CTI | string | |\n| APP | string | |\n| APT | string | |\n| WLDUP | string | |\n| ZEND | string | |\n| FIRE | string | |\n| DENT | string | |\n| PYTH | string | |\n| LFT | string | |\n| DPET | string | |\n| ORDIDOWN | string | |\n| KPOL | string | |\n| ETHUP | string | |\n| BAND | string | |\n| POL | string | |\n| ASTR | string | |\n| NKN | string | |\n| RSR | string | |\n| DVPN | string | |\n| TWT | string | |\n| ARB | string | |\n| CVC | string | |\n| ARC | string | |\n| XETA | string | |\n| MTRG | string | |\n| LOKA | string | |\n| LPOOL | string | |\n| TURBOS | string | |\n| CVX | string | |\n| ARX | string | |\n| MPLX | string | |\n| SUSHI | string | |\n| NLK | string | |\n| PEPE2 | string | |\n| WBTC | string | |\n| SUI3L | string | |\n| CWS | string | |\n| SUI3S | string | |\n| INSP | string | |\n| MANA | string | |\n| VRTX | string | |\n| CSPR | string | |\n| ATA | string | |\n| OPEN | string | |\n| HAI | string | |\n| NMR | string | |\n| ATH | string | |\n| LIT | string | |\n| TLOS | string | |\n| TNSR | string | |\n| CXT | string | |\n| POLYX | string | |\n| ZERO | string | |\n| ROUTE | string | |\n| LOOM | string | |\n| PRE | string | |\n| VRAUP | string | |\n| HBB | string | |\n| RVN | string | |\n| PRQ | string | |\n| ONDO | string | |\n| PEPEDOWN | string | |\n| WOOP | string | |\n| LUNCUP | string | |\n| KAVA | string | |\n| LKI | string | |\n| AVA | string | |\n| NOM | string | |\n| MAPO | string | |\n| PEPEUP | string | |\n| STRAX | string | |\n| NOT | string | |\n| ZERC | string | |\n| BCUT | string | |\n| MASA | string | |\n| WAN | string | |\n| WAT | string | |\n| WAX | string | |\n| MASK | string | |\n| EOS3L | string | |\n| IDEA | string | |\n| EOS3S | string | |\n| YFI | string | |\n| MOODENG | string | |\n| XCUR | string | |\n| HYDRA | string | |\n| POPCAT | string | |\n| LQTY | string | |\n| PIXEL | string | |\n| LMR | string | |\n| ZETA | string | |\n| YGG | string | |\n| AXS | string | |\n| BCHSV | string | |\n| NRN | string | |\n| FTON | string | |\n| COMP | string | |\n| XPRT | string | |\n| HFT | string | |\n| UXLINK | string | |\n| STAMP | string | |\n| RUNE | string | |\n| ZEUS | string | |\n| LTC3L | string | |\n| DAPP | string | |\n| FORTH | string | |\n| ALPINE | string | |\n| SENSO | string | |\n| LTC3S | string | |\n| DEXE | string | |\n| GOAL | string | |\n| AVAX | string | |\n| LISTA | string | |\n| AMPL | string | |\n| WORK | string | |\n| BRWL | string | |\n| BANANA | string | |\n| PUSH | string | |\n| WEN | string | |\n| NEIRO | string | |\n| BTCUP | string | |\n| SOL3S | string | |\n| BRAWL | string | |\n| LAY3R | string | |\n| LPT | string | |\n| GODS | string | |\n| SAND3S | string | |\n| RDNT | string | |\n| SOL3L | string | |\n| NIBI | string | |\n| NUM | string | |\n| PYR | string | |\n| DAG | string | |\n| DAI | string | |\n| HIP | string | |\n| DAO | string | |\n| AVAIL | string | |\n| DAR | string | |\n| FET | string | |\n| FCON | string | |\n| XAVA | string | |\n| LRC | string | |\n| UNI3S | string | |\n| POKT | string | |\n| DASH | string | |\n| BAKEDOWN | string | |\n| POLC | string | |\n| CIRUS | string | |\n| UNI3L | string | |\n| NWC | string | |\n| POLK | string | |\n| LSD | string | |\n| MARS4 | string | |\n| LSK | string | |\n| BLOCK | string | |\n| ANALOS | string | |\n| SAFE | string | |\n| DCK | string | |\n| LSS | string | |\n| DCR | string | |\n| LIKE | string | |\n| DATA | string | |\n| WIF | string | |\n| BLOK | string | |\n| LTC | string | |\n| METIS | string | |\n| WIN | string | |\n| HLG | string | |\n| LTO | string | |\n| DYDX | string | |\n| ARB3S | string | |\n| MUBI | string | |\n| ARB3L | string | |\n| RBTC1 | string | |\n| POND | string | |\n| LINA | string | |\n| MYRIA | string | |\n| LINK | string | |\n| QTUM | string | |\n| TUNE | string | |\n| UFO | string | |\n| CYBER | string | |\n| WILD | string | |\n| POLS | string | |\n| NYM | string | |\n| FIL | string | |\n| BAL | string | |\n| SCA | string | |\n| STND | string | |\n| WMTX | string | |\n| SCLP | string | |\n| MANEKI | string | |\n| BAT | string | |\n| AKRO | string | |\n| FTM3L | string | |\n| BAX | string | |\n| FTM3S | string | |\n| COTI | string | |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "prices" + ], + "query": [ + { + "key": "base", + "value": "", + "description": "Ticker symbol of a base currency,eg.USD,EUR. Default is USD" + }, + { + "key": "currencies", + "value": "", + "description": "Comma-separated cryptocurrencies to be converted into fiat, e.g.: BTC,ETH, etc. Default to return the fiat price of all currencies." + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"AGLD\": \"1.1174410000000001\",\n \"DFI\": \"0.0168915500000000\",\n \"PYTHUP\": \"0.0397880960000000\",\n \"ISLM\": \"0.0606196750000000\",\n \"NEAR\": \"4.7185395500000000\",\n \"AIOZ\": \"0.4862867350000000\",\n \"AUDIO\": \"0.1219390000000000\",\n \"BBL\": \"0.0067766100000000\",\n \"WLD\": \"2.2893547500000000\",\n \"HNT\": \"5.8990489999999984\",\n \"ETHFI\": \"1.5892050000000000\",\n \"DMAIL\": \"0.2726636000000000\",\n \"OPUP\": \"0.0986506500000000\",\n \"VET3S\": \"0.0003700448850000\",\n \"MANA3S\": \"0.0006056970000000\",\n \"TIDAL\": \"0.0001154422500000\",\n \"HALO\": \"0.0058270850000000\",\n \"OPUL\": \"0.0839480050000000\",\n \"MANA3L\": \"0.0029569407900000\",\n \"DGB\": \"0.0066556705000000\",\n \"AA\": \"0.2406796000000000\",\n \"BCH\": \"366.2167999999996484\",\n \"GMEE\": \"0.0113333305000000\",\n \"JST\": \"0.0302348750000000\",\n \"PBUX\": \"0.0208795550000000\",\n \"AR\": \"18.5457224999999909\",\n \"SEI\": \"0.4332832500000000\",\n \"PSTAKE\": \"0.0493153300000000\",\n \"LMWR\": \"0.1618190500000000\",\n \"UNFIDOWN\": \"0.0062058955000000\",\n \"BB\": \"0.3245376500000000\",\n \"JTO\": \"2.1239375000000002\",\n \"WEMIX\": \"0.7916040000000000\",\n \"G\": \"0.0324037900000000\",\n \"MARSH\": \"0.0617591050000000\",\n \"BN\": \"0.0036961510000000\",\n \"FLIP\": \"1.0976509000000000\",\n \"FLR\": \"0.0144827550000000\",\n \"BIGTIME\": \"0.1238780300000000\",\n \"FLY\": \"0.0005157420000000\",\n \"T\": \"0.0233483200000000\",\n \"W\": \"0.2865566500000000\",\n \"BDX\": \"0.0774012800000000\",\n \"BABYDOGE\": \"0.0000000029375305\",\n \"SFP\": \"0.7256370000000000\",\n \"DIA\": \"0.9179408000000000\",\n \"ISME\": \"0.0022388800000000\",\n \"LYM\": \"0.0010155919500000\",\n \"VET3L\": \"0.0000289755050000\",\n \"JUP\": \"0.8230882500000000\",\n \"LYX\": \"1.4501745500000001\",\n \"AIEPK\": \"0.0050094940000000\",\n \"SILLY\": \"0.0159420250000000\",\n \"SCPT\": \"0.0122038950000000\",\n \"WOO\": \"0.1796601250000000\",\n \"BLUR\": \"0.2462768000000000\",\n \"STRK\": \"0.3963117450000000\",\n \"BFC\": \"0.0383608100000000\",\n \"DC\": \"0.0003097450500000\",\n \"KARATE\": \"0.0007296350000000\",\n \"SUSHI3L\": \"0.5115441000000000\",\n \"NETVR\": \"0.0976111700000000\",\n \"WAVES\": \"1.0806594000000000\",\n \"LITH\": \"0.0001520239500000\",\n \"HAPI\": \"8.6533711499999987\",\n \"SUSHI3S\": \"1.2752620500000000\",\n \"CEEK\": \"0.0294852500000000\",\n \"FLOKI\": \"0.0001414292500000\",\n \"SHR\": \"0.0012463765000000\",\n \"SAND\": \"0.2566616050000000\",\n \"TURT\": \"0.0020889550000000\",\n \"UMA\": \"2.5207390000000000\",\n \"BEPRO\": \"0.0003955021500000\",\n \"SCRT\": \"0.1995002000000000\",\n \"TUSD\": \"0.9945025000000000\",\n \"COOKIE\": \"0.0220089900000000\",\n \"LRDS\": \"0.6218889000000000\",\n \"SIN\": \"0.0033633175000000\",\n \"OAS\": \"0.0331933950000000\",\n \"ROOT\": \"0.0183108400000000\",\n \"ADA3L\": \"0.0046396790000000\",\n \"TIAUP\": \"0.1228385500000000\",\n \"HTR\": \"0.0353023400000000\",\n \"UNB\": \"0.0003837080500000\",\n \"UNA\": \"0.0164917500000000\",\n \"HARD\": \"0.1087056200000000\",\n \"G3\": \"0.0502648550000000\",\n \"ADA3S\": \"0.0006191202850000\",\n \"MYRO\": \"0.1071863800000000\",\n \"HTX\": \"0.0000013693150000\",\n \"FT\": \"0.3585206500000000\",\n \"BTCDOWN\": \"0.1065467000000000\",\n \"UNI\": \"7.3571195999999993\",\n \"FX\": \"0.1379310000000000\",\n \"OBI\": \"0.0079030465000000\",\n \"UNO\": \"0.0137131400000000\",\n \"WRX\": \"0.1221389000000000\",\n \"TIADOWN\": \"0.0000914642450000\",\n \"ETHDOWN\": \"0.1306346500000000\",\n \"WELL\": \"0.0471244260000000\",\n \"SWFTC\": \"0.0028966509500000\",\n \"SKL\": \"0.0362418700000000\",\n \"UOS\": \"0.0867765900000000\",\n \"AIPAD\": \"0.0478660550000000\",\n \"BRETT\": \"0.1037481000000000\",\n \"SKY\": \"0.0520139800000000\",\n \"FRM\": \"0.0153123400000000\",\n \"VISION\": \"0.0014451770500000\",\n \"LENDS\": \"0.0047276350000000\",\n \"SLF\": \"0.3318340000000000\",\n \"BULL\": \"0.0023988000000000\",\n \"FLOW\": \"0.5372312500000000\",\n \"ODDZ\": \"0.0063368300000000\",\n \"SLN\": \"0.2804597000000000\",\n \"UPO\": \"0.0440779500000000\",\n \"SLP\": \"0.0023997995000000\",\n \"ID\": \"0.3718140000000000\",\n \"SLIM\": \"0.0906446550000000\",\n \"SPOT\": \"0.0021289350000000\",\n \"DOP\": \"0.0023028480000000\",\n \"ISSP\": \"0.0000874562500000\",\n \"UQC\": \"3.2339822000000003\",\n \"IO\": \"1.8185902499999999\",\n \"DOT\": \"4.2022978000000005\",\n \"1INCH\": \"0.2645676500000000\",\n \"SMH\": \"0.3448275000000000\",\n \"MAK\": \"0.0396701550000000\",\n \"TOKO\": \"0.0005923037000000\",\n \"TURBO\": \"0.0108085930000000\",\n \"UNFI\": \"2.8555714999999996\",\n \"MAN\": \"0.0210764565000000\",\n \"EVER\": \"0.0332733550000000\",\n \"FTM\": \"0.7259068650000000\",\n \"SHRAP\": \"0.0476361700000000\",\n \"MAV\": \"0.1738130500000000\",\n \"MAX\": \"0.2864966800000000\",\n \"DPR\": \"0.0018240875000000\",\n \"FTT\": \"2.0559715000000002\",\n \"ARKM\": \"1.7444273499999999\",\n \"ATOM\": \"4.2954512000000002\",\n \"PENDLE\": \"4.1554212500000007\",\n \"QUICK\": \"0.0365317250000000\",\n \"BLZ\": \"0.1217191100000000\",\n \"BOBA\": \"0.2014092450000000\",\n \"MBL\": \"0.0027856065000000\",\n \"OFN\": \"0.1252373500000000\",\n \"UNIO\": \"0.0025487250000000\",\n \"SNS\": \"0.0200899500000000\",\n \"SNX\": \"1.4282854999999999\",\n \"NXRA\": \"0.0272763550000000\",\n \"TAIKO\": \"1.4392800000000001\",\n \"AVAX3L\": \"0.1410875109550000\",\n \"L3\": \"0.0608395650000000\",\n \"API3\": \"1.3728132500000001\",\n \"XRP3S\": \"0.0028095945000000\",\n \"QKC\": \"0.0085157400000000\",\n \"AVAX3S\": \"0.5148424500000000\",\n \"ROSE\": \"0.0693453100000000\",\n \"SATS\": \"0.0000002701648500\",\n \"BMX\": \"0.3100449000000000\",\n \"PORTAL\": \"0.2811593500000000\",\n \"TOMI\": \"0.0309045400000000\",\n \"XRP3L\": \"2.1586201500000002\",\n \"SOL\": \"151.7250995000003583\",\n \"SON\": \"0.0002421788500000\",\n \"BNC\": \"0.1882058500000000\",\n \"SOCIAL\": \"0.0026486750000000\",\n \"CGPT\": \"0.1305147100000000\",\n \"CELR\": \"0.0127736100000000\",\n \"BNB\": \"591.0973035000118935\",\n \"OGN\": \"0.0852573500000000\",\n \"CELO\": \"0.7711142500000000\",\n \"AUCTION\": \"13.1634150000000014\",\n \"MANTA\": \"0.7564216000000000\",\n \"LAYER\": \"0.0372713550000000\",\n \"AERO\": \"1.3783104999999999\",\n \"CETUS\": \"0.1808295400000000\",\n \"LL\": \"0.0201199350000000\",\n \"SPA\": \"0.0067426270000000\",\n \"PYTHDOWN\": \"0.0011834080000000\",\n \"NEIROCTO\": \"0.0019964013000000\",\n \"UTK\": \"0.0365217300000000\",\n \"GMRX\": \"0.0007386305000000\",\n \"BOB\": \"0.0000380619595000\",\n \"HOTCROSS\": \"0.0056491740000000\",\n \"AERGO\": \"0.1007595950000000\",\n \"MOCA\": \"0.0783608000000000\",\n \"SQD\": \"0.0380809500000000\",\n \"MV\": \"0.0081359300000000\",\n \"BNB3L\": \"0.2761618500000000\",\n \"BNB3S\": \"0.0008545725000000\",\n \"GALAX3L\": \"0.0057571999600000\",\n \"KAI\": \"0.0020080954500000\",\n \"SQR\": \"0.0470764500000000\",\n \"GALAX3S\": \"0.1933033000000000\",\n \"EGLD\": \"25.5272299999999713\",\n \"ZBCN\": \"0.0010404795000000\",\n \"KAS\": \"0.1216691350000000\",\n \"MEW\": \"0.0086176890000000\",\n \"PUNDIX\": \"0.4130933500000000\",\n \"LOOKS\": \"0.0392803500000000\",\n \"FXS\": \"1.9060465000000000\",\n \"BOSON\": \"0.2732633000000000\",\n \"BRISE\": \"0.0000000860569500\",\n \"AEVO\": \"0.3388305000000000\",\n \"FLUX\": \"0.5276360500000000\",\n \"PRCL\": \"0.1969015000000000\",\n \"UNFIUP\": \"0.0011654170000000\",\n \"SEIDOWN\": \"0.0442778500000000\",\n \"DOAI\": \"0.0052363805000000\",\n \"QNT\": \"65.4312679999998206\",\n \"REDO\": \"0.2837580500000000\",\n \"STRIKE\": \"6.8225869999999997\",\n \"ETHW\": \"3.2418782499999998\",\n \"OM\": \"1.5396797750000000\",\n \"OP\": \"1.6911539999999999\",\n \"WHALE\": \"0.8134930500000000\",\n \"1CAT\": \"0.0018460765000000\",\n \"NEON\": \"0.4446775500000000\",\n \"GTAI\": \"0.7786105000000000\",\n \"SSV\": \"21.2393749999999841\",\n \"ETH2\": \"2601.6678843156403923\",\n \"KCS\": \"8.7646155000000020\",\n \"ARPA\": \"0.0393882960000000\",\n \"ARTFI\": \"0.0141029450000000\",\n \"BRL\": \"0.1742807323452485\",\n \"ALEX\": \"0.0924537500000000\",\n \"STG\": \"0.2943527500000000\",\n \"SHIB\": \"0.0000178060925000\",\n \"IOTX\": \"0.0394202800000000\",\n \"OLE\": \"0.0171414250000000\",\n \"KDA\": \"0.5653172000000000\",\n \"CERE\": \"0.0022548720000000\",\n \"DOCK\": \"0.0018990500000000\",\n \"STX\": \"1.8157916500000000\",\n \"OLT\": \"0.0007596200000000\",\n \"QI\": \"0.0131754090000000\",\n \"SDAO\": \"0.2748625000000000\",\n \"BLAST\": \"0.0087636160000000\",\n \"LINK3S\": \"0.0000702948350000\",\n \"IOST\": \"0.0049745115000000\",\n \"SUI\": \"2.0589700000000000\",\n \"CAKE\": \"1.7941024999999999\",\n \"BSW\": \"0.0586706500000000\",\n \"OMG\": \"0.2597700500000000\",\n \"VOLT\": \"0.0000002716641000\",\n \"LINK3L\": \"1.3408292499999999\",\n \"GEEQ\": \"0.0385607100000000\",\n \"PYUSD\": \"0.9988003500000000\",\n \"SUN\": \"0.0186106900000000\",\n \"TOWER\": \"0.0014812590000000\",\n \"BTC\": \"67133.4165000832051564\",\n \"IOTA\": \"0.1189405000000000\",\n \"REEF\": \"0.0019960015000000\",\n \"TRIAS\": \"3.3683149999999998\",\n \"KEY\": \"0.0037594713240047\",\n \"ETH3L\": \"0.0003305946200000\",\n \"BTT\": \"0.0000009117439000\",\n \"ONE\": \"0.0132003965000000\",\n \"RENDER\": \"5.2263854999999995\",\n \"ETH3S\": \"0.5517240000000000\",\n \"ANKR\": \"0.0264867500000000\",\n \"ALGO\": \"0.1188405500000000\",\n \"SYLO\": \"0.0007600198000000\",\n \"ZCX\": \"0.0784707450000000\",\n \"SD\": \"0.3851073500000000\",\n \"ONT\": \"0.1877960550000000\",\n \"MJT\": \"0.0132433750000000\",\n \"DYM\": \"1.6659666000000001\",\n \"DYP\": \"0.0205397250000000\",\n \"BAKEUP\": \"0.0389894955000000\",\n \"OOE\": \"0.0079360300000000\",\n \"ZELIX\": \"0.0000649675000000\",\n \"DOGE3L\": \"0.3837080500000000\",\n \"ARTY\": \"0.3980009000000000\",\n \"QORPO\": \"0.1204297550000000\",\n \"ICE\": \"0.0051504235000000\",\n \"NOTAI\": \"0.0000892753400000\",\n \"DOGE3S\": \"0.2291853500000000\",\n \"NAKA\": \"1.0695649500000000\",\n \"GALAX\": \"0.0212893500000000\",\n \"MKR\": \"1245.8767500000163833\",\n \"DODO\": \"0.1152423500000000\",\n \"ICP\": \"7.6731615000000027\",\n \"ZEC\": \"35.9400209999999543\",\n \"ZEE\": \"0.0065767100000000\",\n \"ICX\": \"0.1383308000000000\",\n \"KMNO\": \"0.0921499020000000\",\n \"TT\": \"0.0033883050000000\",\n \"DOT3L\": \"0.1454272500000000\",\n \"XAI\": \"0.2038980000000000\",\n \"ZEN\": \"8.0149905000000007\",\n \"DOGE\": \"0.1213093150000000\",\n \"ALPHA\": \"0.0567416150000000\",\n \"DUSK\": \"0.1964517250000000\",\n \"DOT3S\": \"0.0053613180000000\",\n \"SXP\": \"0.2538730000000000\",\n \"HBAR\": \"0.0510044850000000\",\n \"SYNT\": \"0.0467166300000000\",\n \"ZEX\": \"0.0571714000000000\",\n \"BONDLY\": \"0.0022208890000000\",\n \"MLK\": \"0.2080859050000000\",\n \"KICKS\": \"0.0001301249050000\",\n \"PEPE\": \"0.0000100249850000\",\n \"OUSD\": \"0.9982006500000000\",\n \"LUNCDOWN\": \"0.0000733333150000\",\n \"DOGS\": \"0.0007086455000000\",\n \"REV3L\": \"0.0094672640000000\",\n \"CTSI\": \"0.1257371000000000\",\n \"C98\": \"0.1219390000000000\",\n \"OSMO\": \"0.5370313500000000\",\n \"NTRN\": \"0.3869064500000000\",\n \"CFX2S\": \"0.0084757600000000\",\n \"SYN\": \"0.5636180500000000\",\n \"VIDT\": \"0.0308745550000000\",\n \"SYS\": \"0.0997501000000000\",\n \"GAS\": \"4.3029474500000008\",\n \"BOME\": \"0.0087336310000000\",\n \"COMBO\": \"0.4068964500000000\",\n \"XCH\": \"14.9825050000000010\",\n \"VR\": \"0.0063538215000000\",\n \"CFX2L\": \"0.0499660045000000\",\n \"VSYS\": \"0.0005201398000000\",\n \"PANDORA\": \"1629.2949450001102772\",\n \"THETA\": \"1.2461766000000000\",\n \"XCN\": \"0.0012699647000000\",\n \"NEXG\": \"0.0039180400000000\",\n \"MELOS\": \"0.0021244372500000\",\n \"XCV\": \"0.0013253370000000\",\n \"ORN\": \"0.8797599000000000\",\n \"WLKN\": \"0.0010624685000000\",\n \"AAVE\": \"154.2708259999996162\",\n \"MNT\": \"0.6168914000000000\",\n \"BONK\": \"0.0000227296295000\",\n \"PERP\": \"0.6037979500000000\",\n \"XDC\": \"0.0276361750000000\",\n \"MNW\": \"0.3681158500000000\",\n \"XDB\": \"0.0002578710000000\",\n \"BOND\": \"1.5662165000000000\",\n \"SUIA\": \"0.0809595000000000\",\n \"MOG\": \"0.0000019330330000\",\n \"SUTER\": \"0.0001840079500000\",\n \"TIME\": \"16.2648634999999969\",\n \"RACA\": \"0.0001949025000000\",\n \"BICO\": \"0.2021988500000000\",\n \"MON\": \"0.1066466500000000\",\n \"SWEAT\": \"0.0063718125000000\",\n \"MOXIE\": \"0.0022088950000000\",\n \"BABYBNB\": \"0.0289755050000000\",\n \"IGU\": \"0.0050674650000000\",\n \"HMSTR\": \"0.0037990995000000\",\n \"XEC\": \"0.0000354722550000\",\n \"MONI\": \"0.0058470750000000\",\n \"XR\": \"0.2374812000000000\",\n \"PEOPLE\": \"0.0796601500000000\",\n \"PUMLX\": \"0.0054572700000000\",\n \"ZIL\": \"0.0145927000000000\",\n \"WLDDOWN\": \"0.2089954500000000\",\n \"VAI\": \"0.0799999800000000\",\n \"XEN\": \"0.0000000839580000\",\n \"MPC\": \"0.1001499000000000\",\n \"XEM\": \"0.0176951480000000\",\n \"JASMY3S\": \"0.0019670160000000\",\n \"OTK\": \"0.0290464695000000\",\n \"TRAC\": \"0.4521738000000000\",\n \"DFYN\": \"0.0070664650000000\",\n \"BIDP\": \"0.0001939030000000\",\n \"JASMY3L\": \"0.0001653772700000\",\n \"INJDOWN\": \"0.0000194902500000\",\n \"KLV\": \"0.0019310340000000\",\n \"WAXL\": \"0.7858069000000000\",\n \"TRBDOWN\": \"0.0023138425000000\",\n \"BCH3L\": \"4.6390663064999996\",\n \"GMT3S\": \"0.0000457771000000\",\n \"KMD\": \"0.2493752500000000\",\n \"BCH3S\": \"0.9634180500000000\",\n \"ECOX\": \"0.0987506000000000\",\n \"AAVE3S\": \"0.0560719500000000\",\n \"GMT3L\": \"0.0053983694650000\",\n \"EPIK\": \"0.0045857060000000\",\n \"SUIP\": \"0.1067565950000000\",\n \"AAVE3L\": \"0.3638687346200000\",\n \"ZK\": \"0.1262368500000000\",\n \"ZKF\": \"0.0008595700000000\",\n \"OMNIA\": \"0.7624186000000000\",\n \"ZKJ\": \"1.1124435000000000\",\n \"ZKL\": \"0.1255372000000000\",\n \"GAFI\": \"3.0634675000000001\",\n \"CARV\": \"0.8703646000000000\",\n \"KNC\": \"0.4433782000000000\",\n \"CATS\": \"0.0000599700000000\",\n \"PROM\": \"5.2833570000000006\",\n \"ALEPH\": \"0.1756121500000000\",\n \"PONKE\": \"0.3958020000000000\",\n \"OVR\": \"0.1553223000000000\",\n \"CATI\": \"0.4105146400000000\",\n \"ORDER\": \"0.1183008200000000\",\n \"GFT\": \"0.0166616650000000\",\n \"BIFI\": \"0.0020489750000000\",\n \"GGC\": \"6.9965029985000000\",\n \"GGG\": \"0.0403798000000000\",\n \"DAPPX\": \"0.0043788095000000\",\n \"SUKU\": \"0.0618790450000000\",\n \"ULTI\": \"0.0168015950000000\",\n \"CREDI\": \"0.0192903500000000\",\n \"ERTHA\": \"0.0010014990000000\",\n \"FURY\": \"0.1405297000000000\",\n \"KARRAT\": \"0.5577210000000000\",\n \"MOBILE\": \"0.0009005495000000\",\n \"SIDUS\": \"0.0037671155000000\",\n \"NAVI\": \"0.1254672350000000\",\n \"TAO\": \"583.4081500000051807\",\n \"USDJ\": \"1.1386304000000001\",\n \"MTL\": \"0.9563216000000000\",\n \"VET\": \"0.0225387250000000\",\n \"FITFI\": \"0.0036421780000000\",\n \"USDT\": \"0.9995000000000000\",\n \"OXT\": \"0.0695652000000000\",\n \"CANDY\": \"0.0005597200000000\",\n \"USDP\": \"0.9932031500000000\",\n \"MTS\": \"0.0027516235000000\",\n \"TADA\": \"0.0283858000000000\",\n \"MTV\": \"0.0006559718500000\",\n \"NAVX\": \"0.1342228550000000\",\n \"ILV\": \"35.6771524999999671\",\n \"VINU\": \"0.0000000109045450\",\n \"GHX\": \"0.0903548000000000\",\n \"EDU\": \"0.5167415000000000\",\n \"HYVE\": \"0.0137331300000000\",\n \"BTC3L\": \"0.0058620675000000\",\n \"ANYONE\": \"0.9015490000000000\",\n \"BEAT\": \"0.0012593700000000\",\n \"KING\": \"0.0004821588000000\",\n \"CREAM\": \"15.6541689999999973\",\n \"CAS\": \"0.0038590695000000\",\n \"IMX\": \"1.4944524000000000\",\n \"CAT\": \"0.0000256981445000\",\n \"BTC3S\": \"0.0014142925000000\",\n \"USDE\": \"0.9985005000000000\",\n \"USDD\": \"1.0000997000000000\",\n \"CWAR\": \"0.0037981000000000\",\n \"USDC\": \"0.9997998500000000\",\n \"KRL\": \"0.3543127550000000\",\n \"INJ\": \"21.7691100000000194\",\n \"GAME\": \"0.0139630150000000\",\n \"TRIBL\": \"1.0994500000000000\",\n \"XLM\": \"0.0948525500000000\",\n \"TRBUP\": \"0.0012293850000000\",\n \"VRADOWN\": \"0.0013433280000000\",\n \"SUPER\": \"1.2853570000000000\",\n \"EIGEN\": \"3.1536223999999999\",\n \"IOI\": \"0.0146926500000000\",\n \"KSM\": \"17.5212350000000129\",\n \"CCD\": \"0.0034832575000000\",\n \"EGO\": \"0.0093553200000000\",\n \"EGP\": \"2.7946019999999998\",\n \"MXC\": \"0.0066866550000000\",\n \"TEL\": \"0.0014432780000000\",\n \"MOVR\": \"9.1340307000000027\",\n \"XMR\": \"155.5421899999990755\",\n \"MXM\": \"0.0092853550000000\",\n \"OORT\": \"0.1099949750000000\",\n \"GLM\": \"0.3231383500000000\",\n \"RAY\": \"2.0228880499999998\",\n \"XTAG\": \"0.0218190850000000\",\n \"GLQ\": \"0.0854572500000000\",\n \"CWEB\": \"0.0038480750000000\",\n \"REVU\": \"0.0105047450000000\",\n \"REVV\": \"0.0039760110000000\",\n \"ZRO\": \"3.7952014499999994\",\n \"XNL\": \"0.0093853050000000\",\n \"XNO\": \"0.8496749500000000\",\n \"SAROS\": \"0.0019290350000000\",\n \"KACE\": \"2.1165411999999998\",\n \"ZRX\": \"0.3186406000000000\",\n \"WLTH\": \"0.0374312750000000\",\n \"ATOM3L\": \"0.0321719060000000\",\n \"GMM\": \"0.0001497251000000\",\n \"BEER\": \"0.0000138670630000\",\n \"GMT\": \"0.1275362000000000\",\n \"HEART\": \"0.0159920000000000\",\n \"GMX\": \"22.7186349999999882\",\n \"ABBC\": \"0.0061769100000000\",\n \"OMNI\": \"8.9235359999999970\",\n \"ATOM3S\": \"0.0007945225400000\",\n \"IRL\": \"0.0099650150000000\",\n \"CFG\": \"0.3248375000000000\",\n \"WSDM\": \"0.0139830050000000\",\n \"GNS\": \"1.8390800000000001\",\n \"VANRY\": \"0.0809295150000000\",\n \"CFX\": \"0.1595202000000000\",\n \"GRAIL\": \"817.1212349999937891\",\n \"BEFI\": \"0.0175712100000000\",\n \"VELO\": \"0.0132043945000000\",\n \"XPR\": \"0.0008077959000000\",\n \"DOVI\": \"0.0584707500000000\",\n \"ACE\": \"0.0021349320000000\",\n \"ACH\": \"0.0190534685000000\",\n \"ISP\": \"0.0012161916000000\",\n \"XCAD\": \"0.2834582000000000\",\n \"MINA\": \"0.5630183500000000\",\n \"TIA\": \"5.9318325999999999\",\n \"DRIFT\": \"0.4350823500000000\",\n \"ACQ\": \"0.0056981495000000\",\n \"ACS\": \"0.0014917537500000\",\n \"MIND\": \"0.0018920535000000\",\n \"STORE\": \"0.0062358805000000\",\n \"REN\": \"0.0351224300000000\",\n \"ELA\": \"1.7282354500000000\",\n \"DREAMS\": \"0.0002498750000000\",\n \"ADA\": \"0.3463267500000000\",\n \"ELF\": \"0.3777110500000000\",\n \"REQ\": \"0.0959919800000000\",\n \"STORJ\": \"0.5662167500000000\",\n \"LADYS\": \"0.0000000837581000\",\n \"PAXG\": \"2697.9303600003123340\",\n \"REZ\": \"0.0409795000000000\",\n \"XRD\": \"0.0157821050000000\",\n \"CHO\": \"0.0205097400000000\",\n \"CHR\": \"0.1769115000000000\",\n \"ADS\": \"0.1889055000000000\",\n \"CHZ\": \"0.0738030800000000\",\n \"ADX\": \"0.1575212000000000\",\n \"XRP\": \"0.5525036100000000\",\n \"JASMY\": \"0.0188615645000000\",\n \"KAGI\": \"0.1834582250000000\",\n \"FIDA\": \"0.2282858000000000\",\n \"PBR\": \"0.0291953950000000\",\n \"AEG\": \"0.0093453250000000\",\n \"H2O\": \"0.1610194500000000\",\n \"CHMB\": \"0.0001715641750000\",\n \"SAND3L\": \"0.0015447972150000\",\n \"PBX\": \"0.0006879558500000\",\n \"SOLVE\": \"0.0084557700000000\",\n \"DECHAT\": \"0.1512243500000000\",\n \"GARI\": \"0.0076861550000000\",\n \"SHIB2L\": \"1.1996998499999999\",\n \"SHIB2S\": \"0.0240879500000000\",\n \"ENA\": \"0.3942028000000000\",\n \"VEMP\": \"0.0029335325000000\",\n \"ENJ\": \"0.1467266000000000\",\n \"AFG\": \"0.0072163900000000\",\n \"RATS\": \"0.0001211593900000\",\n \"GRT\": \"0.1646076550000000\",\n \"FORWARD\": \"0.0012873560000000\",\n \"TFUEL\": \"0.0598800450000000\",\n \"ENS\": \"17.0634640000000052\",\n \"KASDOWN\": \"0.0258770550000000\",\n \"XTM\": \"0.0251074400000000\",\n \"DEGEN\": \"0.0084857550000000\",\n \"TLM\": \"0.0100449750000000\",\n \"DYDXDOWN\": \"0.1042598440000000\",\n \"CKB\": \"0.0146026950000000\",\n \"LUNC\": \"0.0000889255150000\",\n \"AURORA\": \"0.1204397500000000\",\n \"LUNA\": \"0.3624187000000000\",\n \"XTZ\": \"0.6776610000000000\",\n \"ELON\": \"0.0000001410294500\",\n \"DMTR\": \"0.0891554000000000\",\n \"EOS\": \"0.4759619000000000\",\n \"GST\": \"0.0118940500000000\",\n \"FORT\": \"0.1155422000000000\",\n \"FLAME\": \"0.0247076400000000\",\n \"PATEX\": \"0.9605195000000000\",\n \"DEEP\": \"0.0328885475000000\",\n \"ID3L\": \"0.0016201895000000\",\n \"GTC\": \"0.6625685500000000\",\n \"ID3S\": \"0.0071674145000000\",\n \"RIO\": \"0.7616190000000000\",\n \"CLH\": \"0.0008555720000000\",\n \"BURGER\": \"0.4016990500000000\",\n \"VRA\": \"0.0029765110000000\",\n \"SUNDOG\": \"0.2173912500000000\",\n \"GTT\": \"0.0002038980000000\",\n \"INJUP\": \"0.2327835500000000\",\n \"CPOOL\": \"0.1557720750000000\",\n \"EPX\": \"0.0000740629500000\",\n \"CLV\": \"0.0329835000000000\",\n \"FEAR\": \"0.0560519600000000\",\n \"MEME\": \"0.0124847545000000\",\n \"ROOBEE\": \"0.0004520738500000\",\n \"DEFI\": \"0.0192903500000000\",\n \"TOKEN\": \"0.0477361200000000\",\n \"GRAPE\": \"0.0020599695000000\",\n \"KASUP\": \"0.3996001000000000\",\n \"XWG\": \"0.0003843077500000\",\n \"SKEY\": \"0.0621289200000000\",\n \"SFUND\": \"1.3243375000000000\",\n \"EQX\": \"0.0032823580000000\",\n \"ORDIUP\": \"0.0548315705000000\",\n \"TON\": \"5.1857058499999995\",\n \"DEGO\": \"2.2667660500000001\",\n \"IZI\": \"0.0088455750000000\",\n \"ERG\": \"0.6605695500000000\",\n \"ERN\": \"1.9255367500000001\",\n \"VENOM\": \"0.0817591000000000\",\n \"VOXEL\": \"0.1497251000000000\",\n \"RLC\": \"1.4649671500000000\",\n \"PHA\": \"0.1093453000000000\",\n \"DYDXUP\": \"0.0112573685000000\",\n \"APE3S\": \"0.0008475760000000\",\n \"ORBS\": \"0.0288955450000000\",\n \"OPDOWN\": \"0.6758619000000000\",\n \"ESE\": \"0.0139130400000000\",\n \"APE3L\": \"0.1339330000000000\",\n \"HMND\": \"0.0982208650000000\",\n \"COQ\": \"0.0000014432780000\",\n \"AURY\": \"0.3340329000000000\",\n \"CULT\": \"0.0000028025980000\",\n \"AKT\": \"2.4642672500000001\",\n \"GLMR\": \"0.1606196500000000\",\n \"XYM\": \"0.0142528700000000\",\n \"ORAI\": \"6.1769100000000012\",\n \"XYO\": \"0.0058680645000000\",\n \"ETC\": \"18.8458723500000169\",\n \"LAI\": \"0.0142828550000000\",\n \"PIP\": \"0.0178310800000000\",\n \"ETH\": \"2607.6655149998362673\",\n \"NEO\": \"10.3575186499999991\",\n \"RMV\": \"0.0081659150000000\",\n \"KLAY\": \"0.1251374000000000\",\n \"PIT\": \"0.0000000003268365\",\n \"TARA\": \"0.0043978000000000\",\n \"KALT\": \"0.1128735350000000\",\n \"PIX\": \"0.0001023687900000\",\n \"ETN\": \"0.0021579205000000\",\n \"CSIX\": \"0.0141729100000000\",\n \"TRADE\": \"0.4708644500000000\",\n \"MAVIA\": \"1.3592200500000001\",\n \"HIGH\": \"1.3043474999999999\",\n \"TRB\": \"62.5387150000000006\",\n \"ORDI\": \"35.7421200000000126\",\n \"TRVL\": \"0.0373643085000000\",\n \"AMB\": \"0.0059670150000000\",\n \"TRU\": \"0.0762018800000000\",\n \"LOGX\": \"0.0271963950000000\",\n \"FINC\": \"0.0362018900000000\",\n \"INFRA\": \"0.1978010500000000\",\n \"NATIX\": \"0.0008729633000000\",\n \"NFP\": \"0.2152923000000000\",\n \"TRY\": \"0.0292166033323590\",\n \"TRX\": \"0.1597201000000000\",\n \"LBP\": \"0.0001243378000000\",\n \"LBR\": \"0.0595702000000000\",\n \"EUL\": \"2.9735125000000000\",\n \"NFT\": \"0.0000004077960000\",\n \"SEIUP\": \"0.0478110825000000\",\n \"PUFFER\": \"0.3676161000000000\",\n \"EUR\": \"1.0811249323958897\",\n \"ORCA\": \"2.0664662499999999\",\n \"NEAR3L\": \"0.0117010765350000\",\n \"AMP\": \"0.0038330825000000\",\n \"XDEFI\": \"0.0472563600000000\",\n \"HIFI\": \"0.4947525000000000\",\n \"TRUF\": \"0.0459570100000000\",\n \"AITECH\": \"0.1045477000000000\",\n \"AMU\": \"0.0043978000000000\",\n \"USTC\": \"0.0214692600000000\",\n \"KNGL\": \"0.0499750000000000\",\n \"FOXY\": \"0.0102686631000000\",\n \"NGC\": \"0.0147935995000000\",\n \"TENET\": \"0.0043278350000000\",\n \"NEAR3S\": \"0.0072553705000000\",\n \"MAHA\": \"1.1904045000000000\",\n \"NGL\": \"0.0701748950000000\",\n \"TST\": \"0.0080359800000000\",\n \"HIPPO\": \"0.0104447750000000\",\n \"AXS3S\": \"0.0308705570000000\",\n \"CRO\": \"0.0781409100000000\",\n \"ZPAY\": \"0.0050574700000000\",\n \"MNDE\": \"0.1026786350000000\",\n \"CRV\": \"0.2534732000000000\",\n \"SWASH\": \"0.0056271850000000\",\n \"AXS3L\": \"0.0106388779000000\",\n \"VERSE\": \"0.0001803098000000\",\n \"RPK\": \"0.0049975000000000\",\n \"RPL\": \"10.9745099999999958\",\n \"AZERO\": \"0.3789104500000000\",\n \"SOUL\": \"0.0534332700000000\",\n \"VXV\": \"0.2619689500000000\",\n \"LDO\": \"1.0885554500000000\",\n \"MAGIC\": \"0.3390304000000000\",\n \"ALICE\": \"1.0324835000000000\",\n \"SEAM\": \"1.1933030499999999\",\n \"PLU\": \"1.9300345000000001\",\n \"AOG\": \"0.0031224380000000\",\n \"SMOLE\": \"0.0000387806000000\",\n \"EWT\": \"1.1094450000000000\",\n \"TSUGT\": \"0.0029185400000000\",\n \"PMG\": \"0.0800599500000000\",\n \"OPAI\": \"0.0006826585000000\",\n \"LOCUS\": \"0.0216591650000000\",\n \"CTA\": \"0.0825087250000000\",\n \"NIM\": \"0.0013673160000000\",\n \"CTC\": \"0.4033982000000000\",\n \"APE\": \"0.7035480500000000\",\n \"MERL\": \"0.2720639000000000\",\n \"JAM\": \"0.0004770613500000\",\n \"CTI\": \"0.0130314810000000\",\n \"APP\": \"0.0021989000000000\",\n \"APT\": \"9.9947001500000000\",\n \"WLDUP\": \"0.0093043455000000\",\n \"ZEND\": \"0.1280759300000000\",\n \"FIRE\": \"0.9113441000000000\",\n \"DENT\": \"0.0008630682500000\",\n \"PYTH\": \"0.3390603850000000\",\n \"LFT\": \"0.0155322300000000\",\n \"DPET\": \"0.0319040400000000\",\n \"ORDIDOWN\": \"0.3788105000000000\",\n \"KPOL\": \"0.0029175405000000\",\n \"ETHUP\": \"8.4971493000000032\",\n \"BAND\": \"1.0939527500000001\",\n \"POL\": \"0.3656171000000000\",\n \"ASTR\": \"0.0582608550000000\",\n \"NKN\": \"0.0691654000000000\",\n \"RSR\": \"0.0068055955000000\",\n \"DVPN\": \"0.0005979009000000\",\n \"TWT\": \"1.1119437500000000\",\n \"ARB\": \"0.5510243500000000\",\n \"CVC\": \"0.1409801746501747\",\n \"ARC\": \"0.0300849500000000\",\n \"XETA\": \"0.0022888550000000\",\n \"MTRG\": \"0.4007995000000000\",\n \"LOKA\": \"0.1867066000000000\",\n \"LPOOL\": \"0.0660069800000000\",\n \"TURBOS\": \"0.0034812585000000\",\n \"CVX\": \"1.7816087499999999\",\n \"ARX\": \"0.0007556220000000\",\n \"MPLX\": \"0.4355221300000000\",\n \"SUSHI\": \"0.7011492500000000\",\n \"NLK\": \"0.0114442750000000\",\n \"PEPE2\": \"0.0000000313843000\",\n \"WBTC\": \"66881.4425499645548419\",\n \"SUI3L\": \"0.0211204345000000\",\n \"CWS\": \"0.1927036000000000\",\n \"SUI3S\": \"0.0000579110300000\",\n \"INSP\": \"0.0264167850000000\",\n \"MANA\": \"0.2945026750000000\",\n \"VRTX\": \"0.0641679000000000\",\n \"CSPR\": \"0.0116441750000000\",\n \"ATA\": \"0.0785007300000000\",\n \"OPEN\": \"0.0080049955000000\",\n \"HAI\": \"0.0448275750000000\",\n \"NMR\": \"14.7436245000000072\",\n \"ATH\": \"0.0540929400000000\",\n \"LIT\": \"0.6282857000000000\",\n \"TLOS\": \"0.3263467450000000\",\n \"TNSR\": \"0.3662168000000000\",\n \"CXT\": \"0.0871364100000000\",\n \"POLYX\": \"0.2346826000000000\",\n \"ZERO\": \"0.0002507745500000\",\n \"ROUTE\": \"0.0610694500000000\",\n \"LOOM\": \"0.0580009850000000\",\n \"PRE\": \"0.0078680640000000\",\n \"VRAUP\": \"0.0134652640000000\",\n \"HBB\": \"0.0714742450000000\",\n \"RVN\": \"0.0165017450000000\",\n \"PRQ\": \"0.0715741950000000\",\n \"ONDO\": \"0.7134930750000000\",\n \"PEPEDOWN\": \"0.0000155022450000\",\n \"WOOP\": \"0.0020179905000000\",\n \"LUNCUP\": \"0.0168355780000000\",\n \"KAVA\": \"0.3522238000000000\",\n \"LKI\": \"0.0104187880000000\",\n \"AVA\": \"0.4857570000000000\",\n \"NOM\": \"0.0233883000000000\",\n \"MAPO\": \"0.0089015470000000\",\n \"PEPEUP\": \"0.0114252845000000\",\n \"STRAX\": \"0.0487156300000000\",\n \"NOT\": \"0.0078670645000000\",\n \"ZERC\": \"0.1108245600000000\",\n \"BCUT\": \"0.0255672100000000\",\n \"MASA\": \"0.0691354150000000\",\n \"WAN\": \"0.1785077544737212\",\n \"WAT\": \"0.0003273762300000\",\n \"WAX\": \"0.0327636100000000\",\n \"MASK\": \"2.2259864500000002\",\n \"EOS3L\": \"0.0002122138400000\",\n \"IDEA\": \"0.0005887055000000\",\n \"EOS3S\": \"0.0034472755000000\",\n \"YFI\": \"4919.4290549999908843\",\n \"MOODENG\": \"0.0774612500000000\",\n \"XCUR\": \"0.0048845565000000\",\n \"HYDRA\": \"0.2225886500000000\",\n \"POPCAT\": \"1.3382305500000000\",\n \"LQTY\": \"0.7848074000000000\",\n \"PIXEL\": \"0.1406596350000000\",\n \"LMR\": \"0.0145437245000000\",\n \"ZETA\": \"0.5997999500000000\",\n \"YGG\": \"0.4717640000000000\",\n \"AXS\": \"4.6006985000000006\",\n \"BCHSV\": \"49.8250749999999370\",\n \"NRN\": \"0.0395802000000000\",\n \"FTON\": \"0.0091954000000000\",\n \"COMP\": \"43.6581599999999881\",\n \"XPRT\": \"0.1819090000000000\",\n \"HFT\": \"0.1443278000000000\",\n \"UXLINK\": \"0.5085456000000000\",\n \"STAMP\": \"0.0335032400000000\",\n \"RUNE\": \"4.9233370999999996\",\n \"ZEUS\": \"0.2587705500000000\",\n \"LTC3L\": \"1.8294848000000001\",\n \"DAPP\": \"0.1763118000000000\",\n \"FORTH\": \"2.9508238500000004\",\n \"ALPINE\": \"1.5322335000000000\",\n \"SENSO\": \"0.0328835500000000\",\n \"LTC3S\": \"0.0006986505000000\",\n \"DEXE\": \"8.3795081500000028\",\n \"GOAL\": \"0.0175912000000000\",\n \"AVAX\": \"27.5602130000000058\",\n \"LISTA\": \"0.3782108000000000\",\n \"AMPL\": \"1.3743124999999999\",\n \"WORK\": \"0.1384307500000000\",\n \"BRWL\": \"0.0017391300000000\",\n \"BANANA\": \"57.1314200000001362\",\n \"PUSH\": \"0.0750624500000000\",\n \"WEN\": \"0.0001015492000000\",\n \"NEIRO\": \"0.0879560000000000\",\n \"BTCUP\": \"34.7711057499999789\",\n \"SOL3S\": \"0.0007816090000000\",\n \"BRAWL\": \"0.0004776610500000\",\n \"LAY3R\": \"0.2161918500000000\",\n \"LPT\": \"11.9304317999999945\",\n \"GODS\": \"0.1807096000000000\",\n \"SAND3S\": \"4.6152911999999992\",\n \"RDNT\": \"0.0640679500000000\",\n \"SOL3L\": \"1.8351913752850000\",\n \"NIBI\": \"0.0653772950000000\",\n \"NUM\": \"0.0436181800000000\",\n \"PYR\": \"2.5590198499999997\",\n \"DAG\": \"0.0226176855000000\",\n \"DAI\": \"0.9989006596042375\",\n \"HIP\": \"0.0034982500000000\",\n \"DAO\": \"0.2848575000000000\",\n \"AVAIL\": \"0.1300929210000000\",\n \"DAR\": \"0.1512243500000000\",\n \"FET\": \"1.3760116500000000\",\n \"FCON\": \"0.0001197600900000\",\n \"XAVA\": \"0.3789104500000000\",\n \"LRC\": \"0.1208395500000000\",\n \"UNI3S\": \"0.0000653573050000\",\n \"PZP\": \"0.0599600050000000\",\n \"POKT\": \"0.0424787500000000\",\n \"DASH\": \"23.6881500000000109\",\n \"BAKEDOWN\": \"0.0003324636850000\",\n \"POLC\": \"0.0061389290000000\",\n \"DBR\": \"0.0377671070000000\",\n \"CIRUS\": \"0.0055772100000000\",\n \"UNI3L\": \"0.0993921490650000\",\n \"NWC\": \"0.0681659000000000\",\n \"POLK\": \"0.0142628650000000\",\n \"LSD\": \"0.9420287500000000\",\n \"MARS4\": \"0.0005878059500000\",\n \"LSK\": \"0.8080957500000000\",\n \"BLOCK\": \"0.0261869000000000\",\n \"ANALOS\": \"0.0000446776500000\",\n \"SAFE\": \"0.8779608000000000\",\n \"DCK\": \"0.0234082900000000\",\n \"LSS\": \"0.0562718500000000\",\n \"DCR\": \"12.4337799999999929\",\n \"LIKE\": \"0.0559720000000000\",\n \"DATA\": \"0.0361819000000000\",\n \"WIF\": \"2.5696145499999999\",\n \"BLOK\": \"0.0006546725000000\",\n \"LTC\": \"71.6261690000000611\",\n \"METIS\": \"42.0289750000000612\",\n \"WIN\": \"0.0000868365600000\",\n \"HLG\": \"0.0018790600000000\",\n \"LTO\": \"0.1166116650000000\",\n \"DYDX\": \"0.9341327000000000\",\n \"ARB3S\": \"0.0509025360000000\",\n \"MUBI\": \"0.0303848000000000\",\n \"ARB3L\": \"0.0025917035000000\",\n \"RBTC1\": \"0.0000039480250000\",\n \"POND\": \"0.0118640650000000\",\n \"LINA\": \"0.0037771105000000\",\n \"MYRIA\": \"0.0025337325000000\",\n \"LINK\": \"11.0244849999999944\",\n \"QTUM\": \"2.4262016723130069\",\n \"TUNE\": \"0.0148025950000000\",\n \"UFO\": \"0.0000006479758500\",\n \"CYBER\": \"2.8755615000000001\",\n \"WILD\": \"0.2433782500000000\",\n \"POLS\": \"0.2809594500000000\",\n \"NYM\": \"0.0719640000000000\",\n \"FIL\": \"3.6786597500000005\",\n \"BAL\": \"2.0099945000000000\",\n \"SCA\": \"0.3999999000000000\",\n \"STND\": \"0.0133123405000000\",\n \"WMTX\": \"0.2138930000000000\",\n \"SCLP\": \"0.1545227000000000\",\n \"MANEKI\": \"0.0073963000000000\",\n \"BAT\": \"0.1721139000000000\",\n \"AKRO\": \"0.0042302838000000\",\n \"FTM3L\": \"8.2574692000000024\",\n \"BAX\": \"0.0000709645000000\",\n \"FTM3S\": \"0.0000255072400000\",\n \"COTI\": \"0.0951524000000000\"\n }\n}" + } + ] + }, + { + "name": "Get All Symbols", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v2", + "symbols" + ], + "query": [ + { + "key": "market", + "value": "", + "description": "[The trading market](https://www.kucoin.com/docs-new/api-222921786)" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470154)\n\n:::info[Description]\nRequest via this endpoint to get a list of available currency pairs for trading. If you want to get the market information of the trading symbol, please use Get All Tickers.\n:::\n\n\n:::tip[Tips]\npriceIncrement and quoteIncrement may be adjusted in the future. We will notify you by email and site notifications before adjustment.\n:::\n\n| Order Type | Follow the rules of minFunds |\n| --- | --- |\n| Limit Buy | [Order Amount * Order Price] >= minFunds |\n| Limit Sell | [Order Amount * Order Price] >= minFunds |\n| Market Buy | Order Value >= minFunds |\n| Market Sell | [Order Amount * Last Price of Base Currency] >= minFunds |\n\nNote:\n\n- API market buy orders (by amount) valued at [Order Amount * Last Price of Base Currency] < minFunds will be rejected.\n- API market sell orders (by value) valued at < minFunds will be rejected.\n- Take profit and stop loss orders at market or limit prices will be rejected when triggered.\n\n\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | unique code of a symbol, it would not change after renaming |\n| name | string | Name of trading pairs, it would change after renaming |\n| baseCurrency | string | Base currency,e.g. BTC. |\n| quoteCurrency | string | Quote currency,e.g. USDT. |\n| feeCurrency | string | The currency of charged fees. |\n| market | string | The trading market. |\n| baseMinSize | string | The minimum order quantity requried to place an order. |\n| quoteMinSize | string | The minimum order funds required to place a market order. |\n| baseMaxSize | string | The maximum order size required to place an order. |\n| quoteMaxSize | string | The maximum order funds required to place a market order. |\n| baseIncrement | string | Quantity increment: The quantity for an order must be a positive integer multiple of this increment. Here, the size refers to the quantity of the base currency for the order. For example, for the ETH-USDT trading pair, if the baseIncrement is 0.0000001, the order quantity can be 1.0000001 but not 1.00000001. |\n| quoteIncrement | string | Quote increment: The funds for a market order must be a positive integer multiple of this increment. The funds refer to the quote currency amount. For example, for the ETH-USDT trading pair, if the quoteIncrement is 0.000001, the amount of USDT for the order can be 3000.000001 but not 3000.0000001. |\n| priceIncrement | string | Price increment: The price of an order must be a positive integer multiple of this increment. For example, for the ETH-USDT trading pair, if the priceIncrement is 0.01, the order price can be 3000.01 but not 3000.001.

specifies the min order price as well as the price increment.This also applies to quote currency. |\n| priceLimitRate | string | Threshold for price portection |\n| minFunds | string | the minimum trading amounts |\n| isMarginEnabled | boolean | Available for margin or not. |\n| enableTrading | boolean | Available for transaction or not. |\n| feeCategory | integer | [Fee Type](https://www.kucoin.com/vip/privilege) |\n| makerFeeCoefficient | string | The maker fee coefficient. The actual fee needs to be multiplied by this coefficient to get the final fee. Most currencies have a coefficient of 1. If set to 0, it means no fee |\n| takerFeeCoefficient | string | The taker fee coefficient. The actual fee needs to be multiplied by this coefficient to get the final fee. Most currencies have a coefficient of 1. If set to 0, it means no fee |\n| st | boolean | Whether it is an [Special Treatment](https://www.kucoin.com/legal/special-treatment) symbol |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v2", + "symbols" + ], + "query": [ + { + "key": "market", + "value": "", + "description": "[The trading market](https://www.kucoin.com/docs-new/api-222921786)" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"symbol\": \"BTC-USDT\",\n \"name\": \"BTC-USDT\",\n \"baseCurrency\": \"BTC\",\n \"quoteCurrency\": \"USDT\",\n \"feeCurrency\": \"USDT\",\n \"market\": \"USDS\",\n \"baseMinSize\": \"0.00001\",\n \"quoteMinSize\": \"0.1\",\n \"baseMaxSize\": \"10000000000\",\n \"quoteMaxSize\": \"99999999\",\n \"baseIncrement\": \"0.00000001\",\n \"quoteIncrement\": \"0.000001\",\n \"priceIncrement\": \"0.1\",\n \"priceLimitRate\": \"0.1\",\n \"minFunds\": \"0.1\",\n \"isMarginEnabled\": true,\n \"enableTrading\": true,\n \"feeCategory\": 1,\n \"makerFeeCoefficient\": \"1.00\",\n \"takerFeeCoefficient\": \"1.00\",\n \"st\": false\n }\n ]\n}" + } + ] + }, + { + "name": "Get Currency", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "currencies", + "{{currency}}" + ], + "query": [ + { + "key": "chain", + "value": "", + "description": "Support for querying the chain of currency, e.g. The available value for USDT are OMNI, ERC20, TRC20. This only apply for multi-chain currency, and there is no need for single chain currency." + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470155)\n\n:::info[Description]\nRequest via this endpoint to get the currency details of a specified currency\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | A unique currency code that will never change |\n| name | string | Currency name, will change after renaming |\n| fullName | string | Full name of a currency, will change after renaming |\n| precision | integer | Currency precision |\n| confirms | integer | Number of block confirmations |\n| contractAddress | string | Contract address |\n| isMarginEnabled | boolean | Support margin or not |\n| isDebitEnabled | boolean | Support debit or not |\n| chains | array | Refer to the schema section of chains |\n\n**root.data.chains Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| chainName | string | chain name of currency |\n| withdrawalMinSize | string | Minimum withdrawal amount |\n| depositMinSize | string | Minimum deposit amount |\n| withdrawFeeRate | string | withdraw fee rate |\n| withdrawalMinFee | string | Minimum fees charged for withdrawal |\n| isWithdrawEnabled | boolean | Support withdrawal or not |\n| isDepositEnabled | boolean | Support deposit or not |\n| confirms | integer | Number of block confirmations |\n| preConfirms | integer | The number of blocks (confirmations) for advance on-chain verification |\n| contractAddress | string | Contract address |\n| withdrawPrecision | integer | Withdrawal precision bit, indicating the maximum supported length after the decimal point of the withdrawal amount |\n| maxWithdraw | number | Maximum amount of single withdrawal |\n| maxDeposit | string | Maximum amount of single deposit (only applicable to Lightning Network) |\n| needTag | boolean | whether memo/tag is needed |\n| chainId | string | chain id of currency |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "currencies", + "{{currency}}" + ], + "query": [ + { + "key": "chain", + "value": "", + "description": "Support for querying the chain of currency, e.g. The available value for USDT are OMNI, ERC20, TRC20. This only apply for multi-chain currency, and there is no need for single chain currency." + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"currency\": \"BTC\",\n \"name\": \"BTC\",\n \"fullName\": \"Bitcoin\",\n \"precision\": 8,\n \"confirms\": null,\n \"contractAddress\": null,\n \"isMarginEnabled\": true,\n \"isDebitEnabled\": true,\n \"chains\": [\n {\n \"chainName\": \"BTC\",\n \"withdrawalMinSize\": \"0.001\",\n \"depositMinSize\": \"0.0002\",\n \"withdrawFeeRate\": \"0\",\n \"withdrawalMinFee\": \"0.0005\",\n \"isWithdrawEnabled\": true,\n \"isDepositEnabled\": true,\n \"confirms\": 3,\n \"preConfirms\": 1,\n \"contractAddress\": \"\",\n \"withdrawPrecision\": 8,\n \"maxWithdraw\": null,\n \"maxDeposit\": null,\n \"needTag\": false,\n \"chainId\": \"btc\"\n },\n {\n \"chainName\": \"Lightning Network\",\n \"withdrawalMinSize\": \"0.00001\",\n \"depositMinSize\": \"0.00001\",\n \"withdrawFeeRate\": \"0\",\n \"withdrawalMinFee\": \"0.000015\",\n \"isWithdrawEnabled\": true,\n \"isDepositEnabled\": true,\n \"confirms\": 1,\n \"preConfirms\": 1,\n \"contractAddress\": \"\",\n \"withdrawPrecision\": 8,\n \"maxWithdraw\": null,\n \"maxDeposit\": \"0.03\",\n \"needTag\": false,\n \"chainId\": \"btcln\"\n },\n {\n \"chainName\": \"KCC\",\n \"withdrawalMinSize\": \"0.0008\",\n \"depositMinSize\": null,\n \"withdrawFeeRate\": \"0\",\n \"withdrawalMinFee\": \"0.00002\",\n \"isWithdrawEnabled\": true,\n \"isDepositEnabled\": true,\n \"confirms\": 20,\n \"preConfirms\": 20,\n \"contractAddress\": \"0xfa93c12cd345c658bc4644d1d4e1b9615952258c\",\n \"withdrawPrecision\": 8,\n \"maxWithdraw\": null,\n \"maxDeposit\": null,\n \"needTag\": false,\n \"chainId\": \"kcc\"\n },\n {\n \"chainName\": \"BTC-Segwit\",\n \"withdrawalMinSize\": \"0.0008\",\n \"depositMinSize\": \"0.0002\",\n \"withdrawFeeRate\": \"0\",\n \"withdrawalMinFee\": \"0.0005\",\n \"isWithdrawEnabled\": false,\n \"isDepositEnabled\": true,\n \"confirms\": 2,\n \"preConfirms\": 2,\n \"contractAddress\": \"\",\n \"withdrawPrecision\": 8,\n \"maxWithdraw\": null,\n \"maxDeposit\": null,\n \"needTag\": false,\n \"chainId\": \"bech32\"\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Get Server Time", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "timestamp" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470156)\n\n:::info[Description]\nGet the server time.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | integer | ServerTime(millisecond) |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "timestamp" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": 1729100692873\n}" + } + ] + }, + { + "name": "Get Announcements", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "announcements" + ], + "query": [ + { + "key": "currentPage", + "value": "1", + "description": "page number" + }, + { + "key": "pageSize", + "value": "50", + "description": "page Size" + }, + { + "key": "annType", + "value": "latest-announcements", + "description": "Announcement types: latest-announcements , activities (latest activities), new-listings (new currency online), product-updates (product updates), vip (institutions and VIPs), maintenance-updates (system maintenance), product -updates (product news), delistings (currency offline), others, api-campaigns (API user activities), default : latest-announcements" + }, + { + "key": "lang", + "value": "en_US", + "description": "Language type, the default is en_US, the specific value parameters are as follows" + }, + { + "key": "startTime", + "value": "1729594043000", + "description": "Announcement online start time (milliseconds)" + }, + { + "key": "endTime", + "value": "1729697729000", + "description": "Announcement online end time (milliseconds)" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470157)\n\n:::info[Description]\nThis interface can obtain the latest news announcements, and the default page search is for announcements within a month.\n:::\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| totalNum | integer | Total Number |\n| items | array | Refer to the schema section of items |\n| currentPage | integer | Current page |\n| pageSize | integer | Page size |\n| totalPage | integer | Total Page |\n\n**root.data.items Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| annId | integer | Announcement ID |\n| annTitle | string | Announcement title |\n| annType | array | Refer to the schema section of annType |\n| annDesc | string | Announcement description |\n| cTime | integer | Announcement release time, Unix millisecond timestamp format |\n| language | string | language type |\n| annUrl | string | Announcement link |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "announcements" + ], + "query": [ + { + "key": "currentPage", + "value": "1", + "description": "page number" + }, + { + "key": "pageSize", + "value": "50", + "description": "page Size" + }, + { + "key": "annType", + "value": "latest-announcements", + "description": "Announcement types: latest-announcements , activities (latest activities), new-listings (new currency online), product-updates (product updates), vip (institutions and VIPs), maintenance-updates (system maintenance), product -updates (product news), delistings (currency offline), others, api-campaigns (API user activities), default : latest-announcements" + }, + { + "key": "lang", + "value": "en_US", + "description": "Language type, the default is en_US, the specific value parameters are as follows" + }, + { + "key": "startTime", + "value": "1729594043000", + "description": "Announcement online start time (milliseconds)" + }, + { + "key": "endTime", + "value": "1729697729000", + "description": "Announcement online end time (milliseconds)" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"totalNum\": 195,\n \"totalPage\": 13,\n \"currentPage\": 1,\n \"pageSize\": 15,\n \"items\": [\n {\n \"annId\": 129045,\n \"annTitle\": \"KuCoin Isolated Margin Adds the Scroll (SCR) Trading Pair\",\n \"annType\": [\n \"latest-announcements\"\n ],\n \"annDesc\": \"To enrich the variety of assets available,ย KuCoinโ€™s Isolated Margin Trading platform has added the Scroll (SCR)ย asset and trading pair.\",\n \"cTime\": 1729594043000,\n \"language\": \"en_US\",\n \"annUrl\": \"https://www.kucoin.com/announcement/kucoin-isolated-margin-adds-scr?lang=en_US\"\n },\n {\n \"annId\": 129001,\n \"annTitle\": \"DAPP-30D Fixed Promotion, Enjoy an APR of 200%!โ€‹\",\n \"annType\": [\n \"latest-announcements\",\n \"activities\"\n ],\n \"annDesc\": \"KuCoin Earn will be launching the DAPP Fixed Promotion at 10:00:00 on October 22, 2024 (UTC). The available product is โ€œDAPP-30D'' with an APR of 200%.\",\n \"cTime\": 1729588460000,\n \"language\": \"en_US\",\n \"annUrl\": \"https://www.kucoin.com/announcement/dapp-30d-fixed-promotion-enjoy?lang=en_US\"\n },\n {\n \"annId\": 128581,\n \"annTitle\": \"NAYM (NAYM) Gets Listed on KuCoin! World Premiere!\",\n \"annType\": [\n \"latest-announcements\",\n \"new-listings\"\n ],\n \"annDesc\": \"Trading:ย 11:00 on October 22, 2024 (UTC)\",\n \"cTime\": 1729497729000,\n \"language\": \"en_US\",\n \"annUrl\": \"https://www.kucoin.com/announcement/en-naym-naym-gets-listed-on-kucoin-world-premiere?lang=en_US\"\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Get Service Status", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "status" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470158)\n\n:::info[Description]\nGet the service status\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| status | string | Status of service: open๏ผšnormal transaction, close๏ผšStop Trading/Maintenance, cancelonly๏ผšcan only cancel the order but not place order |\n| msg | string | Remark for operation |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "status" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"status\": \"open\",\n \"msg\": \"\"\n }\n}" + } + ] + }, + { + "name": "Get Symbol ", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v2", + "symbols", + "{{symbol}}" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470159)\n\n:::info[Description]\nRequest via this endpoint to get detail currency pairs for trading. If you want to get the market information of the trading symbol, please use Get All Tickers.\n:::\n\n\n- The baseMinSize and baseMaxSize fields define the min and max order size.\n- The priceIncrement field specifies the min order price as well as the price increment.This also applies to quote currency.\n\nThe order price must be a positive integer multiple of this priceIncrement (i.e. if the increment is 0.01, the 0.001 and 0.021 order prices would be rejected).\n\npriceIncrement and quoteIncrement may be adjusted in the future. We will notify you by email and site notifications before adjustment.\n\n| Order Type | Follow the rules of minFunds |\n| ------ | ---------- |\n| Limit Buy\t | [Order Amount * Order Price] >= minFunds |\n| Limit Sell | [Order Amount * Order Price] >= minFunds |\n| Market Buy | Order Value >= minFunds |\n| Market Sell | [Order Amount * Last Price of Base Currency] >= minFunds |\n\nNote:\n- API market buy orders (by amount) valued at (Order Amount * Last Price of Base Currency) < minFunds will be rejected.\n- API market sell orders (by value) valued at < minFunds will be rejected.\n- Take profit and stop loss orders at market or limit prices will be rejected when triggered.\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | unique code of a symbol, it would not change after renaming |\n| name | string | Name of trading pairs, it would change after renaming |\n| baseCurrency | string | Base currency,e.g. BTC. |\n| quoteCurrency | string | Quote currency,e.g. USDT. |\n| feeCurrency | string | The currency of charged fees. |\n| market | string | The trading market. |\n| baseMinSize | string | The minimum order quantity requried to place an order. |\n| quoteMinSize | string | The minimum order funds required to place a market order. |\n| baseMaxSize | string | The maximum order size required to place an order. |\n| quoteMaxSize | string | The maximum order funds required to place a market order. |\n| baseIncrement | string | Quantity increment: The quantity for an order must be a positive integer multiple of this increment. Here, the size refers to the quantity of the base currency for the order. For example, for the ETH-USDT trading pair, if the baseIncrement is 0.0000001, the order quantity can be 1.0000001 but not 1.00000001. |\n| quoteIncrement | string | Quote increment: The funds for a market order must be a positive integer multiple of this increment. The funds refer to the quote currency amount. For example, for the ETH-USDT trading pair, if the quoteIncrement is 0.000001, the amount of USDT for the order can be 3000.000001 but not 3000.0000001. |\n| priceIncrement | string | Price increment: The price of an order must be a positive integer multiple of this increment. For example, for the ETH-USDT trading pair, if the priceIncrement is 0.01, the order price can be 3000.01 but not 3000.001. |\n| priceLimitRate | string | Threshold for price portection |\n| minFunds | string | the minimum trading amounts |\n| isMarginEnabled | boolean | Available for margin or not. |\n| enableTrading | boolean | Available for transaction or not. |\n| feeCategory | integer | [Fee Type](https://www.kucoin.com/vip/privilege) |\n| makerFeeCoefficient | string | The maker fee coefficient. The actual fee needs to be multiplied by this coefficient to get the final fee. Most currencies have a coefficient of 1. If set to 0, it means no fee |\n| takerFeeCoefficient | string | The taker fee coefficient. The actual fee needs to be multiplied by this coefficient to get the final fee. Most currencies have a coefficient of 1. If set to 0, it means no fee |\n| st | boolean | |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v2", + "symbols", + "{{symbol}}" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"symbol\": \"BTC-USDT\",\n \"name\": \"BTC-USDT\",\n \"baseCurrency\": \"BTC\",\n \"quoteCurrency\": \"USDT\",\n \"feeCurrency\": \"USDT\",\n \"market\": \"USDS\",\n \"baseMinSize\": \"0.00001\",\n \"quoteMinSize\": \"0.1\",\n \"baseMaxSize\": \"10000000000\",\n \"quoteMaxSize\": \"99999999\",\n \"baseIncrement\": \"0.00000001\",\n \"quoteIncrement\": \"0.000001\",\n \"priceIncrement\": \"0.1\",\n \"priceLimitRate\": \"0.1\",\n \"minFunds\": \"0.1\",\n \"isMarginEnabled\": true,\n \"enableTrading\": true,\n \"feeCategory\": 1,\n \"makerFeeCoefficient\": \"1.00\",\n \"takerFeeCoefficient\": \"1.00\",\n \"st\": false\n }\n}" + } + ] + }, + { + "name": "Get Ticker", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "market", + "orderbook", + "level1" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470160)\n\n:::info[Description]\nRequest via this endpoint to get Level 1 Market Data. The returned value includes the best bid price and size, the best ask price and size as well as the last traded price and the last traded size.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| time | integer | timestamp |\n| sequence | string | Sequence |\n| price | string | Last traded price |\n| size | string | Last traded size |\n| bestBid | string | Best bid price |\n| bestBidSize | string | Best bid size |\n| bestAsk | string | Best ask price |\n| bestAskSize | string | Best ask size |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "market", + "orderbook", + "level1" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"time\": 1729172965609,\n \"sequence\": \"14609309753\",\n \"price\": \"67269\",\n \"size\": \"0.000025\",\n \"bestBid\": \"67267.5\",\n \"bestBidSize\": \"0.000025\",\n \"bestAsk\": \"67267.6\",\n \"bestAskSize\": \"1.24808993\"\n }\n}" + } + ] + }, + { + "name": "Get 24hr Stats", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "market", + "stats" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470161)\n\n:::info[Description]\nRequest via this endpoint to get the statistics of the specified ticker in the last 24 hours.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| time | integer | timestamp |\n| symbol | string | Symbol |\n| buy | string | Best bid price
|\n| sell | string | Best ask price |\n| changeRate | string | 24h change rate |\n| changePrice | string | 24h change price |\n| high | string | Highest price in 24h |\n| low | string | Lowest price in 24h |\n| vol | string | 24h volume, executed based on base currency |\n| volValue | string | 24h traded amount |\n| last | string | Last traded price |\n| averagePrice | string | Average trading price in the last 24 hours |\n| takerFeeRate | string | Basic Taker Fee |\n| makerFeeRate | string | Basic Maker Fee |\n| takerCoefficient | string | The taker fee coefficient. The actual fee needs to be multiplied by this coefficient to get the final fee. Most currencies have a coefficient of 1. If set to 0, it means no fee |\n| makerCoefficient | string | The maker fee coefficient. The actual fee needs to be multiplied by this coefficient to get the final fee. Most currencies have a coefficient of 1. If set to 0, it means no fee |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "market", + "stats" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"time\": 1729175612158,\n \"symbol\": \"BTC-USDT\",\n \"buy\": \"66982.4\",\n \"sell\": \"66982.5\",\n \"changeRate\": \"-0.0114\",\n \"changePrice\": \"-778.1\",\n \"high\": \"68107.7\",\n \"low\": \"66683.3\",\n \"vol\": \"1738.02898182\",\n \"volValue\": \"117321982.415978333\",\n \"last\": \"66981.5\",\n \"averagePrice\": \"67281.21437289\",\n \"takerFeeRate\": \"0.001\",\n \"makerFeeRate\": \"0.001\",\n \"takerCoefficient\": \"1\",\n \"makerCoefficient\": \"1\"\n }\n}" + } + ] + }, + { + "name": "Get Trade History", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "market", + "histories" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470162)\n\n:::info[Description]\nRequest via this endpoint to get the trade history of the specified symbol, the returned quantity is the last 100 transaction records.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| sequence | string | Sequence number |\n| price | string | Filled price |\n| size | string | Filled amount |\n| side | string | Filled side, The trade side indicates the taker order side. A taker order is the order that was matched with orders opened on the order book. |\n| time | integer | Filled timestamp(nanosecond) |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "market", + "histories" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"sequence\": \"10976028003549185\",\n \"price\": \"67122\",\n \"size\": \"0.000025\",\n \"side\": \"buy\",\n \"time\": 1729177117877000000\n },\n {\n \"sequence\": \"10976028003549188\",\n \"price\": \"67122\",\n \"size\": \"0.01792257\",\n \"side\": \"buy\",\n \"time\": 1729177117877000000\n },\n {\n \"sequence\": \"10976028003549191\",\n \"price\": \"67122.9\",\n \"size\": \"0.05654289\",\n \"side\": \"buy\",\n \"time\": 1729177117877000000\n }\n ]\n}" + } + ] + }, + { + "name": "Get Klines", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "market", + "candles" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": " symbol" + }, + { + "key": "type", + "value": "1min", + "description": "Type of candlestick patterns: 1min, 3min, 5min, 15min, 30min, 1hour, 2hour, 4hour, 6hour, 8hour, 12hour, 1day, 1week, 1month" + }, + { + "key": "startAt", + "value": "1566703297", + "description": "Start time (second), default is 0" + }, + { + "key": "endAt", + "value": "1566789757", + "description": "End time (second), default is 0" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470163)\n\n:::info[Description]\nGet the Kline of the symbol. Data are returned in grouped buckets based on requested type.\nFor each query, the system would return at most 1500 pieces of data. To obtain more data, please page the data by time.\n:::\n\n:::tip[Tips]\nKlines data may be incomplete. No data is published for intervals where there are no ticks.\n:::\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "market", + "candles" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": " symbol" + }, + { + "key": "type", + "value": "1min", + "description": "Type of candlestick patterns: 1min, 3min, 5min, 15min, 30min, 1hour, 2hour, 4hour, 6hour, 8hour, 12hour, 1day, 1week, 1month" + }, + { + "key": "startAt", + "value": "1566703297", + "description": "Start time (second), default is 0" + }, + { + "key": "endAt", + "value": "1566789757", + "description": "End time (second), default is 0" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n [\n \"1566789720\",\n \"10411.5\",\n \"10401.9\",\n \"10411.5\",\n \"10396.3\",\n \"29.11357276\",\n \"302889.301529914\"\n ],\n [\n \"1566789660\",\n \"10416\",\n \"10411.5\",\n \"10422.3\",\n \"10411.5\",\n \"15.61781842\",\n \"162703.708997029\"\n ],\n [\n \"1566789600\",\n \"10408.6\",\n \"10416\",\n \"10416\",\n \"10405.4\",\n \"12.45584973\",\n \"129666.51508559\"\n ]\n ]\n}" + } + ] + }, + { + "name": "Get Full OrderBook", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "market", + "orderbook", + "level2" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470164)\n\n:::info[Description]\nQuery for Full orderbook depth data. (aggregated by price)\n\nIt is generally used by professional traders because it uses more server resources and traffic, and we have strict access rate limit control.\n\nTo maintain up-to-date Order Book, please use Websocket incremental feed after retrieving the OrderBook.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| time | integer | Timestamp(millisecond) |\n| sequence | string | Sequence number |\n| bids | array | Refer to the schema section of bids |\n| asks | array | Refer to the schema section of asks |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "market", + "orderbook", + "level2" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"time\": 1729176273859,\n \"sequence\": \"14610502970\",\n \"bids\": [\n [\n \"66976.4\",\n \"0.69109872\"\n ],\n [\n \"66976.3\",\n \"0.14377\"\n ]\n ],\n \"asks\": [\n [\n \"66976.5\",\n \"0.05408199\"\n ],\n [\n \"66976.8\",\n \"0.0005\"\n ]\n ]\n }\n}" + } + ] + }, + { + "name": "Get Part OrderBook", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "market", + "orderbook", + "level2_{size}" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470165)\n\n:::info[Description]\nQuery for part orderbook depth data. (aggregated by price)\n\nYou are recommended to request via this endpoint as the system reponse would be faster and cosume less traffic.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| time | integer | Timestamp(millisecond) |\n| sequence | string | Sequence number |\n| bids | array | Refer to the schema section of bids |\n| asks | array | Refer to the schema section of asks |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "market", + "orderbook", + "level2_{size}" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"time\": 1729176273859,\n \"sequence\": \"14610502970\",\n \"bids\": [\n [\n \"66976.4\",\n \"0.69109872\"\n ],\n [\n \"66976.3\",\n \"0.14377\"\n ]\n ],\n \"asks\": [\n [\n \"66976.5\",\n \"0.05408199\"\n ],\n [\n \"66976.8\",\n \"0.0005\"\n ]\n ]\n }\n}" + } + ] + }, + { + "name": "Get Market List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "markets" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470166)\n\n:::info[Description]\nRequest via this endpoint to get the transaction currency for the entire trading market.\n:::\n\n:::tip[Tips]\nSC has been changed to USDS, but you can still use SC as a query parameter\n\nThe three markets of ETH, NEO and TRX are merged into the ALTS market. You can query the trading pairs of the ETH, NEO and TRX markets through the ALTS trading area.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "markets" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n \"USDS\",\n \"TON\",\n \"AI\",\n \"DePIN\",\n \"PoW\",\n \"BRC-20\",\n \"ETF\",\n \"KCS\",\n \"Meme\",\n \"Solana\",\n \"FIAT\",\n \"VR&AR\",\n \"DeFi\",\n \"Polkadot\",\n \"BTC\",\n \"ALTS\",\n \"Layer 1\"\n ]\n}" + } + ] + }, + { + "name": "Get All Tickers", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "market", + "allTickers" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470167)\n\n:::info[Description]\nRequest market tickers for all the trading pairs in the market (including 24h volume), takes a snapshot every 2 seconds.\n\nOn the rare occasion that we will change the currency name, if you still want the changed symbol name, you can use the symbolName field instead of the symbol field via โ€œGet Symbols Listโ€ endpoint.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| time | integer | timestamp |\n| ticker | array | Refer to the schema section of ticker |\n\n**root.data.ticker Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | Symbol |\n| symbolName | string | Name of trading pairs, it would change after renaming |\n| buy | string | Best bid price |\n| bestBidSize | string | Best bid size |\n| sell | string | Best ask price |\n| bestAskSize | string | Best ask size |\n| changeRate | string | 24h change rate |\n| changePrice | string | 24h change price |\n| high | string | Highest price in 24h |\n| low | string | Lowest price in 24h |\n| vol | string | 24h volume, executed based on base currency |\n| volValue | string | 24h traded amount |\n| last | string | Last traded price |\n| averagePrice | string | Average trading price in the last 24 hours |\n| takerFeeRate | string | Basic Taker Fee |\n| makerFeeRate | string | Basic Maker Fee |\n| takerCoefficient | string | The taker fee coefficient. The actual fee needs to be multiplied by this coefficient to get the final fee. Most currencies have a coefficient of 1. If set to 0, it means no fee |\n| makerCoefficient | string | The maker fee coefficient. The actual fee needs to be multiplied by this coefficient to get the final fee. Most currencies have a coefficient of 1. If set to 0, it means no fee |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "market", + "allTickers" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"time\": 1729173207043,\n \"ticker\": [\n {\n \"symbol\": \"BTC-USDT\",\n \"symbolName\": \"BTC-USDT\",\n \"buy\": \"67192.5\",\n \"bestBidSize\": \"0.000025\",\n \"sell\": \"67192.6\",\n \"bestAskSize\": \"1.24949204\",\n \"changeRate\": \"-0.0014\",\n \"changePrice\": \"-98.5\",\n \"high\": \"68321.4\",\n \"low\": \"66683.3\",\n \"vol\": \"1836.03034612\",\n \"volValue\": \"124068431.06726933\",\n \"last\": \"67193\",\n \"averagePrice\": \"67281.21437289\",\n \"takerFeeRate\": \"0.001\",\n \"makerFeeRate\": \"0.001\",\n \"takerCoefficient\": \"1\",\n \"makerCoefficient\": \"1\"\n }\n ]\n }\n}" + } + ] + } + ], + "description": "" + }, + { + "name": "Orders", + "item": [ + { + "name": "Batch Add Orders", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders", + "multi" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470168)\n\n:::info[Description]\nThis endpoint supports sequential batch order placement from a single endpoint. A maximum of 20 orders can be placed simultaneously.\n:::\n\n\n\n:::tip[Tips]\nThis endpoint only supports order placement requests. To obtain the results of the order placement, you will need to check the order status or subscribe to websocket to obtain information about he order.\n:::\n\n:::tip[Tips]\nPlease note that once your order enters the order book, the system will freeze the handling fees for the order ahead of time.\n\nBefore placing orders, please be sure to fully understand the meaning of the parameters for each trading pair.\n:::\n\n:::tip[Tips]\nThe maximum number of active orders per account is 2000, with a maximum of 200 active orders per trading pair.\n:::\n\n**Public order placement request parameters**\n\n| Param | Type | Mandatory | Description |\n| --------- | ------ | --------- | ----------- |\n| clientOid | String | No | Client Order Id๏ผŒunique identifier created by the user, the use of UUID is recommended |\n| symbol | String | Yes | symbol |\n| type | String | Yes | Order type `limit` and `market` |\n| side | String | Yes | `buy` or `sell` |\n| stp | String | No | self trade prevention is divided into four strategies: `CN`, `CO`, `CB` , and `DC` |\n| tags | String | No | Order tag, length cannot exceed `20` characters (ASCII) |\n| remark | String | No | Order placement remarks, length cannot exceed `20` characters (ASCII) |\n\n**Additional Request Parameters Required by `limit` Orders**\n\n| Param | Type | Mandatory | Description |\n| ----------- | ------- | --------- | ----------- |\n| price | String | Yes | Specify price for currency |\n| size | String | Yes | Specify quantity for currency |\n| timeInForce | String | No | Order timing strategy `GTC`, `GTT`, `IOC`, `FOK` (The default is `GTC`) |\n| cancelAfter | long | No | Cancel after `n` seconds๏ผŒthe order timing strategy is `GTT` |\n| postOnly | boolean | No | passive order labels, this is disabled when the order timing strategy is `IOC` or `FOK` |\n| hidden | boolean | No | Hidden or not (not shown in order book) |\n| iceberg | boolean | No | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | String | No | Maximum visible quantity in iceberg orders |\n\n**Additional request parameters required by `market` orders**\n\n| Param | Type | Mandatory | Description |\n| ----- | ------ | --------- | ------------------------------------------ |\n| size | String | No | (Select one out of two: `size` or `funds`) |\n| funds | String | No | (Select one out of two: `size` or `funds`) |\n\n\n**Hold**\n\nFor limit price purchase orders, we will hold the amount of funds (price * size) required for your purchase order. Similarly, for limit price sell orders, we will also hold you sell order assets. When the transaction is executed, the service fees will be calculated. If you cancel a portion of a filled or unfilled order, then the remaining funds or amounts will be released and returned to your account. For market price buy/sell orders that require specific funds, we will hold the required funds in from your account. If only the size is specified, we may freeze (usually for a very short amount of time) all of the funds in your account prior to the order being filled or cancelled.\n\n\n**Order Lifecycle**\n\nWhen an order placement request is successful (the matching engine receives the order) or denied (due to there being insufficient funds or illegal parameter values, etc.), the system will respond to the HTTP request. When an order is successfully placed, the order ID is returned. The order will be matched, which could result in it being fully or partially filled. When an order is fully or partially filled, the remaining portions of the order will be in an active state awaiting to be matched (this does not include IOC orders). Orders that are fully or partially filled(already cancelled) will be put into the โ€œdoneโ€ state.\n\nUsers that have subscribed to the Market Data Channel can use the order ID ๏ผˆorderId๏ผ‰ and client ID ๏ผˆclientOid๏ผ‰ to identify messages.\n\n**Price Protection Mechanisms**\n\nPrice protection mechanisms ae enabled for order placements. Rules are detailed below:\n\n- If the spot trading market order/limit order placed by the user can be directly matched with an order in the current order book, the system will judge whether deviation between the price corresponding to the transaction depth and the spread exceeds the threshold value ๏ผˆthe threshold value can be obtained using the symbol API endpoint๏ผ‰๏ผ›\n\n- If it is exceeded, for limit orders, the order will be directly cancelled;\n\n- If it is a market order, then the system will partially execute the order. The execution limit will be the order size within the price range corresponding to the threshold value. The remaining orders will not be filled.\n\nFor example: if the threshold value is 10%, when a user places a market price purchase order in the KCS/USDT trading market for 10,000 USDT (the selling price is currently 1.20000), the system will determine that after the order is completely filled, the final price will be 1.40000. (1.40000-1.20000)/1.20000=16.7%>10%. The threshold value is 1.32000. The userโ€™s market price purchase order will be filled only to a maximum of 1.32000. The remaining order portions will not be matched with orders in the order book. Note: this feature may not be able to determine depth with complete accuracy. If your order is not completely filled, it may be because the portion exceeding the threshold value was not filled.\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderList | array | Refer to the schema section of orderList |\n\n**root.orderList Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.
|\n| symbol | string | symbol |\n| type | string | Specify if the order is an 'limit' order or 'market' order. |\n| timeInForce | string | [Time in force](https://www.kucoin.com/docs-new/api-338146) is a special strategy used during trading |\n| side | string | Specify if the order is to 'buy' or 'sell' |\n| price | string | Specify price for order |\n| size | string | Specify quantity for order

When **type** is limit, select one out of two: size or funds, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.

When **type** is market, select one out of two: size or funds |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into four strategies: CN, CO, CB , and DC |\n| cancelAfter | integer | Cancel after n seconds๏ผŒthe order timing strategy is GTT |\n| postOnly | boolean | passive order labels, this is disabled when the order timing strategy is IOC or FOK |\n| hidden | boolean | [Hidden order](https://www.kucoin.com/docs-new/api-338146) or not (not shown in order book) |\n| iceberg | boolean | Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/api-338146) |\n| visibleSize | string | Maximum visible quantity in iceberg orders |\n| tags | string | Order tag, length cannot exceed 20 characters (ASCII) |\n| remark | string | Order placement remarks, length cannot exceed 20 characters (ASCII) |\n| funds | string | When **type** is market, select one out of two: size or funds |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| clientOid | string | The user self-defined order id. |\n| success | boolean | Add order success/failure |\n| failMsg | string | error message |\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"orderList\": [\n {\n \"clientOid\": \"client order id 12\",\n \"symbol\": \"BTC-USDT\",\n \"type\": \"limit\",\n \"side\": \"buy\",\n \"price\": \"30000\",\n \"size\": \"0.00001\"\n },\n {\n \"clientOid\": \"client order id 13\",\n \"symbol\": \"ETH-USDT\",\n \"type\": \"limit\",\n \"side\": \"sell\",\n \"price\": \"2000\",\n \"size\": \"0.00001\"\n }\n ]\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders", + "multi" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"orderId\": \"6710d8336afcdb0007319c27\",\n \"clientOid\": \"client order id 12\",\n \"success\": true\n },\n {\n \"success\": false,\n \"failMsg\": \"The order funds should more then 0.1 USDT.\"\n }\n ]\n}" + } + ] + }, + { + "name": "Batch Add Orders Sync", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders", + "multi", + "sync" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470169)\n\n:::info[Description]\nThis endpoint supports sequential batch order placement from a single endpoint. A maximum of 20 orders can be placed simultaneously.\n\nThe difference between this interface and \"Batch Add Orders\" is that this interface will synchronously return the order information after the order matching is completed.\n\nFor higher latency requirements, please select the \"Batch Add Orders\" interface. If there is a requirement for returning data integrity, please select this interface\n:::\n\n\n\n:::tip[Tips]\nThis endpoint only supports order placement requests. To obtain the results of the order placement, you will need to check the order status or subscribe to websocket to obtain information about he order.\n:::\n\n:::tip[Tips]\nPlease note that once your order enters the order book, the system will freeze the handling fees for the order ahead of time.\n\nBefore placing orders, please be sure to fully understand the meaning of the parameters for each trading pair.\n:::\n\n:::tip[Tips]\nThe maximum number of active orders per account is 2000, with a maximum of 200 active orders per trading pair.\n:::\n\n**Public order placement request parameters**\n\n| Param | Type | Mandatory | Description |\n| --------- | ------ | --------- | ----------- |\n| clientOid | String | No | Client Order Id๏ผŒunique identifier created by the user, the use of UUID is recommended |\n| symbol | String | Yes | symbol |\n| type | String | Yes | Order type `limit` and `market` |\n| side | String | Yes | `buy` or `sell` |\n| stp | String | No | self trade prevention is divided into four strategies: `CN`, `CO`, `CB` , and `DC` |\n| tags | String | No | Order tag, length cannot exceed `20` characters (ASCII) |\n| remark | String | No | Order placement remarks, length cannot exceed `20` characters (ASCII) |\n\n**Additional Request Parameters Required by `limit` Orders**\n\n| Param | Type | Mandatory | Description |\n| ----------- | ------- | --------- | ----------- |\n| price | String | Yes | Specify price for currency |\n| size | String | Yes | Specify quantity for currency |\n| timeInForce | String | No | Order timing strategy `GTC`, `GTT`, `IOC`, `FOK` (The default is `GTC`) |\n| cancelAfter | long | No | Cancel after `n` seconds๏ผŒthe order timing strategy is `GTT` |\n| postOnly | boolean | No | passive order labels, this is disabled when the order timing strategy is `IOC` or `FOK` |\n| hidden | boolean | No | Hidden or not (not shown in order book) |\n| iceberg | boolean | No | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | String | No | Maximum visible quantity in iceberg orders |\n\n**Additional request parameters required by `market` orders**\n\n| Param | Type | Mandatory | Description |\n| ----- | ------ | --------- | ------------------------------------------ |\n| size | String | No | (Select one out of two: `size` or `funds`) |\n| funds | String | No | (Select one out of two: `size` or `funds`) |\n\n\n**Hold**\n\nFor limit price purchase orders, we will hold the amount of funds (price * size) required for your purchase order. Similarly, for limit price sell orders, we will also hold you sell order assets. When the transaction is executed, the service fees will be calculated. If you cancel a portion of a filled or unfilled order, then the remaining funds or amounts will be released and returned to your account. For market price buy/sell orders that require specific funds, we will hold the required funds in from your account. If only the size is specified, we may freeze (usually for a very short amount of time) all of the funds in your account prior to the order being filled or cancelled.\n\n\n**Order Lifecycle**\n\nWhen an order placement request is successful (the matching engine receives the order) or denied (due to there being insufficient funds or illegal parameter values, etc.), the system will respond to the HTTP request. When an order is successfully placed, the order ID is returned. The order will be matched, which could result in it being fully or partially filled. When an order is fully or partially filled, the remaining portions of the order will be in an active state awaiting to be matched (this does not include IOC orders). Orders that are fully or partially filled(already cancelled) will be put into the โ€œdoneโ€ state.\n\nUsers that have subscribed to the Market Data Channel can use the order ID ๏ผˆorderId๏ผ‰ and client ID ๏ผˆclientOid๏ผ‰ to identify messages.\n\n**Price Protection Mechanisms**\n\nPrice protection mechanisms ae enabled for order placements. Rules are detailed below:\n\n- If the spot trading market order/limit order placed by the user can be directly matched with an order in the current order book, the system will judge whether deviation between the price corresponding to the transaction depth and the spread exceeds the threshold value ๏ผˆthe threshold value can be obtained using the symbol API endpoint๏ผ‰๏ผ›\n\n- If it is exceeded, for limit orders, the order will be directly cancelled;\n\n- If it is a market order, then the system will partially execute the order. The execution limit will be the order size within the price range corresponding to the threshold value. The remaining orders will not be filled.\n\nFor example: if the threshold value is 10%, when a user places a market price purchase order in the KCS/USDT trading market for 10,000 USDT (the selling price is currently 1.20000), the system will determine that after the order is completely filled, the final price will be 1.40000. (1.40000-1.20000)/1.20000=16.7%>10%. The threshold value is 1.32000. The userโ€™s market price purchase order will be filled only to a maximum of 1.32000. The remaining order portions will not be matched with orders in the order book. Note: this feature may not be able to determine depth with complete accuracy. If your order is not completely filled, it may be because the portion exceeding the threshold value was not filled.\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderList | array | Refer to the schema section of orderList |\n\n**root.orderList Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.
|\n| symbol | string | symbol |\n| type | string | Specify if the order is an 'limit' order or 'market' order. |\n| timeInForce | string | [Time in force](https://www.kucoin.com/docs-new/api-338146) is a special strategy used during trading |\n| side | string | Specify if the order is to 'buy' or 'sell' |\n| price | string | Specify price for order |\n| size | string | Specify quantity for order

When **type** is limit, select one out of two: size or funds, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.

When **type** is market, select one out of two: size or funds |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into four strategies: CN, CO, CB , and DC |\n| cancelAfter | integer | Cancel after n seconds๏ผŒthe order timing strategy is GTT |\n| postOnly | boolean | passive order labels, this is disabled when the order timing strategy is IOC or FOK |\n| hidden | boolean | [Hidden order](https://www.kucoin.com/docs-new/api-338146) or not (not shown in order book) |\n| iceberg | boolean | Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/api-338146) |\n| visibleSize | string | Maximum visible quantity in iceberg orders |\n| tags | string | Order tag, length cannot exceed 20 characters (ASCII) |\n| remark | string | Order placement remarks, length cannot exceed 20 characters (ASCII) |\n| funds | string | When **type** is market, select one out of two: size or funds |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| clientOid | string | The user self-defined order id. |\n| orderTime | integer | |\n| originSize | string | original order size |\n| dealSize | string | deal size |\n| remainSize | string | remain size |\n| canceledSize | string | Cumulative canceled size |\n| status | string | Order Status. open๏ผšorder is active; done๏ผšorder has been completed |\n| matchTime | integer | |\n| success | boolean | Add order success/failure |\n| failMsg | string | error message |\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"orderList\": [\n {\n \"clientOid\": \"client order id 13\",\n \"symbol\": \"BTC-USDT\",\n \"type\": \"limit\",\n \"side\": \"buy\",\n \"price\": \"30000\",\n \"size\": \"0.00001\"\n },\n {\n \"clientOid\": \"client order id 14\",\n \"symbol\": \"ETH-USDT\",\n \"type\": \"limit\",\n \"side\": \"sell\",\n \"price\": \"2000\",\n \"size\": \"0.00001\"\n }\n ]\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders", + "multi", + "sync" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"orderId\": \"6711195e5584bc0007bd5aef\",\n \"clientOid\": \"client order id 13\",\n \"orderTime\": 1729173854299,\n \"originSize\": \"0.00001\",\n \"dealSize\": \"0\",\n \"remainSize\": \"0.00001\",\n \"canceledSize\": \"0\",\n \"status\": \"open\",\n \"matchTime\": 1729173854326,\n \"success\": true\n },\n {\n \"success\": false,\n \"failMsg\": \"The order funds should more then 0.1 USDT.\"\n }\n ]\n}" + } + ] + }, + { + "name": "Add Order Sync", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders", + "sync" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470170)\n\n:::info[Description]\nPlace order to the spot trading system\n\nThe difference between this interface and \"Add order\" is that this interface will synchronously return the order information after the order matching is completed.\n\nFor higher latency requirements, please select the \"Add order\" interface. If there is a requirement for returning data integrity, please select this interface\n:::\n\n:::tip[Tips]\nPlease note that once your order enters the order book, the system will freeze the handling fees for the order ahead of time.\n\nBefore placing orders, please be sure to fully understand the meaning of the parameters for each trading pair.\n:::\n\n:::tip[Tips]\nThe maximum number of active orders per account is 2000, with a maximum of 200 active orders per trading pair.\n:::\n\n\n**Public order placement request parameters**\n\n| Param | Type | Mandatory | Description |\n| --------- | ------ | --------- | ----------- |\n| clientOid | String | No | Client Order Id๏ผŒunique identifier created by the user, the use of UUID is recommended |\n| symbol | String | Yes | symbol |\n| type | String | Yes | Order type `limit` and `market` |\n| side | String | Yes | `buy` or `sell` |\n| stp | String | No | self trade prevention is divided into four strategies: `CN`, `CO`, `CB` , and `DC` |\n| tags | String | No | Order tag, length cannot exceed `20` characters (ASCII) |\n| remark | String | No | Order placement remarks, length cannot exceed `20` characters (ASCII) |\n\n**Additional Request Parameters Required by `limit` Orders**\n\n| Param | Type | Mandatory | Description |\n| ----------- | ------- | --------- | ----------- |\n| price | String | Yes | Specify price for currency |\n| size | String | Yes | Specify quantity for currency |\n| timeInForce | String | No | Order timing strategy `GTC`, `GTT`, `IOC`, `FOK` (The default is `GTC`) |\n| cancelAfter | long | No | Cancel after `n` seconds๏ผŒthe order timing strategy is `GTT` |\n| postOnly | boolean | No | passive order labels, this is disabled when the order timing strategy is `IOC` or `FOK` |\n| hidden | boolean | No | Hidden or not (not shown in order book) |\n| iceberg | boolean | No | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | String | No | Maximum visible quantity in iceberg orders |\n\n**Additional request parameters required by `market` orders**\n\n| Param | Type | Mandatory | Description |\n| ----- | ------ | --------- | ------------------------------------------ |\n| size | String | No | (Select one out of two: `size` or `funds`) |\n| funds | String | No | (Select one out of two: `size` or `funds`) |\n\n\n\n**Hold**\n\nFor limit price purchase orders, we will hold the amount of funds (price * size) required for your purchase order. Similarly, for limit price sell orders, we will also hold you sell order assets. When the transaction is executed, the service fees will be calculated. If you cancel a portion of a filled or unfilled order, then the remaining funds or amounts will be released and returned to your account. For market price buy/sell orders that require specific funds, we will hold the required funds in from your account. If only the size is specified, we may freeze (usually for a very short amount of time) all of the funds in your account prior to the order being filled or cancelled.\n\n\n**Order Lifecycle**\n\nWhen an order placement request is successful (the matching engine receives the order) or denied (due to there being insufficient funds or illegal parameter values, etc.), the system will respond to the HTTP request. When an order is successfully placed, the order ID is returned. The order will be matched, which could result in it being fully or partially filled. When an order is fully or partially filled, the remaining portions of the order will be in an active state awaiting to be matched (this does not include IOC orders). Orders that are fully or partially filled(already cancelled) will be put into the โ€œdoneโ€ state.\n\nUsers that have subscribed to the Market Data Channel can use the order ID ๏ผˆorderId๏ผ‰ and client ID ๏ผˆclientOid๏ผ‰ to identify messages.\n\n**Price Protection Mechanisms**\n\nPrice protection mechanisms ae enabled for order placements. Rules are detailed below:\n\n- If the spot trading market order/limit order placed by the user can be directly matched with an order in the current order book, the system will judge whether deviation between the price corresponding to the transaction depth and the spread exceeds the threshold value ๏ผˆthe threshold value can be obtained using the symbol API endpoint๏ผ‰๏ผ›\n\n- If it is exceeded, for limit orders, the order will be directly cancelled;\n\n- If it is a market order, then the system will partially execute the order. The execution limit will be the order size within the price range corresponding to the threshold value. The remaining orders will not be filled.\n\nFor example: if the threshold value is 10%, when a user places a market price purchase order in the KCS/USDT trading market for 10,000 USDT (the selling price is currently 1.20000), the system will determine that after the order is completely filled, the final price will be 1.40000. (1.40000-1.20000)/1.20000=16.7%>10%. The threshold value is 1.32000. The userโ€™s market price purchase order will be filled only to a maximum of 1.32000. The remaining order portions will not be matched with orders in the order book. Note: this feature may not be able to determine depth with complete accuracy. If your order is not completely filled, it may be because the portion exceeding the threshold value was not filled.\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.

Please remember the orderId created by the service provider, it used to check for updates in order status. |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | symbol |\n| type | string | specify if the order is an 'limit' order or 'market' order.

The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine.

When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels.

Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. |\n| remark | string | Order placement remarks, length cannot exceed 20 characters (ASCII) |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into four strategies: CN, CO, CB , and DC |\n| price | string | Specify price for order

When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. |\n| size | string | Specify quantity for order

When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.

When **type** is market, select one out of two: size or funds |\n| timeInForce | string | [Time in force](https://www.kucoin.com/docs-new/api-338146) is a special strategy used during trading |\n| postOnly | boolean | passive order labels, this is disabled when the order timing strategy is IOC or FOK |\n| hidden | boolean | [Hidden order](https://www.kucoin.com/docs-new/api-338146) or not (not shown in order book) |\n| iceberg | boolean | Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/api-338146) |\n| visibleSize | string | Maximum visible quantity in iceberg orders |\n| tags | string | Order tag, length cannot exceed 20 characters (ASCII) |\n| cancelAfter | integer | Cancel after n seconds๏ผŒthe order timing strategy is GTT |\n| funds | string | When **type** is market, select one out of two: size or funds |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| clientOid | string | The user self-defined order id. |\n| orderTime | integer | |\n| originSize | string | original order size |\n| dealSize | string | deal size |\n| remainSize | string | remain size |\n| canceledSize | string | Cumulative canceled size |\n| status | string | Order Status. open๏ผšorder is active; done๏ผšorder has been completed |\n| matchTime | integer | |\n\n---\n", + "body": { + "mode": "raw", + "raw": "//limit order\n{\n \"type\": \"limit\",\n \"symbol\": \"BTC-USDT\",\n \"side\": \"buy\",\n \"price\": \"50000\",\n \"size\": \"0.00001\",\n \"clientOid\": \"5c52e11203aa677f33e493f\",\n \"remark\": \"order remarks\"\n}\n\n//market order 1\n// {\n// \"type\": \"market\",\n// \"symbol\": \"BTC-USDT\",\n// \"side\": \"buy\",\n// \"size\": \"0.00001\",\n// \"clientOid\": \"5c52e11203aa677f33e493fc\",\n// \"remark\": \"order remarks\",\n// }\n\n//market order 2\n// {\n// \"type\": \"market\",\n// \"symbol\": \"BTC-USDT\",\n// \"side\": \"buy\",\n// \"funds\": \"1\",\n// \"clientOid\": \"5c52e11203aa677f33e493fc\",\n// \"remark\": \"order remarks\",\n// }\n", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders", + "sync" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"orderId\": \"67111a7cb7cbdf000703e1f6\",\n \"clientOid\": \"5c52e11203aa677f33e493f\",\n \"orderTime\": 1729174140586,\n \"originSize\": \"0.00001\",\n \"dealSize\": \"0\",\n \"remainSize\": \"0.00001\",\n \"canceledSize\": \"0\",\n \"status\": \"open\",\n \"matchTime\": 1729174140588\n }\n}" + } + ] + }, + { + "name": "Modify Order", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders", + "alter" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470171)\n\n:::info[Description]\nThis interface can modify the price and quantity of the order according to orderId or clientOid.\n\nThe implementation of this interface is: cancel the order and place a new order on the same trading pair, and return the modification result to the client synchronously\n\nWhen the quantity of the new order updated by the user is less than the filled quantity of this order, the order will be considered as completed, and the order will be cancelled, and no new order will be placed\n:::\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | The old client order id,orderId and clientOid must choose one |\n| symbol | string | symbol |\n| orderId | string | The old order id, orderId and clientOid must choose one |\n| newPrice | string | The modified price of the new order, newPrice and newSize must choose one |\n| newSize | string | The modified size of the new order, newPrice and newSize must choose one |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| newOrderId | string | The new order id |\n| clientOid | string | The original client order id |\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"symbol\": \"BTC-USDT\",\n \"orderId\": \"670fd33bf9406e0007ab3945\",\n \"newPrice\": \"30000\",\n \"newSize\": \"0.0001\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders", + "alter" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"newOrderId\": \"67112258f9406e0007408827\",\n \"clientOid\": \"client order id 12\"\n }\n}" + } + ] + }, + { + "name": "Get DCP", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders", + "dead-cancel-all", + "query" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470172)\n\n:::info[Description]\nGet Disconnection Protect(Deadman Swich)Through this interface, you can query the settings of automatic order cancellation\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| timeout | integer | Auto cancel order trigger setting time, the unit is second. range: timeout=-1 (meaning unset) or 5 <= timeout <= 86400 |\n| symbols | string | List of trading pairs. Separated by commas, empty means all trading pairs |\n| currentTime | integer | System current time (in seconds) |\n| triggerTime | integer | Trigger cancellation time (in seconds) |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders", + "dead-cancel-all", + "query" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"timeout\": 5,\n \"symbols\": \"BTC-USDT,ETH-USDT\",\n \"currentTime\": 1729241305,\n \"triggerTime\": 1729241308\n }\n}" + } + ] + }, + { + "name": "Set DCP", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders", + "dead-cancel-all" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470173)\n\n:::info[Description]\nSet Disconnection Protect(Deadman Swich)Through this interface, Call this interface to automatically cancel all orders of the set trading pair after the specified time. If this interface is not called again for renewal or cancellation before the set time, the system will help the user to cancel the order of the corresponding trading pair. Otherwise it will not.\n:::\n\n:::tip[Tips]\nThe order cancellation delay is between 0 and 10 seconds, and the order will not be canceled in real time. When the system cancels the order, if the transaction pair status is no longer operable to cancel the order, it will not cancel the order\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| timeout | integer | Auto cancel order trigger setting time, the unit is second. range: timeout=-1 (meaning unset) or 5 <= timeout <= 86400. For example, timeout=5 means that the order will be automatically canceled if no user request is received for more than 5 seconds. When this parameter is changed, the previous setting will be overwritten. |\n| symbols | string | List of trading pairs. When this parameter is not empty, separate it with commas and support up to 50 trading pairs. Empty means all trading pairs. When this parameter is changed, the previous setting will be overwritten. |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currentTime | integer | System current time (in seconds) |\n| triggerTime | integer | Trigger cancellation time (in seconds) |\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"timeout\": 5,\n \"symbols\": \"BTC-USDT,ETH-USDT\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders", + "dead-cancel-all" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"currentTime\": 1729656588,\n \"triggerTime\": 1729656593\n }\n}" + } + ] + }, + { + "name": "Cancel Order By OrderId", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders", + "{{orderId}}" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470174)\n\n:::info[Description]\nThis endpoint can be used to cancel a spot order by orderId.\nThis endpoint only sends cancellation requests. The results of the requests must be obtained by checking the order status or subscribing to websocket.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | order id |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders", + "{{orderId}}" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"orderId\": \"671124f9365ccb00073debd4\"\n }\n}" + } + ] + }, + { + "name": "Cancel Stop Order By OrderId", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "stop-order", + "{{orderId}}" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470335)\n\n:::info[Description]\nRequest via this endpoint to cancel a single stop order previously placed.\n\nYou will receive cancelledOrderIds field once the system has received the cancellation request. The cancellation request will be processed by the matching engine in sequence. To know if the request is processed (successfully or not), you may check the order status or the update message from the websocket pushes.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| cancelledOrderIds | array | Refer to the schema section of cancelledOrderIds |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "stop-order", + "{{orderId}}" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"cancelledOrderIds\": [\n \"671124f9365ccb00073debd4\"\n ]\n }\n}" + } + ] + }, + { + "name": "Cancel All Orders By Symbol", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470175)\n\n:::info[Description]\nThis endpoint can cancel all spot orders for specific symbol.\nThis endpoint only sends cancellation requests. The results of the requests must be obtained by checking the order status or subscribing to websocket.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | string | |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": \"success\"\n}" + } + ] + }, + { + "name": "Cancel All Orders", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders", + "cancelAll" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470176)\n\n:::info[Description]\nThis endpoint can cancel all spot orders for all symbol.\nThis endpoint only sends cancellation requests. The results of the requests must be obtained by checking the order status or subscribing to websocket.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| succeedSymbols | array | Refer to the schema section of succeedSymbols |\n| failedSymbols | array | Refer to the schema section of failedSymbols |\n\n**root.data.failedSymbols Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | symbol |\n| error | string | error message |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders", + "cancelAll" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"succeedSymbols\": [\n \"ETH-USDT\",\n \"BTC-USDT\"\n ],\n \"failedSymbols\": []\n }\n}" + } + ] + }, + { + "name": "Cancel OCO Order By OrderId", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "oco", + "order", + "{{orderId}}" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470354)\n\n:::info[Description]\nRequest via this endpoint to cancel a single oco order previously placed.\n\nYou will receive cancelledOrderIds field once the system has received the cancellation request. The cancellation request will be processed by the matching engine in sequence. To know if the request is processed (successfully or not), you may check the order status or the update message from the pushes.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| cancelledOrderIds | array | Refer to the schema section of cancelledOrderIds |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "oco", + "order", + "{{orderId}}" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"cancelledOrderIds\": [\n \"vs93gpqc6kkmkk57003gok16\",\n \"vs93gpqc6kkmkk57003gok17\"\n ]\n }\n}" + } + ] + }, + { + "name": "Get Symbols With Open Order", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders", + "active", + "symbols" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470177)\n\n:::info[Description]\nThis interface can query all spot symbol that has active orders\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbols | array | Refer to the schema section of symbols |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders", + "active", + "symbols" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"symbols\": [\n \"ETH-USDT\",\n \"BTC-USDT\"\n ]\n }\n}" + } + ] + }, + { + "name": "Get Open Orders", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders", + "active" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470178)\n\n:::info[Description]\nThis interface is to obtain all Spot active order lists, and the return value of the active order interface is the paged data of all uncompleted order lists. The returned data is sorted in descending order according to the latest update time of the order.\n\nAfter the user successfully places an order, the order is in Active state, and the user can use inOrderBook to determine whether the order has entered the order. Canceled or fully filled orders are marked as completed Done status.\n:::\n\n:::tip[Tips]\nFor high-frequency trading users, we recommend locally caching, maintaining your own order records, and using market data streams to update your order information in real time.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | The unique order id generated by the trading system |\n| symbol | string | symbol |\n| opType | string | |\n| type | string | Specify if the order is an 'limit' order or 'market' order. |\n| side | string | Buy or sell |\n| price | string | Order price |\n| size | string | Order size |\n| funds | string | Order Funds |\n| dealSize | string | Number of filled transactions |\n| dealFunds | string | Funds of filled transactions |\n| fee | string | [Handling fees](https://www.kucoin.com/docs-new/api-5327739) |\n| feeCurrency | string | currency used to calculate trading fee |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-5176570) |\n| timeInForce | string | Time in force |\n| postOnly | boolean | Whether its a postOnly order. |\n| hidden | boolean | Whether its a hidden order. |\n| iceberg | boolean | Whether its a iceberg order. |\n| visibleSize | string | Visible size of iceberg order in order book. |\n| cancelAfter | integer | A GTT timeInForce that expires in n seconds |\n| channel | string | |\n| clientOid | string | Client Order Id๏ผŒunique identifier created by the user |\n| remark | string | Order placement remarks |\n| tags | string | Order tag |\n| cancelExist | boolean | Whether there is a cancellation record for the order. |\n| createdAt | integer | |\n| lastUpdatedAt | integer | |\n| tradeType | string | Trade type, redundancy param |\n| inOrderBook | boolean | Whether to enter the orderbook: true: enter the orderbook; false: not enter the orderbook |\n| cancelledSize | string | Number of canceled transactions |\n| cancelledFunds | string | Funds of canceled transactions |\n| remainSize | string | Number of remain transactions |\n| remainFunds | string | Funds of remain transactions |\n| tax | string | Users in some regions need query this field |\n| active | boolean | Order status: true-The status of the order isactive; false-The status of the order is done |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders", + "active" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"id\": \"67120bbef094e200070976f6\",\n \"clientOid\": \"5c52e11203aa677f33e493fb\",\n \"symbol\": \"BTC-USDT\",\n \"opType\": \"DEAL\",\n \"type\": \"limit\",\n \"side\": \"buy\",\n \"price\": \"50000\",\n \"size\": \"0.00001\",\n \"funds\": \"0.5\",\n \"dealSize\": \"0\",\n \"dealFunds\": \"0\",\n \"fee\": \"0\",\n \"feeCurrency\": \"USDT\",\n \"stp\": null,\n \"timeInForce\": \"GTC\",\n \"postOnly\": false,\n \"hidden\": false,\n \"iceberg\": false,\n \"visibleSize\": \"0\",\n \"cancelAfter\": 0,\n \"channel\": \"API\",\n \"remark\": \"order remarks\",\n \"tags\": \"order tags\",\n \"cancelExist\": false,\n \"tradeType\": \"TRADE\",\n \"inOrderBook\": true,\n \"cancelledSize\": \"0\",\n \"cancelledFunds\": \"0\",\n \"remainSize\": \"0.00001\",\n \"remainFunds\": \"0.5\",\n \"tax\": \"0\",\n \"active\": true,\n \"createdAt\": 1729235902748,\n \"lastUpdatedAt\": 1729235909862\n }\n ]\n}" + } + ] + }, + { + "name": "Get Stop Orders List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "stop-order" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470338)\n\n:::info[Description]\nRequest via this endpoint to get your current untriggered stop order list. Items are paginated and sorted to show the latest first. See the Pagination section for retrieving additional entries after the first page.\n\n:::\n\n\n:::tip[Example]\n```json\n{\n \"currentPage\": 1,\n \"pageSize\": 50,\n \"totalNum\": 1,\n \"totalPage\": 1,\n \"items\": [\n {\n \"id\": \"vs8hoo8kqjnklv4m0038lrfq\",\n \"symbol\": \"KCS-USDT\",\n \"userId\": \"60fe4956c43cbc0006562c2c\",\n \"status\": \"NEW\",\n \"type\": \"limit\",\n \"side\": \"buy\",\n \"price\": \"0.01000000000000000000\",\n \"size\": \"0.01000000000000000000\",\n \"funds\": null,\n \"stp\": null,\n \"timeInForce\": \"GTC\",\n \"cancelAfter\": -1,\n \"postOnly\": false,\n \"hidden\": false,\n \"iceberg\": false,\n \"visibleSize\": null,\n \"channel\": \"API\",\n \"clientOid\": \"404814a0fb4311eb9098acde48001122\",\n \"remark\": null,\n \"tags\": null,\n \"orderTime\": 1628755183702150167,\n \"domainId\": \"kucoin\",\n \"tradeSource\": \"USER\",\n \"tradeType\": \"TRADE\",\n \"feeCurrency\": \"USDT\",\n \"takerFeeRate\": \"0.00200000000000000000\",\n \"makerFeeRate\": \"0.00200000000000000000\",\n \"createdAt\": 1628755183704,\n \"stop\": \"loss\",\n \"stopTriggerTime\": null,\n \"stopPrice\": \"10.00000000000000000000\"\n }\n ]\n}\n```\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | Only list orders for a specific symbol |\n| side | string | buy or sell |\n| type | string | limit, market, limit_stop or market_stop |\n| tradeType | string | The type of trading : TRADE๏ผˆSpot๏ผ‰, MARGIN_TRADE (Cross Margin), MARGIN_ISOLATED_TRADE (Isolated Margin). Default is TRADE |\n| startAt | number | Start time (milisecond) |\n| endAt | number | End time (milisecond) |\n| currentPage | integer | current page |\n| orderIds | string | comma seperated order ID list |\n| pageSize | integer | page size |\n| stop | string | Order type: stop: stop loss order, oco: oco order |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currentPage | integer | current page id |\n| pageSize | integer | |\n| totalNum | integer | the stop order count |\n| totalPage | integer | total page count of the list |\n| items | array | Refer to the schema section of items |\n\n**root.data.items Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | Order ID, the ID of an order. |\n| symbol | string | Symbol name |\n| userId | string | User ID |\n| status | string | Order status, include NEW, TRIGGERED |\n| type | string | Order type,limit, market, limit_stop or market_stop |\n| side | string | transaction direction,include buy and sell |\n| price | string | order price |\n| size | string | order quantity |\n| funds | string | order funds |\n| stp | string | |\n| timeInForce | string | time InForce,include GTC,GTT,IOC,FOK |\n| cancelAfter | integer | cancel orders after n seconds๏ผŒrequires timeInForce to be GTT |\n| postOnly | boolean | postOnly |\n| hidden | boolean | hidden order |\n| iceberg | boolean | Iceberg order |\n| visibleSize | string | displayed quantity for iceberg order |\n| channel | string | order source |\n| clientOid | string | user-entered order unique mark |\n| remark | string | Remarks at stop order creation |\n| tags | string | tag order source |\n| orderTime | integer | Time of place a stop order, accurate to nanoseconds |\n| domainId | string | domainId, e.g: kucoin |\n| tradeSource | string | trade source: USER๏ผˆOrder by user๏ผ‰, MARGIN_SYSTEM๏ผˆOrder by margin system๏ผ‰ |\n| tradeType | string | The type of trading : TRADE๏ผˆSpot๏ผ‰, MARGIN_TRADE (Cross Margin), MARGIN_ISOLATED_TRADE (Isolated Margin). |\n| feeCurrency | string | The currency of the fee |\n| takerFeeRate | string | Fee Rate of taker |\n| makerFeeRate | string | Fee Rate of maker |\n| createdAt | integer | order creation time |\n| stop | string | Stop order type, include loss and entry |\n| stopTriggerTime | integer | The trigger time of the stop order |\n| stopPrice | string | stop price |\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"symbol\": \"BTC-USDT\",\n \"orderId\": \"670fd33bf9406e0007ab3945\",\n \"newPrice\": \"30000\",\n \"newSize\": \"0.0001\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "stop-order" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"currentPage\": 1,\n \"pageSize\": 50,\n \"totalNum\": 1,\n \"totalPage\": 1,\n \"items\": [\n {\n \"id\": \"vs8hoo8kqjnklv4m0038lrfq\",\n \"symbol\": \"KCS-USDT\",\n \"userId\": \"60fe4956c43cbc0006562c2c\",\n \"status\": \"NEW\",\n \"type\": \"limit\",\n \"side\": \"buy\",\n \"price\": \"0.01000000000000000000\",\n \"size\": \"0.01000000000000000000\",\n \"funds\": null,\n \"stp\": null,\n \"timeInForce\": \"GTC\",\n \"cancelAfter\": -1,\n \"postOnly\": false,\n \"hidden\": false,\n \"iceberg\": false,\n \"visibleSize\": null,\n \"channel\": \"API\",\n \"clientOid\": \"404814a0fb4311eb9098acde48001122\",\n \"remark\": null,\n \"tags\": null,\n \"orderTime\": 1628755183702150100,\n \"domainId\": \"kucoin\",\n \"tradeSource\": \"USER\",\n \"tradeType\": \"TRADE\",\n \"feeCurrency\": \"USDT\",\n \"takerFeeRate\": \"0.00200000000000000000\",\n \"makerFeeRate\": \"0.00200000000000000000\",\n \"createdAt\": 1628755183704,\n \"stop\": \"loss\",\n \"stopTriggerTime\": null,\n \"stopPrice\": \"10.00000000000000000000\"\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Get Closed Orders", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders", + "done" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + }, + { + "key": "side", + "value": null, + "description": "specify if the order is to 'buy' or 'sell'" + }, + { + "key": "type", + "value": null, + "description": "specify if the order is an 'limit' order or 'market' order. " + }, + { + "key": "lastId", + "value": "254062248624417", + "description": "The id of the last set of data from the previous batch of data. By default, the latest information is given.\nlastId is used to filter data and paginate. If lastId is not entered, the default is a maximum of 100 returned data items. The return results include lastId๏ผŒwhich can be used as a query parameter to look up new data from the next page." + }, + { + "key": "limit", + "value": "20", + "description": "Default20๏ผŒMax100" + }, + { + "key": "startAt", + "value": "1728663338000", + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": "1728692138000", + "description": "End time (milisecond)" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470179)\n\n:::info[Description]\nThis interface is to obtain all Spot Closed order lists, and the return value of the active order interface is the paged data of all uncompleted order lists. The returned data is sorted in descending order according to the latest update time of the order.\n\nAfter the user successfully places an order, the order is in Active state, and the user can use inOrderBook to determine whether the order has entered the order. Canceled or fully filled orders are marked as completed Done status.\n:::\n\n:::tip[Tips]\nIf the order is not an active order, you can only get data within the time range of 3 _ 24 hours (ie: from the current time to 3 _ 24 hours ago). If the time range is exceeded, the system will query the data within the time range of 3 * 24 hours by default.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| lastId | integer | The id of the last set of data from the previous batch of data. By default, the latest information is given.
lastId is used to filter data and paginate. If lastId is not entered, the default is a maximum of 100 returned data items. The return results include lastId๏ผŒwhich can be used as a query parameter to look up new data from the next page. |\n| items | array | Refer to the schema section of items |\n\n**root.data.items Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | The unique order id generated by the trading system |\n| symbol | string | symbol |\n| opType | string | |\n| type | string | Specify if the order is an 'limit' order or 'market' order. |\n| side | string | Buy or sell |\n| price | string | Order price |\n| size | string | Order size |\n| funds | string | Order Funds |\n| dealSize | string | Number of filled transactions |\n| dealFunds | string | Funds of filled transactions |\n| fee | string | [Handling fees](https://www.kucoin.com/docs-new/api-5327739) |\n| feeCurrency | string | currency used to calculate trading fee |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-5176570) |\n| timeInForce | string | Time in force |\n| postOnly | boolean | Whether its a postOnly order. |\n| hidden | boolean | Whether its a hidden order. |\n| iceberg | boolean | Whether its a iceberg order. |\n| visibleSize | string | Visible size of iceberg order in order book. |\n| cancelAfter | integer | A GTT timeInForce that expires in n seconds |\n| channel | string | |\n| clientOid | string | Client Order Id๏ผŒunique identifier created by the user |\n| remark | string | Order placement remarks |\n| tags | string | Order tag |\n| cancelExist | boolean | Whether there is a cancellation record for the order. |\n| createdAt | integer | |\n| lastUpdatedAt | integer | |\n| tradeType | string | Trade type, redundancy param |\n| inOrderBook | boolean | Whether to enter the orderbook: true: enter the orderbook; false: not enter the orderbook |\n| cancelledSize | string | Number of canceled transactions |\n| cancelledFunds | string | Funds of canceled transactions |\n| remainSize | string | Number of remain transactions |\n| remainFunds | string | Funds of remain transactions |\n| tax | string | Users in some regions need query this field |\n| active | boolean | Order status: true-The status of the order isactive; false-The status of the order is done |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders", + "done" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + }, + { + "key": "side", + "value": null, + "description": "specify if the order is to 'buy' or 'sell'" + }, + { + "key": "type", + "value": null, + "description": "specify if the order is an 'limit' order or 'market' order. " + }, + { + "key": "lastId", + "value": "254062248624417", + "description": "The id of the last set of data from the previous batch of data. By default, the latest information is given.\nlastId is used to filter data and paginate. If lastId is not entered, the default is a maximum of 100 returned data items. The return results include lastId๏ผŒwhich can be used as a query parameter to look up new data from the next page." + }, + { + "key": "limit", + "value": "20", + "description": "Default20๏ผŒMax100" + }, + { + "key": "startAt", + "value": "1728663338000", + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": "1728692138000", + "description": "End time (milisecond)" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"lastId\": 19814995255305,\n \"items\": [\n {\n \"id\": \"6717422bd51c29000775ea03\",\n \"clientOid\": \"5c52e11203aa677f33e493fb\",\n \"symbol\": \"BTC-USDT\",\n \"opType\": \"DEAL\",\n \"type\": \"limit\",\n \"side\": \"buy\",\n \"price\": \"70000\",\n \"size\": \"0.00001\",\n \"funds\": \"0.7\",\n \"dealSize\": \"0.00001\",\n \"dealFunds\": \"0.677176\",\n \"remainSize\": \"0\",\n \"remainFunds\": \"0.022824\",\n \"cancelledSize\": \"0\",\n \"cancelledFunds\": \"0\",\n \"fee\": \"0.000677176\",\n \"feeCurrency\": \"USDT\",\n \"stp\": null,\n \"timeInForce\": \"GTC\",\n \"postOnly\": false,\n \"hidden\": false,\n \"iceberg\": false,\n \"visibleSize\": \"0\",\n \"cancelAfter\": 0,\n \"channel\": \"API\",\n \"remark\": \"order remarks\",\n \"tags\": null,\n \"cancelExist\": false,\n \"tradeType\": \"TRADE\",\n \"inOrderBook\": false,\n \"active\": false,\n \"tax\": \"0\",\n \"createdAt\": 1729577515444,\n \"lastUpdatedAt\": 1729577515481\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Get Stop Order By OrderId", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "stop-order", + "{{orderId}}" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470339)\n\n:::info[Description]\nRequest via this interface to get a stop order information via the order ID.\n\n:::\n\n\n:::tip[Example]\n```json\n{\n \"id\": \"vs8hoo8q2ceshiue003b67c0\",\n \"symbol\": \"KCS-USDT\",\n \"userId\": \"60fe4956c43cbc0006562c2c\",\n \"status\": \"NEW\",\n \"type\": \"limit\",\n \"side\": \"buy\",\n \"price\": \"0.01000000000000000000\",\n \"size\": \"0.01000000000000000000\",\n \"funds\": null,\n \"stp\": null,\n \"timeInForce\": \"GTC\",\n \"cancelAfter\": -1,\n \"postOnly\": false,\n \"hidden\": false,\n \"iceberg\": false,\n \"visibleSize\": null,\n \"channel\": \"API\",\n \"clientOid\": \"40e0eb9efe6311eb8e58acde48001122\",\n \"remark\": null,\n \"tags\": null,\n \"orderTime\": 1629098781127530345,\n \"domainId\": \"kucoin\",\n \"tradeSource\": \"USER\",\n \"tradeType\": \"TRADE\",\n \"feeCurrency\": \"USDT\",\n \"takerFeeRate\": \"0.00200000000000000000\",\n \"makerFeeRate\": \"0.00200000000000000000\",\n \"createdAt\": 1629098781128,\n \"stop\": \"loss\",\n \"stopTriggerTime\": null,\n \"stopPrice\": \"10.00000000000000000000\"\n}\n```\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | Only list orders for a specific symbol |\n| side | string | buy or sell |\n| type | string | limit, market, limit_stop or market_stop |\n| tradeType | string | The type of trading : TRADE๏ผˆSpot๏ผ‰, MARGIN_TRADE (Cross Margin), MARGIN_ISOLATED_TRADE (Isolated Margin). Default is TRADE |\n| startAt | number | Start time (milisecond) |\n| endAt | number | End time (milisecond) |\n| currentPage | integer | current page |\n| orderIds | string | comma seperated order ID list |\n| pageSize | integer | page size |\n| stop | string | Order type: stop: stop loss order, oco: oco order |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| data | object | Refer to the schema section of data |\n| code | string | return status code |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | Order ID, the ID of an order. |\n| symbol | string | Symbol name |\n| userId | string | User ID |\n| status | string | Order status, include NEW, TRIGGERED |\n| type | string | Order type,limit, market, limit_stop or market_stop |\n| side | string | transaction direction,include buy and sell |\n| price | string | order price |\n| size | string | order quantity |\n| funds | string | order funds |\n| stp | string | |\n| timeInForce | string | time InForce,include GTC,GTT,IOC,FOK |\n| cancelAfter | integer | cancel orders after n seconds๏ผŒrequires timeInForce to be GTT |\n| postOnly | boolean | postOnly |\n| hidden | boolean | hidden order |\n| iceberg | boolean | Iceberg order |\n| visibleSize | string | displayed quantity for iceberg order |\n| channel | string | order source |\n| clientOid | string | user-entered order unique mark |\n| remark | string | Remarks at stop order creation |\n| tags | string | tag order source |\n| domainId | string | domainId, e.g: kucoin |\n| tradeSource | string | trade source: USER๏ผˆOrder by user๏ผ‰, MARGIN_SYSTEM๏ผˆOrder by margin system๏ผ‰ |\n| tradeType | string | The type of trading : TRADE๏ผˆSpot๏ผ‰, MARGIN_TRADE (Cross Margin), MARGIN_ISOLATED_TRADE (Isolated Margin). |\n| feeCurrency | string | The currency of the fee |\n| takerFeeRate | string | Fee Rate of taker |\n| makerFeeRate | string | Fee Rate of maker |\n| createdAt | integer | order creation time |\n| stop | string | Stop order type, include loss and entry |\n| stopTriggerTime | integer | The trigger time of the stop order |\n| stopPrice | string | stop price |\n| orderTime | integer | Time of place a stop order, accurate to nanoseconds |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "stop-order", + "{{orderId}}" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"id\": \"vs8hoo8q2ceshiue003b67c0\",\n \"symbol\": \"KCS-USDT\",\n \"userId\": \"60fe4956c43cbc0006562c2c\",\n \"status\": \"NEW\",\n \"type\": \"limit\",\n \"side\": \"buy\",\n \"price\": \"0.01000000000000000000\",\n \"size\": \"0.01000000000000000000\",\n \"funds\": null,\n \"stp\": null,\n \"timeInForce\": \"GTC\",\n \"cancelAfter\": -1,\n \"postOnly\": false,\n \"hidden\": false,\n \"iceberg\": false,\n \"visibleSize\": null,\n \"channel\": \"API\",\n \"clientOid\": \"40e0eb9efe6311eb8e58acde48001122\",\n \"remark\": null,\n \"tags\": null,\n \"orderTime\": 1629098781127530200,\n \"domainId\": \"kucoin\",\n \"tradeSource\": \"USER\",\n \"tradeType\": \"TRADE\",\n \"feeCurrency\": \"USDT\",\n \"takerFeeRate\": \"0.00200000000000000000\",\n \"makerFeeRate\": \"0.00200000000000000000\",\n \"createdAt\": 1629098781128,\n \"stop\": \"loss\",\n \"stopTriggerTime\": null,\n \"stopPrice\": \"10.00000000000000000000\"\n }\n}" + } + ] + }, + { + "name": "Get Stop Order By ClientOid", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "stop-order", + "queryOrderByClientOid" + ], + "query": [ + { + "key": "clientOid", + "value": null, + "description": "The client order id" + }, + { + "key": "symbol", + "value": null, + "description": "symbol name" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470340)\n\n:::info[Description]\nRequest via this interface to get a stop order information via the clientOid.\n\n:::\n\n\n:::tip[Example]\n```json\n{\n \"id\": \"vs8hoo8q2ceshiue003b67c0\",\n \"symbol\": \"KCS-USDT\",\n \"userId\": \"60fe4956c43cbc0006562c2c\",\n \"status\": \"NEW\",\n \"type\": \"limit\",\n \"side\": \"buy\",\n \"price\": \"0.01000000000000000000\",\n \"size\": \"0.01000000000000000000\",\n \"funds\": null,\n \"stp\": null,\n \"timeInForce\": \"GTC\",\n \"cancelAfter\": -1,\n \"postOnly\": false,\n \"hidden\": false,\n \"iceberg\": false,\n \"visibleSize\": null,\n \"channel\": \"API\",\n \"clientOid\": \"40e0eb9efe6311eb8e58acde48001122\",\n \"remark\": null,\n \"tags\": null,\n \"orderTime\": 1629098781127530345,\n \"domainId\": \"kucoin\",\n \"tradeSource\": \"USER\",\n \"tradeType\": \"TRADE\",\n \"feeCurrency\": \"USDT\",\n \"takerFeeRate\": \"0.00200000000000000000\",\n \"makerFeeRate\": \"0.00200000000000000000\",\n \"createdAt\": 1629098781128,\n \"stop\": \"loss\",\n \"stopTriggerTime\": null,\n \"stopPrice\": \"10.00000000000000000000\"\n}\n```\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | Only list orders for a specific symbol |\n| side | string | buy or sell |\n| type | string | limit, market, limit_stop or market_stop |\n| tradeType | string | The type of trading : TRADE๏ผˆSpot๏ผ‰, MARGIN_TRADE (Cross Margin), MARGIN_ISOLATED_TRADE (Isolated Margin). Default is TRADE |\n| startAt | integer | Start time (milisecond) |\n| endAt | integer | End time (milisecond) |\n| currentPage | integer | current page |\n| orderIds | string | comma seperated order ID list |\n| pageSize | integer | page size |\n| stop | string | Order type: stop: stop loss order, oco: oco order |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | the return code |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | Order ID, the ID of an order. |\n| symbol | string | Symbol name |\n| userId | string | User ID |\n| status | string | Order status, include NEW, TRIGGERED |\n| type | string | Order type,limit, market, limit_stop or market_stop |\n| side | string | transaction direction,include buy and sell |\n| price | string | order price |\n| size | string | order quantity |\n| funds | string | order funds |\n| stp | string | |\n| timeInForce | string | time InForce,include GTC,GTT,IOC,FOK |\n| cancelAfter | integer | cancel orders after n seconds๏ผŒrequires timeInForce to be GTT |\n| postOnly | boolean | postOnly |\n| hidden | boolean | hidden order |\n| iceberg | boolean | Iceberg order |\n| visibleSize | string | displayed quantity for iceberg order |\n| channel | string | order source |\n| clientOid | string | user-entered order unique mark |\n| remark | string | Remarks at stop order creation |\n| tags | string | tag order source |\n| domainId | string | domainId, e.g: kucoin |\n| tradeSource | string | trade source: USER๏ผˆOrder by user๏ผ‰, MARGIN_SYSTEM๏ผˆOrder by margin system๏ผ‰ |\n| tradeType | string | The type of trading : TRADE๏ผˆSpot๏ผ‰, MARGIN_TRADE (Cross Margin), MARGIN_ISOLATED_TRADE (Isolated Margin). |\n| feeCurrency | string | The currency of the fee |\n| takerFeeRate | string | Fee Rate of taker |\n| makerFeeRate | string | Fee Rate of maker |\n| createdAt | integer | order creation time |\n| stop | string | Stop order type, include loss and entry |\n| stopTriggerTime | integer | The trigger time of the stop order |\n| stopPrice | string | stop price |\n| orderTime | integer | Time of place a stop order, accurate to nanoseconds |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "stop-order", + "queryOrderByClientOid" + ], + "query": [ + { + "key": "clientOid", + "value": null, + "description": "The client order id" + }, + { + "key": "symbol", + "value": null, + "description": "symbol name" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"id\": \"vs8hoo8os561f5np0032vngj\",\n \"symbol\": \"KCS-USDT\",\n \"userId\": \"60fe4956c43cbc0006562c2c\",\n \"status\": \"NEW\",\n \"type\": \"limit\",\n \"side\": \"buy\",\n \"price\": \"0.01000000000000000000\",\n \"size\": \"0.01000000000000000000\",\n \"funds\": null,\n \"stp\": null,\n \"timeInForce\": \"GTC\",\n \"cancelAfter\": -1,\n \"postOnly\": false,\n \"hidden\": false,\n \"iceberg\": false,\n \"visibleSize\": null,\n \"channel\": \"API\",\n \"clientOid\": \"2b700942b5db41cebe578cff48960e09\",\n \"remark\": null,\n \"tags\": null,\n \"orderTime\": 1629020492834532600,\n \"domainId\": \"kucoin\",\n \"tradeSource\": \"USER\",\n \"tradeType\": \"TRADE\",\n \"feeCurrency\": \"USDT\",\n \"takerFeeRate\": \"0.00200000000000000000\",\n \"makerFeeRate\": \"0.00200000000000000000\",\n \"createdAt\": 1629020492837,\n \"stop\": \"loss\",\n \"stopTriggerTime\": null,\n \"stopPrice\": \"1.00000000000000000000\"\n }\n ]\n}" + } + ] + }, + { + "name": "Batch Cancel Stop Orders", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "stop-order", + "cancel" + ], + "query": [ + { + "key": "symbol", + "value": null, + "description": "Cancel the open order for the specified symbol" + }, + { + "key": "tradeType", + "value": null, + "description": "The type of trading : TRADE๏ผˆSpot๏ผ‰, MARGIN_TRADE (Cross Margin), MARGIN_ISOLATED_TRADE (Isolated Margin). Default is TRADE" + }, + { + "key": "orderIds", + "value": null, + "description": "Comma seperated order IDs." + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470337)\n\n:::info[Description]\nRequest via this interface to cancel a batch of stop orders.\n\nThe count of orderId in the parameter now is not limited.\n\nAn example is:\n ```/api/v1/stop-order/cancel?symbol=ETH-BTC&tradeType=TRADE&orderIds=5bd6e9286d99522a52e458de,5bd6e9286d99522a52e458df```\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| cancelledOrderIds | array | Refer to the schema section of cancelledOrderIds |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "stop-order", + "cancel" + ], + "query": [ + { + "key": "symbol", + "value": null, + "description": "Cancel the open order for the specified symbol" + }, + { + "key": "tradeType", + "value": null, + "description": "The type of trading : TRADE๏ผˆSpot๏ผ‰, MARGIN_TRADE (Cross Margin), MARGIN_ISOLATED_TRADE (Isolated Margin). Default is TRADE" + }, + { + "key": "orderIds", + "value": null, + "description": "Comma seperated order IDs." + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"cancelledOrderIds\": [\n \"671124f9365ccb00073debd4\"\n ]\n }\n}" + } + ] + }, + { + "name": "Batch Cancel OCO Order", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "oco", + "orders" + ], + "query": [ + { + "key": "orderIds", + "value": "674c388172cf2800072ee746,674c38bdfd8300000795167e", + "description": "Specify the order id, there can be multiple orders, separated by commas. If not passed, all oco orders will be canceled by default." + }, + { + "key": "symbol", + "value": "BTC-USDT", + "description": "trading pair. If not passed, the oco orders of all symbols will be canceled by default." + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470356)\n\n:::info[Description]\nThis interface can batch cancel OCO orders through orderIds.\n\nYou will receive cancelledOrderIds field once the system has received the cancellation request. The cancellation request will be processed by the matching engine in sequence. To know if the request is processed (successfully or not), you may check the order status or the update message from the pushes.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| cancelledOrderIds | array | Refer to the schema section of cancelledOrderIds |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "oco", + "orders" + ], + "query": [ + { + "key": "orderIds", + "value": "674c388172cf2800072ee746,674c38bdfd8300000795167e", + "description": "Specify the order id, there can be multiple orders, separated by commas. If not passed, all oco orders will be canceled by default." + }, + { + "key": "symbol", + "value": "BTC-USDT", + "description": "trading pair. If not passed, the oco orders of all symbols will be canceled by default." + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"cancelledOrderIds\": [\n \"vs93gpqc750mkk57003gok6i\",\n \"vs93gpqc750mkk57003gok6j\",\n \"vs93gpqc75c39p83003tnriu\",\n \"vs93gpqc75c39p83003tnriv\"\n ]\n }\n}" + } + ] + }, + { + "name": "Get Trade History", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "fills" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + }, + { + "key": "orderId", + "value": null, + "description": "The unique order id generated by the trading system\n(If orderId is specified๏ผŒplease ignore the other query parameters)" + }, + { + "key": "side", + "value": null, + "description": "specify if the order is to 'buy' or 'sell'" + }, + { + "key": "type", + "value": null, + "description": "specify if the order is an 'limit' order or 'market' order. " + }, + { + "key": "lastId", + "value": "254062248624417", + "description": "The id of the last set of data from the previous batch of data. By default, the latest information is given.\nlastId is used to filter data and paginate. If lastId is not entered, the default is a maximum of 100 returned data items. The return results include lastId๏ผŒwhich can be used as a query parameter to look up new data from the next page." + }, + { + "key": "limit", + "value": "100", + "description": "Default20๏ผŒMax100" + }, + { + "key": "startAt", + "value": "1728663338000", + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": "1728692138000", + "description": "End time (milisecond)" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470180)\n\n:::info[Description]\nThis endpoint can be used to obtain a list of the latest Spot transaction details. \nThe returned data is sorted in descending order according to the latest update time of the order.\n:::\n\n:::tip[Tips]\nIf the order is not an active order, you can only get data within the time range of 3 _ 24 hours (ie: from the current time to 3 _ 24 hours ago). If the time range is exceeded, the system will query the data within the time range of 3 * 24 hours by default.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| items | array | Refer to the schema section of items |\n| lastId | integer | The id of the last set of data from the previous batch of data. By default, the latest information is given.
lastId is used to filter data and paginate. If lastId is not entered, the default is a maximum of 100 returned data items. The return results include lastId๏ผŒwhich can be used as a query parameter to look up new data from the next page. |\n\n**root.data.items Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | integer | Id of transaction detail |\n| symbol | string | symbol |\n| tradeId | integer | Trade Id, symbol latitude increment |\n| orderId | string | The unique order id generated by the trading system |\n| counterOrderId | string | Counterparty order Id |\n| side | string | Buy or sell |\n| liquidity | string | Liquidity type: taker or maker |\n| forceTaker | boolean | |\n| price | string | Order price |\n| size | string | Order size |\n| funds | string | Order Funds |\n| fee | string | [Handling fees](https://www.kucoin.com/docs-new/api-5327739) |\n| feeRate | string | Fee rate
|\n| feeCurrency | string | currency used to calculate trading fee |\n| stop | string | Take Profit and Stop Loss type, currently HFT does not support the Take Profit and Stop Loss type, so it is empty |\n| tradeType | string | Trade type, redundancy param |\n| taxRate | string | Tax Rate, Users in some regions need query this field |\n| tax | string | Users in some regions need query this field |\n| type | string | Specify if the order is an 'limit' order or 'market' order. |\n| createdAt | integer | |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "fills" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + }, + { + "key": "orderId", + "value": null, + "description": "The unique order id generated by the trading system\n(If orderId is specified๏ผŒplease ignore the other query parameters)" + }, + { + "key": "side", + "value": null, + "description": "specify if the order is to 'buy' or 'sell'" + }, + { + "key": "type", + "value": null, + "description": "specify if the order is an 'limit' order or 'market' order. " + }, + { + "key": "lastId", + "value": "254062248624417", + "description": "The id of the last set of data from the previous batch of data. By default, the latest information is given.\nlastId is used to filter data and paginate. If lastId is not entered, the default is a maximum of 100 returned data items. The return results include lastId๏ผŒwhich can be used as a query parameter to look up new data from the next page." + }, + { + "key": "limit", + "value": "100", + "description": "Default20๏ผŒMax100" + }, + { + "key": "startAt", + "value": "1728663338000", + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": "1728692138000", + "description": "End time (milisecond)" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"items\": [\n {\n \"id\": 19814995255305,\n \"orderId\": \"6717422bd51c29000775ea03\",\n \"counterOrderId\": \"67174228135f9e000709da8c\",\n \"tradeId\": 11029373945659392,\n \"symbol\": \"BTC-USDT\",\n \"side\": \"buy\",\n \"liquidity\": \"taker\",\n \"type\": \"limit\",\n \"forceTaker\": false,\n \"price\": \"67717.6\",\n \"size\": \"0.00001\",\n \"funds\": \"0.677176\",\n \"fee\": \"0.000677176\",\n \"feeRate\": \"0.001\",\n \"feeCurrency\": \"USDT\",\n \"stop\": \"\",\n \"tradeType\": \"TRADE\",\n \"taxRate\": \"0\",\n \"tax\": \"0\",\n \"createdAt\": 1729577515473\n }\n ],\n \"lastId\": 19814995255305\n }\n}" + } + ] + }, + { + "name": "Get OCO Order By OrderId", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "oco", + "order", + "{{orderId}}" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470357)\n\n:::info[Description]\nRequest via this interface to get a oco order information via the order ID.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | symbol |\n| clientOid | string | Client Order Id |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| orderTime | integer | Order placement time, milliseconds |\n| status | string | Order status: NEW: New, DONE: Completed, TRIGGERED: Triggered, CANCELLED: Cancelled |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "oco", + "order", + "{{orderId}}" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"orderId\": \"674c3b6e688dea0007c7bab2\",\n \"symbol\": \"BTC-USDT\",\n \"clientOid\": \"5c52e1203aa6f37f1e493fb\",\n \"orderTime\": 1733049198863,\n \"status\": \"NEW\"\n }\n}" + } + ] + }, + { + "name": "Get OCO Order List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "oco", + "orders" + ], + "query": [ + { + "key": "symbol", + "value": null, + "description": "symbol" + }, + { + "key": "startAt", + "value": null, + "description": "Start time (milliseconds)" + }, + { + "key": "endAt", + "value": null, + "description": "End time (milliseconds)" + }, + { + "key": "orderIds", + "value": null, + "description": "Specify orderId collection, up to 500 orders\n" + }, + { + "key": "pageSize", + "value": null, + "description": "Size per page, minimum value 10, maximum value 500" + }, + { + "key": "currentPage", + "value": null, + "description": "Page number, minimum value 1\n" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470360)\n\n:::info[Description]\nRequest via this endpoint to get your current OCO order list. Items are paginated and sorted to show the latest first. See the Pagination section for retrieving additional entries after the first page.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currentPage | integer | |\n| pageSize | integer | |\n| totalNum | integer | |\n| totalPage | integer | |\n| items | array | Refer to the schema section of items |\n\n**root.data.items Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| symbol | string | symbol |\n| clientOid | string | Client Order Id |\n| orderTime | integer | Order placement time, milliseconds |\n| status | string | Order status: NEW: New, DONE: Completed, TRIGGERED: Triggered, CANCELLED: Cancelled |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "oco", + "orders" + ], + "query": [ + { + "key": "symbol", + "value": null, + "description": "symbol" + }, + { + "key": "startAt", + "value": null, + "description": "Start time (milliseconds)" + }, + { + "key": "endAt", + "value": null, + "description": "End time (milliseconds)" + }, + { + "key": "orderIds", + "value": null, + "description": "Specify orderId collection, up to 500 orders\n" + }, + { + "key": "pageSize", + "value": null, + "description": "Size per page, minimum value 10, maximum value 500" + }, + { + "key": "currentPage", + "value": null, + "description": "Page number, minimum value 1\n" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"currentPage\": 1,\n \"pageSize\": 50,\n \"totalNum\": 1,\n \"totalPage\": 1,\n \"items\": [\n {\n \"orderId\": \"674c3cfa72cf2800072ee7ce\",\n \"symbol\": \"BTC-USDT\",\n \"clientOid\": \"5c52e1203aa6f3g7f1e493fb\",\n \"orderTime\": 1733049594803,\n \"status\": \"NEW\"\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Get OCO Order Detail By OrderId", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "oco", + "order", + "details", + "{{orderId}}" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470359)\n\n:::info[Description]\nRequest via this interface to get a oco order detail via the order ID.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| symbol | string | symbol |\n| clientOid | string | Client Order Id |\n| orderTime | integer | Order placement time, milliseconds |\n| status | string | Order status: NEW: New, DONE: Completed, TRIGGERED: Triggered, CANCELLED: Cancelled |\n| orders | array | Refer to the schema section of orders |\n\n**root.data.orders Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | |\n| symbol | string | |\n| side | string | |\n| price | string | |\n| stopPrice | string | |\n| size | string | |\n| status | string | |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "oco", + "order", + "details", + "{{orderId}}" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"orderId\": \"674c3b6e688dea0007c7bab2\",\n \"symbol\": \"BTC-USDT\",\n \"clientOid\": \"5c52e1203aa6f37f1e493fb\",\n \"orderTime\": 1733049198863,\n \"status\": \"NEW\",\n \"orders\": [\n {\n \"id\": \"vs93gpqc7dn6h3fa003sfelj\",\n \"symbol\": \"BTC-USDT\",\n \"side\": \"buy\",\n \"price\": \"94000.00000000000000000000\",\n \"stopPrice\": \"94000.00000000000000000000\",\n \"size\": \"0.10000000000000000000\",\n \"status\": \"NEW\"\n },\n {\n \"id\": \"vs93gpqc7dn6h3fa003sfelk\",\n \"symbol\": \"BTC-USDT\",\n \"side\": \"buy\",\n \"price\": \"96000.00000000000000000000\",\n \"stopPrice\": \"98000.00000000000000000000\",\n \"size\": \"0.10000000000000000000\",\n \"status\": \"NEW\"\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Get Order By OrderId", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders", + "{{orderId}}" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470181)\n\n:::info[Description]\nThis endpoint can be used to obtain information for a single Spot order using the order id.\n\nAfter the user successfully places an order, the order is in Active state, and the user can use inOrderBook to determine whether the order has entered the order. Canceled or fully filled orders are marked as completed Done status.\n:::\n\n:::tip[Tips]\nIf the order is not an active order, you can only get data within the time range of 3 _ 24 hours (ie: from the current time to 3 _ 24 hours ago). If the time range is exceeded, the system will query the data within the time range of 3 * 24 hours by default.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | The unique order id generated by the trading system |\n| symbol | string | symbol |\n| opType | string | |\n| type | string | Specify if the order is an 'limit' order or 'market' order. |\n| side | string | Buy or sell |\n| price | string | Order price |\n| size | string | Order size |\n| funds | string | Order Funds |\n| dealSize | string | Number of filled transactions |\n| dealFunds | string | Funds of filled transactions |\n| fee | string | [Handling fees](https://www.kucoin.com/docs-new/api-5327739) |\n| feeCurrency | string | currency used to calculate trading fee |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-5176570) |\n| timeInForce | string | Time in force |\n| postOnly | boolean | Whether its a postOnly order. |\n| hidden | boolean | Whether its a hidden order. |\n| iceberg | boolean | Whether its a iceberg order. |\n| visibleSize | string | Visible size of iceberg order in order book. |\n| cancelAfter | integer | A GTT timeInForce that expires in n seconds |\n| channel | string | |\n| clientOid | string | Client Order Id๏ผŒunique identifier created by the user |\n| remark | string | Order placement remarks |\n| tags | string | Order tag |\n| cancelExist | boolean | Whether there is a cancellation record for the order. |\n| createdAt | integer | |\n| lastUpdatedAt | integer | |\n| tradeType | string | Trade type, redundancy param |\n| inOrderBook | boolean | Whether to enter the orderbook: true: enter the orderbook; false: not enter the orderbook |\n| cancelledSize | string | Number of canceled transactions |\n| cancelledFunds | string | Funds of canceled transactions |\n| remainSize | string | Number of remain transactions |\n| remainFunds | string | Funds of remain transactions |\n| tax | string | Users in some regions need query this field |\n| active | boolean | Order status: true-The status of the order isactive; false-The status of the order is done |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders", + "{{orderId}}" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"id\": \"6717422bd51c29000775ea03\",\n \"clientOid\": \"5c52e11203aa677f33e493fb\",\n \"symbol\": \"BTC-USDT\",\n \"opType\": \"DEAL\",\n \"type\": \"limit\",\n \"side\": \"buy\",\n \"price\": \"70000\",\n \"size\": \"0.00001\",\n \"funds\": \"0.7\",\n \"dealSize\": \"0.00001\",\n \"dealFunds\": \"0.677176\",\n \"remainSize\": \"0\",\n \"remainFunds\": \"0.022824\",\n \"cancelledSize\": \"0\",\n \"cancelledFunds\": \"0\",\n \"fee\": \"0.000677176\",\n \"feeCurrency\": \"USDT\",\n \"stp\": null,\n \"timeInForce\": \"GTC\",\n \"postOnly\": false,\n \"hidden\": false,\n \"iceberg\": false,\n \"visibleSize\": \"0\",\n \"cancelAfter\": 0,\n \"channel\": \"API\",\n \"remark\": \"order remarks\",\n \"tags\": null,\n \"cancelExist\": false,\n \"tradeType\": \"TRADE\",\n \"inOrderBook\": false,\n \"active\": false,\n \"tax\": \"0\",\n \"createdAt\": 1729577515444,\n \"lastUpdatedAt\": 1729577515481\n }\n}" + } + ] + }, + { + "name": "Get OCO Order By ClientOid", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "oco", + "client-order", + "{{clientOid}}" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470358)\n\n:::info[Description]\nRequest via this interface to get a oco order information via the client order ID.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | symbol |\n| clientOid | string | Client Order Id |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| orderTime | integer | Order placement time, milliseconds |\n| status | string | Order status: NEW: New, DONE: Completed, TRIGGERED: Triggered, CANCELLED: Cancelled |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "oco", + "client-order", + "{{clientOid}}" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"orderId\": \"674c3cfa72cf2800072ee7ce\",\n \"symbol\": \"BTC-USDT\",\n \"clientOid\": \"5c52e1203aa6f3g7f1e493fb\",\n \"orderTime\": 1733049594803,\n \"status\": \"NEW\"\n }\n}" + } + ] + }, + { + "name": "Get Order By ClientOid", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders", + "client-order", + "{{clientOid}}" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470182)\n\n:::info[Description]\nThis endpoint can be used to obtain information for a single Spot order using the client order id.\n\nAfter the user successfully places an order, the order is in Active state, and the user can use inOrderBook to determine whether the order has entered the order. Canceled or fully filled orders are marked as completed Done status.\n:::\n\n:::tip[Tips]\nIf the order is not an active order, you can only get data within the time range of 3 _ 24 hours (ie: from the current time to 3 _ 24 hours ago). If the time range is exceeded, the system will query the data within the time range of 3 * 24 hours by default.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | The unique order id generated by the trading system |\n| symbol | string | symbol |\n| opType | string | |\n| type | string | Specify if the order is an 'limit' order or 'market' order. |\n| side | string | Buy or sell |\n| price | string | Order price |\n| size | string | Order size |\n| funds | string | Order Funds |\n| dealSize | string | Number of filled transactions |\n| dealFunds | string | Funds of filled transactions |\n| fee | string | [Handling fees](https://www.kucoin.com/docs-new/api-5327739) |\n| feeCurrency | string | currency used to calculate trading fee |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-5176570) |\n| timeInForce | string | Time in force |\n| postOnly | boolean | Whether its a postOnly order. |\n| hidden | boolean | Whether its a hidden order. |\n| iceberg | boolean | Whether its a iceberg order. |\n| visibleSize | string | Visible size of iceberg order in order book. |\n| cancelAfter | integer | A GTT timeInForce that expires in n seconds |\n| channel | string | |\n| clientOid | string | Client Order Id๏ผŒunique identifier created by the user |\n| remark | string | Order placement remarks |\n| tags | string | Order tag |\n| cancelExist | boolean | Whether there is a cancellation record for the order. |\n| createdAt | integer | |\n| lastUpdatedAt | integer | |\n| tradeType | string | Trade type, redundancy param |\n| inOrderBook | boolean | Whether to enter the orderbook: true: enter the orderbook; false: not enter the orderbook |\n| cancelledSize | string | Number of canceled transactions |\n| cancelledFunds | string | Funds of canceled transactions |\n| remainSize | string | Number of remain transactions |\n| remainFunds | string | Funds of remain transactions |\n| tax | string | Users in some regions need query this field |\n| active | boolean | Order status: true-The status of the order isactive; false-The status of the order is done |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders", + "client-order", + "{{clientOid}}" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"id\": \"6717422bd51c29000775ea03\",\n \"clientOid\": \"5c52e11203aa677f33e493fb\",\n \"symbol\": \"BTC-USDT\",\n \"opType\": \"DEAL\",\n \"type\": \"limit\",\n \"side\": \"buy\",\n \"price\": \"70000\",\n \"size\": \"0.00001\",\n \"funds\": \"0.7\",\n \"dealSize\": \"0.00001\",\n \"dealFunds\": \"0.677176\",\n \"remainSize\": \"0\",\n \"remainFunds\": \"0.022824\",\n \"cancelledSize\": \"0\",\n \"cancelledFunds\": \"0\",\n \"fee\": \"0.000677176\",\n \"feeCurrency\": \"USDT\",\n \"stp\": null,\n \"timeInForce\": \"GTC\",\n \"postOnly\": false,\n \"hidden\": false,\n \"iceberg\": false,\n \"visibleSize\": \"0\",\n \"cancelAfter\": 0,\n \"channel\": \"API\",\n \"remark\": \"order remarks\",\n \"tags\": null,\n \"cancelExist\": false,\n \"tradeType\": \"TRADE\",\n \"inOrderBook\": false,\n \"active\": false,\n \"tax\": \"0\",\n \"createdAt\": 1729577515444,\n \"lastUpdatedAt\": 1729577515481\n }\n}" + } + ] + }, + { + "name": "Cancel OCO Order By ClientOid", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "oco", + "client-order", + "{{clientOid}}" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470355)\n\n:::info[Description]\nRequest via this interface to cancel a stop order via the clientOid.\n\nYou will receive cancelledOrderIds field once the system has received the cancellation request. The cancellation request will be processed by the matching engine in sequence. To know if the request is processed (successfully or not), you may check the order status or the update message from the pushes.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| cancelledOrderIds | array | Refer to the schema section of cancelledOrderIds |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "oco", + "client-order", + "{{clientOid}}" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"cancelledOrderIds\": [\n \"vs93gpqc6r0mkk57003gok3h\",\n \"vs93gpqc6r0mkk57003gok3i\"\n ]\n }\n}" + } + ] + }, + { + "name": "Cancel Partial Order", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders", + "cancel", + "{{orderId}}" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + }, + { + "key": "cancelSize", + "value": "0.00001", + "description": "The size you want cancel" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470183)\n\n:::info[Description]\nThis interface can cancel the specified quantity of the order according to the orderId.\nThe order execution order is: price first, time first, this interface will not change the queue order\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | order id |\n| cancelSize | string | The size you canceled |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders", + "cancel", + "{{orderId}}" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + }, + { + "key": "cancelSize", + "value": "0.00001", + "description": "The size you want cancel" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"orderId\": \"6711f73c1ef16c000717bb31\",\n \"cancelSize\": \"0.00001\"\n }\n}" + } + ] + }, + { + "name": "Cancel Order By ClientOid", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders", + "client-order", + "{{clientOid}}" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470184)\n\n:::info[Description]\nThis endpoint can be used to cancel a spot order by clientOid.\nThis endpoint only sends cancellation requests. The results of the requests must be obtained by checking the order status or subscribing to websocket.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒunique identifier created by the user |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders", + "client-order", + "{{clientOid}}" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"clientOid\": \"5c52e11203aa677f33e493fb\"\n }\n}" + } + ] + }, + { + "name": "Cancel Stop Order By ClientOid", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "stop-order", + "cancelOrderByClientOid" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + }, + { + "key": "clientOid", + "value": "689ff597f4414061aa819cc414836abd", + "description": "Unique order id created by users to identify their orders" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470336)\n\n:::info[Description]\nThis endpoint can be used to cancel a spot order by clientOid.\nThis endpoint only sends cancellation requests. The results of the requests must be obtained by checking the order status or subscribing to websocket.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒunique identifier created by the user |\n| cancelledOrderId | string | Unique ID of the cancelled order |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "stop-order", + "cancelOrderByClientOid" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + }, + { + "key": "clientOid", + "value": "689ff597f4414061aa819cc414836abd", + "description": "Unique order id created by users to identify their orders" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"cancelledOrderId\": \"vs8hoo8ksc8mario0035a74n\",\n \"clientOid\": \"689ff597f4414061aa819cc414836abd\"\n }\n}" + } + ] + }, + { + "name": "Cancel Order By OrderId Sync", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders", + "sync", + "{{orderId}}" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470185)\n\n:::info[Description]\nThis endpoint can be used to cancel a spot order by orderId.\n\nThe difference between this interface and \"Cancel Order By OrderId\" is that this interface will synchronously return the order information after the order canceling is completed.\n\nFor higher latency requirements, please select the \"Cancel Order By OrderId\" interface. If there is a requirement for returning data integrity, please select this interface\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | order id |\n| originSize | string | original order size |\n| dealSize | string | deal size |\n| remainSize | string | remain size |\n| canceledSize | string | Cumulative canceled size |\n| status | string | Order Status. open๏ผšorder is active; done๏ผšorder has been completed |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders", + "sync", + "{{orderId}}" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"orderId\": \"671128ee365ccb0007534d45\",\n \"originSize\": \"0.00001\",\n \"dealSize\": \"0\",\n \"remainSize\": \"0\",\n \"canceledSize\": \"0.00001\",\n \"status\": \"done\"\n }\n}" + } + ] + }, + { + "name": "Cancel Order By ClientOid Sync", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders", + "sync", + "client-order", + "{{clientOid}}" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470186)\n\n:::info[Description]\nThis endpoint can be used to cancel a spot order by clientOid.\n\nThe difference between this interface and \"Cancel Order By ClientOid\" is that this interface will synchronously return the order information after the order canceling is completed.\n\nFor higher latency requirements, please select the \"Cancel Order By ClientOid\" interface. If there is a requirement for returning data integrity, please select this interface\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒunique identifier created by the user |\n| originSize | string | original order size |\n| dealSize | string | deal size |\n| remainSize | string | remain size |\n| canceledSize | string | Cumulative canceled size |\n| status | string | Order Status. open๏ผšorder is active; done๏ผšorder has been completed |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders", + "sync", + "client-order", + "{{clientOid}}" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"clientOid\": \"5c52e11203aa677f33e493fb\",\n \"originSize\": \"0.00001\",\n \"dealSize\": \"0\",\n \"remainSize\": \"0\",\n \"canceledSize\": \"0.00001\",\n \"status\": \"done\"\n }\n}" + } + ] + }, + { + "name": "Add Order Test", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders", + "test" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470187)\n\n:::info[Description]\nOrder test endpoint, the request parameters and return parameters of this endpoint are exactly the same as the order endpoint, and can be used to verify whether the signature is correct and other operations. After placing an order, the order will not enter the matching system, and the order cannot be queried.\n:::\n\n:::tip[Tips]\nPlease note that once your order enters the order book, the system will freeze the handling fees for the order ahead of time.\n\nBefore placing orders, please be sure to fully understand the meaning of the parameters for each trading pair.\n:::\n\n:::tip[Tips]\nThe maximum number of active orders per account is 2000, with a maximum of 200 active orders per trading pair.\n:::\n\n\n**Public order placement request parameters**\n\n| Param | Type | Mandatory | Description |\n| --------- | ------ | --------- | ----------- |\n| clientOid | String | No | Client Order Id๏ผŒunique identifier created by the user, the use of UUID is recommended |\n| symbol | String | Yes | symbol |\n| type | String | Yes | Order type `limit` and `market` |\n| side | String | Yes | `buy` or `sell` |\n| stp | String | No | self trade prevention is divided into four strategies: `CN`, `CO`, `CB` , and `DC` |\n| tags | String | No | Order tag, length cannot exceed `20` characters (ASCII) |\n| remark | String | No | Order placement remarks, length cannot exceed `20` characters (ASCII) |\n\n**Additional Request Parameters Required by `limit` Orders**\n\n| Param | Type | Mandatory | Description |\n| ----------- | ------- | --------- | ----------- |\n| price | String | Yes | Specify price for currency |\n| size | String | Yes | Specify quantity for currency |\n| timeInForce | String | No | Order timing strategy `GTC`, `GTT`, `IOC`, `FOK` (The default is `GTC`) |\n| cancelAfter | long | No | Cancel after `n` seconds๏ผŒthe order timing strategy is `GTT` |\n| postOnly | boolean | No | passive order labels, this is disabled when the order timing strategy is `IOC` or `FOK` |\n| hidden | boolean | No | Hidden or not (not shown in order book) |\n| iceberg | boolean | No | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | String | No | Maximum visible quantity in iceberg orders |\n\n**Additional request parameters required by `market` orders**\n\n| Param | Type | Mandatory | Description |\n| ----- | ------ | --------- | ------------------------------------------ |\n| size | String | No | (Select one out of two: `size` or `funds`) |\n| funds | String | No | (Select one out of two: `size` or `funds`) |\n\n\n**Hold**\n\nFor limit price purchase orders, we will hold the amount of funds (price * size) required for your purchase order. Similarly, for limit price sell orders, we will also hold you sell order assets. When the transaction is executed, the service fees will be calculated. If you cancel a portion of a filled or unfilled order, then the remaining funds or amounts will be released and returned to your account. For market price buy/sell orders that require specific funds, we will hold the required funds in from your account. If only the size is specified, we may freeze (usually for a very short amount of time) all of the funds in your account prior to the order being filled or cancelled.\n\n\n**Order Lifecycle**\n\nWhen an order placement request is successful (the matching engine receives the order) or denied (due to there being insufficient funds or illegal parameter values, etc.), the system will respond to the HTTP request. When an order is successfully placed, the order ID is returned. The order will be matched, which could result in it being fully or partially filled. When an order is fully or partially filled, the remaining portions of the order will be in an active state awaiting to be matched (this does not include IOC orders). Orders that are fully or partially filled(already cancelled) will be put into the โ€œdoneโ€ state.\n\nUsers that have subscribed to the Market Data Channel can use the order ID ๏ผˆorderId๏ผ‰ and client ID ๏ผˆclientOid๏ผ‰ to identify messages.\n\n**Price Protection Mechanisms**\n\nPrice protection mechanisms ae enabled for order placements. Rules are detailed below:\n\n- If the spot trading market order/limit order placed by the user can be directly matched with an order in the current order book, the system will judge whether deviation between the price corresponding to the transaction depth and the spread exceeds the threshold value ๏ผˆthe threshold value can be obtained using the symbol API endpoint๏ผ‰๏ผ›\n\n- If it is exceeded, for limit orders, the order will be directly cancelled;\n\n- If it is a market order, then the system will partially execute the order. The execution limit will be the order size within the price range corresponding to the threshold value. The remaining orders will not be filled.\n\nFor example: if the threshold value is 10%, when a user places a market price purchase order in the KCS/USDT trading market for 10,000 USDT (the selling price is currently 1.20000), the system will determine that after the order is completely filled, the final price will be 1.40000. (1.40000-1.20000)/1.20000=16.7%>10%. The threshold value is 1.32000. The userโ€™s market price purchase order will be filled only to a maximum of 1.32000. The remaining order portions will not be matched with orders in the order book. Note: this feature may not be able to determine depth with complete accuracy. If your order is not completely filled, it may be because the portion exceeding the threshold value was not filled.\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.

Please remember the orderId created by the service provider, it used to check for updates in order status. |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | symbol |\n| type | string | specify if the order is an 'limit' order or 'market' order.

The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine.

When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels.

Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. |\n| remark | string | Order placement remarks, length cannot exceed 20 characters (ASCII) |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into four strategies: CN, CO, CB , and DC |\n| price | string | Specify price for order

When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. |\n| size | string | Specify quantity for order

When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.

When **type** is market, select one out of two: size or funds |\n| timeInForce | string | [Time in force](https://www.kucoin.com/docs-new/api-338146) is a special strategy used during trading |\n| postOnly | boolean | passive order labels, this is disabled when the order timing strategy is IOC or FOK |\n| hidden | boolean | [Hidden order](https://www.kucoin.com/docs-new/api-338146) or not (not shown in order book) |\n| iceberg | boolean | Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/api-338146) |\n| visibleSize | string | Maximum visible quantity in iceberg orders |\n| tags | string | Order tag, length cannot exceed 20 characters (ASCII) |\n| cancelAfter | integer | Cancel after n seconds๏ผŒthe order timing strategy is GTT |\n| funds | string | When **type** is market, select one out of two: size or funds |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| clientOid | string | The user self-defined order id. |\n\n---\n", + "body": { + "mode": "raw", + "raw": "//limit order\n{\n \"type\": \"limit\",\n \"symbol\": \"BTC-USDT\",\n \"side\": \"buy\",\n \"price\": \"50000\",\n \"size\": \"0.00001\",\n \"clientOid\": \"5c52e11203aa677f33e493f\",\n \"remark\": \"order remarks\"\n}\n\n//market order 1\n// {\n// \"type\": \"market\",\n// \"symbol\": \"BTC-USDT\",\n// \"side\": \"buy\",\n// \"size\": \"0.00001\",\n// \"clientOid\": \"5c52e11203aa677f33e493fc\",\n// \"remark\": \"order remarks\",\n// }\n\n//market order 2\n// {\n// \"type\": \"market\",\n// \"symbol\": \"BTC-USDT\",\n// \"side\": \"buy\",\n// \"funds\": \"1\",\n// \"clientOid\": \"5c52e11203aa677f33e493fc\",\n// \"remark\": \"order remarks\",\n// }\n", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders", + "test" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"orderId\": \"670fd33bf9406e0007ab3945\",\n \"clientOid\": \"5c52e11203aa677f33e493fb\"\n }\n}" + } + ] + }, + { + "name": "Add Order", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470188)\n\n:::info[Description]\nPlace order to the Spot trading system, you can place two major types of orders: limit and market. Orders can only be placed if your account has sufficient funds. Once an order is placed, your funds will be put on hold for the duration of the order. The amount of funds on hold depends on the order type and parameters specified.\n:::\n\n:::tip[Tips]\nPlease note that once your order enters the order book, the system will freeze the handling fees for the order ahead of time.\n\nBefore placing orders, please be sure to fully understand the meaning of the parameters for each trading pair.\n:::\n\n:::tip[Tips]\nThe maximum number of active orders per account is 2000, with a maximum of 200 active orders per trading pair.\n:::\n\n\n**Public order placement request parameters**\n\n| Param | Type | Mandatory | Description |\n| --------- | ------ | --------- | ----------- |\n| clientOid | String | No | Client Order Id๏ผŒunique identifier created by the user, the use of UUID is recommended |\n| symbol | String | Yes | symbol |\n| type | String | Yes | Order type `limit` and `market` |\n| side | String | Yes | `buy` or `sell` |\n| stp | String | No | self trade prevention is divided into four strategies: `CN`, `CO`, `CB` , and `DC` |\n| tags | String | No | Order tag, length cannot exceed `20` characters (ASCII) |\n| remark | String | No | Order placement remarks, length cannot exceed `20` characters (ASCII) |\n\n**Additional Request Parameters Required by `limit` Orders**\n\n| Param | Type | Mandatory | Description |\n| ----------- | ------- | --------- | ----------- |\n| price | String | Yes | Specify price for currency |\n| size | String | Yes | Specify quantity for currency |\n| timeInForce | String | No | Order timing strategy `GTC`, `GTT`, `IOC`, `FOK` (The default is `GTC`) |\n| cancelAfter | long | No | Cancel after `n` seconds๏ผŒthe order timing strategy is `GTT` |\n| postOnly | boolean | No | passive order labels, this is disabled when the order timing strategy is `IOC` or `FOK` |\n| hidden | boolean | No | Hidden or not (not shown in order book) |\n| iceberg | boolean | No | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | String | No | Maximum visible quantity in iceberg orders |\n\n**Additional request parameters required by `market` orders**\n\n| Param | Type | Mandatory | Description |\n| ----- | ------ | --------- | ------------------------------------------ |\n| size | String | No | (Select one out of two: `size` or `funds`) |\n| funds | String | No | (Select one out of two: `size` or `funds`) |\n\n\n\n**Hold**\n\nFor limit price purchase orders, we will hold the amount of funds (price * size) required for your purchase order. Similarly, for limit price sell orders, we will also hold you sell order assets. When the transaction is executed, the service fees will be calculated. If you cancel a portion of a filled or unfilled order, then the remaining funds or amounts will be released and returned to your account. For market price buy/sell orders that require specific funds, we will hold the required funds in from your account. If only the size is specified, we may freeze (usually for a very short amount of time) all of the funds in your account prior to the order being filled or cancelled.\n\n\n**Order Lifecycle**\n\nWhen an order placement request is successful (the matching engine receives the order) or denied (due to there being insufficient funds or illegal parameter values, etc.), the system will respond to the HTTP request. When an order is successfully placed, the order ID is returned. The order will be matched, which could result in it being fully or partially filled. When an order is fully or partially filled, the remaining portions of the order will be in an active state awaiting to be matched (this does not include IOC orders). Orders that are fully or partially filled(already cancelled) will be put into the โ€œdoneโ€ state.\n\nUsers that have subscribed to the Market Data Channel can use the order ID ๏ผˆorderId๏ผ‰ and client ID ๏ผˆclientOid๏ผ‰ to identify messages.\n\n**Price Protection Mechanisms**\n\nPrice protection mechanisms ae enabled for order placements. Rules are detailed below:\n\n- If the spot trading market order/limit order placed by the user can be directly matched with an order in the current order book, the system will judge whether deviation between the price corresponding to the transaction depth and the spread exceeds the threshold value ๏ผˆthe threshold value can be obtained using the symbol API endpoint๏ผ‰๏ผ›\n\n- If it is exceeded, for limit orders, the order will be directly cancelled;\n\n- If it is a market order, then the system will partially execute the order. The execution limit will be the order size within the price range corresponding to the threshold value. The remaining orders will not be filled.\n\nFor example: if the threshold value is 10%, when a user places a market price purchase order in the KCS/USDT trading market for 10,000 USDT (the selling price is currently 1.20000), the system will determine that after the order is completely filled, the final price will be 1.40000. (1.40000-1.20000)/1.20000=16.7%>10%. The threshold value is 1.32000. The userโ€™s market price purchase order will be filled only to a maximum of 1.32000. The remaining order portions will not be matched with orders in the order book. Note: this feature may not be able to determine depth with complete accuracy. If your order is not completely filled, it may be because the portion exceeding the threshold value was not filled.\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.

Please remember the orderId created by the service provider, it used to check for updates in order status. |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | symbol |\n| type | string | specify if the order is an 'limit' order or 'market' order.

The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine.

When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels.

Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. |\n| remark | string | Order placement remarks, length cannot exceed 20 characters (ASCII) |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into four strategies: CN, CO, CB , and DC |\n| price | string | Specify price for order

When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. |\n| size | string | Specify quantity for order

When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.

When **type** is market, select one out of two: size or funds |\n| timeInForce | string | [Time in force](https://www.kucoin.com/docs-new/api-338146) is a special strategy used during trading |\n| postOnly | boolean | passive order labels, this is disabled when the order timing strategy is IOC or FOK |\n| hidden | boolean | [Hidden order](https://www.kucoin.com/docs-new/api-338146) or not (not shown in order book) |\n| iceberg | boolean | Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/api-338146) |\n| visibleSize | string | Maximum visible quantity in iceberg orders |\n| tags | string | Order tag, length cannot exceed 20 characters (ASCII) |\n| cancelAfter | integer | Cancel after n seconds๏ผŒthe order timing strategy is GTT |\n| funds | string | When **type** is market, select one out of two: size or funds |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| clientOid | string | The user self-defined order id. |\n\n---\n", + "body": { + "mode": "raw", + "raw": "//limit order\n{\n \"type\": \"limit\",\n \"symbol\": \"BTC-USDT\",\n \"side\": \"buy\",\n \"price\": \"50000\",\n \"size\": \"0.00001\",\n \"clientOid\": \"5c52e11203aa677f33e493fb\",\n \"remark\": \"order remarks\"\n}\n\n//market order 1\n// {\n// \"type\": \"market\",\n// \"symbol\": \"BTC-USDT\",\n// \"side\": \"buy\",\n// \"size\": \"0.00001\",\n// \"clientOid\": \"5c52e11203aa677f33e493fc\",\n// \"remark\": \"order remarks\"\n// }\n\n//market order 2\n// {\n// \"type\": \"market\",\n// \"symbol\": \"BTC-USDT\",\n// \"side\": \"buy\",\n// \"funds\": \"1\",\n// \"clientOid\": \"5c52e11203aa677f33e493fc\",\n// \"remark\": \"order remarks\"\n// }\n", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "hf", + "orders" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"orderId\": \"670fd33bf9406e0007ab3945\",\n \"clientOid\": \"5c52e11203aa677f33e493fb\"\n }\n}" + } + ] + }, + { + "name": "Add OCO Order", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "oco", + "order" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470353)\n\n:::info[Description]\nPlace OCO order to the Spot trading system\n:::\n\n:::tip[Tips]\nThe maximum untriggered stop orders for a single trading pair in one account is 20.\n:::\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.

Please remember the orderId created by the service provider, it used to check for updates in order status. |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | symbol |\n| remark | string | Order placement remarks, length cannot exceed 20 characters (ASCII) |\n| price | string | Specify price for order |\n| size | string | Specify quantity for order |\n| stopPrice | string | trigger price. |\n| limitPrice | string | The limit order price after take-profit and stop-loss are triggered. |\n| tradeType | string | Transaction Type, currently only supports TRADE (spot transactions), the default is TRADE |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"symbol\": \"BTC-USDT\",\n \"side\": \"buy\",\n \"price\": \"94000\",\n \"size\": \"0.1\",\n \"clientOid\": \"5c52e11203aa67f1e493fb\",\n \"stopPrice\": \"98000\",\n \"limitPrice\": \"96000\",\n \"remark\": \"this is remark\",\n \"tradeType\": \"TRADE\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "oco", + "order" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"orderId\": \"674c316e688dea0007c7b986\"\n }\n}" + } + ] + }, + { + "name": "Add Stop Order", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "stop-order" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470334)\n\n:::info[Description]\nPlace stop order to the Spot trading system. The maximum untriggered stop orders for a single trading pair in one account is 20.\n:::\n\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.

Please remember the orderId created by the service provider, it used to check for updates in order status. |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | symbol |\n| type | string | specify if the order is an 'limit' order or 'market' order.

The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine.

When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels.

Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. |\n| remark | string | Order placement remarks, length cannot exceed 20 characters (ASCII) |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into four strategies: CN, CO, CB , and DC |\n| price | string | Specify price for order, not need for market order.

When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. |\n| size | string | Specify quantity for order

When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.

When **type** is market, select one out of two: size or funds |\n| timeInForce | string | [Time in force](https://www.kucoin.com/docs-new/api-338146) is a special strategy used during trading. Required for limit orders. |\n| postOnly | boolean | passive order labels, this is disabled when the order timing strategy is IOC or FOK if **type** is limit. |\n| hidden | boolean | [Hidden order](https://www.kucoin.com/docs-new/api-338146) or not (not shown in order book) |\n| iceberg | boolean | Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/api-338146) |\n| visibleSize | string | When **type** is limit, this is Maximum visible quantity in iceberg orders. |\n| cancelAfter | integer | Cancel after n seconds๏ผŒthe order timing strategy is GTT when **type** is limit. |\n| funds | string | When **type** is market, select one out of two: size or funds |\n| stopPrice | string | The trigger price. |\n| tradeType | string | The type of trading : TRADE๏ผˆSpot๏ผ‰, MARGIN_TRADE (Cross Margin), MARGIN_ISOLATED_TRADE (Isolated Margin). Default is TRADE |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| clientOid | string | The user self-defined order id. |\n\n---\n", + "body": { + "mode": "raw", + "raw": "//limit order\n{\n \"type\": \"limit\",\n \"symbol\": \"BTC-USDT\",\n \"side\": \"buy\",\n \"price\": \"50000\",\n \"size\": \"0.00001\",\n \"clientOid\": \"5c52e11203aa677f33e493fb\",\n \"remark\": \"order remarks\"\n}\n\n//market order 1\n// {\n// \"type\": \"market\",\n// \"symbol\": \"BTC-USDT\",\n// \"side\": \"buy\",\n// \"size\": \"0.00001\",\n// \"clientOid\": \"5c52e11203aa677f33e493fc\",\n// \"remark\": \"order remarks\"\n// }\n\n//market order 2\n// {\n// \"type\": \"market\",\n// \"symbol\": \"BTC-USDT\",\n// \"side\": \"buy\",\n// \"funds\": \"1\",\n// \"clientOid\": \"5c52e11203aa677f33e493fc\",\n// \"remark\": \"order remarks\"\n// }\n", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "stop-order" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"orderId\": \"670fd33bf9406e0007ab3945\",\n \"clientOid\": \"5c52e11203aa677f33e493fb\"\n }\n}" + } + ] + } + ], + "description": "" + } + ], + "description": "" + }, + { + "name": "Margin Trading", + "item": [ + { + "name": "Market Data", + "item": [ + { + "name": "Get Symbols - Cross Margin", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "margin", + "symbols" + ], + "query": [ + { + "key": "symbol", + "value": null, + "description": "If not provided, all cross margin symbol will be queried. If provided, only the specified symbol will be queried." + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470189)\n\n:::info[Description]\nThis endpoint allows querying the configuration of cross margin symbol.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| timestamp | integer | |\n| items | array | Refer to the schema section of items |\n\n**root.data.items Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | symbol |\n| name | string | symbol name |\n| enableTrading | boolean | Whether trading is enabled: true for enabled, false for disabled |\n| market | string | Trading market |\n| baseCurrency | string | Base currency,e.g. BTC. |\n| quoteCurrency | string | Quote currency,e.g. USDT. |\n| baseIncrement | string | Quantity increment: The quantity for an order must be a positive integer multiple of this increment. Here, the size refers to the quantity of the base currency for the order. For example, for the ETH-USDT trading pair, if the baseIncrement is 0.0000001, the order quantity can be 1.0000001 but not 1.00000001. |\n| baseMinSize | string | The minimum order quantity requried to place an order. |\n| quoteIncrement | string | Quote increment: The funds for a market order must be a positive integer multiple of this increment. The funds refer to the quote currency amount. For example, for the ETH-USDT trading pair, if the quoteIncrement is 0.000001, the amount of USDT for the order can be 3000.000001 but not 3000.0000001. |\n| quoteMinSize | string | The minimum order funds required to place a market order. |\n| baseMaxSize | string | The maximum order size required to place an order. |\n| quoteMaxSize | string | The maximum order funds required to place a market order. |\n| priceIncrement | string | Price increment: The price of an order must be a positive integer multiple of this increment. For example, for the ETH-USDT trading pair, if the priceIncrement is 0.01, the order price can be 3000.01 but not 3000.001.

specifies the min order price as well as the price increment.This also applies to quote currency. |\n| feeCurrency | string | The currency of charged fees. |\n| priceLimitRate | string | Threshold for price portection |\n| minFunds | string | the minimum trading amounts |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "margin", + "symbols" + ], + "query": [ + { + "key": "symbol", + "value": null, + "description": "If not provided, all cross margin symbol will be queried. If provided, only the specified symbol will be queried." + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"timestamp\": 1729665839353,\n \"items\": [\n {\n \"symbol\": \"BTC-USDT\",\n \"name\": \"BTC-USDT\",\n \"enableTrading\": true,\n \"market\": \"USDS\",\n \"baseCurrency\": \"BTC\",\n \"quoteCurrency\": \"USDT\",\n \"baseIncrement\": \"0.00000001\",\n \"baseMinSize\": \"0.00001\",\n \"baseMaxSize\": \"10000000000\",\n \"quoteIncrement\": \"0.000001\",\n \"quoteMinSize\": \"0.1\",\n \"quoteMaxSize\": \"99999999\",\n \"priceIncrement\": \"0.1\",\n \"feeCurrency\": \"USDT\",\n \"priceLimitRate\": \"0.1\",\n \"minFunds\": \"0.1\"\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Get Margin Config", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "margin", + "config" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470190)\n\n:::info[Description]\nRequest via this endpoint to get the configure info of the cross margin.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currencyList | array | Refer to the schema section of currencyList |\n| maxLeverage | integer | Max leverage available |\n| warningDebtRatio | string | The warning debt ratio of the forced liquidation |\n| liqDebtRatio | string | The debt ratio of the forced liquidation |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "margin", + "config" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"maxLeverage\": 5,\n \"warningDebtRatio\": \"0.95\",\n \"liqDebtRatio\": \"0.97\",\n \"currencyList\": [\n \"VRA\",\n \"APT\",\n \"IOTX\",\n \"SHIB\",\n \"KDA\",\n \"BCHSV\",\n \"NEAR\",\n \"CLV\",\n \"AUDIO\",\n \"AIOZ\",\n \"FLOW\",\n \"WLD\",\n \"COMP\",\n \"MEME\",\n \"SLP\",\n \"STX\",\n \"ZRO\",\n \"QI\",\n \"PYTH\",\n \"RUNE\",\n \"DGB\",\n \"IOST\",\n \"SUI\",\n \"BCH\",\n \"CAKE\",\n \"DOT\",\n \"OMG\",\n \"POL\",\n \"GMT\",\n \"1INCH\",\n \"RSR\",\n \"NKN\",\n \"BTC\",\n \"AR\",\n \"ARB\",\n \"TON\",\n \"LISTA\",\n \"AVAX\",\n \"SEI\",\n \"FTM\",\n \"ERN\",\n \"BB\",\n \"BTT\",\n \"JTO\",\n \"ONE\",\n \"RLC\",\n \"ANKR\",\n \"SUSHI\",\n \"CATI\",\n \"ALGO\",\n \"PEPE2\",\n \"ATOM\",\n \"LPT\",\n \"BIGTIME\",\n \"CFX\",\n \"DYM\",\n \"VELO\",\n \"XPR\",\n \"SNX\",\n \"JUP\",\n \"MANA\",\n \"API3\",\n \"PYR\",\n \"ROSE\",\n \"GLMR\",\n \"SATS\",\n \"TIA\",\n \"GALAX\",\n \"SOL\",\n \"DAO\",\n \"FET\",\n \"ETC\",\n \"MKR\",\n \"WOO\",\n \"DODO\",\n \"OGN\",\n \"BNB\",\n \"ICP\",\n \"BLUR\",\n \"ETH\",\n \"ZEC\",\n \"NEO\",\n \"CELO\",\n \"REN\",\n \"MANTA\",\n \"LRC\",\n \"STRK\",\n \"ADA\",\n \"STORJ\",\n \"REQ\",\n \"TAO\",\n \"VET\",\n \"FITFI\",\n \"USDT\",\n \"DOGE\",\n \"HBAR\",\n \"SXP\",\n \"NEIROCTO\",\n \"CHR\",\n \"ORDI\",\n \"DASH\",\n \"PEPE\",\n \"ONDO\",\n \"ILV\",\n \"WAVES\",\n \"CHZ\",\n \"DOGS\",\n \"XRP\",\n \"CTSI\",\n \"JASMY\",\n \"FLOKI\",\n \"TRX\",\n \"KAVA\",\n \"SAND\",\n \"C98\",\n \"UMA\",\n \"NOT\",\n \"IMX\",\n \"WIF\",\n \"ENA\",\n \"EGLD\",\n \"BOME\",\n \"LTC\",\n \"USDC\",\n \"METIS\",\n \"WIN\",\n \"THETA\",\n \"FXS\",\n \"ENJ\",\n \"CRO\",\n \"AEVO\",\n \"INJ\",\n \"LTO\",\n \"CRV\",\n \"GRT\",\n \"DYDX\",\n \"FLUX\",\n \"ENS\",\n \"WAX\",\n \"MASK\",\n \"POND\",\n \"UNI\",\n \"AAVE\",\n \"LINA\",\n \"TLM\",\n \"BONK\",\n \"QNT\",\n \"LDO\",\n \"ALICE\",\n \"XLM\",\n \"LINK\",\n \"CKB\",\n \"LUNC\",\n \"YFI\",\n \"ETHW\",\n \"XTZ\",\n \"LUNA\",\n \"OP\",\n \"SUPER\",\n \"EIGEN\",\n \"KSM\",\n \"ELON\",\n \"EOS\",\n \"FIL\",\n \"ZETA\",\n \"SKL\",\n \"BAT\",\n \"APE\",\n \"HMSTR\",\n \"YGG\",\n \"MOVR\",\n \"PEOPLE\",\n \"KCS\",\n \"AXS\",\n \"ARPA\",\n \"ZIL\"\n ]\n }\n}" + } + ] + }, + { + "name": "Get ETF Info", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "etf", + "info" + ], + "query": [ + { + "key": "currency", + "value": "BTCUP", + "description": "ETF Currency, if empty query all currencies\n" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470191)\n\n:::info[Description]\nThis interface returns leveraged token information\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | ETF Currency |\n| netAsset | string | Net worth |\n| targetLeverage | string | Target leverage |\n| actualLeverage | string | Actual leverage |\n| issuedSize | string | The amount of currency issued |\n| basket | string | Basket information |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "etf", + "info" + ], + "query": [ + { + "key": "currency", + "value": "BTCUP", + "description": "ETF Currency, if empty query all currencies\n" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"currency\": \"BTCUP\",\n \"netAsset\": \"33.846\",\n \"targetLeverage\": \"2-4\",\n \"actualLeverage\": \"2.1648\",\n \"issuedSize\": \"107134.87655291\",\n \"basket\": \"118.324559 XBTUSDTM\"\n }\n ]\n}" + } + ] + }, + { + "name": "Get Mark Price List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "mark-price", + "all-symbols" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470192)\n\n:::info[Description]\nThis endpoint returns the current Mark price for all margin trading pairs.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | symbol |\n| timePoint | integer | Timestamp (milliseconds) |\n| value | number | Mark price |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "mark-price", + "all-symbols" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"symbol\": \"USDT-BTC\",\n \"timePoint\": 1729676522000,\n \"value\": 1.504e-05\n },\n {\n \"symbol\": \"USDC-BTC\",\n \"timePoint\": 1729676522000,\n \"value\": 1.5049024e-05\n }\n ]\n}" + } + ] + }, + { + "name": "Get Mark Price Detail", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "mark-price", + "{{symbol}}", + "current" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470193)\n\n:::info[Description]\nThis endpoint returns the current Mark price for specified margin trading pairs.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | symbol |\n| timePoint | integer | Timestamp (milliseconds) |\n| value | number | Mark price |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "mark-price", + "{{symbol}}", + "current" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"symbol\": \"USDT-BTC\",\n \"timePoint\": 1729676888000,\n \"value\": 1.5045e-05\n }\n}" + } + ] + }, + { + "name": "Get Symbols - Isolated Margin", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "isolated", + "symbols" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470194)\n\n:::info[Description]\nThis endpoint allows querying the configuration of isolated margin symbol.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | symbol |\n| symbolName | string | symbol name |\n| baseCurrency | string | Base currency,e.g. BTC. |\n| quoteCurrency | string | Quote currency,e.g. USDT. |\n| maxLeverage | integer | Max leverage of this symbol |\n| flDebtRatio | string | |\n| tradeEnable | boolean | |\n| autoRenewMaxDebtRatio | string | |\n| baseBorrowEnable | boolean | |\n| quoteBorrowEnable | boolean | |\n| baseTransferInEnable | boolean | |\n| quoteTransferInEnable | boolean | |\n| baseBorrowCoefficient | string | |\n| quoteBorrowCoefficient | string | |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "isolated", + "symbols" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"symbol\": \"BTC-USDT\",\n \"symbolName\": \"BTC-USDT\",\n \"baseCurrency\": \"BTC\",\n \"quoteCurrency\": \"USDT\",\n \"maxLeverage\": 10,\n \"flDebtRatio\": \"0.97\",\n \"tradeEnable\": true,\n \"autoRenewMaxDebtRatio\": \"0.96\",\n \"baseBorrowEnable\": true,\n \"quoteBorrowEnable\": true,\n \"baseTransferInEnable\": true,\n \"quoteTransferInEnable\": true,\n \"baseBorrowCoefficient\": \"1\",\n \"quoteBorrowCoefficient\": \"1\"\n }\n ]\n}" + } + ] + } + ], + "description": "" + }, + { + "name": "Orders", + "item": [ + { + "name": "Cancel Order By OrderId", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "hf", + "margin", + "orders", + "{{orderId}}" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470195)\n\n:::info[Description]\nThis endpoint can be used to cancel a margin order by orderId.\nThis endpoint only sends cancellation requests. The results of the requests must be obtained by checking the order status or subscribing to websocket.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | order id |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "hf", + "margin", + "orders", + "{{orderId}}" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"orderId\": \"671663e02188630007e21c9c\"\n }\n}" + } + ] + }, + { + "name": "Get Symbols With Open Order", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "hf", + "margin", + "order", + "active", + "symbols" + ], + "query": [ + { + "key": "tradeType", + "value": "MARGIN_TRADE", + "description": "Cross Margin: MARGIN_TRADE, Isolated Margin: MARGIN_ISOLATED_TRADE\n" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470196)\n\n:::info[Description]\nThis interface can query all Margin symbol that has active orders\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbolSize | integer | Symbol Size |\n| symbols | array | Refer to the schema section of symbols |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "hf", + "margin", + "order", + "active", + "symbols" + ], + "query": [ + { + "key": "tradeType", + "value": "MARGIN_TRADE", + "description": "Cross Margin: MARGIN_TRADE, Isolated Margin: MARGIN_ISOLATED_TRADE\n" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"symbolSize\": 1,\n \"symbols\": [\n \"BTC-USDT\"\n ]\n }\n}" + } + ] + }, + { + "name": "Cancel All Orders By Symbol", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "hf", + "margin", + "orders" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + }, + { + "key": "tradeType", + "value": "MARGIN_TRADE", + "description": "Transaction type: MARGIN_TRADE - cross margin trade, MARGIN_ISOLATED_TRADE - isolated margin trade" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470197)\n\n:::info[Description]\nThis interface can cancel all open Margin orders by symbol\nThis endpoint only sends cancellation requests. The results of the requests must be obtained by checking the order status or subscribing to websocket.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | string | |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "hf", + "margin", + "orders" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + }, + { + "key": "tradeType", + "value": "MARGIN_TRADE", + "description": "Transaction type: MARGIN_TRADE - cross margin trade, MARGIN_ISOLATED_TRADE - isolated margin trade" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": \"success\"\n}" + } + ] + }, + { + "name": "Get Open Orders", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "hf", + "margin", + "orders", + "active" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + }, + { + "key": "tradeType", + "value": "MARGIN_TRADE", + "description": "Order type: MARGIN_TRADE - cross margin trading order, MARGIN_ISOLATED_TRADE - isolated margin trading order" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470198)\n\n:::info[Description]\nThis interface is to obtain all Margin active order lists, and the return value of the active order interface is the paged data of all uncompleted order lists. The returned data is sorted in descending order according to the latest update time of the order.\n\nAfter the user successfully places an order, the order is in Active state, and the user can use inOrderBook to determine whether the order has entered the order. Canceled or fully filled orders are marked as completed Done status.\n:::\n\n:::tip[Tips]\nFor high-frequency trading users, we recommend locally caching, maintaining your own order records, and using market data streams to update your order information in real time.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | The unique order id generated by the trading system |\n| symbol | string | symbol |\n| opType | string | |\n| type | string | Specify if the order is an 'limit' order or 'market' order. |\n| side | string | Buy or sell |\n| price | string | Order price |\n| size | string | Order size |\n| funds | string | Order Funds |\n| dealSize | string | Number of filled transactions |\n| dealFunds | string | Funds of filled transactions |\n| fee | string | trading fee |\n| feeCurrency | string | currency used to calculate trading fee |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into these strategies: CN, CO, CB , and DC |\n| stop | string | |\n| stopTriggered | boolean | |\n| stopPrice | string | |\n| timeInForce | string | Time in force |\n| postOnly | boolean | Whether its a postOnly order. |\n| hidden | boolean | Whether its a hidden order. |\n| iceberg | boolean | Whether its a iceberg order. |\n| visibleSize | string | Visible size of iceberg order in order book. |\n| cancelAfter | integer | A GTT timeInForce that expires in n seconds |\n| channel | string | |\n| clientOid | string | Client Order Id๏ผŒunique identifier created by the user |\n| remark | string | Order placement remarks |\n| tags | string | Order tag |\n| cancelExist | boolean | Whether there is a cancellation record for the order. |\n| createdAt | integer | |\n| lastUpdatedAt | integer | |\n| tradeType | string | Trade type, redundancy param |\n| inOrderBook | boolean | Whether to enter the orderbook: true: enter the orderbook; false: not enter the orderbook |\n| cancelledSize | string | Number of canceled transactions |\n| cancelledFunds | string | Funds of canceled transactions |\n| remainSize | string | Number of remain transactions |\n| remainFunds | string | Funds of remain transactions |\n| tax | string | Users in some regions need query this field |\n| active | boolean | Order status: true-The status of the order isactive; false-The status of the order is done |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "hf", + "margin", + "orders", + "active" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + }, + { + "key": "tradeType", + "value": "MARGIN_TRADE", + "description": "Order type: MARGIN_TRADE - cross margin trading order, MARGIN_ISOLATED_TRADE - isolated margin trading order" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"id\": \"671667306afcdb000723107f\",\n \"clientOid\": \"5c52e11203aa677f33e493fb\",\n \"symbol\": \"BTC-USDT\",\n \"opType\": \"DEAL\",\n \"type\": \"limit\",\n \"side\": \"buy\",\n \"price\": \"50000\",\n \"size\": \"0.00001\",\n \"funds\": \"0.5\",\n \"dealSize\": \"0\",\n \"dealFunds\": \"0\",\n \"remainSize\": \"0.00001\",\n \"remainFunds\": \"0.5\",\n \"cancelledSize\": \"0\",\n \"cancelledFunds\": \"0\",\n \"fee\": \"0\",\n \"feeCurrency\": \"USDT\",\n \"stp\": null,\n \"stop\": null,\n \"stopTriggered\": false,\n \"stopPrice\": \"0\",\n \"timeInForce\": \"GTC\",\n \"postOnly\": false,\n \"hidden\": false,\n \"iceberg\": false,\n \"visibleSize\": \"0\",\n \"cancelAfter\": 0,\n \"channel\": \"API\",\n \"remark\": null,\n \"tags\": null,\n \"cancelExist\": false,\n \"tradeType\": \"MARGIN_TRADE\",\n \"inOrderBook\": true,\n \"active\": true,\n \"tax\": \"0\",\n \"createdAt\": 1729521456248,\n \"lastUpdatedAt\": 1729521460940\n }\n ]\n}" + } + ] + }, + { + "name": "Get Closed Orders", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "hf", + "margin", + "orders", + "done" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + }, + { + "key": "tradeType", + "value": "MARGIN_TRADE", + "description": "Transaction type: MARGIN_TRADE - cross margin trade, MARGIN_ISOLATED_TRADE - isolated margin trade" + }, + { + "key": "side", + "value": null, + "description": "specify if the order is to 'buy' or 'sell'" + }, + { + "key": "type", + "value": null, + "description": "specify if the order is an 'limit' order or 'market' order. " + }, + { + "key": "lastId", + "value": "254062248624417", + "description": "The id of the last set of data from the previous batch of data. By default, the latest information is given.\nlastId is used to filter data and paginate. If lastId is not entered, the default is a maximum of 100 returned data items. The return results include lastId๏ผŒwhich can be used as a query parameter to look up new data from the next page." + }, + { + "key": "limit", + "value": "20", + "description": "Default20๏ผŒMax100" + }, + { + "key": "startAt", + "value": "1728663338000", + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": "1728692138000", + "description": "End time (milisecond)" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470199)\n\n:::info[Description]\nThis interface is to obtain all Margin Closed order lists, and the return value of the active order interface is the paged data of all uncompleted order lists. The returned data is sorted in descending order according to the latest update time of the order.\n\nAfter the user successfully places an order, the order is in Active state, and the user can use inOrderBook to determine whether the order has entered the order. Canceled or fully filled orders are marked as completed Done status.\n:::\n\n:::tip[Tips]\nIf the order is not an active order, you can only get data within the time range of 3 _ 24 hours (ie: from the current time to 3 _ 24 hours ago). If the time range is exceeded, the system will query the data within the time range of 3 * 24 hours by default.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| lastId | integer | The id of the last set of data from the previous batch of data. By default, the latest information is given.
lastId is used to filter data and paginate. If lastId is not entered, the default is a maximum of 100 returned data items. The return results include lastId๏ผŒwhich can be used as a query parameter to look up new data from the next page. |\n| items | array | Refer to the schema section of items |\n\n**root.data.items Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | The unique order id generated by the trading system |\n| symbol | string | symbol |\n| opType | string | |\n| type | string | Specify if the order is an 'limit' order or 'market' order. |\n| side | string | Buy or sell |\n| price | string | Order price |\n| size | string | Order size |\n| funds | string | Order Funds |\n| dealSize | string | Number of filled transactions |\n| dealFunds | string | Funds of filled transactions |\n| fee | string | [Handling fees](https://www.kucoin.com/docs-new/api-5327739) |\n| feeCurrency | string | currency used to calculate trading fee |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into these strategies: CN, CO, CB , and DC |\n| stop | string | |\n| stopTriggered | boolean | |\n| stopPrice | string | |\n| timeInForce | string | Time in force |\n| postOnly | boolean | Whether its a postOnly order. |\n| hidden | boolean | Whether its a hidden order. |\n| iceberg | boolean | Whether its a iceberg order. |\n| visibleSize | string | Visible size of iceberg order in order book. |\n| cancelAfter | integer | A GTT timeInForce that expires in n seconds |\n| channel | string | |\n| clientOid | string | Client Order Id๏ผŒunique identifier created by the user |\n| remark | string | Order placement remarks |\n| tags | string | Order tag |\n| cancelExist | boolean | Whether there is a cancellation record for the order. |\n| createdAt | integer | |\n| lastUpdatedAt | integer | |\n| tradeType | string | Trade type, redundancy param |\n| inOrderBook | boolean | Whether to enter the orderbook: true: enter the orderbook; false: not enter the orderbook |\n| cancelledSize | string | Number of canceled transactions |\n| cancelledFunds | string | Funds of canceled transactions |\n| remainSize | string | Number of remain transactions |\n| remainFunds | string | Funds of remain transactions |\n| tax | string | Users in some regions need query this field |\n| active | boolean | Order status: true-The status of the order isactive; false-The status of the order is done |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "hf", + "margin", + "orders", + "done" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + }, + { + "key": "tradeType", + "value": "MARGIN_TRADE", + "description": "Transaction type: MARGIN_TRADE - cross margin trade, MARGIN_ISOLATED_TRADE - isolated margin trade" + }, + { + "key": "side", + "value": null, + "description": "specify if the order is to 'buy' or 'sell'" + }, + { + "key": "type", + "value": null, + "description": "specify if the order is an 'limit' order or 'market' order. " + }, + { + "key": "lastId", + "value": "254062248624417", + "description": "The id of the last set of data from the previous batch of data. By default, the latest information is given.\nlastId is used to filter data and paginate. If lastId is not entered, the default is a maximum of 100 returned data items. The return results include lastId๏ผŒwhich can be used as a query parameter to look up new data from the next page." + }, + { + "key": "limit", + "value": "20", + "description": "Default20๏ผŒMax100" + }, + { + "key": "startAt", + "value": "1728663338000", + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": "1728692138000", + "description": "End time (milisecond)" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"lastId\": 136112949351,\n \"items\": [\n {\n \"id\": \"6716491f6afcdb00078365c8\",\n \"clientOid\": \"5c52e11203aa677f33e493fb\",\n \"symbol\": \"BTC-USDT\",\n \"opType\": \"DEAL\",\n \"type\": \"limit\",\n \"side\": \"buy\",\n \"price\": \"50000\",\n \"size\": \"0.00001\",\n \"funds\": \"0.5\",\n \"dealSize\": \"0\",\n \"dealFunds\": \"0\",\n \"remainSize\": \"0\",\n \"remainFunds\": \"0\",\n \"cancelledSize\": \"0.00001\",\n \"cancelledFunds\": \"0.5\",\n \"fee\": \"0\",\n \"feeCurrency\": \"USDT\",\n \"stp\": null,\n \"stop\": null,\n \"stopTriggered\": false,\n \"stopPrice\": \"0\",\n \"timeInForce\": \"GTC\",\n \"postOnly\": false,\n \"hidden\": false,\n \"iceberg\": false,\n \"visibleSize\": \"0\",\n \"cancelAfter\": 0,\n \"channel\": \"API\",\n \"remark\": null,\n \"tags\": null,\n \"cancelExist\": true,\n \"tradeType\": \"MARGIN_TRADE\",\n \"inOrderBook\": false,\n \"active\": false,\n \"tax\": \"0\",\n \"createdAt\": 1729513759162,\n \"lastUpdatedAt\": 1729521126597\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Get Trade History", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "hf", + "margin", + "fills" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + }, + { + "key": "tradeType", + "value": "MARGIN_TRADE", + "description": "Trade type: MARGIN_TRADE - cross margin trade, MARGIN_ISOLATED_TRADE - isolated margin trade" + }, + { + "key": "orderId", + "value": null, + "description": "The unique order id generated by the trading system\n(If orderId is specified๏ผŒplease ignore the other query parameters)" + }, + { + "key": "side", + "value": null, + "description": "specify if the order is to 'buy' or 'sell'" + }, + { + "key": "type", + "value": null, + "description": "specify if the order is an 'limit' order or 'market' order. " + }, + { + "key": "lastId", + "value": "254062248624417", + "description": "The id of the last set of data from the previous batch of data. By default, the latest information is given.\nlastId is used to filter data and paginate. If lastId is not entered, the default is a maximum of 100 returned data items. The return results include lastId๏ผŒwhich can be used as a query parameter to look up new data from the next page." + }, + { + "key": "limit", + "value": "100", + "description": "Default100๏ผŒMax200" + }, + { + "key": "startAt", + "value": "1728663338000", + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": "1728692138000", + "description": "End time (milisecond)" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470200)\n\n:::info[Description]\nThis endpoint can be used to obtain a list of the latest Margin transaction details. \nThe returned data is sorted in descending order according to the latest update time of the order.\n:::\n\n:::tip[Tips]\nIf the order is not an active order, you can only get data within the time range of 3 _ 24 hours (ie: from the current time to 3 _ 24 hours ago). If the time range is exceeded, the system will query the data within the time range of 3 * 24 hours by default.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| items | array | Refer to the schema section of items |\n| lastId | integer | The id of the last set of data from the previous batch of data. By default, the latest information is given.
lastId is used to filter data and paginate. If lastId is not entered, the default is a maximum of 100 returned data items. The return results include lastId๏ผŒwhich can be used as a query parameter to look up new data from the next page. |\n\n**root.data.items Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | integer | Id of transaction detail |\n| symbol | string | symbol |\n| tradeId | integer | Trade Id, symbol latitude increment |\n| orderId | string | The unique order id generated by the trading system |\n| counterOrderId | string | Counterparty order Id |\n| side | string | Buy or sell |\n| liquidity | string | Liquidity type: taker or maker |\n| forceTaker | boolean | |\n| price | string | Order price |\n| size | string | Order size |\n| funds | string | Order Funds |\n| fee | string | [Handling fees](https://www.kucoin.com/docs-new/api-5327739) |\n| feeRate | string | Fee rate
|\n| feeCurrency | string | currency used to calculate trading fee |\n| stop | string | Take Profit and Stop Loss type, currently HFT does not support the Take Profit and Stop Loss type, so it is empty |\n| tradeType | string | Trade type, redundancy param |\n| tax | string | Users in some regions need query this field |\n| taxRate | string | Tax Rate, Users in some regions need query this field |\n| type | string | Specify if the order is an 'limit' order or 'market' order. |\n| createdAt | integer | |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "hf", + "margin", + "fills" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + }, + { + "key": "tradeType", + "value": "MARGIN_TRADE", + "description": "Trade type: MARGIN_TRADE - cross margin trade, MARGIN_ISOLATED_TRADE - isolated margin trade" + }, + { + "key": "orderId", + "value": null, + "description": "The unique order id generated by the trading system\n(If orderId is specified๏ผŒplease ignore the other query parameters)" + }, + { + "key": "side", + "value": null, + "description": "specify if the order is to 'buy' or 'sell'" + }, + { + "key": "type", + "value": null, + "description": "specify if the order is an 'limit' order or 'market' order. " + }, + { + "key": "lastId", + "value": "254062248624417", + "description": "The id of the last set of data from the previous batch of data. By default, the latest information is given.\nlastId is used to filter data and paginate. If lastId is not entered, the default is a maximum of 100 returned data items. The return results include lastId๏ผŒwhich can be used as a query parameter to look up new data from the next page." + }, + { + "key": "limit", + "value": "100", + "description": "Default100๏ผŒMax200" + }, + { + "key": "startAt", + "value": "1728663338000", + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": "1728692138000", + "description": "End time (milisecond)" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"items\": [\n {\n \"id\": 137891621991,\n \"symbol\": \"BTC-USDT\",\n \"tradeId\": 11040911994273793,\n \"orderId\": \"671868085584bc0007d85f46\",\n \"counterOrderId\": \"67186805b7cbdf00071621f9\",\n \"side\": \"buy\",\n \"liquidity\": \"taker\",\n \"forceTaker\": false,\n \"price\": \"67141.6\",\n \"size\": \"0.00001\",\n \"funds\": \"0.671416\",\n \"fee\": \"0.000671416\",\n \"feeRate\": \"0.001\",\n \"feeCurrency\": \"USDT\",\n \"stop\": \"\",\n \"tradeType\": \"MARGIN_TRADE\",\n \"tax\": \"0\",\n \"taxRate\": \"0\",\n \"type\": \"limit\",\n \"createdAt\": 1729652744998\n }\n ],\n \"lastId\": 137891621991\n }\n}" + } + ] + }, + { + "name": "Cancel Order By ClientOid", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "hf", + "margin", + "orders", + "client-order", + "{{clientOid}}" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470201)\n\n:::info[Description]\nThis endpoint can be used to cancel a margin order by clientOid.\nThis endpoint only sends cancellation requests. The results of the requests must be obtained by checking the order status or subscribing to websocket.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒunique identifier created by the user |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "hf", + "margin", + "orders", + "client-order", + "{{clientOid}}" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"clientOid\": \"5c52e11203aa677f33e1493fb\"\n }\n}" + } + ] + }, + { + "name": "Get Order By OrderId", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "hf", + "margin", + "orders", + "{{orderId}}" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470202)\n\n:::info[Description]\nThis endpoint can be used to obtain information for a single Margin order using the order id.\n\nAfter the user successfully places an order, the order is in Active state, and the user can use inOrderBook to determine whether the order has entered the order. Canceled or fully filled orders are marked as completed Done status.\n:::\n\n:::tip[Tips]\nIf the order is not an active order, you can only get data within the time range of 3 _ 24 hours (ie: from the current time to 3 _ 24 hours ago). If the time range is exceeded, the system will query the data within the time range of 3 * 24 hours by default.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | The unique order id generated by the trading system |\n| symbol | string | symbol |\n| opType | string | |\n| type | string | Specify if the order is an 'limit' order or 'market' order. |\n| side | string | Buy or sell |\n| price | string | Order price |\n| size | string | Order size |\n| funds | string | Order Funds |\n| dealSize | string | Number of filled transactions |\n| dealFunds | string | Funds of filled transactions |\n| fee | string | [Handling fees](https://www.kucoin.com/docs-new/api-5327739) |\n| feeCurrency | string | currency used to calculate trading fee |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into these strategies: CN, CO, CB , and DC |\n| stop | string | |\n| stopTriggered | boolean | |\n| stopPrice | string | |\n| timeInForce | string | Time in force |\n| postOnly | boolean | Whether its a postOnly order. |\n| hidden | boolean | Whether its a hidden order. |\n| iceberg | boolean | Whether its a iceberg order. |\n| visibleSize | string | Visible size of iceberg order in order book. |\n| cancelAfter | integer | A GTT timeInForce that expires in n seconds |\n| channel | string | |\n| clientOid | string | Client Order Id๏ผŒunique identifier created by the user |\n| remark | string | Order placement remarks |\n| tags | string | Order tag |\n| cancelExist | boolean | Whether there is a cancellation record for the order. |\n| createdAt | integer | |\n| lastUpdatedAt | integer | |\n| tradeType | string | Trade type, redundancy param |\n| inOrderBook | boolean | Whether to enter the orderbook: true: enter the orderbook; false: not enter the orderbook |\n| cancelledSize | string | Number of canceled transactions |\n| cancelledFunds | string | Funds of canceled transactions |\n| remainSize | string | Number of remain transactions |\n| remainFunds | string | Funds of remain transactions |\n| tax | string | Users in some regions need query this field |\n| active | boolean | Order status: true-The status of the order isactive; false-The status of the order is done |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "hf", + "margin", + "orders", + "{{orderId}}" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"id\": \"671667306afcdb000723107f\",\n \"symbol\": \"BTC-USDT\",\n \"opType\": \"DEAL\",\n \"type\": \"limit\",\n \"side\": \"buy\",\n \"price\": \"50000\",\n \"size\": \"0.00001\",\n \"funds\": \"0.5\",\n \"dealSize\": \"0\",\n \"dealFunds\": \"0\",\n \"fee\": \"0\",\n \"feeCurrency\": \"USDT\",\n \"stp\": null,\n \"stop\": null,\n \"stopTriggered\": false,\n \"stopPrice\": \"0\",\n \"timeInForce\": \"GTC\",\n \"postOnly\": false,\n \"hidden\": false,\n \"iceberg\": false,\n \"visibleSize\": \"0\",\n \"cancelAfter\": 0,\n \"channel\": \"API\",\n \"clientOid\": \"5c52e11203aa677f33e493fb\",\n \"remark\": null,\n \"tags\": null,\n \"cancelExist\": false,\n \"createdAt\": 1729521456248,\n \"lastUpdatedAt\": 1729651011877,\n \"tradeType\": \"MARGIN_TRADE\",\n \"inOrderBook\": true,\n \"cancelledSize\": \"0\",\n \"cancelledFunds\": \"0\",\n \"remainSize\": \"0.00001\",\n \"remainFunds\": \"0.5\",\n \"tax\": \"0\",\n \"active\": true\n }\n}" + } + ] + }, + { + "name": "Get Order By ClientOid", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "hf", + "margin", + "orders", + "client-order", + "{{clientOid}}" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470203)\n\n:::info[Description]\nThis endpoint can be used to obtain information for a single Margin order using the client order id.\n\nAfter the user successfully places an order, the order is in Active state, and the user can use inOrderBook to determine whether the order has entered the order. Canceled or fully filled orders are marked as completed Done status.\n:::\n\n:::tip[Tips]\nIf the order is not an active order, you can only get data within the time range of 3 _ 24 hours (ie: from the current time to 3 _ 24 hours ago). If the time range is exceeded, the system will query the data within the time range of 3 * 24 hours by default.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | The unique order id generated by the trading system |\n| symbol | string | symbol |\n| opType | string | |\n| type | string | Specify if the order is an 'limit' order or 'market' order. |\n| side | string | Buy or sell |\n| price | string | Order price |\n| size | string | Order size |\n| funds | string | Order Funds |\n| dealSize | string | Number of filled transactions |\n| dealFunds | string | Funds of filled transactions |\n| fee | string | [Handling fees](https://www.kucoin.com/docs-new/api-5327739) |\n| feeCurrency | string | currency used to calculate trading fee |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into these strategies: CN, CO, CB , and DC |\n| stop | string | |\n| stopTriggered | boolean | |\n| stopPrice | string | |\n| timeInForce | string | Time in force |\n| postOnly | boolean | Whether its a postOnly order. |\n| hidden | boolean | Whether its a hidden order. |\n| iceberg | boolean | Whether its a iceberg order. |\n| visibleSize | string | Visible size of iceberg order in order book. |\n| cancelAfter | integer | A GTT timeInForce that expires in n seconds |\n| channel | string | |\n| clientOid | string | Client Order Id๏ผŒunique identifier created by the user |\n| remark | string | Order placement remarks |\n| tags | string | Order tag |\n| cancelExist | boolean | Whether there is a cancellation record for the order. |\n| createdAt | integer | |\n| lastUpdatedAt | integer | |\n| tradeType | string | Trade type, redundancy param |\n| inOrderBook | boolean | Whether to enter the orderbook: true: enter the orderbook; false: not enter the orderbook |\n| cancelledSize | string | Number of canceled transactions |\n| cancelledFunds | string | Funds of canceled transactions |\n| remainSize | string | Number of remain transactions |\n| remainFunds | string | Funds of remain transactions |\n| tax | string | Users in some regions need query this field |\n| active | boolean | Order status: true-The status of the order isactive; false-The status of the order is done |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "hf", + "margin", + "orders", + "client-order", + "{{clientOid}}" + ], + "query": [ + { + "key": "symbol", + "value": "BTC-USDT", + "description": "symbol" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"id\": \"671667306afcdb000723107f\",\n \"symbol\": \"BTC-USDT\",\n \"opType\": \"DEAL\",\n \"type\": \"limit\",\n \"side\": \"buy\",\n \"price\": \"50000\",\n \"size\": \"0.00001\",\n \"funds\": \"0.5\",\n \"dealSize\": \"0\",\n \"dealFunds\": \"0\",\n \"fee\": \"0\",\n \"feeCurrency\": \"USDT\",\n \"stp\": null,\n \"stop\": null,\n \"stopTriggered\": false,\n \"stopPrice\": \"0\",\n \"timeInForce\": \"GTC\",\n \"postOnly\": false,\n \"hidden\": false,\n \"iceberg\": false,\n \"visibleSize\": \"0\",\n \"cancelAfter\": 0,\n \"channel\": \"API\",\n \"clientOid\": \"5c52e11203aa677f33e493fb\",\n \"remark\": null,\n \"tags\": null,\n \"cancelExist\": false,\n \"createdAt\": 1729521456248,\n \"lastUpdatedAt\": 1729651011877,\n \"tradeType\": \"MARGIN_TRADE\",\n \"inOrderBook\": true,\n \"cancelledSize\": \"0\",\n \"cancelledFunds\": \"0\",\n \"remainSize\": \"0.00001\",\n \"remainFunds\": \"0.5\",\n \"tax\": \"0\",\n \"active\": true\n }\n}" + } + ] + }, + { + "name": "Add Order", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "hf", + "margin", + "order" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470204)\n\n:::info[Description]\nPlace order to the Cross-margin or Isolated-margin trading system, you can place two major types of orders: limit and market. Orders can only be placed if your account has sufficient funds. Once an order is placed, your funds will be put on hold for the duration of the order. The amount of funds on hold depends on the order type and parameters specified.\n:::\n\n:::tip[Tips]\nPlease note that once your order enters the order book, the system will freeze the handling fees for the order ahead of time.\n\nBefore placing orders, please be sure to fully understand the meaning of the parameters for each trading pair.\n:::\n\n:::tip[Tips]\nThe maximum number of active orders per account is 2000, with a maximum of 200 active orders per trading pair.\n:::\n\n\n**Public order placement request parameters**\n\n| Param | Type | Mandatory | Description |\n| --------- | ------ | --------- | ----------- |\n| clientOid | String | Yes | Client Order Id๏ผŒunique identifier created by the user, the use of UUID is recommended |\n| symbol | String | Yes | symbol |\n| side | String | Yes | `buy` or `sell` |\n| type | String | No | Order type `limit` and `market`, defult is limit |\n| stp | String | No | self trade prevention is divided into four strategies: `CN`, `CO`, `CB` , and `DC` |\n| isIsolated | boolean | No | true - isolated margin ,false - cross margin. defult as false |\n| autoBorrow | boolean | No | When Margin Account has inefficient balance, our system autoborrows inefficient assets and opens positions according to the lowest market interest rate. |\n| autoRepay | boolean | No | AutoPay allows returning borrowed assets when you close a position. Our system automatically triggers the repayment and the maximum repayment amount equals to the filled-order amount. |\n\n**Additional Request Parameters Required by `limit` Orders**\n\n| Param | Type | Mandatory | Description |\n| ----------- | ------- | --------- | ----------- |\n| price | String | Yes | Specify price for currency |\n| size | String | Yes | Specify quantity for currency |\n| timeInForce | String | No | Order timing strategy `GTC`, `GTT`, `IOC`, `FOK` (The default is `GTC`) |\n| cancelAfter | long | No | Cancel after `n` seconds๏ผŒthe order timing strategy is `GTT` |\n| postOnly | boolean | No | passive order labels, this is disabled when the order timing strategy is `IOC` or `FOK` |\n| hidden | boolean | No | Hidden or not (not shown in order book) |\n| iceberg | boolean | No | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | String | No | Maximum visible quantity in iceberg orders |\n\n**Additional request parameters required by `market` orders**\n\n| Param | Type | Mandatory | Description |\n| ----- | ------ | --------- | ------------------------------------------ |\n| size | String | No | (Select one out of two: `size` or `funds`) |\n| funds | String | No | (Select one out of two: `size` or `funds`) |\n\n\n**Hold**\n\nFor limit price purchase orders, we will hold the amount of funds (price * size) required for your purchase order. Similarly, for limit price sell orders, we will also hold you sell order assets. When the transaction is executed, the service fees will be calculated. If you cancel a portion of a filled or unfilled order, then the remaining funds or amounts will be released and returned to your account. For market price buy/sell orders that require specific funds, we will hold the required funds in from your account. If only the size is specified, we may freeze (usually for a very short amount of time) all of the funds in your account prior to the order being filled or cancelled.\n\n\n**Order Lifecycle**\n\nWhen an order placement request is successful (the matching engine receives the order) or denied (due to there being insufficient funds or illegal parameter values, etc.), the system will respond to the HTTP request. When an order is successfully placed, the order ID is returned. The order will be matched, which could result in it being fully or partially filled. When an order is fully or partially filled, the remaining portions of the order will be in an active state awaiting to be matched (this does not include IOC orders). Orders that are fully or partially filled(already cancelled) will be put into the โ€œdoneโ€ state.\n\nUsers that have subscribed to the Market Data Channel can use the order ID ๏ผˆorderId๏ผ‰ and client ID ๏ผˆclientOid๏ผ‰ to identify messages.\n\n**Price Protection Mechanisms**\n\nPrice protection mechanisms ae enabled for order placements. Rules are detailed below:\n\n- If the spot trading market order/limit order placed by the user can be directly matched with an order in the current order book, the system will judge whether deviation between the price corresponding to the transaction depth and the spread exceeds the threshold value ๏ผˆthe threshold value can be obtained using the symbol API endpoint๏ผ‰๏ผ›\n\n- If it is exceeded, for limit orders, the order will be directly cancelled;\n\n- If it is a market order, then the system will partially execute the order. The execution limit will be the order size within the price range corresponding to the threshold value. The remaining orders will not be filled.\n\nFor example: if the threshold value is 10%, when a user places a market price purchase order in the KCS/USDT trading market for 10,000 USDT (the selling price is currently 1.20000), the system will determine that after the order is completely filled, the final price will be 1.40000. (1.40000-1.20000)/1.20000=16.7%>10%. The threshold value is 1.32000. The userโ€™s market price purchase order will be filled only to a maximum of 1.32000. The remaining order portions will not be matched with orders in the order book. Note: this feature may not be able to determine depth with complete accuracy. If your order is not completely filled, it may be because the portion exceeding the threshold value was not filled.\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.

Please remember the orderId created by the service provider, it used to check for updates in order status. |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | symbol |\n| type | string | specify if the order is an 'limit' order or 'market' order.

The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine.

When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels.

Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into these strategies: CN, CO, CB , and DC |\n| price | string | Specify price for order

When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. |\n| size | string | Specify quantity for order

When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.

When **type** is market, select one out of two: size or funds |\n| timeInForce | string | [Time in force](https://www.kucoin.com/docs-new/api-5176570) is a special strategy used during trading |\n| postOnly | boolean | passive order labels, this is disabled when the order timing strategy is IOC or FOK |\n| hidden | boolean | [Hidden order](https://www.kucoin.com/docs-new/api-338146) or not (not shown in order book) |\n| iceberg | boolean | Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/api-338146) |\n| visibleSize | string | Maximum visible quantity in iceberg orders |\n| cancelAfter | integer | Cancel after n seconds๏ผŒthe order timing strategy is GTT |\n| funds | string | When **type** is market, select one out of two: size or funds |\n| isIsolated | boolean | true - isolated margin ,false - cross margin. defult as false |\n| autoBorrow | boolean | When Margin Account has inefficient balance, our system autoborrows inefficient assets and opens positions according to the lowest market interest rate. |\n| autoRepay | boolean | AutoPay allows returning borrowed assets when you close a position. Our system automatically triggers the repayment and the maximum repayment amount equals to the filled-order amount. |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| loanApplyId | string | Borrow order id. The field is returned only after placing the order under the mode of Auto-Borrow. |\n| borrowSize | string | Borrowed amount. The field is returned only after placing the order under the mode of Auto-Borrow. |\n| clientOid | string | The user self-defined order id. |\n\n---\n", + "body": { + "mode": "raw", + "raw": "//limit order\n{\n \"type\": \"limit\",\n \"symbol\": \"BTC-USDT\",\n \"side\": \"buy\",\n \"price\": \"50000\",\n \"size\": \"0.00001\",\n \"clientOid\": \"5c52e11203aa677f33e493fb\",\n \"remark\": \"order remarks\"\n}\n\n//market order 1\n// {\n// \"type\": \"market\",\n// \"symbol\": \"BTC-USDT\",\n// \"side\": \"buy\",\n// \"size\": \"0.00001\",\n// \"clientOid\": \"5c52e11203aa677f33e493fc\",\n// \"remark\": \"order remarks\"\n// }\n\n//market order 2\n// {\n// \"type\": \"market\",\n// \"symbol\": \"BTC-USDT\",\n// \"side\": \"buy\",\n// \"funds\": \"1\",\n// \"clientOid\": \"5c52e11203aa677f33e493fc\",\n// \"remark\": \"order remarks\"\n// }\n", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "hf", + "margin", + "order" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"success\": true,\n \"code\": \"200000\",\n \"data\": {\n \"orderId\": \"671663e02188630007e21c9c\",\n \"clientOid\": \"5c52e11203aa677f33e1493fb\",\n \"borrowSize\": \"10.2\",\n \"loanApplyId\": \"600656d9a33ac90009de4f6f\"\n }\n}" + } + ] + }, + { + "name": "Add Order Test", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "hf", + "margin", + "order", + "test" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470205)\n\n:::info[Description]\nOrder test endpoint, the request parameters and return parameters of this endpoint are exactly the same as the order endpoint, and can be used to verify whether the signature is correct and other operations. After placing an order, the order will not enter the matching system, and the order cannot be queried.\n:::\n\n:::tip[Tips]\nPlease note that once your order enters the order book, the system will freeze the handling fees for the order ahead of time.\n\nBefore placing orders, please be sure to fully understand the meaning of the parameters for each trading pair.\n:::\n\n:::tip[Tips]\nThe maximum number of active orders per account is 2000, with a maximum of 200 active orders per trading pair.\n:::\n\n\n**Public order placement request parameters**\n\n| Param | Type | Mandatory | Description |\n| --------- | ------ | --------- | ----------- |\n| clientOid | String | Yes | Client Order Id๏ผŒunique identifier created by the user, the use of UUID is recommended |\n| symbol | String | Yes | symbol |\n| side | String | Yes | `buy` or `sell` |\n| type | String | No | Order type `limit` and `market`, defult is limit |\n| stp | String | No | self trade prevention is divided into four strategies: `CN`, `CO`, `CB` , and `DC` |\n| isIsolated | boolean | No | true - isolated margin ,false - cross margin. defult as false |\n| autoBorrow | boolean | No | When Margin Account has inefficient balance, our system autoborrows inefficient assets and opens positions according to the lowest market interest rate. |\n| autoRepay | boolean | No | AutoPay allows returning borrowed assets when you close a position. Our system automatically triggers the repayment and the maximum repayment amount equals to the filled-order amount. |\n\n**Additional Request Parameters Required by `limit` Orders**\n\n| Param | Type | Mandatory | Description |\n| ----------- | ------- | --------- | ----------- |\n| price | String | Yes | Specify price for currency |\n| size | String | Yes | Specify quantity for currency |\n| timeInForce | String | No | Order timing strategy `GTC`, `GTT`, `IOC`, `FOK` (The default is `GTC`) |\n| cancelAfter | long | No | Cancel after `n` seconds๏ผŒthe order timing strategy is `GTT` |\n| postOnly | boolean | No | passive order labels, this is disabled when the order timing strategy is `IOC` or `FOK` |\n| hidden | boolean | No | Hidden or not (not shown in order book) |\n| iceberg | boolean | No | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | String | No | Maximum visible quantity in iceberg orders |\n\n**Additional request parameters required by `market` orders**\n\n| Param | Type | Mandatory | Description |\n| ----- | ------ | --------- | ------------------------------------------ |\n| size | String | No | (Select one out of two: `size` or `funds`) |\n| funds | String | No | (Select one out of two: `size` or `funds`) |\n\n\n**Hold**\n\nFor limit price purchase orders, we will hold the amount of funds (price * size) required for your purchase order. Similarly, for limit price sell orders, we will also hold you sell order assets. When the transaction is executed, the service fees will be calculated. If you cancel a portion of a filled or unfilled order, then the remaining funds or amounts will be released and returned to your account. For market price buy/sell orders that require specific funds, we will hold the required funds in from your account. If only the size is specified, we may freeze (usually for a very short amount of time) all of the funds in your account prior to the order being filled or cancelled.\n\n\n**Order Lifecycle**\n\nWhen an order placement request is successful (the matching engine receives the order) or denied (due to there being insufficient funds or illegal parameter values, etc.), the system will respond to the HTTP request. When an order is successfully placed, the order ID is returned. The order will be matched, which could result in it being fully or partially filled. When an order is fully or partially filled, the remaining portions of the order will be in an active state awaiting to be matched (this does not include IOC orders). Orders that are fully or partially filled(already cancelled) will be put into the โ€œdoneโ€ state.\n\nUsers that have subscribed to the Market Data Channel can use the order ID ๏ผˆorderId๏ผ‰ and client ID ๏ผˆclientOid๏ผ‰ to identify messages.\n\n**Price Protection Mechanisms**\n\nPrice protection mechanisms ae enabled for order placements. Rules are detailed below:\n\n- If the spot trading market order/limit order placed by the user can be directly matched with an order in the current order book, the system will judge whether deviation between the price corresponding to the transaction depth and the spread exceeds the threshold value ๏ผˆthe threshold value can be obtained using the symbol API endpoint๏ผ‰๏ผ›\n\n- If it is exceeded, for limit orders, the order will be directly cancelled;\n\n- If it is a market order, then the system will partially execute the order. The execution limit will be the order size within the price range corresponding to the threshold value. The remaining orders will not be filled.\n\nFor example: if the threshold value is 10%, when a user places a market price purchase order in the KCS/USDT trading market for 10,000 USDT (the selling price is currently 1.20000), the system will determine that after the order is completely filled, the final price will be 1.40000. (1.40000-1.20000)/1.20000=16.7%>10%. The threshold value is 1.32000. The userโ€™s market price purchase order will be filled only to a maximum of 1.32000. The remaining order portions will not be matched with orders in the order book. Note: this feature may not be able to determine depth with complete accuracy. If your order is not completely filled, it may be because the portion exceeding the threshold value was not filled.\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.

Please remember the orderId created by the service provider, it used to check for updates in order status. |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | symbol |\n| type | string | specify if the order is an 'limit' order or 'market' order.

The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine.

When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels.

Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into these strategies: CN, CO, CB , and DC |\n| price | string | Specify price for order

When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. |\n| size | string | Specify quantity for order

When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.

When **type** is market, select one out of two: size or funds |\n| timeInForce | string | [Time in force](https://www.kucoin.com/docs-new/api-5176570) is a special strategy used during trading |\n| postOnly | boolean | passive order labels, this is disabled when the order timing strategy is IOC or FOK |\n| hidden | boolean | [Hidden order](https://www.kucoin.com/docs-new/api-338146) or not (not shown in order book) |\n| iceberg | boolean | Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/api-338146) |\n| visibleSize | string | Maximum visible quantity in iceberg orders |\n| cancelAfter | integer | Cancel after n seconds๏ผŒthe order timing strategy is GTT |\n| funds | string | When **type** is market, select one out of two: size or funds |\n| isIsolated | boolean | true - isolated margin ,false - cross margin. defult as false |\n| autoBorrow | boolean | When Margin Account has inefficient balance, our system autoborrows inefficient assets and opens positions according to the lowest market interest rate. |\n| autoRepay | boolean | AutoPay allows returning borrowed assets when you close a position. Our system automatically triggers the repayment and the maximum repayment amount equals to the filled-order amount. |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| loanApplyId | string | Borrowed amount. The field is returned only after placing the order under the mode of Auto-Borrow. |\n| borrowSize | number | ID of the borrowing response. The field is returned only after placing the order under the mode of Auto-Borrow. |\n| clientOid | string | The user self-defined order id. |\n\n---\n", + "body": { + "mode": "raw", + "raw": "//limit order\n{\n \"type\": \"limit\",\n \"symbol\": \"BTC-USDT\",\n \"side\": \"buy\",\n \"price\": \"50000\",\n \"size\": \"0.00001\",\n \"clientOid\": \"5c52e11203aa677f33e493fb\",\n \"remark\": \"order remarks\"\n}\n\n//market order 1\n// {\n// \"type\": \"market\",\n// \"symbol\": \"BTC-USDT\",\n// \"side\": \"buy\",\n// \"size\": \"0.00001\",\n// \"clientOid\": \"5c52e11203aa677f33e493fc\",\n// \"remark\": \"order remarks\"\n// }\n\n//market order 2\n// {\n// \"type\": \"market\",\n// \"symbol\": \"BTC-USDT\",\n// \"side\": \"buy\",\n// \"funds\": \"1\",\n// \"clientOid\": \"5c52e11203aa677f33e493fc\",\n// \"remark\": \"order remarks\"\n// }\n", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "hf", + "margin", + "order", + "test" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"success\": true,\n \"code\": \"200000\",\n \"data\": {\n \"orderId\": \"5bd6e9286d99522a52e458de\",\n \"clientOid\": \"5c52e11203aa677f33e493fb\",\n \"borrowSize\": 10.2,\n \"loanApplyId\": \"600656d9a33ac90009de4f6f\"\n }\n}" + } + ] + } + ], + "description": "" + }, + { + "name": "Debit", + "item": [ + { + "name": "Borrow", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "margin", + "borrow" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470206)\n\n:::info[Description]\nThis API endpoint is used to initiate an application for cross or isolated margin borrowing.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | currency |\n| size | number | Borrow amount |\n| timeInForce | string | timeInForce: IOC, FOK |\n| symbol | string | symbol, mandatory for isolated margin account |\n| isIsolated | boolean | true-isolated, false-cross; default is false |\n| isHf | boolean | true: high frequency borrowing, false: low frequency borrowing; default false |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderNo | string | Borrow Order Id |\n| actualSize | string | Actual borrowed amount |\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"currency\": \"USDT\",\n \"size\": 10,\n \"timeInForce\": \"FOK\",\n \"isIsolated\": false,\n \"isHf\": false\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "margin", + "borrow" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"orderNo\": \"67187162c0d6990007717b15\",\n \"actualSize\": \"10\"\n }\n}" + } + ] + }, + { + "name": "Get Borrow History", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "margin", + "borrow" + ], + "query": [ + { + "key": "currency", + "value": null, + "description": "currency" + }, + { + "key": "isIsolated", + "value": null, + "description": "true-isolated, false-cross; default is false" + }, + { + "key": "symbol", + "value": null, + "description": "symbol, mandatory for isolated margin account" + }, + { + "key": "orderNo", + "value": null, + "description": "Borrow Order Id" + }, + { + "key": "startTime", + "value": null, + "description": "The start and end times are not restricted. If the start time is empty or less than 1680278400000, the default value is set to 1680278400000 (April 1, 2023, 00:00:00)" + }, + { + "key": "endTime", + "value": null, + "description": "End time" + }, + { + "key": "currentPage", + "value": null, + "description": "Current query page, with a starting value of 1. Default:1\n" + }, + { + "key": "pageSize", + "value": null, + "description": "Number of results per page. Default is 50, minimum is 10, maximum is 500" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470207)\n\n:::info[Description]\nThis API endpoint is used to get the borrowing orders for cross and isolated margin accounts\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| timestamp | integer | |\n| currentPage | integer | current page |\n| pageSize | integer | page size |\n| totalNum | integer | total number |\n| totalPage | integer | total page |\n| items | array | Refer to the schema section of items |\n\n**root.data.items Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderNo | string | Borrow Order Id |\n| symbol | string | Isolated Margin symbol; empty for cross margin |\n| currency | string | currency |\n| size | string | Initiated borrow amount |\n| actualSize | string | Actual borrow amount |\n| status | string | PENDING: Processing, SUCCESS: Successful, FAILED: Failed |\n| createdTime | integer | borrow time |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "margin", + "borrow" + ], + "query": [ + { + "key": "currency", + "value": null, + "description": "currency" + }, + { + "key": "isIsolated", + "value": null, + "description": "true-isolated, false-cross; default is false" + }, + { + "key": "symbol", + "value": null, + "description": "symbol, mandatory for isolated margin account" + }, + { + "key": "orderNo", + "value": null, + "description": "Borrow Order Id" + }, + { + "key": "startTime", + "value": null, + "description": "The start and end times are not restricted. If the start time is empty or less than 1680278400000, the default value is set to 1680278400000 (April 1, 2023, 00:00:00)" + }, + { + "key": "endTime", + "value": null, + "description": "End time" + }, + { + "key": "currentPage", + "value": null, + "description": "Current query page, with a starting value of 1. Default:1\n" + }, + { + "key": "pageSize", + "value": null, + "description": "Number of results per page. Default is 50, minimum is 10, maximum is 500" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"timestamp\": 1729657580449,\n \"currentPage\": 1,\n \"pageSize\": 50,\n \"totalNum\": 2,\n \"totalPage\": 1,\n \"items\": [\n {\n \"orderNo\": \"67187162c0d6990007717b15\",\n \"symbol\": null,\n \"currency\": \"USDT\",\n \"size\": \"10\",\n \"actualSize\": \"10\",\n \"status\": \"SUCCESS\",\n \"createdTime\": 1729655138000\n },\n {\n \"orderNo\": \"67187155b088e70007149585\",\n \"symbol\": null,\n \"currency\": \"USDT\",\n \"size\": \"0.1\",\n \"actualSize\": \"0\",\n \"status\": \"FAILED\",\n \"createdTime\": 1729655125000\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Get Repay History", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "margin", + "repay" + ], + "query": [ + { + "key": "currency", + "value": null, + "description": "currency" + }, + { + "key": "isIsolated", + "value": null, + "description": "true-isolated, false-cross; default is false" + }, + { + "key": "symbol", + "value": null, + "description": "symbol, mandatory for isolated margin account" + }, + { + "key": "orderNo", + "value": null, + "description": "Repay Order Id" + }, + { + "key": "startTime", + "value": null, + "description": "The start and end times are not restricted. If the start time is empty or less than 1680278400000, the default value is set to 1680278400000 (April 1, 2023, 00:00:00)" + }, + { + "key": "endTime", + "value": null, + "description": "End time" + }, + { + "key": "currentPage", + "value": null, + "description": "Current query page, with a starting value of 1. Default:1\n" + }, + { + "key": "pageSize", + "value": null, + "description": "Number of results per page. Default is 50, minimum is 10, maximum is 500" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470208)\n\n:::info[Description]\nThis API endpoint is used to get the repayment orders for cross and isolated margin accounts\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| timestamp | integer | |\n| currentPage | integer | current page |\n| pageSize | integer | page size |\n| totalNum | integer | total number |\n| totalPage | integer | total page |\n| items | array | Refer to the schema section of items |\n\n**root.data.items Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderNo | string | Repay Order Id |\n| symbol | string | Isolated Margin symbol; empty for cross margin |\n| currency | string | currency |\n| size | string | Amount of initiated repay |\n| principal | string | Amount of principal paid |\n| interest | string | Amount of interest paid |\n| status | string | PENDING: Processing, SUCCESS: Successful, FAILED: Failed |\n| createdTime | integer | Repayment time |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "margin", + "repay" + ], + "query": [ + { + "key": "currency", + "value": null, + "description": "currency" + }, + { + "key": "isIsolated", + "value": null, + "description": "true-isolated, false-cross; default is false" + }, + { + "key": "symbol", + "value": null, + "description": "symbol, mandatory for isolated margin account" + }, + { + "key": "orderNo", + "value": null, + "description": "Repay Order Id" + }, + { + "key": "startTime", + "value": null, + "description": "The start and end times are not restricted. If the start time is empty or less than 1680278400000, the default value is set to 1680278400000 (April 1, 2023, 00:00:00)" + }, + { + "key": "endTime", + "value": null, + "description": "End time" + }, + { + "key": "currentPage", + "value": null, + "description": "Current query page, with a starting value of 1. Default:1\n" + }, + { + "key": "pageSize", + "value": null, + "description": "Number of results per page. Default is 50, minimum is 10, maximum is 500" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"timestamp\": 1729663471891,\n \"currentPage\": 1,\n \"pageSize\": 50,\n \"totalNum\": 1,\n \"totalPage\": 1,\n \"items\": [\n {\n \"orderNo\": \"671873361d5bd400075096ad\",\n \"symbol\": null,\n \"currency\": \"USDT\",\n \"size\": \"10\",\n \"principal\": \"9.99986518\",\n \"interest\": \"0.00013482\",\n \"status\": \"SUCCESS\",\n \"createdTime\": 1729655606000\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Get Interest History", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "margin", + "interest" + ], + "query": [ + { + "key": "currency", + "value": null, + "description": "currency" + }, + { + "key": "isIsolated", + "value": null, + "description": "true-isolated, false-cross; default is false" + }, + { + "key": "symbol", + "value": null, + "description": "symbol, mandatory for isolated margin account" + }, + { + "key": "startTime", + "value": null, + "description": "The start and end times are not restricted. If the start time is empty or less than 1680278400000, the default value is set to 1680278400000 (April 1, 2023, 00:00:00)" + }, + { + "key": "endTime", + "value": null, + "description": "End time" + }, + { + "key": "currentPage", + "value": null, + "description": "Current query page, with a starting value of 1. Default:1\n" + }, + { + "key": "pageSize", + "value": null, + "description": "Number of results per page. Default is 50, minimum is 10, maximum is 500" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470209)\n\n:::info[Description]\nRequest via this endpoint to get the interest records of the cross/isolated margin lending.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| timestamp | integer | |\n| currentPage | integer | current page |\n| pageSize | integer | page size |\n| totalNum | integer | total number |\n| totalPage | integer | total page |\n| items | array | Refer to the schema section of items |\n\n**root.data.items Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | currency |\n| dayRatio | string | Daily interest rate |\n| interestAmount | string | Interest amount |\n| createdTime | integer | Interest Timestamp |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "margin", + "interest" + ], + "query": [ + { + "key": "currency", + "value": null, + "description": "currency" + }, + { + "key": "isIsolated", + "value": null, + "description": "true-isolated, false-cross; default is false" + }, + { + "key": "symbol", + "value": null, + "description": "symbol, mandatory for isolated margin account" + }, + { + "key": "startTime", + "value": null, + "description": "The start and end times are not restricted. If the start time is empty or less than 1680278400000, the default value is set to 1680278400000 (April 1, 2023, 00:00:00)" + }, + { + "key": "endTime", + "value": null, + "description": "End time" + }, + { + "key": "currentPage", + "value": null, + "description": "Current query page, with a starting value of 1. Default:1\n" + }, + { + "key": "pageSize", + "value": null, + "description": "Number of results per page. Default is 50, minimum is 10, maximum is 500" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"timestamp\": 1729665170701,\n \"currentPage\": 1,\n \"pageSize\": 50,\n \"totalNum\": 3,\n \"totalPage\": 1,\n \"items\": [\n {\n \"currency\": \"USDT\",\n \"dayRatio\": \"0.000296\",\n \"interestAmount\": \"0.00000001\",\n \"createdTime\": 1729663213375\n },\n {\n \"currency\": \"USDT\",\n \"dayRatio\": \"0.000296\",\n \"interestAmount\": \"0.00000001\",\n \"createdTime\": 1729659618802\n },\n {\n \"currency\": \"USDT\",\n \"dayRatio\": \"0.000296\",\n \"interestAmount\": \"0.00000001\",\n \"createdTime\": 1729656028077\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Repay", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "margin", + "repay" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470210)\n\n:::info[Description]\nThis API endpoint is used to initiate an application for cross or isolated margin repayment.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | currency |\n| size | number | Borrow amount |\n| symbol | string | symbol, mandatory for isolated margin account |\n| isIsolated | boolean | true-isolated, false-cross; default is false |\n| isHf | boolean | true: high frequency borrowing, false: low frequency borrowing; default false |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| timestamp | integer | |\n| orderNo | string | Repay Order Id |\n| actualSize | string | Actual repay amount |\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"currency\": \"USDT\",\n \"size\": 10\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "margin", + "repay" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"timestamp\": 1729655606816,\n \"orderNo\": \"671873361d5bd400075096ad\",\n \"actualSize\": \"10\"\n }\n}" + } + ] + }, + { + "name": "Modify Leverage", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "position", + "update-user-leverage" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470211)\n\n:::info[Description]\nThis endpoint allows modifying the leverage multiplier for cross margin or isolated margin.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | symbol, mandatory for isolated margin account |\n| isIsolated | boolean | true-isolated, false-cross; default is false |\n| leverage | string | New leverage multiplier. Must be greater than 1 and up to two decimal places, and cannot be less than the user's current debt leverage or greater than the system's maximum leverage |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | string | |\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"leverage\": \"5\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "position", + "update-user-leverage" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": null\n}" + } + ] + } + ], + "description": "" + }, + { + "name": "Credit", + "item": [ + { + "name": "Get Loan Market", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "project", + "list" + ], + "query": [ + { + "key": "currency", + "value": null, + "description": "currency" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470212)\n\n:::info[Description]\nThis API endpoint is used to get the information about the currencies available for lending.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | Currency |\n| purchaseEnable | boolean | Whether purchase is supported. |\n| redeemEnable | boolean | Whether redeem is supported. |\n| increment | string | Increment precision for purchase and redemption |\n| minPurchaseSize | string | Minimum purchase amount |\n| minInterestRate | string | Minimum lending rate |\n| maxInterestRate | string | Maximum lending rate |\n| interestIncrement | string | Increment precision for interest; default is 0.0001 |\n| maxPurchaseSize | string | Maximum purchase amount |\n| marketInterestRate | string | Latest market lending rate |\n| autoPurchaseEnable | boolean | Whether to allow automatic purchase: true: on, false: off |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "project", + "list" + ], + "query": [ + { + "key": "currency", + "value": null, + "description": "currency" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"currency\": \"BTC\",\n \"purchaseEnable\": true,\n \"redeemEnable\": true,\n \"increment\": \"0.00000001\",\n \"minPurchaseSize\": \"0.001\",\n \"maxPurchaseSize\": \"40\",\n \"interestIncrement\": \"0.0001\",\n \"minInterestRate\": \"0.005\",\n \"marketInterestRate\": \"0.005\",\n \"maxInterestRate\": \"0.32\",\n \"autoPurchaseEnable\": false\n }\n ]\n}" + } + ] + }, + { + "name": "Get Purchase Orders", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "purchase", + "orders" + ], + "query": [ + { + "key": "currency", + "value": null, + "description": "currency" + }, + { + "key": "status", + "value": null, + "description": "DONE-completed; PENDING-settling" + }, + { + "key": "purchaseOrderNo", + "value": null, + "description": "" + }, + { + "key": "currentPage", + "value": null, + "description": "Current page; default is 1" + }, + { + "key": "pageSize", + "value": null, + "description": "Page size; 1<=pageSize<=100; default is 50" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470213)\n\n:::info[Description]\nThis API endpoint provides pagination query for the purchase orders.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currentPage | integer | Current Page |\n| pageSize | integer | Page Size |\n| totalNum | integer | Total Number |\n| totalPage | integer | Total Page |\n| items | array | Refer to the schema section of items |\n\n**root.data.items Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | Currency |\n| purchaseOrderNo | string | Purchase order id |\n| purchaseSize | string | Total purchase size |\n| matchSize | string | Executed size |\n| interestRate | string | Target annualized interest rate |\n| incomeSize | string | Redeemed amount |\n| applyTime | integer | Time of purchase |\n| status | string | Status: DONE-completed; PENDING-settling |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "purchase", + "orders" + ], + "query": [ + { + "key": "currency", + "value": null, + "description": "currency" + }, + { + "key": "status", + "value": null, + "description": "DONE-completed; PENDING-settling" + }, + { + "key": "purchaseOrderNo", + "value": null, + "description": "" + }, + { + "key": "currentPage", + "value": null, + "description": "Current page; default is 1" + }, + { + "key": "pageSize", + "value": null, + "description": "Page size; 1<=pageSize<=100; default is 50" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"currentPage\": 1,\n \"pageSize\": 10,\n \"totalNum\": 1,\n \"totalPage\": 1,\n \"items\": [\n {\n \"currency\": \"BTC\",\n \"purchaseOrderNo\": \"671bb15a3b3f930007880bae\",\n \"purchaseSize\": \"0.001\",\n \"matchSize\": \"0\",\n \"interestRate\": \"0.1\",\n \"incomeSize\": \"0\",\n \"applyTime\": 1729868122172,\n \"status\": \"PENDING\"\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Get Redeem Orders", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "redeem", + "orders" + ], + "query": [ + { + "key": "currency", + "value": null, + "description": "currency" + }, + { + "key": "status", + "value": null, + "description": "DONE-completed; PENDING-settling" + }, + { + "key": "redeemOrderNo", + "value": null, + "description": "Redeem order id" + }, + { + "key": "currentPage", + "value": null, + "description": "Current page; default is 1" + }, + { + "key": "pageSize", + "value": null, + "description": "Page size; 1<=pageSize<=100; default is 50" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470214)\n\n:::info[Description]\nThis API endpoint provides pagination query for the redeem orders.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currentPage | integer | Current Page |\n| pageSize | integer | Page Size |\n| totalNum | integer | Total Number |\n| totalPage | integer | Total Page |\n| items | array | Refer to the schema section of items |\n\n**root.data.items Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | Currency |\n| purchaseOrderNo | string | Purchase order id |\n| redeemOrderNo | string | Redeem order id |\n| redeemSize | string | Redemption size |\n| receiptSize | string | Redeemed size |\n| applyTime | string | Time of redeem |\n| status | string | Status: DONE-completed; PENDING-settling |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "redeem", + "orders" + ], + "query": [ + { + "key": "currency", + "value": null, + "description": "currency" + }, + { + "key": "status", + "value": null, + "description": "DONE-completed; PENDING-settling" + }, + { + "key": "redeemOrderNo", + "value": null, + "description": "Redeem order id" + }, + { + "key": "currentPage", + "value": null, + "description": "Current page; default is 1" + }, + { + "key": "pageSize", + "value": null, + "description": "Page size; 1<=pageSize<=100; default is 50" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"currentPage\": 1,\n \"pageSize\": 10,\n \"totalNum\": 1,\n \"totalPage\": 1,\n \"items\": [\n {\n \"currency\": \"BTC\",\n \"purchaseOrderNo\": \"671bafa804c26d000773c533\",\n \"redeemOrderNo\": \"671bb01004c26d000773c55c\",\n \"redeemSize\": \"0.001\",\n \"receiptSize\": \"0.001\",\n \"applyTime\": null,\n \"status\": \"DONE\"\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Get Loan Market Interest Rate", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "project", + "marketInterestRate" + ], + "query": [ + { + "key": "currency", + "value": "USDT", + "description": "currency" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470215)\n\n:::info[Description]\nThis API endpoint is used to get the interest rates of the margin lending market over the past 7 days.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| time | string | Time: YYYYMMDDHH00 |\n| marketInterestRate | string | Market lending rate |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "project", + "marketInterestRate" + ], + "query": [ + { + "key": "currency", + "value": "USDT", + "description": "currency" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"time\": \"202410170000\",\n \"marketInterestRate\": \"0.005\"\n },\n {\n \"time\": \"202410170100\",\n \"marketInterestRate\": \"0.005\"\n }\n ]\n}" + } + ] + }, + { + "name": "Purchase", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "purchase" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470216)\n\n:::info[Description]\nInvest credit in the market and earn interest,Please ensure that the funds are in the main(funding) account\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | Currency |\n| size | string | purchase amount |\n| interestRate | string | purchase interest rate |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderNo | string | Purchase order id |\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"currency\": \"BTC\",\n \"size\": \"0.001\",\n \"interestRate\": \"0.1\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "purchase" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"orderNo\": \"671bafa804c26d000773c533\"\n }\n}" + } + ] + }, + { + "name": "Modify Purchase", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "lend", + "purchase", + "update" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470217)\n\n:::info[Description]\nThis API endpoint is used to update the interest rates of subscription orders, which will take effect at the beginning of the next hour.,Please ensure that the funds are in the main(funding) account\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | Currency |\n| interestRate | string | Modified purchase interest rate |\n| purchaseOrderNo | string | Purchase order id |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | string | |\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"currency\": \"BTC\",\n \"purchaseOrderNo\": \"671bafa804c26d000773c533\",\n \"interestRate\": \"0.09\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "lend", + "purchase", + "update" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": null\n}" + } + ] + }, + { + "name": "Redeem", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "redeem" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470218)\n\n:::info[Description]\nRedeem your loan order\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | Currency |\n| size | string | Redemption amount |\n| purchaseOrderNo | string | Purchase order id |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderNo | string | Redeem order id |\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"currency\": \"BTC\",\n \"size\": \"0.001\",\n \"purchaseOrderNo\": \"671bafa804c26d000773c533\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "redeem" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"orderNo\": \"671bafa804c26d000773c533\"\n }\n}" + } + ] + } + ], + "description": "" + }, + { + "name": "Risk Limit", + "item": [ + { + "name": "Get Margin Risk Limit", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "margin", + "currencies" + ], + "query": [ + { + "key": "isIsolated", + "value": "false", + "description": "true-isolated, false-cross" + }, + { + "key": "currency", + "value": "BTC", + "description": "currency, This field is only required for cross margin" + }, + { + "key": "symbol", + "value": null, + "description": "symbol, This field is only required for isolated margin" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470219)\n\n:::info[Description]\nRequest via this endpoint to get the Configure and Risk limit info of the margin.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| timestamp | integer | Time stamp |\n| currency | string | CROSS MARGIN RESPONSES, Currency |\n| borrowMaxAmount | string | CROSS MARGIN RESPONSES, Maximum personal borrow amount. If the platform has no borrowing amount, this value will still be displayed. |\n| buyMaxAmount | string | CROSS MARGIN RESPONSES, Maximum buy amount |\n| holdMaxAmount | string | CROSS MARGIN RESPONSES, Maximum holding amount |\n| borrowCoefficient | string | CROSS MARGIN RESPONSES, [Borrow Coefficient](https://www.kucoin.com/land/price-protect) |\n| marginCoefficient | string | CROSS MARGIN RESPONSES, [Margin Coefficient](https://www.kucoin.com/land/price-protect) |\n| precision | integer | CROSS MARGIN RESPONSES, Currency precision. the minimum repayment amount of a single transaction should be >= currency precision, for example, the precision of ETH is 8, and the minimum repayment amount is 0.00000001 |\n| borrowMinAmount | string | CROSS MARGIN RESPONSES, Minimum personal borrow amount |\n| borrowMinUnit | string | CROSS MARGIN RESPONSES, Minimum unit for borrowing, the borrowed amount must be an integer multiple of this value |\n| borrowEnabled | boolean | CROSS MARGIN RESPONSES, Whether to support borrowing |\n| symbol | string | ISOLATED MARGIN RESPONSES, Symbol |\n| baseMaxBorrowAmount | string | ISOLATED MARGIN RESPONSES, Base maximum personal borrow amount. If the platform has no borrowing amount, this value will still be displayed. |\n| quoteMaxBorrowAmount | string | ISOLATED MARGIN RESPONSES, Quote maximum personal borrow amount. If the platform has no borrowing amount, this value will still be displayed. |\n| baseMaxBuyAmount | string | ISOLATED MARGIN RESPONSES, Base maximum buy amount
|\n| quoteMaxBuyAmount | string | ISOLATED MARGIN RESPONSES, Quote maximum buy amount |\n| baseMaxHoldAmount | string | ISOLATED MARGIN RESPONSES, Base maximum holding amount
|\n| quoteMaxHoldAmount | string | ISOLATED MARGIN RESPONSES, Quote maximum holding amount
|\n| basePrecision | integer | ISOLATED MARGIN RESPONSES, Base currency precision. the minimum repayment amount of a single transaction should be >= currency precision, for example, the precision of ETH is 8, and the minimum repayment amount is 0.00000001 |\n| quotePrecision | integer | ISOLATED MARGIN RESPONSES, Quote currency precision. the minimum repayment amount of a single transaction should be >= currency precision, for example, the precision of ETH is 8, and the minimum repayment amount is 0.00000001
|\n| baseBorrowMinAmount | string | ISOLATED MARGIN RESPONSES, Base minimum personal borrow amount
|\n| quoteBorrowMinAmount | string | ISOLATED MARGIN RESPONSES, Quote minimum personal borrow amount |\n| baseBorrowMinUnit | string | ISOLATED MARGIN RESPONSES, Base minimum unit for borrowing, the borrowed amount must be an integer multiple of this value |\n| quoteBorrowMinUnit | string | ISOLATED MARGIN RESPONSES, Quote minimum unit for borrowing, the borrowed amount must be an integer multiple of this value |\n| baseBorrowEnabled | boolean | ISOLATED MARGIN RESPONSES, Base whether to support borrowing
|\n| quoteBorrowEnabled | boolean | ISOLATED MARGIN RESPONSES, Quote whether to support borrowing
|\n| baseBorrowCoefficient | string | ISOLATED MARGIN RESPONSES, [Base Borrow Coefficient](https://www.kucoin.com/land/price-protect) |\n| quoteBorrowCoefficient | string | ISOLATED MARGIN RESPONSES, [Quote Borrow Coefficient](https://www.kucoin.com/land/price-protect) |\n| baseMarginCoefficient | string | ISOLATED MARGIN RESPONSES, [Base Margin Coefficient](https://www.kucoin.com/land/price-protect) |\n| quoteMarginCoefficient | string | ISOLATED MARGIN RESPONSES, [Quote Margin Coefficient](https://www.kucoin.com/land/price-protect) |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v3", + "margin", + "currencies" + ], + "query": [ + { + "key": "isIsolated", + "value": "false", + "description": "true-isolated, false-cross" + }, + { + "key": "currency", + "value": "BTC", + "description": "currency, This field is only required for cross margin" + }, + { + "key": "symbol", + "value": null, + "description": "symbol, This field is only required for isolated margin" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "//Cross Margin\n{\n \"code\": \"200000\",\n \"data\": [\n {\n \"timestamp\": 1729678659275,\n \"currency\": \"BTC\",\n \"borrowMaxAmount\": \"75.15\",\n \"buyMaxAmount\": \"217.12\",\n \"holdMaxAmount\": \"217.12\",\n \"borrowCoefficient\": \"1\",\n \"marginCoefficient\": \"1\",\n \"precision\": 8,\n \"borrowMinAmount\": \"0.001\",\n \"borrowMinUnit\": \"0.0001\",\n \"borrowEnabled\": true\n }\n ]\n}\n\n//Isolated Margin\n//{\n// \"code\": \"200000\",\n// \"data\": [\n// {\n// \"timestamp\": 1729685173576,\n// \"symbol\": \"BTC-USDT\",\n// \"baseMaxBorrowAmount\": \"75.4\",\n// \"quoteMaxBorrowAmount\": \"6000000\",\n// \"baseMaxBuyAmount\": \"217.84\",\n// \"quoteMaxBuyAmount\": \"8000000\",\n// \"baseMaxHoldAmount\": \"217.84\",\n// \"quoteMaxHoldAmount\": \"8000000\",\n// \"basePrecision\": 8,\n// \"quotePrecision\": 8,\n// \"baseBorrowCoefficient\": \"1\",\n// \"quoteBorrowCoefficient\": \"1\",\n// \"baseMarginCoefficient\": \"1\",\n// \"quoteMarginCoefficient\": \"1\",\n// \"baseBorrowMinAmount\": \"0.001\",\n// \"baseBorrowMinUnit\": \"0.0001\",\n// \"quoteBorrowMinAmount\": \"10\",\n// \"quoteBorrowMinUnit\": \"1\",\n// \"baseBorrowEnabled\": true,\n// \"quoteBorrowEnabled\": true\n// }\n// ]\n//}" + } + ] + } + ], + "description": "" + } + ], + "description": "" + }, + { + "name": "Futures Trading", + "item": [ + { + "name": "Market Data", + "item": [ + { + "name": "Get All Symbols", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "contracts", + "active" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470220)\n\n:::info[Description]\nGet detailed information of all contracts that can be traded. This API will return a list of tradable contracts, including some key parameters of the contract such as the symbol name, tick size, mark price,etc.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | 200000 is for success, other is error |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | Symbol |\n| rootSymbol | string | Contract group |\n| type | string | Type of the contract |\n| firstOpenDate | integer | First Open Date(millisecond) |\n| expireDate | integer | Expiration date(millisecond). Null means it will never expire |\n| settleDate | integer | Settlement date(millisecond). Null indicates that automatic settlement is not supported |\n| baseCurrency | string | Base currency |\n| quoteCurrency | string | Quote currency |\n| settleCurrency | string | Currency used to clear and settle the trades |\n| maxOrderQty | integer | Maximum order quantity |\n| maxPrice | number | Maximum order price |\n| lotSize | integer | Minimum lot size |\n| tickSize | number | Minimum price changes |\n| indexPriceTickSize | number | Index price of tick size |\n| multiplier | number | The basic unit of the contract API is lots. For the number of coins in each lot, please refer to the param multiplier. For example, for XBTUSDTM, multiplier=0.001, which corresponds to the value of each XBTUSDTM contract being 0.001 BTC. There is also a special case. All coin-swap contracts, such as each XBTUSDM contract, correspond to 1 USD. |\n| initialMargin | number | Initial margin requirement |\n| maintainMargin | number | Maintenance margin requirement |\n| maxRiskLimit | integer | Maximum risk limit (unit: XBT) |\n| minRiskLimit | integer | Minimum risk limit (unit: XBT) |\n| riskStep | integer | Risk limit increment value (unit: XBT) |\n| makerFeeRate | number | Maker fee rate |\n| takerFeeRate | number | Taker fee rate |\n| takerFixFee | number | Deprecated param |\n| makerFixFee | number | Deprecated param |\n| settlementFee | number | Settlement fee |\n| isDeleverage | boolean | Enabled ADL or not |\n| isQuanto | boolean | Deprecated param |\n| isInverse | boolean | Whether it is a reverse contract |\n| markMethod | string | Marking method |\n| fairMethod | string | Fair price marking method, The Futures contract is null |\n| fundingBaseSymbol | string | Ticker symbol of the based currency |\n| fundingQuoteSymbol | string | Ticker symbol of the quote currency |\n| fundingRateSymbol | string | Funding rate symbol |\n| indexSymbol | string | Index symbol |\n| settlementSymbol | string | Settlement Symbol |\n| status | string | Contract status |\n| fundingFeeRate | number | Funding fee rate |\n| predictedFundingFeeRate | number | Predicted funding fee rate |\n| fundingRateGranularity | integer | Funding interval(millisecond) |\n| openInterest | string | Open interest |\n| turnoverOf24h | number | 24-hour turnover |\n| volumeOf24h | number | 24-hour volume |\n| markPrice | number | Mark price |\n| indexPrice | number | Index price |\n| lastTradePrice | number | Last trade price |\n| nextFundingRateTime | integer | Next funding rate time(millisecond) |\n| maxLeverage | integer | Maximum leverage |\n| sourceExchanges | array | Refer to the schema section of sourceExchanges |\n| premiumsSymbol1M | string | Premium index symbol(1 minute) |\n| premiumsSymbol8H | string | Premium index symbol(8 hours) |\n| fundingBaseSymbol1M | string | Base currency interest rate symbol(1 minute) |\n| fundingQuoteSymbol1M | string | Quote currency interest rate symbol(1 minute) |\n| lowPrice | number | 24-hour lowest price |\n| highPrice | number | 24-hour highest price |\n| priceChgPct | number | 24-hour price change% |\n| priceChg | number | 24-hour price change |\n| k | number | |\n| m | number | |\n| f | number | |\n| mmrLimit | number | |\n| mmrLevConstant | number | |\n| supportCross | boolean | Whether support Cross Margin |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "contracts", + "active" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"symbol\": \"XBTUSDTM\",\n \"rootSymbol\": \"USDT\",\n \"type\": \"FFWCSX\",\n \"firstOpenDate\": 1585555200000,\n \"expireDate\": null,\n \"settleDate\": null,\n \"baseCurrency\": \"XBT\",\n \"quoteCurrency\": \"USDT\",\n \"settleCurrency\": \"USDT\",\n \"maxOrderQty\": 1000000,\n \"maxPrice\": 1000000.0,\n \"lotSize\": 1,\n \"tickSize\": 0.1,\n \"indexPriceTickSize\": 0.01,\n \"multiplier\": 0.001,\n \"initialMargin\": 0.008,\n \"maintainMargin\": 0.004,\n \"maxRiskLimit\": 100000,\n \"minRiskLimit\": 100000,\n \"riskStep\": 50000,\n \"makerFeeRate\": 0.0002,\n \"takerFeeRate\": 0.0006,\n \"takerFixFee\": 0.0,\n \"makerFixFee\": 0.0,\n \"settlementFee\": null,\n \"isDeleverage\": true,\n \"isQuanto\": true,\n \"isInverse\": false,\n \"markMethod\": \"FairPrice\",\n \"fairMethod\": \"FundingRate\",\n \"fundingBaseSymbol\": \".XBTINT8H\",\n \"fundingQuoteSymbol\": \".USDTINT8H\",\n \"fundingRateSymbol\": \".XBTUSDTMFPI8H\",\n \"indexSymbol\": \".KXBTUSDT\",\n \"settlementSymbol\": \"\",\n \"status\": \"Open\",\n \"fundingFeeRate\": 0.000153,\n \"predictedFundingFeeRate\": 8e-05,\n \"fundingRateGranularity\": 28800000,\n \"openInterest\": \"6384957\",\n \"turnoverOf24h\": 578840222.0999069,\n \"volumeOf24h\": 8274.432,\n \"markPrice\": 69732.33,\n \"indexPrice\": 69732.32,\n \"lastTradePrice\": 69732,\n \"nextFundingRateTime\": 21265941,\n \"maxLeverage\": 125,\n \"sourceExchanges\": [\n \"okex\",\n \"binance\",\n \"kucoin\",\n \"bybit\",\n \"bitmart\",\n \"gateio\"\n ],\n \"premiumsSymbol1M\": \".XBTUSDTMPI\",\n \"premiumsSymbol8H\": \".XBTUSDTMPI8H\",\n \"fundingBaseSymbol1M\": \".XBTINT\",\n \"fundingQuoteSymbol1M\": \".USDTINT\",\n \"lowPrice\": 68817.5,\n \"highPrice\": 71615.8,\n \"priceChgPct\": 0.0006,\n \"priceChg\": 48.0,\n \"k\": 490.0,\n \"m\": 300.0,\n \"f\": 1.3,\n \"mmrLimit\": 0.3,\n \"mmrLevConstant\": 125.0,\n \"supportCross\": true\n }\n ]\n}" + } + ] + }, + { + "name": "Get Symbol", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "contracts", + "{{symbol}}" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470221)\n\n:::info[Description]\nGet information of specified contracts that can be traded. This API will return a list of tradable contracts, including some key parameters of the contract such as the symbol name, tick size, mark price,etc.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | 200000 is for success, other is error |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | Symbol |\n| rootSymbol | string | Contract group |\n| type | string | Type of the contract |\n| firstOpenDate | integer | First Open Date(millisecond) |\n| expireDate | integer | Expiration date(millisecond). Null means it will never expire |\n| settleDate | integer | Settlement date(millisecond). Null indicates that automatic settlement is not supported |\n| baseCurrency | string | Base currency |\n| quoteCurrency | string | Quote currency |\n| settleCurrency | string | Currency used to clear and settle the trades |\n| maxOrderQty | integer | Maximum order quantity |\n| maxPrice | number | Maximum order price |\n| lotSize | integer | Minimum lot size |\n| tickSize | number | Minimum price changes |\n| indexPriceTickSize | number | Index price of tick size |\n| multiplier | number | The basic unit of the contract API is lots. For the number of coins in each lot, please refer to the param multiplier. For example, for XBTUSDTM, multiplier=0.001, which corresponds to the value of each XBTUSDTM contract being 0.001 BTC. There is also a special case. All coin-swap contracts, such as each XBTUSDM contract, correspond to 1 USD. |\n| initialMargin | number | Initial margin requirement |\n| maintainMargin | number | Maintenance margin requirement |\n| maxRiskLimit | integer | Maximum risk limit (unit: XBT) |\n| minRiskLimit | integer | Minimum risk limit (unit: XBT) |\n| riskStep | integer | Risk limit increment value (unit: XBT) |\n| makerFeeRate | number | Maker fee rate |\n| takerFeeRate | number | Taker fee rate |\n| takerFixFee | number | Deprecated param |\n| makerFixFee | number | Deprecated param |\n| settlementFee | number | Settlement fee |\n| isDeleverage | boolean | Enabled ADL or not |\n| isQuanto | boolean | Deprecated param |\n| isInverse | boolean | Whether it is a reverse contract |\n| markMethod | string | Marking method |\n| fairMethod | string | Fair price marking method, The Futures contract is null |\n| fundingBaseSymbol | string | Ticker symbol of the based currency |\n| fundingQuoteSymbol | string | Ticker symbol of the quote currency |\n| fundingRateSymbol | string | Funding rate symbol |\n| indexSymbol | string | Index symbol |\n| settlementSymbol | string | Settlement Symbol |\n| status | string | Contract status |\n| fundingFeeRate | number | Funding fee rate |\n| predictedFundingFeeRate | number | Predicted funding fee rate |\n| fundingRateGranularity | integer | Funding interval(millisecond) |\n| openInterest | string | Open interest |\n| turnoverOf24h | number | 24-hour turnover |\n| volumeOf24h | number | 24-hour volume |\n| markPrice | number | Mark price |\n| indexPrice | number | Index price |\n| lastTradePrice | number | Last trade price |\n| nextFundingRateTime | integer | Next funding rate time(millisecond) |\n| maxLeverage | integer | Maximum leverage |\n| sourceExchanges | array | Refer to the schema section of sourceExchanges |\n| premiumsSymbol1M | string | Premium index symbol(1 minute) |\n| premiumsSymbol8H | string | Premium index symbol(8 hours) |\n| fundingBaseSymbol1M | string | Base currency interest rate symbol(1 minute) |\n| fundingQuoteSymbol1M | string | Quote currency interest rate symbol(1 minute) |\n| lowPrice | number | 24-hour lowest price |\n| highPrice | number | 24-hour highest price |\n| priceChgPct | number | 24-hour price change% |\n| priceChg | number | 24-hour price change |\n| k | number | |\n| m | number | |\n| f | number | |\n| mmrLimit | number | |\n| mmrLevConstant | number | |\n| supportCross | boolean | Whether support Cross Margin |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "contracts", + "{{symbol}}" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"symbol\": \"XBTUSDM\",\n \"rootSymbol\": \"XBT\",\n \"type\": \"FFWCSX\",\n \"firstOpenDate\": 1552638575000,\n \"expireDate\": null,\n \"settleDate\": null,\n \"baseCurrency\": \"XBT\",\n \"quoteCurrency\": \"USD\",\n \"settleCurrency\": \"XBT\",\n \"maxOrderQty\": 10000000,\n \"maxPrice\": 1000000.0,\n \"lotSize\": 1,\n \"tickSize\": 0.1,\n \"indexPriceTickSize\": 0.1,\n \"multiplier\": -1.0,\n \"initialMargin\": 0.014,\n \"maintainMargin\": 0.007,\n \"maxRiskLimit\": 1,\n \"minRiskLimit\": 1,\n \"riskStep\": 0,\n \"makerFeeRate\": 0.0002,\n \"takerFeeRate\": 0.0006,\n \"takerFixFee\": 0.0,\n \"makerFixFee\": 0.0,\n \"settlementFee\": null,\n \"isDeleverage\": true,\n \"isQuanto\": false,\n \"isInverse\": true,\n \"markMethod\": \"FairPrice\",\n \"fairMethod\": \"FundingRate\",\n \"fundingBaseSymbol\": \".XBTINT8H\",\n \"fundingQuoteSymbol\": \".USDINT8H\",\n \"fundingRateSymbol\": \".XBTUSDMFPI8H\",\n \"indexSymbol\": \".BXBT\",\n \"settlementSymbol\": null,\n \"status\": \"Open\",\n \"fundingFeeRate\": 0.000175,\n \"predictedFundingFeeRate\": 0.000176,\n \"fundingRateGranularity\": 28800000,\n \"openInterest\": \"61725904\",\n \"turnoverOf24h\": 209.56303473,\n \"volumeOf24h\": 14354731.0,\n \"markPrice\": 68336.7,\n \"indexPrice\": 68335.29,\n \"lastTradePrice\": 68349.3,\n \"nextFundingRateTime\": 17402942,\n \"maxLeverage\": 75,\n \"sourceExchanges\": [\n \"kraken\",\n \"bitstamp\",\n \"crypto\"\n ],\n \"premiumsSymbol1M\": \".XBTUSDMPI\",\n \"premiumsSymbol8H\": \".XBTUSDMPI8H\",\n \"fundingBaseSymbol1M\": \".XBTINT\",\n \"fundingQuoteSymbol1M\": \".USDINT\",\n \"lowPrice\": 67436.7,\n \"highPrice\": 69471.8,\n \"priceChgPct\": 0.0097,\n \"priceChg\": 658.7,\n \"k\": 2645000.0,\n \"m\": 1640000.0,\n \"f\": 1.3,\n \"mmrLimit\": 0.3,\n \"mmrLevConstant\": 75.0,\n \"supportCross\": true\n }\n}" + } + ] + }, + { + "name": "Get Ticker", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "ticker" + ], + "query": [ + { + "key": "symbol", + "value": "", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) \n\n" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470222)\n\n:::info[Description]\nThis endpoint returns \"last traded price/size\"ใ€\"best bid/ask price/size\" etc. of a single symbol.\nThese messages can also be obtained through Websocket.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | 200000 is for success, other is error |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| sequence | integer | Sequence number, used to judge whether the messages pushed by Websocket is continuous. |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| side | string | Filled side, The trade side indicates the taker order side. A taker order is the order that was matched with orders opened on the order book. |\n| size | integer | Filled quantity |\n| tradeId | string | Transaction ID |\n| price | string | Filled price |\n| bestBidPrice | string | Best bid price |\n| bestBidSize | integer | Best bid size |\n| bestAskPrice | string | Best ask price |\n| bestAskSize | integer | Best ask size |\n| ts | integer | Filled time(nanosecond) |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "ticker" + ], + "query": [ + { + "key": "symbol", + "value": "", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) \n\n" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"sequence\": 1697895100310,\n \"symbol\": \"XBTUSDM\",\n \"side\": \"sell\",\n \"size\": 2936,\n \"tradeId\": \"1697901180000\",\n \"price\": \"67158.4\",\n \"bestBidPrice\": \"67169.6\",\n \"bestBidSize\": 32345,\n \"bestAskPrice\": \"67169.7\",\n \"bestAskSize\": 7251,\n \"ts\": 1729163001780000000\n }\n}" + } + ] + }, + { + "name": "Get All Tickers", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "allTickers" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470223)\n\n:::info[Description]\nThis endpoint returns \"last traded price/size\"ใ€\"best bid/ask price/size\" etc. of all symbol.\nThese messages can also be obtained through Websocket.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | 200000 is for success, other is error |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| sequence | integer | Sequence number, used to judge whether the messages pushed by Websocket is continuous. |\n| symbol | string | Symbol |\n| side | string | Trade direction |\n| size | integer | Filled side, The trade side indicates the taker order side. A taker order is the order that was matched with orders opened on the order book. |\n| tradeId | string | Transaction ID |\n| price | string | Filled price |\n| bestBidPrice | string | Best bid price |\n| bestBidSize | integer | Best bid size |\n| bestAskPrice | string | Best ask price |\n| bestAskSize | integer | Best ask size |\n| ts | integer | Filled time(nanosecond) |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "allTickers" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"sequence\": 1707992727046,\n \"symbol\": \"XBTUSDTM\",\n \"side\": \"sell\",\n \"size\": 21,\n \"tradeId\": \"1784299761369\",\n \"price\": \"67153\",\n \"bestBidPrice\": \"67153\",\n \"bestBidSize\": 2767,\n \"bestAskPrice\": \"67153.1\",\n \"bestAskSize\": 5368,\n \"ts\": 1729163466659000000\n },\n {\n \"sequence\": 1697895166299,\n \"symbol\": \"XBTUSDM\",\n \"side\": \"sell\",\n \"size\": 1956,\n \"tradeId\": \"1697901245065\",\n \"price\": \"67145.2\",\n \"bestBidPrice\": \"67135.3\",\n \"bestBidSize\": 1,\n \"bestAskPrice\": \"67135.8\",\n \"bestAskSize\": 3,\n \"ts\": 1729163445340000000\n }\n ]\n}" + } + ] + }, + { + "name": "Get Full OrderBook", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "level2", + "snapshot" + ], + "query": [ + { + "key": "symbol", + "value": "XBTUSDM", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) \n" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470224)\n\n:::info[Discription]\nQuery for Full orderbook depth data. (aggregated by price)\n\nIt is generally used by professional traders because it uses more server resources and traffic, and we have strict access rate limit control.\n\nTo maintain up-to-date Order Book, please use Websocket incremental feed after retrieving the OrderBook.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | 200000 is for success, other is error |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| sequence | integer | Sequence number |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| bids | array | Refer to the schema section of bids |\n| asks | array | Refer to the schema section of asks |\n| ts | integer | Timestamp(nanosecond) |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "level2", + "snapshot" + ], + "query": [ + { + "key": "symbol", + "value": "XBTUSDM", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) \n" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"sequence\": 1697895963339,\n \"symbol\": \"XBTUSDM\",\n \"bids\": [\n [\n 66968,\n 2\n ],\n [\n 66964.8,\n 25596\n ]\n ],\n \"asks\": [\n [\n 66968.1,\n 13501\n ],\n [\n 66968.7,\n 2032\n ]\n ],\n \"ts\": 1729168101216000000\n }\n}" + } + ] + }, + { + "name": "Get Part OrderBook", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "level2", + "depth{size}" + ], + "query": [ + { + "key": "symbol", + "value": "XBTUSDM", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470225)\n\n:::info[Discription]\nQuery for part orderbook depth data. (aggregated by price)\n\nYou are recommended to request via this endpoint as the system reponse would be faster and cosume less traffic.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| sequence | integer | Sequence number |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| bids | array | Refer to the schema section of bids |\n| asks | array | Refer to the schema section of asks |\n| ts | integer | Timestamp(nanosecond) |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "level2", + "depth{size}" + ], + "query": [ + { + "key": "symbol", + "value": "XBTUSDM", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"sequence\": 1697895963339,\n \"symbol\": \"XBTUSDM\",\n \"bids\": [\n [\n 66968,\n 2\n ],\n [\n 66964.8,\n 25596\n ]\n ],\n \"asks\": [\n [\n 66968.1,\n 13501\n ],\n [\n 66968.7,\n 2032\n ]\n ],\n \"ts\": 1729168101216000000\n }\n}" + } + ] + }, + { + "name": "Get Interest Rate Index", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "interest", + "query" + ], + "query": [ + { + "key": "symbol", + "value": "", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: fundingBaseSymbol, fundingQuoteSymbol, fundingBaseSymbol1M, fundingQuoteSymbol1M](https://www.kucoin.com/docs-new/api-3470220) " + }, + { + "key": "startAt", + "value": "1728663338000", + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": "1728692138000", + "description": "End time (milisecond)" + }, + { + "key": "reverse", + "value": "true", + "description": "This parameter functions to judge whether the lookup is reverse. True means โ€œyesโ€. False means no. This parameter is set as True by default." + }, + { + "key": "offset", + "value": "254062248624417", + "description": "Start offset. The unique attribute of the last returned result of the last request. The data of the first page will be returned by default." + }, + { + "key": "forward", + "value": "true", + "description": "This parameter functions to judge whether the lookup is forward or not. True means โ€œyesโ€ and False means โ€œnoโ€. This parameter is set as true by default" + }, + { + "key": "maxCount", + "value": "10", + "description": "Max record count. The default record count is 10, The maximum length cannot exceed 100" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470226)\n\n:::info[Discription]\nGet interest rate Index.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| dataList | array | Refer to the schema section of dataList |\n| hasMore | boolean | Whether there are more pages |\n\n**root.data.dataList Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: fundingBaseSymbol, fundingQuoteSymbol, fundingBaseSymbol1M, fundingQuoteSymbol1M](https://www.kucoin.com/docs-new/api-3470220) |\n| granularity | integer | Granularity (milisecond) |\n| timePoint | integer | Timestamp(milisecond) |\n| value | number | Interest rate value |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "interest", + "query" + ], + "query": [ + { + "key": "symbol", + "value": "", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: fundingBaseSymbol, fundingQuoteSymbol, fundingBaseSymbol1M, fundingQuoteSymbol1M](https://www.kucoin.com/docs-new/api-3470220) " + }, + { + "key": "startAt", + "value": "1728663338000", + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": "1728692138000", + "description": "End time (milisecond)" + }, + { + "key": "reverse", + "value": "true", + "description": "This parameter functions to judge whether the lookup is reverse. True means โ€œyesโ€. False means no. This parameter is set as True by default." + }, + { + "key": "offset", + "value": "254062248624417", + "description": "Start offset. The unique attribute of the last returned result of the last request. The data of the first page will be returned by default." + }, + { + "key": "forward", + "value": "true", + "description": "This parameter functions to judge whether the lookup is forward or not. True means โ€œyesโ€ and False means โ€œnoโ€. This parameter is set as true by default" + }, + { + "key": "maxCount", + "value": "10", + "description": "Max record count. The default record count is 10, The maximum length cannot exceed 100" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"dataList\": [\n {\n \"symbol\": \".XBTINT\",\n \"granularity\": 60000,\n \"timePoint\": 1728692100000,\n \"value\": 0.0003\n },\n {\n \"symbol\": \".XBTINT\",\n \"granularity\": 60000,\n \"timePoint\": 1728692040000,\n \"value\": 0.0003\n }\n ],\n \"hasMore\": true\n }\n}" + } + ] + }, + { + "name": "Get Premium Index", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "premium", + "query" + ], + "query": [ + { + "key": "symbol", + "value": "", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: premiumsSymbol1M, premiumsSymbol8H](https://www.kucoin.com/docs-new/api-3470220) " + }, + { + "key": "startAt", + "value": "1728663338000", + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": "1728692138000", + "description": "End time (milisecond)" + }, + { + "key": "reverse", + "value": "true", + "description": "This parameter functions to judge whether the lookup is reverse. True means โ€œyesโ€. False means no. This parameter is set as True by default." + }, + { + "key": "offset", + "value": "254062248624417", + "description": "Start offset. The unique attribute of the last returned result of the last request. The data of the first page will be returned by default." + }, + { + "key": "forward", + "value": "true", + "description": "This parameter functions to judge whether the lookup is forward or not. True means โ€œyesโ€ and False means โ€œnoโ€. This parameter is set as true by default" + }, + { + "key": "maxCount", + "value": "10", + "description": "Max record count. The default record count is 10, The maximum length cannot exceed 100" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470227)\n\n:::info[Discription]\nSubmit request to get premium index.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| dataList | array | Refer to the schema section of dataList |\n| hasMore | boolean | Whether there are more pages |\n\n**root.data.dataList Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: premiumsSymbol1M, premiumsSymbol8H](https://www.kucoin.com/docs-new/api-3470220) |\n| granularity | integer | Granularity(milisecond) |\n| timePoint | integer | Timestamp(milisecond) |\n| value | number | Premium index |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "premium", + "query" + ], + "query": [ + { + "key": "symbol", + "value": "", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: premiumsSymbol1M, premiumsSymbol8H](https://www.kucoin.com/docs-new/api-3470220) " + }, + { + "key": "startAt", + "value": "1728663338000", + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": "1728692138000", + "description": "End time (milisecond)" + }, + { + "key": "reverse", + "value": "true", + "description": "This parameter functions to judge whether the lookup is reverse. True means โ€œyesโ€. False means no. This parameter is set as True by default." + }, + { + "key": "offset", + "value": "254062248624417", + "description": "Start offset. The unique attribute of the last returned result of the last request. The data of the first page will be returned by default." + }, + { + "key": "forward", + "value": "true", + "description": "This parameter functions to judge whether the lookup is forward or not. True means โ€œyesโ€ and False means โ€œnoโ€. This parameter is set as true by default" + }, + { + "key": "maxCount", + "value": "10", + "description": "Max record count. The default record count is 10, The maximum length cannot exceed 100" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"hasMore\": true,\n \"dataList\": [\n {\n \"symbol\": \".XBTUSDTMPI\",\n \"granularity\": 60000,\n \"timePoint\": 1730558040000,\n \"value\": 6e-05\n },\n {\n \"symbol\": \".XBTUSDTMPI\",\n \"granularity\": 60000,\n \"timePoint\": 1730557980000,\n \"value\": -2.5e-05\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Get 24hr Stats", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "trade-statistics" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470228)\n\n:::info[Discription]\nGet the statistics of the platform futures trading volume in the last 24 hours.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| turnoverOf24h | number | 24-hour platform Futures trading volume. Unit is USD |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "trade-statistics" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"turnoverOf24h\": 1115573341.3273683\n }\n}" + } + ] + }, + { + "name": "Get Server Time", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "timestamp" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470229)\n\n:::info[Discription]\nGet the API server time. This is the Unix timestamp.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | integer | ServerTime(millisecond) |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "timestamp" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": 1729260030774\n}" + } + ] + }, + { + "name": "Get Service Status", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "status" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470230)\n\n:::info[Discription]\nGet the service status.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| msg | string | |\n| status | string | Status of service: open๏ผšnormal transaction, close๏ผšStop Trading/Maintenance, cancelonly๏ผšcan only cancel the order but not place order |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "status" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"msg\": \"\",\n \"status\": \"open\"\n }\n}" + } + ] + }, + { + "name": "Get Spot Index Price", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "index", + "query" + ], + "query": [ + { + "key": "symbol", + "value": "", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: indexSymbol](https://www.kucoin.com/docs-new/api-3470220) " + }, + { + "key": "startAt", + "value": null, + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": null, + "description": "End time (milisecond)" + }, + { + "key": "reverse", + "value": null, + "description": "This parameter functions to judge whether the lookup is reverse. True means โ€œyesโ€. False means no. This parameter is set as True by default." + }, + { + "key": "offset", + "value": null, + "description": "Start offset. The unique attribute of the last returned result of the last request. The data of the first page will be returned by default." + }, + { + "key": "forward", + "value": null, + "description": "This parameter functions to judge whether the lookup is forward or not. True means โ€œyesโ€ and False means โ€œnoโ€. This parameter is set as true by default" + }, + { + "key": "maxCount", + "value": null, + "description": "Max record count. The default record count is 10, The maximum length cannot exceed 100" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470231)\n\n:::info[Discription]\nGet Spot Index price\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| dataList | array | Refer to the schema section of dataList |\n| hasMore | boolean | Whether there are more pages |\n\n**root.data.dataList Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: indexSymbol](https://www.kucoin.com/docs-new/api-3470220) |\n| granularity | integer | Granularity (milisecond) |\n| timePoint | integer | Timestamp (milisecond) |\n| value | number | Index Value |\n| decomposionList | array | Refer to the schema section of decomposionList |\n\n**root.data.dataList.decomposionList Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| exchange | string | Exchange |\n| price | number | Price |\n| weight | number | Weight |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "index", + "query" + ], + "query": [ + { + "key": "symbol", + "value": "", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: indexSymbol](https://www.kucoin.com/docs-new/api-3470220) " + }, + { + "key": "startAt", + "value": null, + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": null, + "description": "End time (milisecond)" + }, + { + "key": "reverse", + "value": null, + "description": "This parameter functions to judge whether the lookup is reverse. True means โ€œyesโ€. False means no. This parameter is set as True by default." + }, + { + "key": "offset", + "value": null, + "description": "Start offset. The unique attribute of the last returned result of the last request. The data of the first page will be returned by default." + }, + { + "key": "forward", + "value": null, + "description": "This parameter functions to judge whether the lookup is forward or not. True means โ€œyesโ€ and False means โ€œnoโ€. This parameter is set as true by default" + }, + { + "key": "maxCount", + "value": null, + "description": "Max record count. The default record count is 10, The maximum length cannot exceed 100" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"hasMore\": true,\n \"dataList\": [\n {\n \"symbol\": \".KXBTUSDT\",\n \"granularity\": 1000,\n \"timePoint\": 1730557515000,\n \"value\": 69202.94,\n \"decomposionList\": [\n {\n \"exchange\": \"gateio\",\n \"price\": 69209.27,\n \"weight\": 0.0533\n },\n {\n \"exchange\": \"bitmart\",\n \"price\": 69230.77,\n \"weight\": 0.0128\n },\n {\n \"exchange\": \"okex\",\n \"price\": 69195.34,\n \"weight\": 0.11\n },\n {\n \"exchange\": \"bybit\",\n \"price\": 69190.33,\n \"weight\": 0.0676\n },\n {\n \"exchange\": \"binance\",\n \"price\": 69204.55,\n \"weight\": 0.6195\n },\n {\n \"exchange\": \"kucoin\",\n \"price\": 69202.91,\n \"weight\": 0.1368\n }\n ]\n },\n {\n \"symbol\": \".KXBTUSDT\",\n \"granularity\": 1000,\n \"timePoint\": 1730557514000,\n \"value\": 69204.98,\n \"decomposionList\": [\n {\n \"exchange\": \"gateio\",\n \"price\": 69212.71,\n \"weight\": 0.0808\n },\n {\n \"exchange\": \"bitmart\",\n \"price\": 69230.77,\n \"weight\": 0.0134\n },\n {\n \"exchange\": \"okex\",\n \"price\": 69195.49,\n \"weight\": 0.0536\n },\n {\n \"exchange\": \"bybit\",\n \"price\": 69195.97,\n \"weight\": 0.0921\n },\n {\n \"exchange\": \"binance\",\n \"price\": 69204.56,\n \"weight\": 0.5476\n },\n {\n \"exchange\": \"kucoin\",\n \"price\": 69207.8,\n \"weight\": 0.2125\n }\n ]\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Get Trade History", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "trade", + "history" + ], + "query": [ + { + "key": "symbol", + "value": "XBTUSDM", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470232)\n\n:::info[Discription]\nRequest via this endpoint to get the trade history of the specified symbol, the returned quantity is the last 100 transaction records.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| sequence | integer | Sequence number |\n| contractId | integer | Deprecated param |\n| tradeId | string | Transaction ID |\n| makerOrderId | string | Maker order ID |\n| takerOrderId | string | Taker order ID |\n| ts | integer | Filled timestamp(nanosecond) |\n| size | integer | Filled amount |\n| price | string | Filled price |\n| side | string | Filled side, The trade side indicates the taker order side. A taker order is the order that was matched with orders opened on the order book. |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "trade", + "history" + ], + "query": [ + { + "key": "symbol", + "value": "XBTUSDM", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"sequence\": 1697915257909,\n \"contractId\": 1,\n \"tradeId\": \"1697915257909\",\n \"makerOrderId\": \"236679665752801280\",\n \"takerOrderId\": \"236679667975745536\",\n \"ts\": 1729242032152000000,\n \"size\": 1,\n \"price\": \"67878\",\n \"side\": \"sell\"\n },\n {\n \"sequence\": 1697915257749,\n \"contractId\": 1,\n \"tradeId\": \"1697915257749\",\n \"makerOrderId\": \"236679660971245570\",\n \"takerOrderId\": \"236679665400492032\",\n \"ts\": 1729242031535000000,\n \"size\": 1,\n \"price\": \"67867.8\",\n \"side\": \"sell\"\n },\n {\n \"sequence\": 1697915257701,\n \"contractId\": 1,\n \"tradeId\": \"1697915257701\",\n \"makerOrderId\": \"236679660971245570\",\n \"takerOrderId\": \"236679661919211521\",\n \"ts\": 1729242030932000000,\n \"size\": 1,\n \"price\": \"67867.8\",\n \"side\": \"sell\"\n }\n ]\n}" + } + ] + }, + { + "name": "Get Mark Price", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "mark-price", + "{{symbol}}", + "current" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470233)\n\n:::info[Discription]\nGet current mark price\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| granularity | integer | Granularity (milisecond) |\n| timePoint | integer | Time point (milisecond) |\n| value | number | Mark price |\n| indexPrice | number | Index price |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "mark-price", + "{{symbol}}", + "current" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"symbol\": \"XBTUSDTM\",\n \"granularity\": 1000,\n \"timePoint\": 1729254307000,\n \"value\": 67687.08,\n \"indexPrice\": 67683.58\n }\n}" + } + ] + }, + { + "name": "Get Klines", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "kline", + "query" + ], + "query": [ + { + "key": "symbol", + "value": "", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol, indexSymbol, premiumsSymbol1M, premiumsSymbol8H](https://www.kucoin.com/docs-new/api-3470220) " + }, + { + "key": "granularity", + "value": "", + "description": "Type of candlestick patterns(minute)" + }, + { + "key": "from", + "value": "1728552342000", + "description": "Start time (milisecond)" + }, + { + "key": "to", + "value": "1729243542000", + "description": "End time (milisecond)" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470234)\n\n:::info[Description]\nGet the Kline of the symbol. Data are returned in grouped buckets based on requested type.\nFor each query, the system would return at most 500 pieces of data. To obtain more data, please page the data by time.\n:::\n\n:::tip[Tips]\nKlines data may be incomplete. No data is published for intervals where there are no ticks.\n\nIf the specified start/end time and the time granularity exceeds the maximum size allowed for a single request, the system will only return 500 pieces of data for your request. If you want to get fine-grained data in a larger time range, you will need to specify the time ranges and make multiple requests for multiple times.\n\nIf youโ€™ve specified only the start time in your request, the system will return 500 pieces of data from the specified start time to the current time of the system; If only the end time is specified, the system will return 500 pieces of data closest to the end time; If neither the start time nor the end time is specified, the system will return the 500 pieces of data closest to the current time of the system.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "kline", + "query" + ], + "query": [ + { + "key": "symbol", + "value": "", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol, indexSymbol, premiumsSymbol1M, premiumsSymbol8H](https://www.kucoin.com/docs-new/api-3470220) " + }, + { + "key": "granularity", + "value": "", + "description": "Type of candlestick patterns(minute)" + }, + { + "key": "from", + "value": "1728552342000", + "description": "Start time (milisecond)" + }, + { + "key": "to", + "value": "1729243542000", + "description": "End time (milisecond)" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n [\n 1728576000000,\n 60791.1,\n 61035,\n 58940,\n 60300,\n 5501167\n ],\n [\n 1728604800000,\n 60299.9,\n 60924.1,\n 60077.4,\n 60666.1,\n 1220980\n ],\n [\n 1728633600000,\n 60665.7,\n 62436.8,\n 60650.1,\n 62255.1,\n 3386359\n ]\n ]\n}" + } + ] + } + ], + "description": "" + }, + { + "name": "Orders", + "item": [ + { + "name": "Add Order", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "orders" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470235)\n\n:::info[Description]\nPlace order to the futures trading system, you can place two major types of orders: limit and market. Orders can only be placed if your account has sufficient funds. Once an order is placed, your funds will be put on hold for the duration of the order. The amount of funds on hold depends on the order type and parameters specified.\n:::\n\n:::tip[Tips]\nThe maximum limit orders for a single contract is 100 per account, and the maximum stop orders for a single contract is 200 per account.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Unique order id created by users to identify their orders, the maximum length cannot exceed 40, e.g. UUID, Only allows numbers, characters, underline(_), and separator(-) |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| leverage | integer | Used to calculate the margin to be frozen for the order. If you are to close the position, this parameter is not required. |\n| type | string | specify if the order is an 'limit' order or 'market' order |\n| remark | string | remark for the order, length cannot exceed 100 utf8 characters |\n| stop | string | Either 'down' or 'up'. If stop is used,parameter stopPrice and stopPriceType also need to be provieded. |\n| stopPriceType | string | Either 'TP', 'IP' or 'MP', Need to be defined if stop is specified. |\n| stopPrice | string | Need to be defined if stop is specified. |\n| reduceOnly | boolean | A mark to reduce the position size only. Set to false by default. Need to set the position size when reduceOnly is true. If set to true, only the orders reducing the position size will be executed. If the reduce-only order size exceeds the position size, the extra size will be canceled. |\n| closeOrder | boolean | A mark to close the position. Set to false by default. If closeOrder is set to true, the system will close the position and the position size will become 0. Side, Size and Leverage fields can be left empty and the system will determine the side and size automatically. |\n| forceHold | boolean | A mark to forcely hold the funds for an order, even though it's an order to reduce the position size. This helps the order stay on the order book and not get canceled when the position size changes. Set to false by default. The system will forcely freeze certain amount of funds for this order, including orders whose direction is opposite to the current positions. This feature is to ensure that the order wonโ€™t be canceled by the matching engine in such a circumstance that not enough funds are frozen for the order. |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. |\n| marginMode | string | Margin mode: ISOLATED, CROSS, default: ISOLATED |\n| price | string | Required for type is 'limit' order, indicating the operating price |\n| size | integer | **Choose one of size, qty, valueQty**, Order size (Lot), must be a positive integer. The quantity unit of coin-swap contracts is size(lot), and other units are not supported. |\n| timeInForce | string | Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/api-338146) is a special strategy used during trading, default is GTC |\n| postOnly | boolean | Optional for type is 'limit' order, post only flag, invalid when timeInForce is IOC. When postOnly is true, not allowed choose hidden or iceberg. The post-only flag ensures that the trader always pays the maker fee and provides liquidity to the order book. If any part of the order is going to pay taker fee, the order will be fully rejected. |\n| hidden | boolean | Optional for type is 'limit' order, orders not displaying in order book. When hidden chose, not allowed choose postOnly. |\n| iceberg | boolean | Optional for type is 'limit' order, Only visible portion of the order is displayed in the order book. When iceberg chose, not allowed choose postOnly. |\n| visibleSize | string | Optional for type is 'limit' order, The maximum visible size of an iceberg order. please place order in size (lots), The units of qty (base currency) and valueQty (value) are not supported. |\n| qty | string | **Choose one of size, qty, valueQty**, Order size (Base currency) must be an integer multiple of the multiplier. The unit of the quantity of coin-swap is size(lot), which is not supported |\n| valueQty | string | **Choose one of size, qty, valueQty**, Order size (Value), USDS-Swap correspond to USDT or USDC. The unit of the quantity of coin-swap is size(lot), which is not supported |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| clientOid | string | The user self-defined order id. |\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"clientOid\": \"5c52e11203aa677f33e493fb\",\n \"side\": \"buy\",\n \"symbol\": \"XBTUSDTM\",\n \"leverage\": 3,\n \"type\": \"limit\",\n \"remark\": \"order remarks\",\n \"reduceOnly\": false,\n \"marginMode\": \"ISOLATED\",\n \"price\": \"0.1\",\n \"size\": 1,\n \"timeInForce\": \"GTC\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "orders" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"orderId\": \"234125150956625920\",\n \"clientOid\": \"5c52e11203aa677f33e493fb\"\n }\n}" + } + ] + }, + { + "name": "Get Trade History", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "fills" + ], + "query": [ + { + "key": "orderId", + "value": "236655147005071361", + "description": "List fills for a specific order only (If you specify orderId, other parameters can be ignored)" + }, + { + "key": "symbol", + "value": null, + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + }, + { + "key": "side", + "value": null, + "description": "Order side" + }, + { + "key": "type", + "value": null, + "description": "Order Type" + }, + { + "key": "tradeTypes", + "value": null, + "description": "Transaction type: trade, adl, liquid, settlement. Supports querying multiple types at the same time, separated by commas. Query all type when empty" + }, + { + "key": "startAt", + "value": null, + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": null, + "description": "End time (milisecond)" + }, + { + "key": "currentPage", + "value": null, + "description": "Current request page, The default currentPage is 1" + }, + { + "key": "pageSize", + "value": null, + "description": "pageSize, The default pageSize is 50, The maximum cannot exceed 1000" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470248)\n\n:::info[Description]\nGet a list of recent fills. If you need to get your recent trade history with low latency, please query endpoint Get List of Orders Completed in 24h. The requested data is not real-time.\n:::\n\n**Data Time Range**\n\nThe system allows you to retrieve data up to one week (start from the last day by default). If the time period of the queried data exceeds one week (time range from the start time to end time exceeded 24*7 hours), the system will prompt to remind you that you have exceeded the time limit. If you only specified the start time, the system will automatically calculate the end time (end time = start time + 24 hours). On the contrary, if you only specified the end time, the system will calculate the start time (start time= end time - 24 hours) the same way.\n\n**Fee**\n\nOrders on KuCoin Futures platform are classified into two types, taker and maker. A taker order matches other resting orders on the exchange order book, and gets executed immediately after order entry. A maker order, on the contrary, stays on the exchange order book and awaits to be matched. Taker orders will be charged taker fees, while maker orders will receive maker rebates. Please note that market orders, iceberg orders and hidden orders are always charged taker fees.\n\nThe system will pre-freeze a predicted taker fee when you place an order.The liquidity field indicates if the fill was charged taker or maker fees.\n\nThe system will pre-freeze the predicted fees (including the maintenance margin needed for the position, entry fees and fees to close positions) if you added the position, and will not pre-freeze fees if you reduced the position. After the order is executed, if you added positions, the system will deduct entry fees from your balance, if you closed positions, the system will deduct the close fees.\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currentPage | integer | |\n| pageSize | integer | |\n| totalNum | integer | |\n| totalPage | integer | |\n| items | array | Refer to the schema section of items |\n\n**root.data.items Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| tradeId | string | Trade ID
|\n| orderId | string | Order ID
|\n| side | string | Transaction side |\n| liquidity | string | Liquidity- taker or maker |\n| forceTaker | boolean | Whether to force processing as a taker
|\n| price | string | Filled price |\n| size | integer | Filled amount |\n| value | string | Order value |\n| openFeePay | string | Opening transaction fee |\n| closeFeePay | string | Closing transaction fee |\n| stop | string | A mark to the stop order type |\n| feeRate | string | Fee Rate |\n| fixFee | string | Fixed fees(Deprecated field, no actual use of the value field) |\n| feeCurrency | string | Charging currency |\n| tradeTime | integer | trade time in nanosecond |\n| subTradeType | string | Deprecated field, no actual use of the value field |\n| marginMode | string | Margin mode: ISOLATED (isolated), CROSS (cross margin). |\n| settleCurrency | string | Settle Currency |\n| displayType | string | Order Type |\n| fee | string | |\n| orderType | string | Order type |\n| tradeType | string | Trade type (trade, liquid, adl or settlement)
|\n| createdAt | integer | Time the order created
|\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "fills" + ], + "query": [ + { + "key": "orderId", + "value": "236655147005071361", + "description": "List fills for a specific order only (If you specify orderId, other parameters can be ignored)" + }, + { + "key": "symbol", + "value": null, + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + }, + { + "key": "side", + "value": null, + "description": "Order side" + }, + { + "key": "type", + "value": null, + "description": "Order Type" + }, + { + "key": "tradeTypes", + "value": null, + "description": "Transaction type: trade, adl, liquid, settlement. Supports querying multiple types at the same time, separated by commas. Query all type when empty" + }, + { + "key": "startAt", + "value": null, + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": null, + "description": "End time (milisecond)" + }, + { + "key": "currentPage", + "value": null, + "description": "Current request page, The default currentPage is 1" + }, + { + "key": "pageSize", + "value": null, + "description": "pageSize, The default pageSize is 50, The maximum cannot exceed 1000" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"currentPage\": 1,\n \"pageSize\": 50,\n \"totalNum\": 2,\n \"totalPage\": 1,\n \"items\": [\n {\n \"symbol\": \"XBTUSDTM\",\n \"tradeId\": \"1784277229880\",\n \"orderId\": \"236317213710184449\",\n \"side\": \"buy\",\n \"liquidity\": \"taker\",\n \"forceTaker\": false,\n \"price\": \"67430.9\",\n \"size\": 1,\n \"value\": \"67.4309\",\n \"openFeePay\": \"0.04045854\",\n \"closeFeePay\": \"0\",\n \"stop\": \"\",\n \"feeRate\": \"0.00060\",\n \"fixFee\": \"0\",\n \"feeCurrency\": \"USDT\",\n \"marginMode\": \"ISOLATED\",\n \"settleCurrency\": \"USDT\",\n \"fee\": \"0.04045854\",\n \"orderType\": \"market\",\n \"displayType\": \"market\",\n \"tradeType\": \"trade\",\n \"subTradeType\": null,\n \"tradeTime\": 1729155616320000000,\n \"createdAt\": 1729155616493\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"tradeId\": \"1784277132002\",\n \"orderId\": \"236317094436728832\",\n \"side\": \"buy\",\n \"liquidity\": \"taker\",\n \"forceTaker\": false,\n \"price\": \"67445\",\n \"size\": 1,\n \"value\": \"67.445\",\n \"openFeePay\": \"0\",\n \"closeFeePay\": \"0.040467\",\n \"stop\": \"\",\n \"feeRate\": \"0.00060\",\n \"fixFee\": \"0\",\n \"feeCurrency\": \"USDT\",\n \"marginMode\": \"ISOLATED\",\n \"settleCurrency\": \"USDT\",\n \"fee\": \"0.040467\",\n \"orderType\": \"market\",\n \"displayType\": \"market\",\n \"tradeType\": \"trade\",\n \"subTradeType\": null,\n \"tradeTime\": 1729155587944000000,\n \"createdAt\": 1729155588104\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Batch Add Orders", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "orders", + "multi" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470236)\n\n:::info[Description]\nPlace multiple order to the futures trading system, you can place two major types of orders: limit and market. Orders can only be placed if your account has sufficient funds. Once an order is placed, your funds will be put on hold for the duration of the order. The amount of funds on hold depends on the order type and parameters specified.\nYou can place up to 20 orders at one time, including limit orders, market orders, and stop orders\n\nPlease be noted that the system would hold the fees from the orders entered the orderbook in advance.\n\nDo NOT include extra spaces in JSON strings.\n\nPlace Order Limit\nThe maximum limit orders for a single contract is 100 per account, and the maximum stop orders for a single contract is 50 per account.\n:::\n\n:::tip[Tips]\n- The maximum limit orders for a single contract is 100 per account, and the maximum stop orders for a single contract is 50 per account.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Unique order id created by users to identify their orders, the maximum length cannot exceed 40, e.g. UUID, Only allows numbers, characters, underline(_), and separator(-) |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-221752070) |\n| leverage | integer | Used to calculate the margin to be frozen for the order. If you are to close the position, this parameter is not required. |\n| type | string | specify if the order is an 'limit' order or 'market' order |\n| remark | string | remark for the order, length cannot exceed 100 utf8 characters |\n| stop | string | Either 'down' or 'up'. If stop is used,parameter stopPrice and stopPriceType also need to be provieded. |\n| stopPriceType | string | Either 'TP', 'IP' or 'MP', Need to be defined if stop is specified. |\n| stopPrice | string | Need to be defined if stop is specified. |\n| reduceOnly | boolean | A mark to reduce the position size only. Set to false by default. Need to set the position size when reduceOnly is true. If set to true, only the orders reducing the position size will be executed. If the reduce-only order size exceeds the position size, the extra size will be canceled. |\n| closeOrder | boolean | A mark to close the position. Set to false by default. If closeOrder is set to true, the system will close the position and the position size will become 0. Side, Size and Leverage fields can be left empty and the system will determine the side and size automatically. |\n| forceHold | boolean | A mark to forcely hold the funds for an order, even though it's an order to reduce the position size. This helps the order stay on the order book and not get canceled when the position size changes. Set to false by default. The system will forcely freeze certain amount of funds for this order, including orders whose direction is opposite to the current positions. This feature is to ensure that the order wonโ€™t be canceled by the matching engine in such a circumstance that not enough funds are frozen for the order. |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. |\n| marginMode | string | Margin mode: ISOLATED, CROSS, default: ISOLATED |\n| price | string | Required for type is 'limit' order, indicating the operating price |\n| size | integer | **Choose one of size, qty, valueQty**, Order size (Lot), must be a positive integer. The quantity unit of coin-swap contracts is size(lot), and other units are not supported. |\n| timeInForce | string | Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/api-338146) is a special strategy used during trading, default is GTC |\n| postOnly | boolean | Optional for type is 'limit' order, post only flag, invalid when timeInForce is IOC. When postOnly is true, not allowed choose hidden or iceberg. The post-only flag ensures that the trader always pays the maker fee and provides liquidity to the order book. If any part of the order is going to pay taker fee, the order will be fully rejected. |\n| hidden | boolean | Optional for type is 'limit' order, orders not displaying in order book. When hidden chose, not allowed choose postOnly. |\n| iceberg | boolean | Optional for type is 'limit' order, Only visible portion of the order is displayed in the order book. When iceberg chose, not allowed choose postOnly. |\n| visibleSize | string | Optional for type is 'limit' order, The maximum visible size of an iceberg order. please place order in size (lots), The units of qty (base currency) and valueQty (value) are not supported. |\n| qty | string | **Choose one of size, qty, valueQty**, Order size (Base currency) must be an integer multiple of the multiplier. The unit of the quantity of coin-swap is size(lot), which is not supported |\n| valueQty | string | **Choose one of size, qty, valueQty**, Order size (Value), USDS-Swap correspond to USDT or USDC. The unit of the quantity of coin-swap is size(lot), which is not supported |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| clientOid | string | Unique order id created by users to identify their orders, the maximum length cannot exceed 40, e.g. UUID, Only allows numbers, characters, underline(_), and separator(-) |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| code | string | |\n| msg | string | |\n\n---\n", + "body": { + "mode": "raw", + "raw": "[\n {\n \"clientOid\": \"5c52e11203aa677f33e493fb\",\n \"side\": \"buy\",\n \"symbol\": \"XBTUSDTM\",\n \"leverage\": 3,\n \"type\": \"limit\",\n \"remark\": \"order remarks\",\n \"reduceOnly\": false,\n \"marginMode\": \"ISOLATED\",\n \"price\": \"0.1\",\n \"size\": 1,\n \"timeInForce\": \"GTC\"\n },\n {\n \"clientOid\": \"5c52e11203aa677f33e493fc\",\n \"side\": \"buy\",\n \"symbol\": \"XBTUSDTM\",\n \"leverage\": 3,\n \"type\": \"limit\",\n \"remark\": \"order remarks\",\n \"reduceOnly\": false,\n \"marginMode\": \"ISOLATED\",\n \"price\": \"0.1\",\n \"size\": 1,\n \"timeInForce\": \"GTC\"\n }\n]", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "orders", + "multi" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"orderId\": \"235919387779985408\",\n \"clientOid\": \"5c52e11203aa677f33e493fb\",\n \"symbol\": \"XBTUSDTM\",\n \"code\": \"200000\",\n \"msg\": \"success\"\n },\n {\n \"orderId\": \"235919387855482880\",\n \"clientOid\": \"5c52e11203aa677f33e493fc\",\n \"symbol\": \"XBTUSDTM\",\n \"code\": \"200000\",\n \"msg\": \"success\"\n }\n ]\n}" + } + ] + }, + { + "name": "Get Recent Trade History", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "recentFills" + ], + "query": [ + { + "key": "symbol", + "value": "XBTUSDTM", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470249)\n\n:::info[Description]\nGet a list of recent 1000 fills in the last 24 hours. If you need to get your recent traded order history with low latency, you may query this endpoint.\n\nIf you need to get your recent traded order history with low latency, you may query this endpoint.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| tradeId | string | Trade ID
|\n| orderId | string | Order ID
|\n| side | string | Transaction side
|\n| liquidity | string | Liquidity- taker or maker
|\n| forceTaker | boolean | Whether to force processing as a taker
|\n| price | string | Filled price
|\n| size | integer | Filled amount
|\n| value | string | Order value
|\n| openFeePay | string | Opening transaction fee
|\n| closeFeePay | string | Closing transaction fee
|\n| stop | string | A mark to the stop order type
|\n| feeRate | string | Fee Rate |\n| fixFee | string | Fixed fees(Deprecated field, no actual use of the value field)
|\n| feeCurrency | string | Charging currency
|\n| tradeTime | integer | trade time in nanosecond
|\n| subTradeType | string | Deprecated field, no actual use of the value field |\n| marginMode | string | Margin mode: ISOLATED (isolated), CROSS (cross margin).
|\n| displayType | string | Order Type |\n| fee | string | Transaction fee
|\n| settleCurrency | string | Settle Currency |\n| orderType | string | Order type
|\n| tradeType | string | Trade type (trade, liquid, cancel, adl or settlement)
|\n| createdAt | integer | Time the order created
|\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "recentFills" + ], + "query": [ + { + "key": "symbol", + "value": "XBTUSDTM", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"symbol\": \"XBTUSDTM\",\n \"tradeId\": \"1784277229880\",\n \"orderId\": \"236317213710184449\",\n \"side\": \"buy\",\n \"liquidity\": \"taker\",\n \"forceTaker\": false,\n \"price\": \"67430.9\",\n \"size\": 1,\n \"value\": \"67.4309\",\n \"openFeePay\": \"0.04045854\",\n \"closeFeePay\": \"0\",\n \"stop\": \"\",\n \"feeRate\": \"0.00060\",\n \"fixFee\": \"0\",\n \"feeCurrency\": \"USDT\",\n \"marginMode\": \"ISOLATED\",\n \"fee\": \"0.04045854\",\n \"settleCurrency\": \"USDT\",\n \"orderType\": \"market\",\n \"displayType\": \"market\",\n \"tradeType\": \"trade\",\n \"subTradeType\": null,\n \"tradeTime\": 1729155616320000000,\n \"createdAt\": 1729155616493\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"tradeId\": \"1784277132002\",\n \"orderId\": \"236317094436728832\",\n \"side\": \"buy\",\n \"liquidity\": \"taker\",\n \"forceTaker\": false,\n \"price\": \"67445\",\n \"size\": 1,\n \"value\": \"67.445\",\n \"openFeePay\": \"0\",\n \"closeFeePay\": \"0.040467\",\n \"stop\": \"\",\n \"feeRate\": \"0.00060\",\n \"fixFee\": \"0\",\n \"feeCurrency\": \"USDT\",\n \"marginMode\": \"ISOLATED\",\n \"fee\": \"0.040467\",\n \"settleCurrency\": \"USDT\",\n \"orderType\": \"market\",\n \"displayType\": \"market\",\n \"tradeType\": \"trade\",\n \"subTradeType\": null,\n \"tradeTime\": 1729155587944000000,\n \"createdAt\": 1729155588104\n }\n ]\n}" + } + ] + }, + { + "name": "Add Take Profit And Stop Loss Order", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "st-orders" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470237)\n\n:::info[Description]\nPlace take profit and stop loss order supports both take-profit and stop-loss functions, and other functions are exactly the same as the place order interface.\n\nYou can place two types of orders: limit and market. Orders can only be placed if your account has sufficient funds. Once an order is placed, your funds will be put on hold for the duration of the order. The amount of funds on hold depends on the order type and parameters specified.\n\nPlease be noted that the system would hold the fees from the orders entered the orderbook in advance. \n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Unique order id created by users to identify their orders, the maximum length cannot exceed 40, e.g. UUID, Only allows numbers, characters, underline(_), and separator(-) |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| leverage | integer | Used to calculate the margin to be frozen for the order. If you are to close the position, this parameter is not required. |\n| type | string | specify if the order is an 'limit' order or 'market' order |\n| remark | string | remark for the order, length cannot exceed 100 utf8 characters |\n| stopPriceType | string | Either 'TP', 'IP' or 'MP' |\n| reduceOnly | boolean | A mark to reduce the position size only. Set to false by default. Need to set the position size when reduceOnly is true. If set to true, only the orders reducing the position size will be executed. If the reduce-only order size exceeds the position size, the extra size will be canceled. |\n| closeOrder | boolean | A mark to close the position. Set to false by default. If closeOrder is set to true, the system will close the position and the position size will become 0. Side, Size and Leverage fields can be left empty and the system will determine the side and size automatically. |\n| forceHold | boolean | A mark to forcely hold the funds for an order, even though it's an order to reduce the position size. This helps the order stay on the order book and not get canceled when the position size changes. Set to false by default. The system will forcely freeze certain amount of funds for this order, including orders whose direction is opposite to the current positions. This feature is to ensure that the order wonโ€™t be canceled by the matching engine in such a circumstance that not enough funds are frozen for the order. |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. |\n| marginMode | string | Margin mode: ISOLATED, CROSS, default: ISOLATED |\n| price | string | Required for type is 'limit' order, indicating the operating price |\n| size | integer | **Choose one of size, qty, valueQty**, Order size (Lot), must be a positive integer. The quantity unit of coin-swap contracts is size(lot), and other units are not supported. |\n| timeInForce | string | Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/api-338146) is a special strategy used during trading, default is GTC |\n| postOnly | boolean | Optional for type is 'limit' order, post only flag, invalid when timeInForce is IOC. When postOnly is true, not allowed choose hidden or iceberg. The post-only flag ensures that the trader always pays the maker fee and provides liquidity to the order book. If any part of the order is going to pay taker fee, the order will be fully rejected. |\n| hidden | boolean | Optional for type is 'limit' order, orders not displaying in order book. When hidden chose, not allowed choose postOnly. |\n| iceberg | boolean | Optional for type is 'limit' order, Only visible portion of the order is displayed in the order book. When iceberg chose, not allowed choose postOnly. |\n| visibleSize | string | Optional for type is 'limit' order, The maximum visible size of an iceberg order. please place order in size (lots), The units of qty (base currency) and valueQty (value) are not supported. |\n| triggerStopUpPrice | string | Take profit price |\n| triggerStopDownPrice | string | Stop loss price |\n| qty | string | **Choose one of size, qty, valueQty**, Order size (Base currency) must be an integer multiple of the multiplier. The unit of the quantity of coin-swap is size(lot), which is not supported |\n| valueQty | string | **Choose one of size, qty, valueQty**, Order size (Value), USDS-Swap correspond to USDT or USDC. The unit of the quantity of coin-swap is size(lot), which is not supported |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| clientOid | string | The user self-defined order id. |\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"clientOid\": \"5c52e11203aa677f33e493fb\",\n \"side\": \"buy\",\n \"symbol\": \"XBTUSDTM\",\n \"leverage\": 3,\n \"type\": \"limit\",\n \"remark\": \"order remarks\",\n \"reduceOnly\": false,\n \"marginMode\": \"ISOLATED\",\n \"price\": \"0.2\",\n \"size\": 1,\n \"timeInForce\": \"GTC\",\n \"triggerStopUpPrice\": \"0.3\",\n \"triggerStopDownPrice\": \"0.1\",\n \"stopPriceType\": \"TP\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "st-orders" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"orderId\": \"234125150956625920\",\n \"clientOid\": \"5c52e11203aa677f33e493fb\"\n }\n}" + } + ] + }, + { + "name": "Get Open Order Value", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "openOrderStatistics" + ], + "query": [ + { + "key": "symbol", + "value": "XBTUSDTM", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470250)\n\n:::info[Description]\nYou can query this endpoint to get the the total number and value of the all your active orders.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| openOrderBuySize | integer | Total number of the unexecuted buy orders
|\n| openOrderSellSize | integer | Total number of the unexecuted sell orders
|\n| openOrderBuyCost | string | Value of all the unexecuted buy orders
|\n| openOrderSellCost | string | Value of all the unexecuted sell orders
|\n| settleCurrency | string | settlement currency
|\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "openOrderStatistics" + ], + "query": [ + { + "key": "symbol", + "value": "XBTUSDTM", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"openOrderBuySize\": 1,\n \"openOrderSellSize\": 0,\n \"openOrderBuyCost\": \"0.0001\",\n \"openOrderSellCost\": \"0\",\n \"settleCurrency\": \"USDT\"\n }\n}" + } + ] + }, + { + "name": "Add Order Test", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "orders", + "test" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470238)\n\n:::info[Description]\nOrder test endpoint, the request parameters and return parameters of this endpoint are exactly the same as the order endpoint, and can be used to verify whether the signature is correct and other operations. After placing an order, the order will not enter the matching system, and the order cannot be queried.\n:::\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Unique order id created by users to identify their orders, the maximum length cannot exceed 40, e.g. UUID, Only allows numbers, characters, underline(_), and separator(-) |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| leverage | integer | Used to calculate the margin to be frozen for the order. If you are to close the position, this parameter is not required. |\n| type | string | specify if the order is an 'limit' order or 'market' order |\n| remark | string | remark for the order, length cannot exceed 100 utf8 characters |\n| stop | string | Either 'down' or 'up'. If stop is used,parameter stopPrice and stopPriceType also need to be provieded. |\n| stopPriceType | string | Either 'TP', 'IP' or 'MP', Need to be defined if stop is specified. |\n| stopPrice | string | Need to be defined if stop is specified. |\n| reduceOnly | boolean | A mark to reduce the position size only. Set to false by default. Need to set the position size when reduceOnly is true. If set to true, only the orders reducing the position size will be executed. If the reduce-only order size exceeds the position size, the extra size will be canceled. |\n| closeOrder | boolean | A mark to close the position. Set to false by default. If closeOrder is set to true, the system will close the position and the position size will become 0. Side, Size and Leverage fields can be left empty and the system will determine the side and size automatically. |\n| forceHold | boolean | A mark to forcely hold the funds for an order, even though it's an order to reduce the position size. This helps the order stay on the order book and not get canceled when the position size changes. Set to false by default. The system will forcely freeze certain amount of funds for this order, including orders whose direction is opposite to the current positions. This feature is to ensure that the order wonโ€™t be canceled by the matching engine in such a circumstance that not enough funds are frozen for the order. |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. |\n| marginMode | string | Margin mode: ISOLATED, CROSS, default: ISOLATED |\n| price | string | Required for type is 'limit' order, indicating the operating price |\n| size | integer | **Choose one of size, qty, valueQty**, Order size (Lot), must be a positive integer. The quantity unit of coin-swap contracts is size(lot), and other units are not supported. |\n| timeInForce | string | Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/api-338146) is a special strategy used during trading, default is GTC |\n| postOnly | boolean | Optional for type is 'limit' order, post only flag, invalid when timeInForce is IOC. When postOnly is true, not allowed choose hidden or iceberg. The post-only flag ensures that the trader always pays the maker fee and provides liquidity to the order book. If any part of the order is going to pay taker fee, the order will be fully rejected. |\n| hidden | boolean | Optional for type is 'limit' order, orders not displaying in order book. When hidden chose, not allowed choose postOnly. |\n| iceberg | boolean | Optional for type is 'limit' order, Only visible portion of the order is displayed in the order book. When iceberg chose, not allowed choose postOnly. |\n| visibleSize | string | Optional for type is 'limit' order, The maximum visible size of an iceberg order. please place order in size (lots), The units of qty (base currency) and valueQty (value) are not supported. |\n| qty | string | **Choose one of size, qty, valueQty**, Order size (Base currency) must be an integer multiple of the multiplier. The unit of the quantity of coin-swap is size(lot), which is not supported |\n| valueQty | string | **Choose one of size, qty, valueQty**, Order size (Value), USDS-Swap correspond to USDT or USDC. The unit of the quantity of coin-swap is size(lot), which is not supported |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| clientOid | string | The user self-defined order id. |\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"clientOid\": \"5c52e11203aa677f33e493fb\",\n \"side\": \"buy\",\n \"symbol\": \"XBTUSDTM\",\n \"leverage\": 3,\n \"type\": \"limit\",\n \"remark\": \"order remarks\",\n \"reduceOnly\": false,\n \"marginMode\": \"ISOLATED\",\n \"price\": \"0.1\",\n \"size\": 1,\n \"timeInForce\": \"GTC\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "orders", + "test" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"orderId\": \"234125150956625920\",\n \"clientOid\": \"5c52e11203aa677f33e493fb\"\n }\n}" + } + ] + }, + { + "name": "Cancel Order By OrderId", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "orders", + "{{orderId}}" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470239)\n\n:::info[Description]\nCancel an order (including a stop order).\n\nYou will receive success message once the system has received the cancellation request. The cancellation request will be processed by matching engine in sequence. To know if the request has been processed, you may check the order status or update message from the websocket pushes.\n\nThe `orderId` is the server-assigned order id, not the specified clientOid.\n\nIf the order can not be canceled (already filled or previously canceled, etc), then an error response will indicate the reason in the message field.\n:::\n\n**API KEY PERMISSIONS**\nThis endpoint requires the Futures Trading permission.\n\n**REQUEST URL**\nThis endpoint support Futures URL\n\n**REQUEST RATE LIMIT**\nFutures weight๏ผš1\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| cancelledOrderIds | array | Refer to the schema section of cancelledOrderIds |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "orders", + "{{orderId}}" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"cancelledOrderIds\": [\n \"235303670076489728\"\n ]\n }\n}" + } + ] + }, + { + "name": "Cancel Order By ClientOid", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "orders", + "client-order", + "{{clientOid}}" + ], + "query": [ + { + "key": "symbol", + "value": "XBTUSDTM", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470240)\n\n:::info[Description]\nCancel an order (including a stop order).\n\nYou will receive success message once the system has received the cancellation request. The cancellation request will be processed by matching engine in sequence. To know if the request has been processed, you may check the order status or update message from the pushes.\n\nResponse the ID created by the client (clientOid).\n\nIf the order can not be canceled (already filled or previously canceled, etc), then an error response will indicate the reason in the message field.\n:::\n\n**API KEY PERMISSIONS**\nThis endpoint requires the Futures Trading permission.\n\n**REQUEST URL**\nThis endpoint support Futures URL\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "orders", + "client-order", + "{{clientOid}}" + ], + "query": [ + { + "key": "symbol", + "value": "XBTUSDTM", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"clientOid\": \"017485b0-2957-4681-8a14-5d46b35aee0d\"\n }\n}" + } + ] + }, + { + "name": "Batch Cancel Orders", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "orders", + "multi-cancel" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470241)\n\n:::info[Description]\nUsing this endpoint, orders can be canceled in batches, If there are both normal orders and conditional orders with the same clientOid (it is not recommended to use the same clientOrderId), when cancelling orders in batches by clientOid, normal orders will be canceled and conditional orders will be retained.\n\nSupports batch cancellation of orders by orderId or clientOid. When orderIdsList and clientOidsList are used at the same time, orderIdsList shall prevail. A maximum of 10 orders can be canceled at a time.\n\nWhen using orderId to cancel order, the response will return the orderId.\nWhen using clientOid to cancel order, the response will return the clientOid.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderIdsList | array | Refer to the schema section of orderIdsList |\n| clientOidsList | array | Refer to the schema section of clientOidsList |\n\n**root.clientOidsList Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| clientOid | string | |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | |\n| clientOid | string | |\n| code | string | |\n| msg | string | |\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"orderIdsList\":\n [\n \"250445104152670209\",\n \"250445181751463936\"\n ]\n}\n\n\n//{\n// \"clientOidsList\":\n// [\n// {\n// \"symbol\": \"XRPUSDTM\",\n// \"clientOid\": \"5c52e11203aa1677f133e493fb\"\n// },\n// {\n// \"symbol\": \"ETHUSDTM\",\n// \"clientOid\": \"5c52214e112\"\n// }\n// ]\n//}\n", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "orders", + "multi-cancel" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"orderId\": \"250445104152670209\",\n \"clientOid\": null,\n \"code\": \"200\",\n \"msg\": \"success\"\n },\n {\n \"orderId\": \"250445181751463936\",\n \"clientOid\": null,\n \"code\": \"200\",\n \"msg\": \"success\"\n }\n ]\n}\n\n//{\n// \"code\": \"200000\",\n// \"data\": [\n// {\n// \"orderId\": null,\n// \"clientOid\": \"5c52e11203aa1677f133e493fb\",\n// \"code\": \"200\",\n// \"msg\": \"success\"\n// },\n// {\n// \"orderId\": null,\n// \"clientOid\": \"5c52214e112\",\n// \"code\": \"200\",\n// \"msg\": \"success\"\n// }\n// ]\n//}" + } + ] + }, + { + "name": "Cancel All Orders", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v3", + "orders" + ], + "query": [ + { + "key": "symbol", + "value": "XBTUSDTM", + "description": "Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470242)\n\n:::info[Description]\nUsing this endpoint, all open orders (excluding stop orders) can be canceled in batches.\n\nThe response is a list of orderIDs of the canceled orders.\n:::\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| cancelledOrderIds | array | Refer to the schema section of cancelledOrderIds |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v3", + "orders" + ], + "query": [ + { + "key": "symbol", + "value": "XBTUSDTM", + "description": "Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"cancelledOrderIds\": [\n \"235919172150824960\",\n \"235919172150824961\"\n ]\n }\n}" + } + ] + }, + { + "name": "Cancel All Stop orders", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "stopOrders" + ], + "query": [ + { + "key": "symbol", + "value": "XBTUSDTM", + "description": "Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470243)\n\n:::info[Description]\nUsing this endpoint, all untriggered stop orders can be canceled in batches.\n\nSupports batch cancellation of untriggered stop orders by symbol. Cancel all all untriggered stop orders for a specific contract symbol only , If not specified, all the all untriggered stop orders will be canceled.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| cancelledOrderIds | array | Refer to the schema section of cancelledOrderIds |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "stopOrders" + ], + "query": [ + { + "key": "symbol", + "value": "XBTUSDTM", + "description": "Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"cancelledOrderIds\": [\n \"235919172150824960\",\n \"235919172150824961\"\n ]\n }\n}" + } + ] + }, + { + "name": "Get Order List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "orders" + ], + "query": [ + { + "key": "status", + "value": "done", + "description": "active or done, done as default. Only list orders for a specific status" + }, + { + "key": "symbol", + "value": null, + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + }, + { + "key": "side", + "value": null, + "description": "buy or sell" + }, + { + "key": "type", + "value": null, + "description": "limit, market, limit_stop or market_stop" + }, + { + "key": "startAt", + "value": null, + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": null, + "description": "End time (milisecond)" + }, + { + "key": "currentPage", + "value": null, + "description": "Current request page, The default currentPage is 1" + }, + { + "key": "pageSize", + "value": null, + "description": "pageSize, The default pageSize is 50, The maximum cannot exceed 1000" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470244)\n\n:::info[Description]\nList your current orders.\n\nAny limit order on the exchange order book is in active status. Orders removed from the order book will be marked with done status. After an order becomes done, there may be a few milliseconds latency before itโ€™s fully settled.\n\nYou can check the orders in any status. If the status parameter is not specified, orders of done status will be returned by default.\n\nWhen you query orders in active status, there is no time limit. However, when you query orders in done status, the start and end time range cannot exceed 24 * 7 hours. An error will occur if the specified time window exceeds the range. If you specify the end time only, the system will automatically calculate the start time as end time minus 24 hours, and vice versa.\n\n**POLLING**\nFor high-volume trading, it is highly recommended that you maintain your own list of open orders and use one of the streaming market data feeds to keep it updated. You should poll the open orders endpoint to obtain the current state of any open order.\n\nIf you need to get your recent trade history with low latency, you may query the endpoint Get List of Orders Completed in 24h.\n:::\n\n**API KEY PERMISSIONS**\nThis endpoint requires the General permission.\n\n**REQUEST URL**\nThis endpoint support Futures URL\n\n**REQUEST RATE LIMIT**\nFutures weight๏ผš2\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currentPage | integer | Current request page, The default currentPage is 1 |\n| pageSize | integer | pageSize, The default pageSize is 50, The maximum cannot exceed 1000 |\n| totalNum | integer | |\n| totalPage | integer | |\n| items | array | Refer to the schema section of items |\n\n**root.data.items Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | Order ID |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| type | string | Order type, market order or limit order
|\n| side | string | Transaction side |\n| price | string | Order price |\n| size | integer | Order quantity |\n| value | string | Order value |\n| dealValue | string | Executed size of funds
|\n| dealSize | integer | Executed quantity |\n| stp | string | self trade prevention |\n| stop | string | Stop order type (stop limit or stop market) |\n| stopPriceType | string | Trigger price type of stop orders |\n| stopTriggered | boolean | Mark to show whether the stop order is triggered |\n| stopPrice | integer | Trigger price of stop orders |\n| timeInForce | string | Time in force policy type |\n| postOnly | boolean | Mark of post only |\n| hidden | boolean | Mark of the hidden order |\n| iceberg | boolean | Mark of the iceberg order |\n| leverage | string | Leverage of the order |\n| forceHold | boolean | A mark to forcely hold the funds for an order |\n| closeOrder | boolean | A mark to close the position |\n| visibleSize | integer | Visible size of the iceberg order |\n| clientOid | string | Unique order id created by users to identify their orders |\n| remark | string | Remark of the order |\n| tags | string | tag order source |\n| isActive | boolean | Mark of the active orders |\n| cancelExist | boolean | Mark of the canceled orders |\n| createdAt | integer | Time the order created |\n| updatedAt | integer | last update time |\n| endAt | integer | End time |\n| orderTime | integer | Order create time in nanosecond |\n| settleCurrency | string | settlement currency |\n| marginMode | string | Margin mode: ISOLATED (isolated), CROSS (cross margin). |\n| avgDealPrice | string | Average transaction price, forward contract average transaction price = sum (transaction value) / sum (transaction quantity), reverse contract average transaction price = sum (transaction quantity) / sum (transaction value). Transaction quantity = lots * multiplier |\n| status | string | order status: โ€œopenโ€ or โ€œdoneโ€ |\n| filledSize | integer | Value of the executed orders |\n| filledValue | string | Executed order quantity |\n| reduceOnly | boolean | A mark to reduce the position size only |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "orders" + ], + "query": [ + { + "key": "status", + "value": "done", + "description": "active or done, done as default. Only list orders for a specific status" + }, + { + "key": "symbol", + "value": null, + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + }, + { + "key": "side", + "value": null, + "description": "buy or sell" + }, + { + "key": "type", + "value": null, + "description": "limit, market, limit_stop or market_stop" + }, + { + "key": "startAt", + "value": null, + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": null, + "description": "End time (milisecond)" + }, + { + "key": "currentPage", + "value": null, + "description": "Current request page, The default currentPage is 1" + }, + { + "key": "pageSize", + "value": null, + "description": "pageSize, The default pageSize is 50, The maximum cannot exceed 1000" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"currentPage\": 1,\n \"pageSize\": 50,\n \"totalNum\": 1,\n \"totalPage\": 1,\n \"items\": [\n {\n \"id\": \"230181737576050688\",\n \"symbol\": \"PEOPLEUSDTM\",\n \"type\": \"limit\",\n \"side\": \"buy\",\n \"price\": \"0.05\",\n \"size\": 10,\n \"value\": \"5\",\n \"dealValue\": \"0\",\n \"dealSize\": 0,\n \"stp\": \"\",\n \"stop\": \"\",\n \"stopPriceType\": \"\",\n \"stopTriggered\": false,\n \"stopPrice\": null,\n \"timeInForce\": \"GTC\",\n \"postOnly\": false,\n \"hidden\": false,\n \"iceberg\": false,\n \"leverage\": \"1\",\n \"forceHold\": false,\n \"closeOrder\": false,\n \"visibleSize\": 0,\n \"clientOid\": \"5a80bd847f1811ef8a7faa665a37b3d7\",\n \"remark\": null,\n \"tags\": \"\",\n \"isActive\": true,\n \"cancelExist\": false,\n \"createdAt\": 1727692804813,\n \"updatedAt\": 1727692804813,\n \"endAt\": null,\n \"orderTime\": 1727692804808418000,\n \"settleCurrency\": \"USDT\",\n \"marginMode\": \"ISOLATED\",\n \"avgDealPrice\": \"0\",\n \"filledSize\": 0,\n \"filledValue\": \"0\",\n \"status\": \"open\",\n \"reduceOnly\": false\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Get Order By OrderId", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "orders", + "{{order-id}}" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470245)\n\n:::info[Description]\nGet a single order by order id (including a stop order).\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | Order ID |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| type | string | Order type, market order or limit order |\n| side | string | Transaction side |\n| price | string | Order price |\n| size | integer | Order quantity |\n| value | string | Order value
|\n| dealValue | string | Executed size of funds
|\n| dealSize | integer | Executed quantity
|\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. |\n| stop | string | Stop order type (stop limit or stop market)
|\n| stopPriceType | string | Trigger price type of stop orders |\n| stopTriggered | boolean | Mark to show whether the stop order is triggered |\n| stopPrice | number | Trigger price of stop orders |\n| timeInForce | string | Time in force policy type
|\n| postOnly | boolean | Mark of post only
|\n| hidden | boolean | Mark of the hidden order
|\n| iceberg | boolean | Mark of the iceberg order
|\n| leverage | string | Leverage of the order
|\n| forceHold | boolean | A mark to forcely hold the funds for an order
|\n| closeOrder | boolean | A mark to close the position
|\n| visibleSize | integer | Visible size of the iceberg order
|\n| clientOid | string | Unique order id created by users to identify their orders
|\n| remark | string | Remark |\n| tags | string | tag order source
|\n| isActive | boolean | Mark of the active orders
|\n| cancelExist | boolean | Mark of the canceled orders
|\n| createdAt | integer | Time the order created
|\n| updatedAt | integer | last update time
|\n| endAt | integer | Order Endtime |\n| orderTime | integer | Order create time in nanosecond
|\n| settleCurrency | string | settlement currency
|\n| marginMode | string | Margin mode: ISOLATED (isolated), CROSS (cross margin).
|\n| avgDealPrice | string | Average transaction price, forward contract average transaction price = sum (transaction value) / sum (transaction quantity), reverse contract average transaction price = sum (transaction quantity) / sum (transaction value). Transaction quantity = lots * multiplier
|\n| filledSize | integer | Value of the executed orders
|\n| filledValue | string | Executed order quantity
|\n| status | string | order status: โ€œopenโ€ or โ€œdoneโ€
|\n| reduceOnly | boolean | A mark to reduce the position size only
|\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "orders", + "{{order-id}}" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"id\": \"236655147005071361\",\n \"symbol\": \"XBTUSDTM\",\n \"type\": \"limit\",\n \"side\": \"buy\",\n \"price\": \"0.1\",\n \"size\": 1,\n \"value\": \"0.0001\",\n \"dealValue\": \"0\",\n \"dealSize\": 0,\n \"stp\": \"\",\n \"stop\": \"\",\n \"stopPriceType\": \"\",\n \"stopTriggered\": false,\n \"stopPrice\": null,\n \"timeInForce\": \"GTC\",\n \"postOnly\": false,\n \"hidden\": false,\n \"iceberg\": false,\n \"leverage\": \"3\",\n \"forceHold\": false,\n \"closeOrder\": false,\n \"visibleSize\": 0,\n \"clientOid\": \"5c52e11203aa677f33e493fb\",\n \"remark\": null,\n \"tags\": \"\",\n \"isActive\": true,\n \"cancelExist\": false,\n \"createdAt\": 1729236185949,\n \"updatedAt\": 1729236185949,\n \"endAt\": null,\n \"orderTime\": 1729236185885647952,\n \"settleCurrency\": \"USDT\",\n \"marginMode\": \"ISOLATED\",\n \"avgDealPrice\": \"0\",\n \"filledSize\": 0,\n \"filledValue\": \"0\",\n \"status\": \"open\",\n \"reduceOnly\": false\n }\n}" + } + ] + }, + { + "name": "Get Order By ClientOid", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "orders", + "byClientOid" + ], + "query": [ + { + "key": "clientOid", + "value": "5c52e11203aa677f33e493fb", + "description": "The user self-defined order id." + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470352)\n\n:::info[Description]\nGet a single order by client order id (including a stop order).\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | Order ID |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| type | string | Order type, market order or limit order |\n| side | string | Transaction side |\n| price | string | Order price |\n| size | integer | Order quantity |\n| value | string | Order value
|\n| dealValue | string | Executed size of funds
|\n| dealSize | integer | Executed quantity
|\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. |\n| stop | string | Stop order type (stop limit or stop market)
|\n| stopPriceType | string | Trigger price type of stop orders |\n| stopTriggered | boolean | Mark to show whether the stop order is triggered |\n| stopPrice | number | Trigger price of stop orders |\n| timeInForce | string | Time in force policy type
|\n| postOnly | boolean | Mark of post only
|\n| hidden | boolean | Mark of the hidden order
|\n| iceberg | boolean | Mark of the iceberg order
|\n| leverage | string | Leverage of the order
|\n| forceHold | boolean | A mark to forcely hold the funds for an order
|\n| closeOrder | boolean | A mark to close the position
|\n| visibleSize | integer | Visible size of the iceberg order
|\n| clientOid | string | Unique order id created by users to identify their orders
|\n| remark | string | Remark |\n| tags | string | tag order source
|\n| isActive | boolean | Mark of the active orders
|\n| cancelExist | boolean | Mark of the canceled orders
|\n| createdAt | integer | Time the order created
|\n| updatedAt | integer | last update time
|\n| endAt | integer | Order Endtime |\n| orderTime | integer | Order create time in nanosecond
|\n| settleCurrency | string | settlement currency
|\n| marginMode | string | Margin mode: ISOLATED (isolated), CROSS (cross margin).
|\n| avgDealPrice | string | Average transaction price, forward contract average transaction price = sum (transaction value) / sum (transaction quantity), reverse contract average transaction price = sum (transaction quantity) / sum (transaction value). Transaction quantity = lots * multiplier
|\n| filledSize | integer | Value of the executed orders
|\n| filledValue | string | Executed order quantity
|\n| status | string | order status: โ€œopenโ€ or โ€œdoneโ€
|\n| reduceOnly | boolean | A mark to reduce the position size only
|\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "orders", + "byClientOid" + ], + "query": [ + { + "key": "clientOid", + "value": "5c52e11203aa677f33e493fb", + "description": "The user self-defined order id." + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"id\": \"250444645610336256\",\n \"symbol\": \"XRPUSDTM\",\n \"type\": \"limit\",\n \"side\": \"buy\",\n \"price\": \"0.1\",\n \"size\": 1,\n \"value\": \"1\",\n \"dealValue\": \"0\",\n \"dealSize\": 0,\n \"stp\": \"\",\n \"stop\": \"\",\n \"stopPriceType\": \"\",\n \"stopTriggered\": false,\n \"stopPrice\": null,\n \"timeInForce\": \"GTC\",\n \"postOnly\": false,\n \"hidden\": false,\n \"iceberg\": false,\n \"leverage\": \"3\",\n \"forceHold\": false,\n \"closeOrder\": false,\n \"visibleSize\": 0,\n \"clientOid\": \"5c52e11203aa677f33e493fb\",\n \"remark\": null,\n \"tags\": \"\",\n \"isActive\": true,\n \"cancelExist\": false,\n \"createdAt\": 1732523858568,\n \"updatedAt\": 1732523858568,\n \"endAt\": null,\n \"orderTime\": 1732523858550892322,\n \"settleCurrency\": \"USDT\",\n \"marginMode\": \"ISOLATED\",\n \"avgDealPrice\": \"0\",\n \"filledSize\": 0,\n \"filledValue\": \"0\",\n \"status\": \"open\",\n \"reduceOnly\": false\n }\n}" + } + ] + }, + { + "name": "Get Recent Closed Orders", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "recentDoneOrders" + ], + "query": [ + { + "key": "symbol", + "value": "XBTUSDTM", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470246)\n\n:::info[Description]\nGet a list of recent 1000 closed orders in the last 24 hours.\n\nIf you need to get your recent traded order history with low latency, you may query this endpoint.\n\n\nAny limit order on the exchange order book is in active status. Orders removed from the order book will be marked with done status. After an order becomes done, there may be a few milliseconds latency before itโ€™s fully settled.\n\nYou can check the orders in any status. If the status parameter is not specified, orders of done status will be returned by default.\n\nWhen you query orders in active status, there is no time limit. However, when you query orders in done status, the start and end time range cannot exceed 24*7 hours. An error will occur if the specified time window exceeds the range. If you specify the end time only, the system will automatically calculate the start time as end time minus 24 hours, and vice versa.\n\n**POLLING**\nFor high-volume trading, it is highly recommended that you maintain your own list of open orders and use one of the streaming market data feeds to keep it updated. You should poll the open orders endpoint to obtain the current state of any open order.\n\nIf you need to get your recent trade history with low latency, you may query the endpoint Get List of Orders Completed in 24h.\n:::\n\n**API KEY PERMISSIONS**\nThis endpoint requires the General permission.\n\n**REQUEST URL**\nThis endpoint support Futures URL\n\n**REQUEST RATE LIMIT**\nFutures weight๏ผš2\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | Order ID |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| type | string | Order type, market order or limit order |\n| side | string | Transaction side |\n| price | string | Order price |\n| size | integer | Order quantity |\n| value | string | Order value
|\n| dealValue | string | Executed size of funds
|\n| dealSize | integer | Executed quantity
|\n| stp | string | self trade prevention |\n| stop | string | Stop order type (stop limit or stop market)
|\n| stopPriceType | string | Trigger price type of stop orders
|\n| stopTriggered | boolean | Mark to show whether the stop order is triggered |\n| stopPrice | integer | Trigger price of stop orders
|\n| timeInForce | string | Time in force policy type
|\n| postOnly | boolean | Mark of post only
|\n| hidden | boolean | Mark of the hidden order
|\n| iceberg | boolean | Mark of the iceberg order
|\n| leverage | string | Leverage of the order
|\n| forceHold | boolean | A mark to forcely hold the funds for an order
|\n| closeOrder | boolean | A mark to close the position
|\n| visibleSize | integer | Visible size of the iceberg order
|\n| clientOid | string | Unique order id created by users to identify their orders
|\n| remark | string | Remark of the order
|\n| tags | string | tag order source
|\n| isActive | boolean | Mark of the active orders
|\n| cancelExist | boolean | Mark of the canceled orders
|\n| createdAt | integer | Time the order created
|\n| updatedAt | integer | last update time
|\n| endAt | integer | End time
|\n| orderTime | integer | Order create time in nanosecond
|\n| settleCurrency | string | settlement currency
|\n| marginMode | string | Margin mode: ISOLATED (isolated), CROSS (cross margin).
|\n| avgDealPrice | string | Average transaction price, forward contract average transaction price = sum (transaction value) / sum (transaction quantity), reverse contract average transaction price = sum (transaction quantity) / sum (transaction value). Transaction quantity = lots * multiplier
|\n| filledSize | integer | Value of the executed orders
|\n| filledValue | string | Executed order quantity
|\n| status | string | order status: โ€œopenโ€ or โ€œdoneโ€
|\n| reduceOnly | boolean | A mark to reduce the position size only
|\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "recentDoneOrders" + ], + "query": [ + { + "key": "symbol", + "value": "XBTUSDTM", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"id\": \"236387137732231168\",\n \"symbol\": \"XRPUSDTM\",\n \"type\": \"market\",\n \"side\": \"buy\",\n \"price\": \"0\",\n \"size\": 1,\n \"value\": \"5.51\",\n \"dealValue\": \"5.511\",\n \"dealSize\": 1,\n \"stp\": \"\",\n \"stop\": \"\",\n \"stopPriceType\": \"\",\n \"stopTriggered\": false,\n \"stopPrice\": null,\n \"timeInForce\": \"GTC\",\n \"postOnly\": false,\n \"hidden\": false,\n \"iceberg\": false,\n \"leverage\": \"10.0\",\n \"forceHold\": false,\n \"closeOrder\": false,\n \"visibleSize\": 0,\n \"clientOid\": \"16698fe6-2746-4aeb-a7fa-61f633ab6090\",\n \"remark\": null,\n \"tags\": \"\",\n \"isActive\": false,\n \"cancelExist\": false,\n \"createdAt\": 1729172287496,\n \"updatedAt\": 1729172287568,\n \"endAt\": 1729172287568,\n \"orderTime\": 1729172287496950800,\n \"settleCurrency\": \"USDT\",\n \"marginMode\": \"ISOLATED\",\n \"avgDealPrice\": \"0.5511\",\n \"filledSize\": 1,\n \"filledValue\": \"5.511\",\n \"status\": \"done\",\n \"reduceOnly\": false\n },\n {\n \"id\": \"236317213710184449\",\n \"symbol\": \"XBTUSDTM\",\n \"type\": \"market\",\n \"side\": \"buy\",\n \"price\": \"0\",\n \"size\": 1,\n \"value\": \"67.4309\",\n \"dealValue\": \"67.4309\",\n \"dealSize\": 1,\n \"stp\": \"\",\n \"stop\": \"\",\n \"stopPriceType\": \"\",\n \"stopTriggered\": false,\n \"stopPrice\": null,\n \"timeInForce\": \"GTC\",\n \"postOnly\": false,\n \"hidden\": false,\n \"iceberg\": false,\n \"leverage\": \"3\",\n \"forceHold\": false,\n \"closeOrder\": false,\n \"visibleSize\": 0,\n \"clientOid\": \"5c52e11203aa677f33e493fb\",\n \"remark\": null,\n \"tags\": \"\",\n \"isActive\": false,\n \"cancelExist\": false,\n \"createdAt\": 1729155616310,\n \"updatedAt\": 1729155616324,\n \"endAt\": 1729155616324,\n \"orderTime\": 1729155616310180400,\n \"settleCurrency\": \"USDT\",\n \"marginMode\": \"ISOLATED\",\n \"avgDealPrice\": \"67430.9\",\n \"filledSize\": 1,\n \"filledValue\": \"67.4309\",\n \"status\": \"done\",\n \"reduceOnly\": false\n },\n {\n \"id\": \"236317094436728832\",\n \"symbol\": \"XBTUSDTM\",\n \"type\": \"market\",\n \"side\": \"buy\",\n \"price\": \"0\",\n \"size\": 1,\n \"value\": \"67.445\",\n \"dealValue\": \"67.445\",\n \"dealSize\": 1,\n \"stp\": \"\",\n \"stop\": \"\",\n \"stopPriceType\": \"\",\n \"stopTriggered\": false,\n \"stopPrice\": null,\n \"timeInForce\": \"GTC\",\n \"postOnly\": false,\n \"hidden\": false,\n \"iceberg\": false,\n \"leverage\": \"3\",\n \"forceHold\": false,\n \"closeOrder\": false,\n \"visibleSize\": 0,\n \"clientOid\": \"5c52e11203aa677f33e493fb\",\n \"remark\": null,\n \"tags\": \"\",\n \"isActive\": false,\n \"cancelExist\": false,\n \"createdAt\": 1729155587873,\n \"updatedAt\": 1729155587946,\n \"endAt\": 1729155587946,\n \"orderTime\": 1729155587873332000,\n \"settleCurrency\": \"USDT\",\n \"marginMode\": \"ISOLATED\",\n \"avgDealPrice\": \"67445.0\",\n \"filledSize\": 1,\n \"filledValue\": \"67.445\",\n \"status\": \"done\",\n \"reduceOnly\": false\n }\n ]\n}" + } + ] + }, + { + "name": "Get Stop Order List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "stopOrders" + ], + "query": [ + { + "key": "symbol", + "value": "XBTUSDTM", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + }, + { + "key": "side", + "value": null, + "description": "buy or sell" + }, + { + "key": "type", + "value": null, + "description": "limit, market" + }, + { + "key": "startAt", + "value": null, + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": null, + "description": "End time (milisecond)" + }, + { + "key": "currentPage", + "value": null, + "description": "Current request page, The default currentPage is 1" + }, + { + "key": "pageSize", + "value": null, + "description": "pageSize, The default pageSize is 50, The maximum cannot exceed 1000" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470247)\n\n:::info[Description]\nGet the un-triggered stop orders list. Stop orders that have been triggered can be queried through the general order interface\n:::\n\nAny limit order on the exchange order book is in active status. Orders removed from the order book will be marked with done status. After an order becomes done, there may be a few milliseconds latency before itโ€™s fully settled.\n\nYou can check the orders in any status. If the status parameter is not specified, orders of done status will be returned by default.\n\nWhen you query orders in active status, there is no time limit. However, when you query orders in done status, the start and end time range cannot exceed 24*7 hours. An error will occur if the specified time window exceeds the range. If you specify the end time only, the system will automatically calculate the start time as end time minus 24 hours, and vice versa.\n\nPOLLING\nFor high-volume trading, it is highly recommended that you maintain your own list of open orders and use one of the streaming market data feeds to keep it updated. You should poll the open orders endpoint to obtain the current state of any open order.\n\nIf you need to get your recent trade history with low latency, you may query the endpoint Get List of Orders Completed in 24h.\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currentPage | integer | Current request page, The default currentPage is 1 |\n| pageSize | integer | pageSize, The default pageSize is 50, The maximum cannot exceed 1000 |\n| totalNum | integer | |\n| totalPage | integer | |\n| items | array | Refer to the schema section of items |\n\n**root.data.items Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | Order ID |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| type | string | Order type, market order or limit order
|\n| side | string | Transaction side |\n| price | string | Order price |\n| size | integer | Order quantity |\n| value | string | Order value |\n| dealValue | string | Executed size of funds
|\n| dealSize | integer | Executed quantity |\n| stp | string | self trade prevention |\n| stop | string | Stop order type (stop limit or stop market) |\n| stopPriceType | string | Trigger price type of stop orders |\n| stopTriggered | boolean | Mark to show whether the stop order is triggered |\n| stopPrice | string | Trigger price of stop orders |\n| timeInForce | string | Time in force policy type |\n| postOnly | boolean | Mark of post only |\n| hidden | boolean | Mark of the hidden order |\n| iceberg | boolean | Mark of the iceberg order |\n| leverage | string | Leverage of the order |\n| forceHold | boolean | A mark to forcely hold the funds for an order |\n| closeOrder | boolean | A mark to close the position |\n| visibleSize | integer | Visible size of the iceberg order |\n| clientOid | string | Unique order id created by users to identify their orders |\n| remark | string | Remark of the order |\n| tags | string | tag order source |\n| isActive | boolean | Mark of the active orders |\n| cancelExist | boolean | Mark of the canceled orders |\n| createdAt | integer | Time the order created |\n| updatedAt | integer | last update time |\n| endAt | integer | End time |\n| orderTime | integer | Order create time in nanosecond |\n| settleCurrency | string | settlement currency |\n| marginMode | string | Margin mode: ISOLATED (isolated), CROSS (cross margin). |\n| avgDealPrice | string | Average transaction price, forward contract average transaction price = sum (transaction value) / sum (transaction quantity), reverse contract average transaction price = sum (transaction quantity) / sum (transaction value). Transaction quantity = lots * multiplier |\n| filledSize | integer | Value of the executed orders |\n| filledValue | string | Executed order quantity |\n| status | string | order status: โ€œopenโ€ or โ€œdoneโ€ |\n| reduceOnly | boolean | A mark to reduce the position size only |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "stopOrders" + ], + "query": [ + { + "key": "symbol", + "value": "XBTUSDTM", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + }, + { + "key": "side", + "value": null, + "description": "buy or sell" + }, + { + "key": "type", + "value": null, + "description": "limit, market" + }, + { + "key": "startAt", + "value": null, + "description": "Start time (milisecond)" + }, + { + "key": "endAt", + "value": null, + "description": "End time (milisecond)" + }, + { + "key": "currentPage", + "value": null, + "description": "Current request page, The default currentPage is 1" + }, + { + "key": "pageSize", + "value": null, + "description": "pageSize, The default pageSize is 50, The maximum cannot exceed 1000" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"currentPage\": 1,\n \"pageSize\": 50,\n \"totalNum\": 1,\n \"totalPage\": 1,\n \"items\": [\n {\n \"id\": \"230181737576050688\",\n \"symbol\": \"PEOPLEUSDTM\",\n \"type\": \"limit\",\n \"side\": \"buy\",\n \"price\": \"0.05\",\n \"size\": 10,\n \"value\": \"5\",\n \"dealValue\": \"0\",\n \"dealSize\": 0,\n \"stp\": \"\",\n \"stop\": \"\",\n \"stopPriceType\": \"\",\n \"stopTriggered\": false,\n \"stopPrice\": null,\n \"timeInForce\": \"GTC\",\n \"postOnly\": false,\n \"hidden\": false,\n \"iceberg\": false,\n \"leverage\": \"1\",\n \"forceHold\": false,\n \"closeOrder\": false,\n \"visibleSize\": 0,\n \"clientOid\": \"5a80bd847f1811ef8a7faa665a37b3d7\",\n \"remark\": null,\n \"tags\": \"\",\n \"isActive\": true,\n \"cancelExist\": false,\n \"createdAt\": 1727692804813,\n \"updatedAt\": 1727692804813,\n \"endAt\": null,\n \"orderTime\": 1727692804808418000,\n \"settleCurrency\": \"USDT\",\n \"marginMode\": \"ISOLATED\",\n \"avgDealPrice\": \"0\",\n \"filledSize\": 0,\n \"filledValue\": \"0\",\n \"status\": \"open\",\n \"reduceOnly\": false\n }\n ]\n }\n}" + } + ] + } + ], + "description": "" + }, + { + "name": "Positions", + "item": [ + { + "name": "Get Max Open Size", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v2", + "getMaxOpenSize" + ], + "query": [ + { + "key": "symbol", + "value": null, + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + }, + { + "key": "price", + "value": null, + "description": "Order price\n" + }, + { + "key": "leverage", + "value": null, + "description": "Leverage\n" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470251)\n\n:::info[Description]\nGet Maximum Open Position Size.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| maxBuyOpenSize | integer | Maximum buy size
|\n| maxSellOpenSize | integer | Maximum buy size
|\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v2", + "getMaxOpenSize" + ], + "query": [ + { + "key": "symbol", + "value": null, + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + }, + { + "key": "price", + "value": null, + "description": "Order price\n" + }, + { + "key": "leverage", + "value": null, + "description": "Leverage\n" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"symbol\": \"XBTUSDTM\",\n \"maxBuyOpenSize\": 0,\n \"maxSellOpenSize\": 0\n }\n}" + } + ] + }, + { + "name": "Get Isolated Margin Risk Limit", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "contracts", + "risk-limit", + "{{symbol}}" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470263)\n\n:::info[Description]\nThis interface can be used to obtain information about risk limit level of a specific contract(Only valid for isolated Margin).\n:::\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| level | integer | level
|\n| maxRiskLimit | integer | Upper limit USDT(includes)
|\n| minRiskLimit | integer | Lower limit USDT
|\n| maxLeverage | integer | Max leverage
|\n| initialMargin | number | Initial margin rate
|\n| maintainMargin | number | Maintenance margin rate
|\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "contracts", + "risk-limit", + "{{symbol}}" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"symbol\": \"XBTUSDTM\",\n \"level\": 1,\n \"maxRiskLimit\": 100000,\n \"minRiskLimit\": 0,\n \"maxLeverage\": 125,\n \"initialMargin\": 0.008,\n \"maintainMargin\": 0.004\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"level\": 2,\n \"maxRiskLimit\": 500000,\n \"minRiskLimit\": 100000,\n \"maxLeverage\": 100,\n \"initialMargin\": 0.01,\n \"maintainMargin\": 0.005\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"level\": 3,\n \"maxRiskLimit\": 1000000,\n \"minRiskLimit\": 500000,\n \"maxLeverage\": 75,\n \"initialMargin\": 0.014,\n \"maintainMargin\": 0.007\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"level\": 4,\n \"maxRiskLimit\": 2000000,\n \"minRiskLimit\": 1000000,\n \"maxLeverage\": 50,\n \"initialMargin\": 0.02,\n \"maintainMargin\": 0.01\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"level\": 5,\n \"maxRiskLimit\": 3000000,\n \"minRiskLimit\": 2000000,\n \"maxLeverage\": 30,\n \"initialMargin\": 0.034,\n \"maintainMargin\": 0.017\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"level\": 6,\n \"maxRiskLimit\": 5000000,\n \"minRiskLimit\": 3000000,\n \"maxLeverage\": 20,\n \"initialMargin\": 0.05,\n \"maintainMargin\": 0.025\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"level\": 7,\n \"maxRiskLimit\": 8000000,\n \"minRiskLimit\": 5000000,\n \"maxLeverage\": 10,\n \"initialMargin\": 0.1,\n \"maintainMargin\": 0.05\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"level\": 8,\n \"maxRiskLimit\": 12000000,\n \"minRiskLimit\": 8000000,\n \"maxLeverage\": 5,\n \"initialMargin\": 0.2,\n \"maintainMargin\": 0.1\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"level\": 9,\n \"maxRiskLimit\": 20000000,\n \"minRiskLimit\": 12000000,\n \"maxLeverage\": 4,\n \"initialMargin\": 0.25,\n \"maintainMargin\": 0.125\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"level\": 10,\n \"maxRiskLimit\": 30000000,\n \"minRiskLimit\": 20000000,\n \"maxLeverage\": 3,\n \"initialMargin\": 0.334,\n \"maintainMargin\": 0.167\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"level\": 11,\n \"maxRiskLimit\": 40000000,\n \"minRiskLimit\": 30000000,\n \"maxLeverage\": 2,\n \"initialMargin\": 0.5,\n \"maintainMargin\": 0.25\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"level\": 12,\n \"maxRiskLimit\": 50000000,\n \"minRiskLimit\": 40000000,\n \"maxLeverage\": 1,\n \"initialMargin\": 1.0,\n \"maintainMargin\": 0.5\n }\n ]\n}" + } + ] + }, + { + "name": "Get Position Details", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "position" + ], + "query": [ + { + "key": "symbol", + "value": null, + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470252)\n\n:::info[Description]\nGet the position details of a specified position.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | Position ID
|\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| crossMode | boolean | Whether it is cross margin. |\n| delevPercentage | number | ADL ranking percentile
|\n| openingTimestamp | integer | Open time
|\n| currentTimestamp | integer | Current timestamp
|\n| currentQty | integer | Current postion quantity
|\n| currentCost | number | Current postion value
|\n| currentComm | number | Current commission
|\n| unrealisedCost | number | Unrealised value
|\n| realisedGrossCost | number | Accumulated realised gross profit value
|\n| realisedCost | number | Current realised position value
|\n| isOpen | boolean | Opened position or not
|\n| markPrice | number | Mark price
|\n| markValue | number | Mark Value
|\n| posCost | number | Position value
|\n| posInit | number | Inital margin Cross = opening value/cross leverage; isolated = accumulation of initial margin for each transaction
|\n| posMargin | number | Bankruptcy cost Cross = mark value * imr; Isolated = position margin (accumulation of initial margin, additional margin, generated funding fees, etc.)
|\n| realisedGrossPnl | number | Accumulated realised gross profit value
|\n| realisedPnl | number | Realised profit and loss
|\n| unrealisedPnl | number | Unrealised profit and loss
|\n| unrealisedPnlPcnt | number | Profit-loss ratio of the position
|\n| unrealisedRoePcnt | number | Rate of return on investment
|\n| avgEntryPrice | number | Average entry price
|\n| liquidationPrice | number | Liquidation price For Cross Margin, you can refer to the liquidationPrice, and the liquidation is based on the risk rate.
|\n| bankruptPrice | number | Bankruptcy price For Cross Margin, you can refer to the bankruptPrice, and the liquidation is based on the risk rate.
|\n| settleCurrency | string | Currency used to clear and settle the trades
|\n| isInverse | boolean | Reverse contract or not
|\n| marginMode | string | Margin Mode: CROSS๏ผŒISOLATED
|\n| positionSide | string | Position Side
|\n| leverage | number | Leverage |\n| autoDeposit | boolean | Auto deposit margin or not **Only applicable to Isolated Margin**
|\n| maintMarginReq | number | Maintenance margin requirement **Only applicable to Isolated Margin**
|\n| riskLimit | integer | Risk limit **Only applicable to Isolated Margin**
|\n| realLeverage | number | Leverage of the order **Only applicable to Isolated Margin**
|\n| posCross | number | added margin **Only applicable to Isolated Margin**
|\n| posCrossMargin | integer | Additional margin calls (automatic, manual, adjusted risk limits) **Only applicable to Isolated Margin**
|\n| posComm | number | Bankruptcy cost **Only applicable to Isolated Margin**
|\n| posCommCommon | number | Part of bankruptcy cost (positioning, add margin) **Only applicable to Isolated Margin**
|\n| posLoss | number | Funding fees paid out **Only applicable to Isolated Margin**
|\n| posFunding | number | The current remaining unsettled funding fee for the position **Only applicable to Isolated Margin**
|\n| posMaint | number | Maintenance margin **Only applicable to Isolated Margin**
|\n| maintMargin | number | Position margin **Only applicable to Isolated Margin**
|\n| maintainMargin | number | Maintenance margin rate **Only applicable to Isolated Margin**
|\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "position" + ], + "query": [ + { + "key": "symbol", + "value": null, + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "//ISOLATED MARGIN\n{\n \"code\": \"200000\",\n \"data\": {\n \"id\": \"500000000000988255\",\n \"symbol\": \"XBTUSDTM\",\n \"autoDeposit\": false,\n \"crossMode\": false,\n \"maintMarginReq\": 0.005,\n \"riskLimit\": 500000,\n \"realLeverage\": 2.88,\n \"delevPercentage\": 0.18,\n \"openingTimestamp\": 1729155616322,\n \"currentTimestamp\": 1729482542135,\n \"currentQty\": 1,\n \"currentCost\": 67.4309,\n \"currentComm\": 0.01925174,\n \"unrealisedCost\": 67.4309,\n \"realisedGrossCost\": 0.0,\n \"realisedCost\": 0.01925174,\n \"isOpen\": true,\n \"markPrice\": 68900.7,\n \"markValue\": 68.9007,\n \"posCost\": 67.4309,\n \"posCross\": 0.01645214,\n \"posCrossMargin\": 0,\n \"posInit\": 22.4769666644,\n \"posComm\": 0.0539546299,\n \"posCommCommon\": 0.0539447199,\n \"posLoss\": 0.03766885,\n \"posMargin\": 22.5097045843,\n \"posFunding\": -0.0212068,\n \"posMaint\": 0.3931320569,\n \"maintMargin\": 23.9795045843,\n \"realisedGrossPnl\": 0.0,\n \"realisedPnl\": -0.06166534,\n \"unrealisedPnl\": 1.4698,\n \"unrealisedPnlPcnt\": 0.0218,\n \"unrealisedRoePcnt\": 0.0654,\n \"avgEntryPrice\": 67430.9,\n \"liquidationPrice\": 45314.33,\n \"bankruptPrice\": 44975.16,\n \"settleCurrency\": \"USDT\",\n \"maintainMargin\": 0.005,\n \"riskLimitLevel\": 2,\n \"marginMode\": \"ISOLATED\",\n \"positionSide\": \"BOTH\",\n \"leverage\": 2.88\n }\n}\n\n//CROSS MARGIN\n//{\n// \"code\": \"200000\",\n// \"data\": {\n// \"id\": \"500000000001046430\",\n// \"symbol\": \"ETHUSDM\",\n// \"crossMode\": true,\n// \"delevPercentage\": 0.71,\n// \"openingTimestamp\": 1730635780702,\n// \"currentTimestamp\": 1730636040926,\n// \"currentQty\": 1,\n// \"currentCost\": -0.0004069805,\n// \"currentComm\": 2.441e-7,\n// \"unrealisedCost\": -0.0004069805,\n// \"realisedGrossCost\": 0,\n// \"realisedCost\": 2.441e-7,\n// \"isOpen\": true,\n// \"markPrice\": 2454.12,\n// \"markValue\": -0.000407478,\n// \"posCost\": -0.0004069805,\n// \"posInit\": 0.0000406981,\n// \"posMargin\": 0.0000407478,\n// \"realisedGrossPnl\": 0,\n// \"realisedPnl\": -2.441e-7,\n// \"unrealisedPnl\": -4.975e-7,\n// \"unrealisedPnlPcnt\": -0.0012,\n// \"unrealisedRoePcnt\": -0.0122,\n// \"avgEntryPrice\": 2457.12,\n// \"liquidationPrice\": 1429.96,\n// \"bankruptPrice\": 1414.96,\n// \"settleCurrency\": \"ETH\",\n// \"isInverse\": true,\n// \"marginMode\": \"CROSS\",\n// \"positionSide\": \"BOTH\",\n// \"leverage\": 10\n// }\n//}" + } + ] + }, + { + "name": "Modify Isolated Margin Risk Limit", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "position", + "risk-limit-level", + "change" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470264)\n\n:::info[Description]\nThis interface is for the adjustment of the risk limit level(Only valid for isolated Margin). To adjust the level will cancel the open order, the response can only indicate whether the submit of the adjustment request is successful or not. The result of the adjustment can be achieved by WebSocket information: Position Change Events\n\n:::\n\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| level | integer | level |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | boolean | To adjust the level will cancel the open order, the response can only indicate whether the submit of the adjustment request is successful or not.
|\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"symbol\" : \"XBTUSDTM\",\n \"level\" : 2\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "position", + "risk-limit-level", + "change" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": true\n}" + } + ] + }, + { + "name": "Get Position List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "positions" + ], + "query": [ + { + "key": "currency", + "value": null, + "description": "Currency code, Please refer to [rootSymbol](https://www.kucoin.com/docs-new/api-221752070) , such as USDT,XBT. Query all positions when empty" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470253)\n\n:::info[Description]\nGet the position details of a specified position.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | Position ID
|\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| crossMode | boolean | Whether it is cross margin. |\n| delevPercentage | number | ADL ranking percentile
|\n| openingTimestamp | integer | Open time
|\n| currentTimestamp | integer | Current timestamp
|\n| currentQty | integer | Current postion quantity
|\n| currentCost | number | Current postion value
|\n| currentComm | number | Current commission
|\n| unrealisedCost | number | Unrealised value
|\n| realisedGrossCost | number | Accumulated realised gross profit value
|\n| realisedCost | number | Current realised position value
|\n| isOpen | boolean | Opened position or not
|\n| markPrice | number | Mark price
|\n| markValue | number | Mark Value
|\n| posCost | number | Position value
|\n| posInit | number | Inital margin Cross = opening value/cross leverage; isolated = accumulation of initial margin for each transaction
|\n| posMargin | number | Bankruptcy cost Cross = mark value * imr; Isolated = position margin (accumulation of initial margin, additional margin, generated funding fees, etc.)
|\n| realisedGrossPnl | number | Accumulated realised gross profit value
|\n| realisedPnl | number | Realised profit and loss
|\n| unrealisedPnl | number | Unrealised profit and loss
|\n| unrealisedPnlPcnt | number | Profit-loss ratio of the position
|\n| unrealisedRoePcnt | number | Rate of return on investment
|\n| avgEntryPrice | number | Average entry price
|\n| liquidationPrice | number | Liquidation price For Cross Margin, you can refer to the liquidationPrice, and the liquidation is based on the risk rate.
|\n| bankruptPrice | number | Bankruptcy price For Cross Margin, you can refer to the bankruptPrice, and the liquidation is based on the risk rate.
|\n| settleCurrency | string | Currency used to clear and settle the trades
|\n| isInverse | boolean | Reverse contract or not
|\n| marginMode | string | Margin Mode: CROSS๏ผŒISOLATED
|\n| positionSide | string | Position Side
|\n| leverage | number | Leverage |\n| autoDeposit | boolean | Auto deposit margin or not **Only applicable to Isolated Margin**
|\n| maintMarginReq | number | Maintenance margin requirement **Only applicable to Isolated Margin**
|\n| riskLimit | number | Risk limit **Only applicable to Isolated Margin**
|\n| realLeverage | number | Leverage of the order **Only applicable to Isolated Margin**
|\n| posCross | number | added margin **Only applicable to Isolated Margin**
|\n| posCrossMargin | number | Additional margin calls (automatic, manual, adjusted risk limits) **Only applicable to Isolated Margin**
|\n| posComm | number | Bankruptcy cost **Only applicable to Isolated Margin**
|\n| posCommCommon | number | Part of bankruptcy cost (positioning, add margin) **Only applicable to Isolated Margin**
|\n| posLoss | number | Funding fees paid out **Only applicable to Isolated Margin**
|\n| posFunding | number | The current remaining unsettled funding fee for the position **Only applicable to Isolated Margin**
|\n| posMaint | number | Maintenance margin **Only applicable to Isolated Margin**
|\n| maintMargin | number | Position margin **Only applicable to Isolated Margin**
|\n| maintainMargin | number | Maintenance margin rate **Only applicable to Isolated Margin**
|\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "positions" + ], + "query": [ + { + "key": "currency", + "value": null, + "description": "Currency code, Please refer to [rootSymbol](https://www.kucoin.com/docs-new/api-221752070) , such as USDT,XBT. Query all positions when empty" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"id\": \"500000000001046430\",\n \"symbol\": \"ETHUSDM\",\n \"crossMode\": true,\n \"delevPercentage\": 0.71,\n \"openingTimestamp\": 1730635780702,\n \"currentTimestamp\": 1730636040926,\n \"currentQty\": 1,\n \"currentCost\": -0.0004069805,\n \"currentComm\": 2.441e-07,\n \"unrealisedCost\": -0.0004069805,\n \"realisedGrossCost\": 0.0,\n \"realisedCost\": 2.441e-07,\n \"isOpen\": true,\n \"markPrice\": 2454.12,\n \"markValue\": -0.000407478,\n \"posCost\": -0.0004069805,\n \"posInit\": 4.06981e-05,\n \"posMargin\": 4.07478e-05,\n \"realisedGrossPnl\": 0.0,\n \"realisedPnl\": -2.441e-07,\n \"unrealisedPnl\": -4.975e-07,\n \"unrealisedPnlPcnt\": -0.0012,\n \"unrealisedRoePcnt\": -0.0122,\n \"avgEntryPrice\": 2457.12,\n \"liquidationPrice\": 1429.96,\n \"bankruptPrice\": 1414.96,\n \"settleCurrency\": \"ETH\",\n \"isInverse\": true,\n \"marginMode\": \"CROSS\",\n \"positionSide\": \"BOTH\",\n \"leverage\": 10\n },\n {\n \"id\": \"500000000000988255\",\n \"symbol\": \"XBTUSDTM\",\n \"autoDeposit\": true,\n \"crossMode\": false,\n \"maintMarginReq\": 0.005,\n \"riskLimit\": 500000,\n \"realLeverage\": 2.97,\n \"delevPercentage\": 0.5,\n \"openingTimestamp\": 1729155616322,\n \"currentTimestamp\": 1730636040926,\n \"currentQty\": 1,\n \"currentCost\": 67.4309,\n \"currentComm\": -0.15936162,\n \"unrealisedCost\": 67.4309,\n \"realisedGrossCost\": 0.0,\n \"realisedCost\": -0.15936162,\n \"isOpen\": true,\n \"markPrice\": 68323.06,\n \"markValue\": 68.32306,\n \"posCost\": 67.4309,\n \"posCross\": 0.06225152,\n \"posCrossMargin\": 0,\n \"posInit\": 22.2769666644,\n \"posComm\": 0.0539821899,\n \"posCommCommon\": 0.0539447199,\n \"posLoss\": 0.26210915,\n \"posMargin\": 22.1310912243,\n \"posFunding\": -0.19982016,\n \"posMaint\": 0.4046228699,\n \"maintMargin\": 23.0232512243,\n \"realisedGrossPnl\": 0.0,\n \"realisedPnl\": -0.2402787,\n \"unrealisedPnl\": 0.89216,\n \"unrealisedPnlPcnt\": 0.0132,\n \"unrealisedRoePcnt\": 0.04,\n \"avgEntryPrice\": 67430.9,\n \"liquidationPrice\": 45704.44,\n \"bankruptPrice\": 45353.8,\n \"settleCurrency\": \"USDT\",\n \"isInverse\": false,\n \"maintainMargin\": 0.005,\n \"marginMode\": \"ISOLATED\",\n \"positionSide\": \"BOTH\",\n \"leverage\": 2.97\n }\n ]\n}" + } + ] + }, + { + "name": "Get Positions History", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "history-positions" + ], + "query": [ + { + "key": "symbol", + "value": "", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + }, + { + "key": "from", + "value": null, + "description": "Closing start time(ms)\n" + }, + { + "key": "to", + "value": null, + "description": "Closing end time(ms)\n" + }, + { + "key": "limit", + "value": null, + "description": "Number of requests per page, max 200, default 10\n" + }, + { + "key": "pageId", + "value": null, + "description": "Current page number, default 1\n" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470254)\n\n:::info[Description]\nThis interface can query position history information records.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currentPage | integer | Current page number
|\n| pageSize | integer | Number of results per page
|\n| totalNum | integer | Total number of results
|\n| totalPage | integer | Total number of pages
|\n| items | array | Refer to the schema section of items |\n\n**root.data.items Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| closeId | string | Close ID
|\n| userId | string | User ID |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| settleCurrency | string | Currency used to settle trades
|\n| leverage | string | Leverage applied to the order
|\n| type | string | Type of closure
|\n| pnl | string | Net profit and loss (after deducting fees and funding costs)
|\n| realisedGrossCost | string | Accumulated realised gross profit value
|\n| withdrawPnl | string | Accumulated realised profit withdrawn from the position
|\n| tradeFee | string | Accumulated trading fees
|\n| fundingFee | string | Accumulated funding fees
|\n| openTime | integer | Time when the position was opened
|\n| closeTime | integer | Time when the position was closed (default sorted in descending order)
|\n| openPrice | string | Opening price of the position
|\n| closePrice | string | Closing price of the position
|\n| marginMode | string | Margin Mode: CROSS๏ผŒISOLATED |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "history-positions" + ], + "query": [ + { + "key": "symbol", + "value": "", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + }, + { + "key": "from", + "value": null, + "description": "Closing start time(ms)\n" + }, + { + "key": "to", + "value": null, + "description": "Closing end time(ms)\n" + }, + { + "key": "limit", + "value": null, + "description": "Number of requests per page, max 200, default 10\n" + }, + { + "key": "pageId", + "value": null, + "description": "Current page number, default 1\n" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"currentPage\": 1,\n \"pageSize\": 10,\n \"totalNum\": 3,\n \"totalPage\": 1,\n \"items\": [\n {\n \"closeId\": \"500000000027312193\",\n \"userId\": \"633559791e1cbc0001f319bc\",\n \"symbol\": \"XBTUSDTM\",\n \"settleCurrency\": \"USDT\",\n \"leverage\": \"0.0\",\n \"type\": \"CLOSE_SHORT\",\n \"pnl\": \"-3.79237944\",\n \"realisedGrossCost\": \"3.795\",\n \"withdrawPnl\": \"0.0\",\n \"tradeFee\": \"0.078657\",\n \"fundingFee\": \"0.08127756\",\n \"openTime\": 1727073653603,\n \"closeTime\": 1729155587945,\n \"openPrice\": \"63650.0\",\n \"closePrice\": \"67445.0\",\n \"marginMode\": \"ISOLATED\"\n },\n {\n \"closeId\": \"500000000026809668\",\n \"userId\": \"633559791e1cbc0001f319bc\",\n \"symbol\": \"SUIUSDTM\",\n \"settleCurrency\": \"USDT\",\n \"leverage\": \"0.0\",\n \"type\": \"LIQUID_SHORT\",\n \"pnl\": \"-1.10919296\",\n \"realisedGrossCost\": \"1.11297635\",\n \"withdrawPnl\": \"0.0\",\n \"tradeFee\": \"0.00200295\",\n \"fundingFee\": \"0.00578634\",\n \"openTime\": 1726473389296,\n \"closeTime\": 1728738683541,\n \"openPrice\": \"1.1072\",\n \"closePrice\": \"2.22017635\",\n \"marginMode\": \"ISOLATED\"\n },\n {\n \"closeId\": \"500000000026819355\",\n \"userId\": \"633559791e1cbc0001f319bc\",\n \"symbol\": \"XBTUSDTM\",\n \"settleCurrency\": \"USDT\",\n \"leverage\": \"0.0\",\n \"type\": \"LIQUID_SHORT\",\n \"pnl\": \"-5.941896296\",\n \"realisedGrossCost\": \"5.86937042\",\n \"withdrawPnl\": \"0.0\",\n \"tradeFee\": \"0.074020096\",\n \"fundingFee\": \"0.00149422\",\n \"openTime\": 1726490775358,\n \"closeTime\": 1727061049859,\n \"openPrice\": \"58679.6\",\n \"closePrice\": \"64548.97042\",\n \"marginMode\": \"ISOLATED\"\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Remove Isolated Margin", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "margin", + "withdrawMargin" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470256)\n\n:::info[Description]\nRemove Isolated Margin Manually.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| withdrawAmount | string | The size of the position that can be deposited. If it is USDT-margin, it represents the amount of USDT. If it is coin-margin, this value represents the number of coins
|\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | string | The size of the position deposited. If it is USDT-margin, it represents the amount of USDT. If it is coin-margin, this value represents the number of coins
|\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"symbol\": \"XBTUSDTM\",\n \"withdrawAmount\": \"0.0000001\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "margin", + "withdrawMargin" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": \"0.1\"\n}" + } + ] + }, + { + "name": "Add Isolated Margin", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "position", + "margin", + "deposit-margin" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470257)\n\n:::info[Description]\nAdd Isolated Margin Manually.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| margin | number | Margin amount (min. margin amountโ‰ฅ0.00001667XBT๏ผ‰ |\n| bizNo | string | A unique ID generated by the user, to ensure the operation is processed by the system only once, The maximum length cannot exceed 36 |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | Position ID |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| autoDeposit | boolean | Auto deposit margin or not |\n| maintMarginReq | number | Maintenance margin requirement

|\n| riskLimit | integer | Risk limit
|\n| realLeverage | number | Leverage o the order |\n| crossMode | boolean | Cross mode or not |\n| delevPercentage | number | ADL ranking percentile |\n| openingTimestamp | integer | Open time |\n| currentTimestamp | integer | Current timestamp
|\n| currentQty | integer | Current postion quantity |\n| currentCost | number | Current postion value |\n| currentComm | number | Current commission |\n| unrealisedCost | number | Unrealised value |\n| realisedGrossCost | number | Accumulated realised gross profit value |\n| realisedCost | number | Current realised position value |\n| isOpen | boolean | Opened position or not |\n| markPrice | number | Mark price |\n| markValue | number | Mark value
|\n| posCost | number | Position value |\n| posCross | number | added margin |\n| posInit | number | Leverage margin |\n| posComm | number | Bankruptcy cost |\n| posLoss | number | Funding fees paid out |\n| posMargin | number | Position margin |\n| posMaint | number | Maintenance margin |\n| maintMargin | number | Position margin |\n| realisedGrossPnl | number | Accumulated realised gross profit value |\n| realisedPnl | number | Realised profit and loss |\n| unrealisedPnl | number | Unrealised profit and loss |\n| unrealisedPnlPcnt | number | Profit-loss ratio of the position |\n| unrealisedRoePcnt | number | Rate of return on investment |\n| avgEntryPrice | number | Average entry price |\n| liquidationPrice | number | Liquidation price |\n| bankruptPrice | number | Bankruptcy price |\n| userId | integer | userId |\n| settleCurrency | string | Currency used to clear and settle the trades |\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"symbol\": \"string\",\n \"margin\": 0,\n \"bizNo\": \"string\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "position", + "margin", + "deposit-margin" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"id\": \"6200c9b83aecfb000152ddcd\",\n \"symbol\": \"XBTUSDTM\",\n \"autoDeposit\": false,\n \"maintMarginReq\": 0.005,\n \"riskLimit\": 500000,\n \"realLeverage\": 18.72,\n \"crossMode\": false,\n \"delevPercentage\": 0.66,\n \"openingTimestamp\": 1646287090131,\n \"currentTimestamp\": 1646295055021,\n \"currentQty\": 1,\n \"currentCost\": 43.388,\n \"currentComm\": 0.0260328,\n \"unrealisedCost\": 43.388,\n \"realisedGrossCost\": 0,\n \"realisedCost\": 0.0260328,\n \"isOpen\": true,\n \"markPrice\": 43536.65,\n \"markValue\": 43.53665,\n \"posCost\": 43.388,\n \"posCross\": 2.4985e-05,\n \"posInit\": 2.1694,\n \"posComm\": 0.02733446,\n \"posLoss\": 0,\n \"posMargin\": 2.19675944,\n \"posMaint\": 0.24861326,\n \"maintMargin\": 2.34540944,\n \"realisedGrossPnl\": 0,\n \"realisedPnl\": -0.0260328,\n \"unrealisedPnl\": 0.14865,\n \"unrealisedPnlPcnt\": 0.0034,\n \"unrealisedRoePcnt\": 0.0685,\n \"avgEntryPrice\": 43388,\n \"liquidationPrice\": 41440,\n \"bankruptPrice\": 41218,\n \"userId\": 1234321123,\n \"settleCurrency\": \"USDT\"\n }\n}" + } + ] + }, + { + "name": "Get Max Withdraw Margin", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "margin", + "maxWithdrawMargin" + ], + "query": [ + { + "key": "symbol", + "value": null, + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470258)\n\n:::info[Description]\nThis interface can query the maximum amount of margin that the current position supports withdrawal.\n:::\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | string | The size of the position that can be deposited. If it is USDT-margin, it represents the amount of USDT. If it is coin-margin, this value represents the number of coins
|\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "margin", + "maxWithdrawMargin" + ], + "query": [ + { + "key": "symbol", + "value": null, + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": \"21.1135719252\"\n}" + } + ] + }, + { + "name": "Get Margin Mode", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v2", + "position", + "getMarginMode" + ], + "query": [ + { + "key": "symbol", + "value": "XBTUSDTM", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470259)\n\n:::info[Description]\nThis interface can query the margin mode of the current symbol.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| marginMode | string | Margin mode: ISOLATED (isolated), CROSS (cross margin). |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v2", + "position", + "getMarginMode" + ], + "query": [ + { + "key": "symbol", + "value": "XBTUSDTM", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"symbol\": \"XBTUSDTM\",\n \"marginMode\": \"ISOLATED\"\n }\n}" + } + ] + }, + { + "name": "Get Cross Margin Leverage", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v2", + "getCrossUserLeverage" + ], + "query": [ + { + "key": "symbol", + "value": "XBTUSDTM", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470260)\n\n:::info[Description]\nThis interface can query the current symbolโ€™s cross-margin leverage multiple.\n:::\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| leverage | string | Leverage multiple |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v2", + "getCrossUserLeverage" + ], + "query": [ + { + "key": "symbol", + "value": "XBTUSDTM", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"symbol\": \"XBTUSDTM\",\n \"leverage\": \"3\"\n }\n}" + } + ] + }, + { + "name": "Modify Cross Margin Leverage", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v2", + "changeCrossUserLeverage" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470261)\n\n:::info[Description]\nThis interface can modify the current symbolโ€™s cross-margin leverage multiple.\n:::\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| leverage | string | Leverage multiple |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | |\n| leverage | string | |\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"symbol\": \"XBTUSDTM\",\n \"leverage\" : \"10\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v2", + "changeCrossUserLeverage" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"symbol\": \"XBTUSDTM\",\n \"leverage\": \"3\"\n }\n}" + } + ] + }, + { + "name": "Switch Margin Mode", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v2", + "position", + "changeMarginMode" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470262)\n\n:::info[Description]\nModify the margin mode of the current symbol.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| marginMode | string | Modified margin model: ISOLATED (isolated), CROSS (cross margin). |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| marginMode | string | Margin mode: ISOLATED (isolated), CROSS (cross margin). |\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"symbol\": \"XBTUSDTM\",\n \"marginMode\": \"ISOLATED\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v2", + "position", + "changeMarginMode" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"symbol\": \"XBTUSDTM\",\n \"marginMode\": \"ISOLATED\"\n }\n}" + } + ] + } + ], + "description": "" + }, + { + "name": "Funding Fees", + "item": [ + { + "name": "Get Current Funding Rate", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "funding-rate", + "{{symbol}}", + "current" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470265)\n\n:::info[Description]\nGet Current Funding Rate\n\n\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | Funding Rate Symbol
|\n| granularity | integer | Granularity (milisecond)
|\n| timePoint | integer | The funding rate settlement time point of the previous cycle
(milisecond)
|\n| value | number | Current cycle funding rate
|\n| predictedValue | number | Predicted funding rate
|\n| fundingRateCap | number | Maximum Funding Rate |\n| fundingRateFloor | number | Minimum Funding Rate |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "funding-rate", + "{{symbol}}", + "current" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"symbol\": \".XBTUSDTMFPI8H\",\n \"granularity\": 28800000,\n \"timePoint\": 1731441600000,\n \"value\": 0.000641,\n \"predictedValue\": 5.2e-05,\n \"fundingRateCap\": 0.003,\n \"fundingRateFloor\": -0.003\n }\n}" + } + ] + }, + { + "name": "Get Public Funding History", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "contract", + "funding-rates" + ], + "query": [ + { + "key": "symbol", + "value": "XBTUSDTM", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + }, + { + "key": "from", + "value": "1700310700000", + "description": "Begin time (milisecond)\n" + }, + { + "key": "to", + "value": "1702310700000", + "description": "End time (milisecond)\n" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470266)\n\n:::info[Description]\nQuery the funding rate at each settlement time point within a certain time range of the corresponding contract\n\n:::\n\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| fundingRate | number | Funding rate |\n| timepoint | integer | Time point (milisecond)

|\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "contract", + "funding-rates" + ], + "query": [ + { + "key": "symbol", + "value": "XBTUSDTM", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + }, + { + "key": "from", + "value": "1700310700000", + "description": "Begin time (milisecond)\n" + }, + { + "key": "to", + "value": "1702310700000", + "description": "End time (milisecond)\n" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.00021,\n \"timepoint\": 1702296000000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000347,\n \"timepoint\": 1702267200000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000452,\n \"timepoint\": 1702238400000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000513,\n \"timepoint\": 1702209600000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000421,\n \"timepoint\": 1702180800000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000506,\n \"timepoint\": 1702152000000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000768,\n \"timepoint\": 1702123200000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000482,\n \"timepoint\": 1702094400000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.0004,\n \"timepoint\": 1702065600000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000546,\n \"timepoint\": 1702036800000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000797,\n \"timepoint\": 1702008000000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000576,\n \"timepoint\": 1701979200000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000422,\n \"timepoint\": 1701950400000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000392,\n \"timepoint\": 1701921600000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.00041,\n \"timepoint\": 1701892800000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000448,\n \"timepoint\": 1701864000000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000368,\n \"timepoint\": 1701835200000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000351,\n \"timepoint\": 1701806400000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000144,\n \"timepoint\": 1701777600000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000425,\n \"timepoint\": 1701748800000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": -8.2e-05,\n \"timepoint\": 1701720000000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000464,\n \"timepoint\": 1701691200000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000414,\n \"timepoint\": 1701662400000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000244,\n \"timepoint\": 1701633600000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000199,\n \"timepoint\": 1701604800000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000179,\n \"timepoint\": 1701576000000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 8.7e-05,\n \"timepoint\": 1701547200000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 1.6e-05,\n \"timepoint\": 1701518400000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": -3.7e-05,\n \"timepoint\": 1701489600000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 1.5e-05,\n \"timepoint\": 1701460800000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 6.8e-05,\n \"timepoint\": 1701432000000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 7.2e-05,\n \"timepoint\": 1701403200000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000145,\n \"timepoint\": 1701374400000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000141,\n \"timepoint\": 1701345600000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 9.4e-05,\n \"timepoint\": 1701316800000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000108,\n \"timepoint\": 1701288000000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 7.6e-05,\n \"timepoint\": 1701259200000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 1e-05,\n \"timepoint\": 1701230400000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 1e-05,\n \"timepoint\": 1701201600000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000116,\n \"timepoint\": 1701172800000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000204,\n \"timepoint\": 1701144000000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.00023,\n \"timepoint\": 1701115200000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 6.2e-05,\n \"timepoint\": 1701086400000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000133,\n \"timepoint\": 1701057600000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 8e-05,\n \"timepoint\": 1701028800000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000111,\n \"timepoint\": 1701000000000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 7.4e-05,\n \"timepoint\": 1700971200000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000101,\n \"timepoint\": 1700942400000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 3.9e-05,\n \"timepoint\": 1700913600000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 1.1e-05,\n \"timepoint\": 1700884800000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 3e-06,\n \"timepoint\": 1700856000000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000103,\n \"timepoint\": 1700827200000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 3e-06,\n \"timepoint\": 1700798400000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 6.7e-05,\n \"timepoint\": 1700769600000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000147,\n \"timepoint\": 1700740800000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 7.8e-05,\n \"timepoint\": 1700712000000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000139,\n \"timepoint\": 1700683200000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 7.5e-05,\n \"timepoint\": 1700654400000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000111,\n \"timepoint\": 1700625600000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 9.8e-05,\n \"timepoint\": 1700596800000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000118,\n \"timepoint\": 1700568000000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000116,\n \"timepoint\": 1700539200000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.00016,\n \"timepoint\": 1700510400000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000192,\n \"timepoint\": 1700481600000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000113,\n \"timepoint\": 1700452800000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000247,\n \"timepoint\": 1700424000000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.00023,\n \"timepoint\": 1700395200000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000263,\n \"timepoint\": 1700366400000\n },\n {\n \"symbol\": \"XBTUSDTM\",\n \"fundingRate\": 0.000132,\n \"timepoint\": 1700337600000\n }\n ]\n}" + } + ] + }, + { + "name": "Get Private Funding History", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "funding-history" + ], + "query": [ + { + "key": "symbol", + "value": "XBTUSDTM", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + }, + { + "key": "from", + "value": "1700310700000", + "description": "Begin time (milisecond)\n" + }, + { + "key": "to", + "value": "1702310700000", + "description": "End time (milisecond)\n" + }, + { + "key": "reverse", + "value": null, + "description": "This parameter functions to judge whether the lookup is forward or not. True means โ€œyesโ€ and False means โ€œnoโ€. This parameter is set as true by default\n" + }, + { + "key": "offset", + "value": null, + "description": "Start offset. The unique attribute of the last returned result of the last request. The data of the first page will be returned by default.\n" + }, + { + "key": "forward", + "value": null, + "description": "This parameter functions to judge whether the lookup is forward or not. True means โ€œyesโ€ and False means โ€œnoโ€. This parameter is set as true by default\n" + }, + { + "key": "maxCount", + "value": null, + "description": "Max record count. The default record count is 10" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470267)\n\n:::info[Description]\nSubmit request to get the funding history.\n:::\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| dataList | array | Refer to the schema section of dataList |\n| hasMore | boolean | Whether there are more pages
|\n\n**root.data.dataList Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | integer | id |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| timePoint | integer | Time point (milisecond)
|\n| fundingRate | number | Funding rate
|\n| markPrice | number | Mark price
|\n| positionQty | integer | Position size |\n| positionCost | number | Position value at settlement period
|\n| funding | number | Settled funding fees. A positive number means that the user received the funding fee, and vice versa.
|\n| settleCurrency | string | settlement currency
|\n| context | string | context |\n| marginMode | string | Margin mode: ISOLATED (isolated), CROSS (cross margin). |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{futures_endpoint}}" + ], + "path": [ + "api", + "v1", + "funding-history" + ], + "query": [ + { + "key": "symbol", + "value": "XBTUSDTM", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " + }, + { + "key": "from", + "value": "1700310700000", + "description": "Begin time (milisecond)\n" + }, + { + "key": "to", + "value": "1702310700000", + "description": "End time (milisecond)\n" + }, + { + "key": "reverse", + "value": null, + "description": "This parameter functions to judge whether the lookup is forward or not. True means โ€œyesโ€ and False means โ€œnoโ€. This parameter is set as true by default\n" + }, + { + "key": "offset", + "value": null, + "description": "Start offset. The unique attribute of the last returned result of the last request. The data of the first page will be returned by default.\n" + }, + { + "key": "forward", + "value": null, + "description": "This parameter functions to judge whether the lookup is forward or not. True means โ€œyesโ€ and False means โ€œnoโ€. This parameter is set as true by default\n" + }, + { + "key": "maxCount", + "value": null, + "description": "Max record count. The default record count is 10" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"dataList\": [\n {\n \"id\": 1472387374042586,\n \"symbol\": \"XBTUSDTM\",\n \"timePoint\": 1731470400000,\n \"fundingRate\": 0.000641,\n \"markPrice\": 87139.92,\n \"positionQty\": 1,\n \"positionCost\": 87.13992,\n \"funding\": -0.05585669,\n \"settleCurrency\": \"USDT\",\n \"context\": \"{\\\"marginMode\\\": \\\"ISOLATED\\\", \\\"positionSide\\\": \\\"BOTH\\\"}\",\n \"marginMode\": \"ISOLATED\"\n }\n ],\n \"hasMore\": true\n }\n}" + } + ] + } + ], + "description": "" + } + ], + "description": "" + }, + { + "name": "Earn", + "item": [ + { + "name": "purchase", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "earn", + "orders" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470268)\n\n:::info[Description]\nThis endpoint allows subscribing earn product\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| productId | string | Product Id |\n| amount | string | Subscription amount |\n| accountType | string | MAIN (funding account), TRADE (spot trading account) |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | Holding ID |\n| orderTxId | string | Subscription order ID |\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"productId\": \"2611\",\n \"amount\": \"1\",\n \"accountType\": \"TRADE\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "earn", + "orders" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"orderId\": \"2767291\",\n \"orderTxId\": \"6603694\"\n }\n}" + } + ] + }, + { + "name": "Get Redeem Preview", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "earn", + "redeem-preview" + ], + "query": [ + { + "key": "orderId", + "value": "2767291", + "description": "Holding ID" + }, + { + "key": "fromAccountType", + "value": "MAIN", + "description": "Account type: MAIN (funding account), TRADE (spot trading account). This parameter is valid only when orderId=ETH2" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470269)\n\n:::info[Description]\nThis endpoint can get redemption preview information by holding ID. If the current holding is fully redeemed or in the process of being redeemed, it indicates that the holding does not exist.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | currency |\n| redeemAmount | string | Expected redemption amount |\n| penaltyInterestAmount | string | Penalty interest amount, incurred for early redemption of fixed-term products |\n| redeemPeriod | integer | Redemption waiting period (days) |\n| deliverTime | integer | Expected deliver time (milliseconds) |\n| manualRedeemable | boolean | Whether manual redemption is possible |\n| redeemAll | boolean | Whether the entire holding must be redeemed, required for early redemption of fixed-term products |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "earn", + "redeem-preview" + ], + "query": [ + { + "key": "orderId", + "value": "2767291", + "description": "Holding ID" + }, + { + "key": "fromAccountType", + "value": "MAIN", + "description": "Account type: MAIN (funding account), TRADE (spot trading account). This parameter is valid only when orderId=ETH2" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"currency\": \"KCS\",\n \"redeemAmount\": \"1\",\n \"penaltyInterestAmount\": \"0\",\n \"redeemPeriod\": 3,\n \"deliverTime\": 1729518951000,\n \"manualRedeemable\": true,\n \"redeemAll\": false\n }\n}" + } + ] + }, + { + "name": "Redeem", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "earn", + "orders" + ], + "query": [ + { + "key": "orderId", + "value": "2767291", + "description": "Holding ID" + }, + { + "key": "amount", + "value": null, + "description": "Redemption amount" + }, + { + "key": "fromAccountType", + "value": null, + "description": "Account type: MAIN (funding account), TRADE (spot trading account). This parameter is valid only when orderId=ETH2" + }, + { + "key": "confirmPunishRedeem", + "value": null, + "description": "Confirmation field for early redemption penalty: 1 (confirm early redemption, and the current holding will be fully redeemed). This parameter is valid only for fixed-term products" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470270)\n\n:::info[Description]\nThis endpoint allows initiating redemption by holding ID. If the current holding is fully redeemed or in the process of being redeemed, it indicates that the holding does not exist.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderTxId | string | Redemption order ID |\n| deliverTime | integer | Expected deliver time (milliseconds) |\n| status | string | Redemption status: SUCCESS (successful), PENDING (redemption pending) |\n| amount | string | Redemption amount |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "earn", + "orders" + ], + "query": [ + { + "key": "orderId", + "value": "2767291", + "description": "Holding ID" + }, + { + "key": "amount", + "value": null, + "description": "Redemption amount" + }, + { + "key": "fromAccountType", + "value": null, + "description": "Account type: MAIN (funding account), TRADE (spot trading account). This parameter is valid only when orderId=ETH2" + }, + { + "key": "confirmPunishRedeem", + "value": null, + "description": "Confirmation field for early redemption penalty: 1 (confirm early redemption, and the current holding will be fully redeemed). This parameter is valid only for fixed-term products" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"orderTxId\": \"6603700\",\n \"deliverTime\": 1729517805000,\n \"status\": \"PENDING\",\n \"amount\": \"1\"\n }\n}" + } + ] + }, + { + "name": "Get Savings Products", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "earn", + "saving", + "products" + ], + "query": [ + { + "key": "currency", + "value": "BTC", + "description": "currency" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470271)\n\n:::info[Description]\nThis endpoint can get available savings products. If no products are available, an empty list is returned.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | Product ID |\n| currency | string | currency |\n| category | string | Product category: DEMAND (savings) |\n| type | string | Product subtype: TIME (fixed), DEMAND (demand) |\n| precision | integer | Maximum precision supported |\n| productUpperLimit | string | Products total subscribe amount |\n| userUpperLimit | string | Max user subscribe amount |\n| userLowerLimit | string | Min user subscribe amount |\n| redeemPeriod | integer | Redemption waiting period (days) |\n| lockStartTime | integer | Product earliest interest start time, in milliseconds |\n| lockEndTime | integer | Product maturity time, in milliseconds |\n| applyStartTime | integer | Subscription start time, in milliseconds |\n| applyEndTime | integer | Subscription end time, in milliseconds |\n| returnRate | string | Annualized Rate of Return, for example, 0.035 is equal to 3.5% annualized rate of return |\n| incomeCurrency | string | Income currency |\n| earlyRedeemSupported | integer | Whether the fixed product supports early redemption: 0 (no), 1 (yes) |\n| productRemainAmount | string | Products remain subscribe amount |\n| status | string | Product status: ONGOING(Subscription in progress), PENDING(Preheating Subscription), FULL(Subscribed), INTERESTING (Interest in progress) |\n| redeemType | string | Redemption channel: MANUAL (manual redemption), TRANS_DEMAND (transfer to corresponding demand product upon maturity), AUTO (redeem to funding account upon maturity) |\n| incomeReleaseType | string | Income release type: DAILY (daily release), AFTER (release after product ends) |\n| interestDate | integer | Most recent interest date(millisecond) |\n| duration | integer | Product duration (days) |\n| newUserOnly | integer | Whether the product is exclusive for new users: 0 (no), 1 (yes) |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "earn", + "saving", + "products" + ], + "query": [ + { + "key": "currency", + "value": "BTC", + "description": "currency" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"id\": \"2172\",\n \"currency\": \"BTC\",\n \"category\": \"DEMAND\",\n \"type\": \"DEMAND\",\n \"precision\": 8,\n \"productUpperLimit\": \"480\",\n \"productRemainAmount\": \"132.36153083\",\n \"userUpperLimit\": \"20\",\n \"userLowerLimit\": \"0.01\",\n \"redeemPeriod\": 0,\n \"lockStartTime\": 1644807600000,\n \"lockEndTime\": null,\n \"applyStartTime\": 1644807600000,\n \"applyEndTime\": null,\n \"returnRate\": \"0.00047208\",\n \"incomeCurrency\": \"BTC\",\n \"earlyRedeemSupported\": 0,\n \"status\": \"ONGOING\",\n \"redeemType\": \"MANUAL\",\n \"incomeReleaseType\": \"DAILY\",\n \"interestDate\": 1729267200000,\n \"duration\": 0,\n \"newUserOnly\": 0\n }\n ]\n}" + } + ] + }, + { + "name": "Get Promotion Products", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "earn", + "promotion", + "products" + ], + "query": [ + { + "key": "currency", + "value": "BTC", + "description": "currency" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470272)\n\n:::info[Description]\nThis endpoint can get available limited-time promotion products. If no products are available, an empty list is returned.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | Product ID |\n| currency | string | currency |\n| category | string | Product category: ACTIVITY |\n| type | string | Product subtype: TIME (fixed), DEMAND (demand) |\n| precision | integer | Maximum precision supported |\n| productUpperLimit | string | Products total subscribe amount |\n| userUpperLimit | string | Max user subscribe amount |\n| userLowerLimit | string | Min user subscribe amount |\n| redeemPeriod | integer | Redemption waiting period (days) |\n| lockStartTime | integer | Product earliest interest start time, in milliseconds |\n| lockEndTime | integer | Product earliest interest end time, in milliseconds |\n| applyStartTime | integer | Subscription start time, in milliseconds |\n| applyEndTime | integer | Subscription end time, in milliseconds |\n| returnRate | string | Annualized Rate of Return, for example, 0.035 is equal to 3.5% annualized rate of return |\n| incomeCurrency | string | Income currency |\n| earlyRedeemSupported | integer | Whether the fixed product supports early redemption: 0 (no), 1 (yes) |\n| productRemainAmount | string | Products remain subscribe amount |\n| status | string | Product status: ONGOING(Subscription in progress), PENDING(Preheating Subscription), FULL(Subscribed), INTERESTING (Interest in progress) |\n| redeemType | string | Redemption channel: MANUAL (manual redemption), TRANS_DEMAND (transfer to corresponding demand product upon maturity), AUTO (redeem to funding account upon maturity) |\n| incomeReleaseType | string | Income release type: DAILY (daily release), AFTER (release after product ends) |\n| interestDate | integer | Most recent interest date(millisecond) |\n| duration | integer | Product duration (days) |\n| newUserOnly | integer | Whether the product is exclusive for new users: 0 (no), 1 (yes) |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "earn", + "promotion", + "products" + ], + "query": [ + { + "key": "currency", + "value": "BTC", + "description": "currency" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"id\": \"2685\",\n \"currency\": \"BTC\",\n \"category\": \"ACTIVITY\",\n \"type\": \"TIME\",\n \"precision\": 8,\n \"productUpperLimit\": \"50\",\n \"userUpperLimit\": \"1\",\n \"userLowerLimit\": \"0.001\",\n \"redeemPeriod\": 0,\n \"lockStartTime\": 1702371601000,\n \"lockEndTime\": 1729858405000,\n \"applyStartTime\": 1702371600000,\n \"applyEndTime\": null,\n \"returnRate\": \"0.03\",\n \"incomeCurrency\": \"BTC\",\n \"earlyRedeemSupported\": 0,\n \"productRemainAmount\": \"49.78203998\",\n \"status\": \"ONGOING\",\n \"redeemType\": \"TRANS_DEMAND\",\n \"incomeReleaseType\": \"DAILY\",\n \"interestDate\": 1729253605000,\n \"duration\": 7,\n \"newUserOnly\": 1\n }\n ]\n}" + } + ] + }, + { + "name": "Get Account Holding", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "earn", + "hold-assets" + ], + "query": [ + { + "key": "currency", + "value": "KCS", + "description": "currency" + }, + { + "key": "productId", + "value": "", + "description": "Product ID" + }, + { + "key": "productCategory", + "value": "", + "description": "Product category" + }, + { + "key": "currentPage", + "value": "1", + "description": "Current request page." + }, + { + "key": "pageSize", + "value": "10", + "description": "Number of results per request. Minimum is 10, maximum is 500." + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470273)\n\n:::info[Description]\nThis endpoint can get current holding assets information. If no current holding assets are available, an empty list is returned.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| totalNum | integer | total number |\n| items | array | Refer to the schema section of items |\n| currentPage | integer | current page |\n| pageSize | integer | page size |\n| totalPage | integer | total page |\n\n**root.data.items Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | Holding ID |\n| productId | string | Product ID |\n| productCategory | string | Product category |\n| productType | string | Product sub-type |\n| currency | string | currency |\n| incomeCurrency | string | Income currency |\n| returnRate | string | Annualized Rate of Return, for example, 0.035 is equal to 3.5% annualized rate of return |\n| holdAmount | string | Holding amount |\n| redeemedAmount | string | Redeemed amount |\n| redeemingAmount | string | Redeeming amount |\n| lockStartTime | integer | Product earliest interest start time, in milliseconds |\n| lockEndTime | integer | Product maturity time, in milliseconds |\n| purchaseTime | integer | Most recent subscription time, in milliseconds |\n| redeemPeriod | integer | Redemption waiting period (days) |\n| status | string | Status: LOCKED (holding), REDEEMING (redeeming) |\n| earlyRedeemSupported | integer | Whether the fixed product supports early redemption: 0 (no), 1 (yes) |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "earn", + "hold-assets" + ], + "query": [ + { + "key": "currency", + "value": "KCS", + "description": "currency" + }, + { + "key": "productId", + "value": "", + "description": "Product ID" + }, + { + "key": "productCategory", + "value": "", + "description": "Product category" + }, + { + "key": "currentPage", + "value": "1", + "description": "Current request page." + }, + { + "key": "pageSize", + "value": "10", + "description": "Number of results per request. Minimum is 10, maximum is 500." + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"totalNum\": 1,\n \"totalPage\": 1,\n \"currentPage\": 1,\n \"pageSize\": 15,\n \"items\": [\n {\n \"orderId\": \"2767291\",\n \"productId\": \"2611\",\n \"productCategory\": \"KCS_STAKING\",\n \"productType\": \"DEMAND\",\n \"currency\": \"KCS\",\n \"incomeCurrency\": \"KCS\",\n \"returnRate\": \"0.03471727\",\n \"holdAmount\": \"1\",\n \"redeemedAmount\": \"0\",\n \"redeemingAmount\": \"1\",\n \"lockStartTime\": 1701252000000,\n \"lockEndTime\": null,\n \"purchaseTime\": 1729257513000,\n \"redeemPeriod\": 3,\n \"status\": \"REDEEMING\",\n \"earlyRedeemSupported\": 0\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Get Staking Products", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "earn", + "staking", + "products" + ], + "query": [ + { + "key": "currency", + "value": "STX", + "description": "currency" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470274)\n\n:::info[Description]\nThis endpoint can get available staking products. If no products are available, an empty list is returned.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | Product ID |\n| currency | string | currency |\n| category | string | Product category: STAKING |\n| type | string | Product subtype: TIME (fixed), DEMAND (demand) |\n| precision | integer | Maximum precision supported |\n| productUpperLimit | string | Products total subscribe amount |\n| userUpperLimit | string | Max user subscribe amount |\n| userLowerLimit | string | Min user subscribe amount |\n| redeemPeriod | integer | Redemption waiting period (days) |\n| lockStartTime | integer | Product earliest interest start time, in milliseconds |\n| lockEndTime | integer | Product maturity time, in milliseconds |\n| applyStartTime | integer | Subscription start time, in milliseconds |\n| applyEndTime | integer | Subscription end time, in milliseconds |\n| returnRate | string | Annualized Rate of Return, for example, 0.035 is equal to 3.5% annualized rate of return |\n| incomeCurrency | string | Income currency |\n| earlyRedeemSupported | integer | Whether the fixed product supports early redemption: 0 (no), 1 (yes) |\n| productRemainAmount | string | Products remain subscribe amount |\n| status | string | Product status: ONGOING(Subscription in progress), PENDING(Preheating Subscription), FULL(Subscribed), INTERESTING (Interest in progress) |\n| redeemType | string | Redemption channel: MANUAL (manual redemption), TRANS_DEMAND (transfer to corresponding demand product upon maturity), AUTO (redeem to funding account upon maturity) |\n| incomeReleaseType | string | Income release type: DAILY (daily release), AFTER (release after product ends) |\n| interestDate | integer | Most recent interest date(millisecond) |\n| duration | integer | Product duration (days) |\n| newUserOnly | integer | Whether the product is exclusive for new users: 0 (no), 1 (yes) |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "earn", + "staking", + "products" + ], + "query": [ + { + "key": "currency", + "value": "STX", + "description": "currency" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"id\": \"2535\",\n \"currency\": \"STX\",\n \"category\": \"STAKING\",\n \"type\": \"DEMAND\",\n \"precision\": 8,\n \"productUpperLimit\": \"1000000\",\n \"userUpperLimit\": \"10000\",\n \"userLowerLimit\": \"1\",\n \"redeemPeriod\": 14,\n \"lockStartTime\": 1688614514000,\n \"lockEndTime\": null,\n \"applyStartTime\": 1688614512000,\n \"applyEndTime\": null,\n \"returnRate\": \"0.045\",\n \"incomeCurrency\": \"BTC\",\n \"earlyRedeemSupported\": 0,\n \"productRemainAmount\": \"254032.90178701\",\n \"status\": \"ONGOING\",\n \"redeemType\": \"MANUAL\",\n \"incomeReleaseType\": \"DAILY\",\n \"interestDate\": 1729267200000,\n \"duration\": 0,\n \"newUserOnly\": 0\n }\n ]\n}" + } + ] + }, + { + "name": "Get KCS Staking Products", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "earn", + "kcs-staking", + "products" + ], + "query": [ + { + "key": "currency", + "value": "KCS", + "description": "currency" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470275)\n\n:::info[Description]\nThis endpoint can get available KCS staking products. If no products are available, an empty list is returned.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | Product ID |\n| currency | string | currency |\n| category | string | Product category: KCS_STAKING |\n| type | string | Product subtype: TIME (fixed), DEMAND (demand) |\n| precision | integer | Maximum precision supported |\n| productUpperLimit | string | Products total subscribe amount |\n| userUpperLimit | string | Max user subscribe amount |\n| userLowerLimit | string | Min user subscribe amount |\n| redeemPeriod | integer | Redemption waiting period (days) |\n| lockStartTime | integer | Product earliest interest start time, in milliseconds |\n| lockEndTime | integer | Product maturity time, in milliseconds |\n| applyStartTime | integer | Subscription start time, in milliseconds |\n| applyEndTime | integer | Subscription end time, in milliseconds |\n| returnRate | string | Annualized Rate of Return, for example, 0.035 is equal to 3.5% annualized rate of return |\n| incomeCurrency | string | Income currency |\n| earlyRedeemSupported | integer | Whether the fixed product supports early redemption: 0 (no), 1 (yes) |\n| productRemainAmount | string | Products remain subscribe amount |\n| status | string | Product status: ONGOING(Subscription in progress), PENDING(Preheating Subscription), FULL(Subscribed), INTERESTING (Interest in progress) |\n| redeemType | string | Redemption channel: MANUAL (manual redemption), TRANS_DEMAND (transfer to corresponding demand product upon maturity), AUTO (redeem to funding account upon maturity) |\n| incomeReleaseType | string | Income release type: DAILY (daily release), AFTER (release after product ends) |\n| interestDate | integer | Most recent interest date(millisecond) |\n| duration | integer | Product duration (days) |\n| newUserOnly | integer | Whether the product is exclusive for new users: 0 (no), 1 (yes) |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "earn", + "kcs-staking", + "products" + ], + "query": [ + { + "key": "currency", + "value": "KCS", + "description": "currency" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"id\": \"2611\",\n \"currency\": \"KCS\",\n \"category\": \"KCS_STAKING\",\n \"type\": \"DEMAND\",\n \"precision\": 8,\n \"productUpperLimit\": \"100000000\",\n \"userUpperLimit\": \"100000000\",\n \"userLowerLimit\": \"1\",\n \"redeemPeriod\": 3,\n \"lockStartTime\": 1701252000000,\n \"lockEndTime\": null,\n \"applyStartTime\": 1701252000000,\n \"applyEndTime\": null,\n \"returnRate\": \"0.03471727\",\n \"incomeCurrency\": \"KCS\",\n \"earlyRedeemSupported\": 0,\n \"productRemainAmount\": \"58065850.54998251\",\n \"status\": \"ONGOING\",\n \"redeemType\": \"MANUAL\",\n \"incomeReleaseType\": \"DAILY\",\n \"interestDate\": 1729267200000,\n \"duration\": 0,\n \"newUserOnly\": 0\n }\n ]\n}" + } + ] + }, + { + "name": "Get ETH Staking Products", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "earn", + "eth-staking", + "products" + ], + "query": [ + { + "key": "currency", + "value": "ETH", + "description": "currency" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470276)\n\n:::info[Description]\nThis endpoint can get available ETH staking products. If no products are available, an empty list is returned.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | Product ID |\n| category | string | Product category: ETH2 (ETH Staking) |\n| type | string | Product subtype: DEMAND (demand) |\n| precision | integer | Maximum precision supported |\n| currency | string | currency |\n| incomeCurrency | string | Income currency |\n| returnRate | string | Annualized Rate of Return, for example, 0.035 is equal to 3.5% annualized rate of return |\n| userLowerLimit | string | Min user subscribe amount |\n| userUpperLimit | string | Max user subscribe amount |\n| productUpperLimit | string | Products total subscribe amount |\n| productRemainAmount | string | Products remain subscribe amount |\n| redeemPeriod | integer | Redemption waiting period (days) |\n| redeemType | string | Redemption channel: MANUAL (manual redemption), TRANS_DEMAND (transfer to corresponding demand product upon maturity), AUTO (redeem to funding account upon maturity) |\n| incomeReleaseType | string | Income release type: DAILY (daily release), AFTER (release after product ends) |\n| applyStartTime | integer | Subscription start time, in milliseconds |\n| applyEndTime | integer | Subscription end time, in milliseconds |\n| lockStartTime | integer | Product earliest interest start time, in milliseconds |\n| lockEndTime | integer | Product maturity time, in milliseconds |\n| interestDate | integer | Most recent interest date(millisecond) |\n| newUserOnly | integer | Whether the product is exclusive for new users: 0 (no), 1 (yes) |\n| earlyRedeemSupported | integer | Whether the fixed product supports early redemption: 0 (no), 1 (yes) |\n| duration | integer | Product duration (days) |\n| status | string | Product status: ONGOING(Subscription in progress), PENDING(Preheating Subscription), FULL(Subscribed), INTERESTING (Interest in progress) |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "earn", + "eth-staking", + "products" + ], + "query": [ + { + "key": "currency", + "value": "ETH", + "description": "currency" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"id\": \"ETH2\",\n \"category\": \"ETH2\",\n \"type\": \"DEMAND\",\n \"precision\": 8,\n \"currency\": \"ETH\",\n \"incomeCurrency\": \"ETH2\",\n \"returnRate\": \"0.028\",\n \"userLowerLimit\": \"0.01\",\n \"userUpperLimit\": \"8557.3597075\",\n \"productUpperLimit\": \"8557.3597075\",\n \"productRemainAmount\": \"8557.3597075\",\n \"redeemPeriod\": 5,\n \"redeemType\": \"MANUAL\",\n \"incomeReleaseType\": \"DAILY\",\n \"applyStartTime\": 1729255485000,\n \"applyEndTime\": null,\n \"lockStartTime\": 1729255485000,\n \"lockEndTime\": null,\n \"interestDate\": 1729267200000,\n \"newUserOnly\": 0,\n \"earlyRedeemSupported\": 0,\n \"duration\": 0,\n \"status\": \"ONGOING\"\n }\n ]\n}" + } + ] + } + ], + "description": "" + }, + { + "name": "VIP Lending", + "item": [ + { + "name": "Get Account Detail", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "otc-loan", + "loan" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470277)\n\n:::info[Description]\nThe following information is only applicable to loans. \nGet information on off-exchange funding and loans, This endpoint is only for querying accounts that are currently involved in loans.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| parentUid | string | Master UID |\n| orders | array | Refer to the schema section of orders |\n| ltv | object | Refer to the schema section of ltv |\n| totalMarginAmount | string | Total Margin Amount (USDT) |\n| transferMarginAmount | string | Total Maintenance Margin for Restricted Transfers (USDT) |\n| margins | array | Refer to the schema section of margins |\n\n**root.data.ltv Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| transferLtv | string | LTV of Restricted Transfers to Funding Account |\n| onlyClosePosLtv | string | LTV of Reduce Only (Restricted Open Positions) |\n| delayedLiquidationLtv | string | LTV of Delayed Liquidation |\n| instantLiquidationLtv | string | LTV of Instant Liquidation |\n| currentLtv | string | Current LTV |\n\n**root.data.ltv.orders Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | Loan Orders ID |\n| principal | string | Principal to Be Repaid |\n| interest | string | Interest to Be Repaid |\n| currency | string | Loan Currency |\n\n**root.data.ltv.orders.margins Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| marginCcy | string | Margin Currency |\n| marginQty | string | Maintenance Quantity (Calculated with Margin Coefficient) |\n| marginFactor | string | Margin Coefficient return real time margin discount rate to USDT |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "otc-loan", + "loan" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"parentUid\": \"1260004199\",\n \"orders\": [\n {\n \"orderId\": \"671a2be815f4140007a588e1\",\n \"principal\": \"100\",\n \"interest\": \"0\",\n \"currency\": \"USDT\"\n }\n ],\n \"ltv\": {\n \"transferLtv\": \"0.6000\",\n \"onlyClosePosLtv\": \"0.7500\",\n \"delayedLiquidationLtv\": \"0.7500\",\n \"instantLiquidationLtv\": \"0.8000\",\n \"currentLtv\": \"0.1111\"\n },\n \"totalMarginAmount\": \"900.00000000\",\n \"transferMarginAmount\": \"166.66666666\",\n \"margins\": [\n {\n \"marginCcy\": \"USDT\",\n \"marginQty\": \"1000.00000000\",\n \"marginFactor\": \"0.9000000000\"\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Get Accounts", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "otc-loan", + "accounts" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470278)\n\n:::info[Description]\nAccounts participating in OTC lending, This interface is only for querying accounts currently running OTC lending.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| uid | string | UID |\n| marginCcy | string | Margin Currency |\n| marginQty | string | Maintenance Quantity (Calculated with Margin Coefficient) |\n| marginFactor | string | Margin Coefficient |\n| accountType | string | Account Type: TRADE - Trading Account CONTRACT - Futures Account (for Total Futures Equity) |\n| isParent | boolean | If It Is Master Account |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "otc-loan", + "accounts" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"uid\": \"1260004199\",\n \"marginCcy\": \"USDT\",\n \"marginQty\": \"900\",\n \"marginFactor\": \"0.9000000000\",\n \"accountType\": \"TRADE\",\n \"isParent\": true\n }\n ]\n}" + } + ] + } + ], + "description": "" + }, + { + "name": "Affiliate", + "item": [ + { + "name": "Get Account", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v2", + "affiliate", + "inviter", + "statistics" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470279)\n\n:::info[Description]\nThis endpoint allows getting affiliate user rebate information.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| parentUid | string | Master account UID |\n| orders | array | Refer to the schema section of orders |\n| ltv | object | Refer to the schema section of ltv |\n| totalMarginAmount | string | Total Margin Amount (USDT) |\n| transferMarginAmount | string | Total Maintenance Margin for Restricted Transfers (USDT) |\n| margins | array | Refer to the schema section of margins |\n\n**root.data.ltv Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| transferLtv | string | LTV of Restricted Transfers to Funding Account |\n| onlyClosePosLtv | string | LTV of Reduce Only (Restricted Open Positions) |\n| delayedLiquidationLtv | string | LTV of Delayed Liquidation |\n| instantLiquidationLtv | string | LTV of Instant Liquidation |\n| currentLtv | string | Current LTV |\n\n**root.data.ltv.orders Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | Loan Orders ID |\n| currency | string | Loan Currency |\n| principal | string | Principal to Be Repaid |\n| interest | string | Interest to Be Repaid |\n\n**root.data.ltv.orders.margins Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| marginCcy | string | Margin Currency |\n| marginQty | string | Maintenance Quantity (Calculated with Margin Coefficient) |\n| marginFactor | string | Margin Coefficient return real time margin discount rate to USDT |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v2", + "affiliate", + "inviter", + "statistics" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"parentUid\": \"1000000\",\n \"orders\": [\n {\n \"orderId\": \"1668458892612980737\",\n \"currency\": \"USDT\",\n \"principal\": \"100\",\n \"interest\": \"0\"\n }\n ],\n \"ltv\": {\n \"transferLtv\": \"0.6000\",\n \"onlyClosePosLtv\": \"0.7500\",\n \"delayedLiquidationLtv\": \"0.9000\",\n \"instantLiquidationLtv\": \"0.9500\",\n \"currentLtv\": \"0.0854\"\n },\n \"totalMarginAmount\": \"1170.36181573\",\n \"transferMarginAmount\": \"166.66666666\",\n \"margins\": [\n {\n \"marginCcy\": \"USDT\",\n \"marginQty\": \"1170.36181573\",\n \"marginFactor\": \"1.000000000000000000\"\n }\n ]\n }\n}" + } + ] + } + ], + "description": "" + }, + { + "name": "Broker", + "item": [ + { + "name": "Beginners", + "item": [], + "description": "" + }, + { + "name": "API Broker", + "item": [ + { + "name": "Get Broker Rebate", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "broker", + "api", + "rebase", + "download" + ], + "query": [ + { + "key": "begin", + "value": "20240610", + "description": "Start time, for example: 20240610" + }, + { + "key": "end", + "value": "20241010", + "description": "End time, for example: 20241010 (query data with a maximum interval of 6 months)\n" + }, + { + "key": "tradeType", + "value": "1", + "description": "Transaction type, 1: spot 2: futures" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470280)\n\n:::info[Description]\nThis interface supports downloading Broker rebate orders\n:::\n\n### Excel Response\n\n| Param | Description | Example |\n| ------------------- | ----------------- |--------- |\n| Date | Date | 2024/9/1 |\n| BrokerUID | Broker's UID | 3243241 |\n| AffiliateUID | Affiliate's UID | 2354546 |\n| UID | User's UID | 6345466 |\n| BizLine | Business Line(Spotใ€Futures) | Spot |\n| Volume | Volume | 0 |\n| TotalCommission | Total Commission = BrokerCommission + UserCommission + AffiliateCommission | 0 |\n| BrokerCommission | Broker Commission | 0 |\n| UserCommission | User Commission | 0 |\n| AffiliateCommission | Affiliate Commission | 0 |\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| url | string | Rebate order file (link is valid for 1 day) |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{spot_endpoint}}" + ], + "path": [ + "api", + "v1", + "broker", + "api", + "rebase", + "download" + ], + "query": [ + { + "key": "begin", + "value": "20240610", + "description": "Start time, for example: 20240610" + }, + { + "key": "end", + "value": "20241010", + "description": "End time, for example: 20241010 (query data with a maximum interval of 6 months)\n" + }, + { + "key": "tradeType", + "value": "1", + "description": "Transaction type, 1: spot 2: futures" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"url\": \"https://kc-v2-promotion.s3.ap-northeast-1.amazonaws.com/broker/671aec522593f600019766d0_file.csv?X-Amz-Security-Token=IQo*********2cd90f14efb\"\n }\n}" + } + ] + } + ], + "description": "" + }, + { + "name": "Exchange Broker", + "item": [ + { + "name": "Get Broker Rebate", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{broker_endpoint}}" + ], + "path": [ + "api", + "v1", + "broker", + "nd", + "rebase", + "download" + ], + "query": [ + { + "key": "begin", + "value": "20240610", + "description": "Start time, for example: 20240610" + }, + { + "key": "end", + "value": "20241010", + "description": "End time, for example: 20241010 (query data with a maximum interval of 6 months)\n" + }, + { + "key": "tradeType", + "value": "1", + "description": "Transaction type, 1: spot 2: futures" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470281)\n\n:::info[Description]\nThis interface supports downloading Broker rebate orders\n:::\n\n### Excel Response\n\n| Param | Description | Example |\n| ------------------- | ----------------- |--------- |\n| Date | Date | 2024/9/1 |\n| BrokerUID | Broker's UID | 3243241 |\n| AffiliateUID | Affiliate's UID | 2354546 |\n| UID | User's UID | 6345466 |\n| BizLine | Business Line(Spotใ€Futures) | Spot |\n| Volume | Volume | 0 |\n| TotalCommission | Total Commission = BrokerCommission + UserCommission + AffiliateCommission | 0 |\n| BrokerCommission | Broker Commission | 0 |\n| UserCommission | User Commission | 0 |\n| AffiliateCommission | Affiliate Commission | 0 |\n\n\n\n\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| url | string | Rebate order file (link is valid for 1 day) |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{broker_endpoint}}" + ], + "path": [ + "api", + "v1", + "broker", + "nd", + "rebase", + "download" + ], + "query": [ + { + "key": "begin", + "value": "20240610", + "description": "Start time, for example: 20240610" + }, + { + "key": "end", + "value": "20241010", + "description": "End time, for example: 20241010 (query data with a maximum interval of 6 months)\n" + }, + { + "key": "tradeType", + "value": "1", + "description": "Transaction type, 1: spot 2: futures" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"url\": \"https://kc-v2-promotion.s3.ap-northeast-1.amazonaws.com/broker/671aec522593f600019766d0_file.csv?X-Amz-Security-Token=IQo*********2cd90f14efb\"\n }\n}" + } + ] + }, + { + "name": "Get Broker Info", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{broker_endpoint}}" + ], + "path": [ + "api", + "v1", + "broker", + "nd", + "info" + ], + "query": [ + { + "key": "begin", + "value": "20240510", + "description": "Start time, for example: 20230110" + }, + { + "key": "end", + "value": "20241010", + "description": "End time, for example: 20230210 (query data with a maximum interval of 6 months)\n" + }, + { + "key": "tradeType", + "value": "1", + "description": "Transaction type, 1: spot 2: futures" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470282)\n\n:::info[Description]\nThis endpoint supports querying the basic information of the current Broker\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| accountSize | integer | Number of sub-accounts created |\n| maxAccountSize | integer | The maximum number of sub-accounts allowed to be created, null means no limit |\n| level | integer | Broker level |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{broker_endpoint}}" + ], + "path": [ + "api", + "v1", + "broker", + "nd", + "info" + ], + "query": [ + { + "key": "begin", + "value": "20240510", + "description": "Start time, for example: 20230110" + }, + { + "key": "end", + "value": "20241010", + "description": "End time, for example: 20230210 (query data with a maximum interval of 6 months)\n" + }, + { + "key": "tradeType", + "value": "1", + "description": "Transaction type, 1: spot 2: futures" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"accountSize\": 0,\n \"maxAccountSize\": null,\n \"level\": 0\n }\n}" + } + ] + }, + { + "name": "Get SubAccount", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{broker_endpoint}}" + ], + "path": [ + "api", + "v1", + "broker", + "nd", + "account" + ], + "query": [ + { + "key": "uid", + "value": "226383154", + "description": "Sub-account UID" + }, + { + "key": "currentPage", + "value": "1", + "description": "Current page, default is 1" + }, + { + "key": "pageSize", + "value": "20", + "description": "The number returned per page, the default is 20, the maximum is 100" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470283)\n\n:::info[Description]\nThis interface supports querying sub-accounts created by Broker\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currentPage | integer | Current page |\n| pageSize | integer | Page Size |\n| totalNum | integer | Total Number |\n| totalPage | integer | Total Page |\n| items | array | Refer to the schema section of items |\n\n**root.data.items Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| accountName | string | Sub-account name |\n| uid | string | Sub-account UID |\n| createdAt | integer | Creation time, unix timestamp (milliseconds) |\n| level | integer | Sub-account VIP level
|\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{broker_endpoint}}" + ], + "path": [ + "api", + "v1", + "broker", + "nd", + "account" + ], + "query": [ + { + "key": "uid", + "value": "226383154", + "description": "Sub-account UID" + }, + { + "key": "currentPage", + "value": "1", + "description": "Current page, default is 1" + }, + { + "key": "pageSize", + "value": "20", + "description": "The number returned per page, the default is 20, the maximum is 100" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"currentPage\": 1,\n \"pageSize\": 20,\n \"totalNum\": 1,\n \"totalPage\": 1,\n \"items\": [\n {\n \"accountName\": \"Account15\",\n \"uid\": \"226383154\",\n \"createdAt\": 1729819382000,\n \"level\": 0\n }\n ]\n }\n}" + } + ] + }, + { + "name": "Get SubAccount API", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{broker_endpoint}}" + ], + "path": [ + "api", + "v1", + "broker", + "nd", + "account", + "apikey" + ], + "query": [ + { + "key": "uid", + "value": "226383154", + "description": "Sub-account UID" + }, + { + "key": "apiKey", + "value": "671afb36cee20f00015cfaf1", + "description": "Sub-account apiKey\n" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470284)\n\n:::info[Description]\nThis interface supports querying the Brokerโ€™s sub-account APIKEY\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| uid | string | Sub-Account UID |\n| label | string | apikey remarks |\n| apiKey | string | apiKey |\n| apiVersion | integer | apiVersion |\n| permissions | array | Refer to the schema section of permissions |\n| ipWhitelist | array | Refer to the schema section of ipWhitelist |\n| createdAt | integer | Creation time, unix timestamp (milliseconds) |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{broker_endpoint}}" + ], + "path": [ + "api", + "v1", + "broker", + "nd", + "account", + "apikey" + ], + "query": [ + { + "key": "uid", + "value": "226383154", + "description": "Sub-account UID" + }, + { + "key": "apiKey", + "value": "671afb36cee20f00015cfaf1", + "description": "Sub-account apiKey\n" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"uid\": \"226383154\",\n \"label\": \"This is remarks\",\n \"apiKey\": \"671afb36cee20f00015cfaf1\",\n \"apiVersion\": 3,\n \"permissions\": [\n \"General\",\n \"Spot\"\n ],\n \"ipWhitelist\": [\n \"127.**.1\",\n \"203.**.154\"\n ],\n \"createdAt\": 1729821494000\n }\n ]\n}" + } + ] + }, + { + "name": "Get Deposit List", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{broker_endpoint}}" + ], + "path": [ + "api", + "v1", + "asset", + "ndbroker", + "deposit", + "list" + ], + "query": [ + { + "key": "currency", + "value": "USDT", + "description": "currency" + }, + { + "key": "status", + "value": "SUCCESS", + "description": "Status. Available value: PROCESSING, SUCCESS, FAILURE" + }, + { + "key": "hash", + "value": null, + "description": "hash" + }, + { + "key": "startTimestamp", + "value": null, + "description": "Start time (milisecond)" + }, + { + "key": "endTimestamp", + "value": null, + "description": "End time (milisecond)๏ผŒDefault sorting in descending order" + }, + { + "key": "limit", + "value": "100", + "description": "Maximum number of returned items, maximum 1000, default 1000" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470285)\n\n:::info[Description]\nThis endpoint can obtain the deposit records of each sub-account under the ND Broker.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| success | boolean | |\n| code | string | |\n| msg | string | |\n| retry | boolean | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| uid | number | deposit uid |\n| hash | string | hash |\n| address | string | Deposit address |\n| memo | string | Address remark. If thereโ€™s no remark, it is empty. When you withdraw from other platforms to the KuCoin, you need to fill in memo(tag). If you do not fill memo (tag), your deposit may not be available, please be cautious. |\n| amount | string | Deposit amount |\n| fee | string | Fees charged for deposit |\n| currency | string | currency |\n| isInner | boolean | Internal deposit or not |\n| walletTxId | string | Wallet Txid |\n| status | string | Status. Available value: PROCESSING, SUCCESS, FAILURE |\n| remark | string | remark |\n| chain | string | chain name of currency |\n| createdAt | integer | Creation time of the database record |\n| updatedAt | integer | Update time of the database record |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{broker_endpoint}}" + ], + "path": [ + "api", + "v1", + "asset", + "ndbroker", + "deposit", + "list" + ], + "query": [ + { + "key": "currency", + "value": "USDT", + "description": "currency" + }, + { + "key": "status", + "value": "SUCCESS", + "description": "Status. Available value: PROCESSING, SUCCESS, FAILURE" + }, + { + "key": "hash", + "value": null, + "description": "hash" + }, + { + "key": "startTimestamp", + "value": null, + "description": "Start time (milisecond)" + }, + { + "key": "endTimestamp", + "value": null, + "description": "End time (milisecond)๏ผŒDefault sorting in descending order" + }, + { + "key": "limit", + "value": "100", + "description": "Maximum number of returned items, maximum 1000, default 1000" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": [\n {\n \"uid\": 165111215,\n \"hash\": \"6724e363a492800007ec602b\",\n \"address\": \"xxxxxxx@gmail.com\",\n \"memo\": \"\",\n \"amount\": \"3.0\",\n \"fee\": \"0.0\",\n \"currency\": \"USDT\",\n \"isInner\": true,\n \"walletTxId\": \"bbbbbbbbb\",\n \"status\": \"SUCCESS\",\n \"chain\": \"\",\n \"remark\": \"\",\n \"createdAt\": 1730470760000,\n \"updatedAt\": 1730470760000\n }\n ]\n}" + } + ] + }, + { + "name": "Get Transfer History", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{broker_endpoint}}" + ], + "path": [ + "api", + "v3", + "broker", + "nd", + "transfer", + "detail" + ], + "query": [ + { + "key": "orderId", + "value": "671b4600c1e3dd000726866d", + "description": "Transfer Order ID" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470286)\n\n:::info[Description]\nThis endpoint supports querying transfer records of the broker itself and its created sub-accounts.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | Transfer Order ID |\n| currency | string | Currency |\n| amount | string | Transfer Amount |\n| fromUid | integer | UID of the user transferring out |\n| fromAccountType | string | From Account Type:Account Type: MAIN, TRADE, CONTRACT, MARGIN, ISOLATED |\n| fromAccountTag | string | Trading pair, required if the account type is ISOLATED, e.g., BTC-USDT |\n| toUid | integer | UID of the user transferring in |\n| toAccountType | string | Account Type:Account Type: MAIN, TRADE, CONTRACT, MARGIN, ISOLATED |\n| toAccountTag | string | To Trading pair, required if the account type is ISOLATED, e.g., BTC-USDT |\n| status | string | Status: PROCESSING (processing), SUCCESS (successful), FAILURE (failed) |\n| reason | string | Failure Reason |\n| createdAt | integer | Creation Time (Unix timestamp in milliseconds) |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{broker_endpoint}}" + ], + "path": [ + "api", + "v3", + "broker", + "nd", + "transfer", + "detail" + ], + "query": [ + { + "key": "orderId", + "value": "671b4600c1e3dd000726866d", + "description": "Transfer Order ID" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"orderId\": \"671b4600c1e3dd000726866d\",\n \"currency\": \"USDT\",\n \"amount\": \"1\",\n \"fromUid\": 165111215,\n \"fromAccountType\": \"MAIN\",\n \"fromAccountTag\": \"DEFAULT\",\n \"toUid\": 226383154,\n \"toAccountType\": \"MAIN\",\n \"toAccountTag\": \"DEFAULT\",\n \"status\": \"SUCCESS\",\n \"reason\": null,\n \"createdAt\": 1729840640000\n }\n}" + } + ] + }, + { + "name": "Get Withdraw Detail", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{broker_endpoint}}" + ], + "path": [ + "api", + "v3", + "broker", + "nd", + "withdraw", + "detail" + ], + "query": [ + { + "key": "withdrawalId", + "value": "66617a2***3c9a", + "description": "Withdrawal ID" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470287)\n\n:::info[Description]\nThis endpoint supports querying the withdrawal records of sub-accounts created by a Broker (excluding main account of nd broker).\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| data | object | Refer to the schema section of data |\n| code | string | |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | Withdrawal ID |\n| chain | string | chain id of currency |\n| walletTxId | string | Wallet Transaction ID |\n| uid | integer | UID |\n| updatedAt | integer | Update Time (milliseconds) |\n| amount | string | Amount |\n| memo | string | Memo |\n| fee | string | Fee |\n| address | string | Address |\n| remark | string | Remark |\n| isInner | boolean | Is Internal (true or false) |\n| currency | string | Currency |\n| status | string | Status (PROCESSING, WALLET_PROCESSING, REVIEW, SUCCESS, FAILURE) |\n| createdAt | integer | Creation Time (milliseconds) |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{broker_endpoint}}" + ], + "path": [ + "api", + "v3", + "broker", + "nd", + "withdraw", + "detail" + ], + "query": [ + { + "key": "withdrawalId", + "value": "66617a2***3c9a", + "description": "Withdrawal ID" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"data\": {\n \"id\": \"66617a2***3c9a\",\n \"chain\": \"ton\",\n \"walletTxId\": \"AJ***eRI=\",\n \"uid\": 157267400,\n \"amount\": \"1.00000000\",\n \"memo\": \"7025734\",\n \"fee\": \"0.00000000\",\n \"address\": \"EQDn***dKbGzr\",\n \"remark\": \"\",\n \"isInner\": false,\n \"currency\": \"USDT\",\n \"status\": \"SUCCESS\",\n \"createdAt\": 1717664288000,\n \"updatedAt\": 1717664375000\n },\n \"code\": \"200000\"\n}" + } + ] + }, + { + "name": "Get Deposit Detail", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{broker_endpoint}}" + ], + "path": [ + "api", + "v3", + "broker", + "nd", + "deposit", + "detail" + ], + "query": [ + { + "key": "currency", + "value": "USDT", + "description": "Currency" + }, + { + "key": "hash", + "value": "30bb0e0b***4156c5188", + "description": "Hash Value" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470288)\n\n:::info[Description]\nThis endpoint supports querying the deposit record of sub-accounts created by a Broker (excluding main account of nd broker)\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| data | object | Refer to the schema section of data |\n| code | string | |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| chain | string | chain id of currency |\n| hash | string | Hash |\n| walletTxId | string | Wallet Transaction ID |\n| uid | integer | UID |\n| updatedAt | integer | Update Time (milliseconds) |\n| amount | string | Amount |\n| memo | string | Memo |\n| fee | string | Fee |\n| address | string | Address |\n| remark | string | Remark |\n| isInner | boolean | Is Internal (true or false) |\n| currency | string | Currency |\n| status | string | Status (PROCESSING, SUCCESS, FAILURE) |\n| createdAt | integer | Creation Time (milliseconds) |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "GET", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{broker_endpoint}}" + ], + "path": [ + "api", + "v3", + "broker", + "nd", + "deposit", + "detail" + ], + "query": [ + { + "key": "currency", + "value": "USDT", + "description": "Currency" + }, + { + "key": "hash", + "value": "30bb0e0b***4156c5188", + "description": "Hash Value" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"data\": {\n \"chain\": \"trx\",\n \"hash\": \"30bb0e0b***4156c5188\",\n \"walletTxId\": \"30bb0***610d1030f\",\n \"uid\": 201496341,\n \"updatedAt\": 1713429174000,\n \"amount\": \"8.5\",\n \"memo\": \"\",\n \"fee\": \"0.0\",\n \"address\": \"THLPzUrbd1o***vP7d\",\n \"remark\": \"Deposit\",\n \"isInner\": false,\n \"currency\": \"USDT\",\n \"status\": \"SUCCESS\",\n \"createdAt\": 1713429173000\n },\n \"code\": \"200000\"\n}" + } + ] + }, + { + "name": "Delete SubAccount API", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{broker_endpoint}}" + ], + "path": [ + "api", + "v1", + "broker", + "nd", + "account", + "apikey" + ], + "query": [ + { + "key": "uid", + "value": "226383154", + "description": "Sub-account UID" + }, + { + "key": "apiKey", + "value": "671afb36cee20f00015cfaf1", + "description": "Sub-account apiKey\n" + } + ] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470289)\n\n:::info[Description]\nThis interface supports deleting Brokerโ€™s sub-account APIKEY\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | boolean | |\n\n---\n", + "body": {} + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "DELETE", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{broker_endpoint}}" + ], + "path": [ + "api", + "v1", + "broker", + "nd", + "account", + "apikey" + ], + "query": [ + { + "key": "uid", + "value": "226383154", + "description": "Sub-account UID" + }, + { + "key": "apiKey", + "value": "671afb36cee20f00015cfaf1", + "description": "Sub-account apiKey\n" + } + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": true\n}" + } + ] + }, + { + "name": "Add SubAccount", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{broker_endpoint}}" + ], + "path": [ + "api", + "v1", + "broker", + "nd", + "account" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470290)\n\n:::info[Description]\nThis endpoint supports Broker users to create sub-accounts\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| accountName | string | Sub Account Name, Note that this name is unique across the exchange. It is recommended to add a special identifier to prevent name duplication. |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| accountName | string | Sub-Account name
|\n| uid | string | Sub-Account UID |\n| createdAt | integer | Creation time, unix timestamp (milliseconds) |\n| level | integer | Subaccount VIP level |\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"accountName\": \"Account1\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{broker_endpoint}}" + ], + "path": [ + "api", + "v1", + "broker", + "nd", + "account" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"accountName\": \"Account15\",\n \"uid\": \"226383154\",\n \"createdAt\": 1729819381908,\n \"level\": 0\n }\n}" + } + ] + }, + { + "name": "Add SubAccount API", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{broker_endpoint}}" + ], + "path": [ + "api", + "v1", + "broker", + "nd", + "account", + "apikey" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470291)\n\n:::info[Description]\nThis interface supports the creation of Broker sub-account APIKEY\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| uid | string | Subaccount UID |\n| passphrase | string | API passphrase |\n| ipWhitelist | array | Refer to the schema section of ipWhitelist |\n| permissions | array | Refer to the schema section of permissions |\n| label | string | apikey remarks (length 4~32)
|\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| uid | string | Sub-Account UID |\n| label | string | apikey remarks |\n| apiKey | string | apiKey |\n| secretKey | string | secretKey |\n| apiVersion | integer | apiVersion |\n| permissions | array | Refer to the schema section of permissions |\n| ipWhitelist | array | Refer to the schema section of ipWhitelist |\n| createdAt | integer | Creation time, unix timestamp (milliseconds) |\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"uid\": \"226383154\",\n \"passphrase\": \"11223344\",\n \"ipWhitelist\": [\n \"127.0.0.1\",\"123.123.123.123\"\n ],\n \"permissions\": [\n \"general\",\"spot\"\n ],\n \"label\": \"This is remarks\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{broker_endpoint}}" + ], + "path": [ + "api", + "v1", + "broker", + "nd", + "account", + "apikey" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"uid\": \"226383154\",\n \"label\": \"This is remarks\",\n \"apiKey\": \"671afb36cee20f00015cfaf1\",\n \"secretKey\": \"d694df2******5bae05b96\",\n \"apiVersion\": 3,\n \"permissions\": [\n \"General\",\n \"Spot\"\n ],\n \"ipWhitelist\": [\n \"127.0.0.1\",\n \"123.123.123.123\"\n ],\n \"createdAt\": 1729821494000\n }\n}" + } + ] + }, + { + "name": "Modify SubAccount API", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{broker_endpoint}}" + ], + "path": [ + "api", + "v1", + "broker", + "nd", + "account", + "update-apikey" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470292)\n\n:::info[Description]\nThis interface supports modify the Brokerโ€™s sub-account APIKEY\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| uid | string | Subaccount UID |\n| ipWhitelist | array | Refer to the schema section of ipWhitelist |\n| permissions | array | Refer to the schema section of permissions |\n| label | string | apikey remarks (length 4~32)
|\n| apiKey | string | Subaccount apiKey |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| uid | string | Sub-Account UID |\n| label | string | apikey remarks |\n| apiKey | string | apiKey |\n| apiVersion | integer | apiVersion |\n| permissions | array | Refer to the schema section of permissions |\n| ipWhitelist | array | Refer to the schema section of ipWhitelist |\n| createdAt | integer | Creation time, unix timestamp (milliseconds) |\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"uid\": \"226383154\",\n \"apiKey\": \"671afb36cee20f00015cfaf1\",\n \"ipWhitelist\": [\n \"127.0.0.1\",\n \"123.123.123.123\"\n ],\n \"permissions\": [\n \"general\",\n \"spot\"\n ],\n \"label\": \"This is remarks\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{broker_endpoint}}" + ], + "path": [ + "api", + "v1", + "broker", + "nd", + "account", + "update-apikey" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"uid\": \"226383154\",\n \"label\": \"This is remarks\",\n \"apiKey\": \"671afb36cee20f00015cfaf1\",\n \"apiVersion\": 3,\n \"permissions\": [\n \"General\",\n \"Spot\"\n ],\n \"ipWhitelist\": [\n \"127.**.1\",\n \"123.**.123\"\n ],\n \"createdAt\": 1729821494000\n }\n}" + } + ] + }, + { + "name": "Transfer", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{broker_endpoint}}" + ], + "path": [ + "api", + "v1", + "broker", + "nd", + "transfer" + ], + "query": [] + }, + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470293)\n\n:::info[Description]\nThis endpoint supports fund transfer between Broker account and Broker sub-accounts.\n\nPlease be aware that withdrawal from sub-account is not directly supported. Broker has to transfer funds from broker sub-account to broker account to initiate the withdrawals.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| currency | string | Currency |\n| amount | string | Transfer Amount (must be a positive integer in the currency's precision) |\n| direction | string | Fund transfer direction: OUT (Broker account is transferred to Broker sub-account), IN (Broker sub-account is transferred to Broker account) |\n| accountType | string | Broker account types: MAIN (Funding account), TRADE (Spot trading account) |\n| specialUid | string | Broker subaccount uid, must be the Broker subaccount created by the current Broker user. |\n| specialAccountType | string | Broker sub-account types: MAIN (Funding account), TRADE (Spot trading account) |\n| clientOid | string | Client Order Id, The unique identifier created by the client. It is recommended to use UUID. The maximum length is 128 bits. |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | |\n\n---\n", + "body": { + "mode": "raw", + "raw": "{\n \"currency\": \"USDT\",\n \"amount\": \"1\",\n \"clientOid\": \"e6c24d23-6bc2-401b-bf9e-55e2daddfbc1\",\n \"direction\": \"OUT\",\n \"accountType\": \"MAIN\",\n \"specialUid\": \"226383154\",\n \"specialAccountType\": \"MAIN\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + }, + "response": [ + { + "name": "Successful Response", + "originalRequest": { + "method": "POST", + "header": [], + "url": { + "raw": "", + "protocol": "https", + "host": [ + "{{broker_endpoint}}" + ], + "path": [ + "api", + "v1", + "broker", + "nd", + "transfer" + ], + "query": [] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "name": "Content-Type", + "description": { + "content": "", + "type": "text/plain" + } + }, + { + "key": "gw-ratelimit-remaining", + "value": 1997, + "name": "gw-ratelimit-remaining" + }, + { + "key": "gw-ratelimit-limit", + "value": 2000, + "name": "gw-ratelimit-limit" + }, + { + "key": "gw-ratelimit-reset", + "value": 29990, + "name": "gw-ratelimit-reset" + } + ], + "cookie": [], + "body": "{\n \"code\": \"200000\",\n \"data\": {\n \"orderId\": \"671b4600c1e3dd000726866d\"\n }\n}" + } + ] + } + ], + "description": "" + } + ], + "description": "", + "event": [ + { + "listen": "prerequest", + "script": { + "type": "text/javascript", + "packages": {}, + "exec": [ + "\nfunction extractPathVariable(str) {\n const regex = /^\\{\\{(.+?)\\}\\}$/;\n const match = str.match(regex);\n if (match) {\n return match[1];\n }\n return null;\n}\n\nfunction hasAnyFieldEmpty(obj) {\n for (const key in obj) {\n if (obj[key] === \"\" || obj[key] === null || obj[key] === undefined) {\n return true;\n }\n }\n return false;\n}\n\nfunction sign(text, secret) {\n const hash = CryptoJS.HmacSHA256(text, secret);\n return CryptoJS.enc.Base64.stringify(hash)\n}\n\nfunction auth(apiKey, method, url, data) {\n if (hasAnyFieldEmpty(apiKey)) {\n console.warn('The API key-related (or broker-related) information is not configured. Please check the fields in the environment variables.')\n return {'User-Agent': `Kucoin-Universal-Postman-SDK/v1.0.0`}\n }\n\n\n const timestamp = Date.now();\n const text = timestamp + method.toUpperCase() + url + data;\n const signature = sign(text, apiKey.secret);\n const brokerText = timestamp + apiKey.partner + apiKey.key;\n const brokerSignature = sign(brokerText, apiKey.brokerKey);\n return {\n 'KC-API-KEY': apiKey.key,\n 'KC-API-SIGN': signature,\n 'KC-API-TIMESTAMP': timestamp.toString(),\n 'KC-API-PASSPHRASE': sign(apiKey.passphrase || '', apiKey.secret),\n 'Content-Type': 'application/json',\n 'User-Agent': `Kucoin-Universal-Postman-SDK/v1.0.0`,\n 'KC-API-KEY-VERSION': 2,\n 'KC-API-PARTNER': apiKey.partner,\n 'KC-BROKER-NAME': apiKey.brokerName,\n 'KC-API-PARTNER-VERIFY': 'true',\n 'KC-API-PARTNER-SIGN': brokerSignature,\n };\n}\n\nlet key = pm.environment.get('API_KEY')\nlet secret = pm.environment.get('API_SECRET')\nlet passphrase = pm.environment.get('API_PASSPHRASE')\n\nlet brokerName = pm.environment.get('BROKER_NAME')\nlet partner = pm.environment.get('BROKER_PARTNER')\nlet brokerKey = pm.environment.get('BROKER_KEY')\n\nlet url = pm.request.url.getPathWithQuery()\nlet method = pm.request.method\nlet body = pm.request.body ? pm.request.body.toString() : ''\n\nfor (const index in pm.request.url.path) {\n path = pm.request.url.path[index]\n pathVar = extractPathVariable(path)\n if (pathVar != null) {\n let collectionVariable = pm.collectionVariables.get(pathVar);\n if (collectionVariable != null) {\n url = url.replace(path, collectionVariable)\n } else {\n console.warn('no path variable set: ' + path)\n }\n }\n}\n\nheader = auth({\n key: key, passphrase: passphrase, secret: secret, brokerName: brokerName, partner: partner, brokerKey: brokerKey\n}, method, url, body)\n\nfor (const [headerName, headerValue] of Object.entries(header)) {\n pm.request.headers.add({ key: headerName, value: headerValue })\n}" + ] + } + }, + { + "listen": "test", + "script": { + "type": "text/javascript", + "packages": {}, + "exec": [ + "" + ] + } + } + ] + } + ], + "variable": [ + { + "key": "symbol", + "value": "" + }, + { + "key": "order-id", + "value": "" + }, + { + "key": "withdrawalId", + "value": "" + }, + { + "key": "currency", + "value": "" + }, + { + "key": "subUserId", + "value": "" + }, + { + "key": "clientOid", + "value": "" + }, + { + "key": "accountId", + "value": "" + }, + { + "key": "size", + "value": "" + }, + { + "key": "orderId", + "value": "" + } + ], + "event": [ + { + "listen": "prerequest", + "script": { + "type": "text/javascript", + "packages": {}, + "exec": [ + "function extractPathVariable(str) {\n const regex = /^\\{\\{(.+?)\\}\\}$/;\n const match = str.match(regex);\n if (match) {\n return match[1];\n }\n return null;\n}\n\nfunction hasAnyFieldEmpty(obj) {\n for (const key in obj) {\n if (obj[key] === \"\" || obj[key] === null || obj[key] === undefined) {\n return true;\n }\n }\n return false;\n}\n\nfunction sign(text, secret) {\n const hash = CryptoJS.HmacSHA256(text, secret);\n return CryptoJS.enc.Base64.stringify(hash)\n}\n\nfunction auth(apiKey, method, url, data) {\n if (hasAnyFieldEmpty(apiKey)) {\n console.warn('The API key-related information is not configured; only the public channel API is accessible.')\n return {'User-Agent': `Kucoin-Universal-Postman-SDK/v1.0.0`}\n }\n\n const timestamp = Date.now();\n const text = timestamp + method.toUpperCase() + url + data;\n const signature = sign(text, apiKey.secret);\n return {\n 'KC-API-KEY': apiKey.key,\n 'KC-API-SIGN': signature,\n 'KC-API-TIMESTAMP': timestamp.toString(),\n 'KC-API-PASSPHRASE': sign(apiKey.passphrase || '', apiKey.secret),\n 'Content-Type': 'application/json',\n 'User-Agent': `Kucoin-Universal-Postman-SDK/v1.0.0`,\n 'KC-API-KEY-VERSION': 2,\n };\n}\n\nlet key = pm.environment.get('API_KEY')\nlet secret = pm.environment.get('API_SECRET')\nlet passphrase = pm.environment.get('API_PASSPHRASE')\n\nlet url = pm.request.url.getPathWithQuery()\nlet method = pm.request.method\nlet body = pm.request.body ? pm.request.body.toString() : ''\n\nfor (const index in pm.request.url.path) {\n path = pm.request.url.path[index]\n pathVar = extractPathVariable(path)\n if (pathVar != null) {\n let collectionVariable = pm.collectionVariables.get(pathVar);\n if (collectionVariable != null) {\n url = url.replace(path, collectionVariable)\n } else {\n console.warn('no path variable set: ' + path)\n }\n }\n}\n\nheader = auth({ key: key, passphrase: passphrase, secret: secret }, method, url, body)\n\nfor (const [headerName, headerValue] of Object.entries(header)) {\n pm.request.headers.add({ key: headerName, value: headerValue })\n}" + ] + } + }, + { + "listen": "test", + "script": { + "type": "text/javascript", + "packages": {}, + "exec": [ + "" + ] + } + } + ] +} \ No newline at end of file diff --git a/sdk/postman/env.json b/sdk/postman/env.json new file mode 100644 index 00000000..97ba483d --- /dev/null +++ b/sdk/postman/env.json @@ -0,0 +1,61 @@ +{ + "id": "0deee4de-080a-4246-a95d-3eee14126248", + "name": "KuCoin API Production", + "values": [ + { + "key": "spot_endpoint", + "value": "api.kucoin.com", + "type": "default", + "enable": true + }, + { + "key": "futures_endpoint", + "value": "api-futures.kucoin.com", + "type": "default", + "enable": true + }, + { + "key": "broker_endpoint", + "value": "api-broker.kucoin.com", + "type": "default", + "enable": true + }, + { + "key": "API_KEY", + "value": "", + "type": "secret", + "enabled": true + }, + { + "key": "API_SECRET", + "value": "", + "type": "secret", + "enabled": true + }, + { + "key": "API_PASSPHRASE", + "value": "", + "type": "secret", + "enabled": true + }, + { + "key": "BROKER_NAME", + "value": "", + "type": "secret", + "enabled": true + }, + { + "key": "BROKER_PARTNER", + "value": "", + "type": "secret", + "enabled": true + }, + { + "key": "BROKER_KEY", + "value": "", + "type": "secret", + "enabled": true + } + ], + "_postman_variable_scope": "environment" +} \ No newline at end of file From 32389c7e3672b183dca75f90c062e4fd6b20f8c3 Mon Sep 17 00:00:00 2001 From: "Isaac.Tang" Date: Mon, 30 Dec 2024 12:10:52 +0800 Subject: [PATCH 13/16] feat(doc): update all built in doc url --- generator/postman/collection.py | 2 +- generator/preprocessor/api_meta.py | 37 ++++++-- .../collection-Abandoned Endpoints.json | 14 +-- sdk/postman/collection-REST.json | 66 ++++++------- spec/rest/api/openapi-account-account.json | 2 +- spec/rest/api/openapi-account-subaccount.json | 10 +- spec/rest/api/openapi-broker-ndbroker.json | 8 +- .../rest/api/openapi-futures-fundingfees.json | 4 +- spec/rest/api/openapi-futures-market.json | 14 +-- spec/rest/api/openapi-futures-order.json | 46 +++++----- spec/rest/api/openapi-futures-positions.json | 28 +++--- spec/rest/api/openapi-margin-order.json | 40 ++++---- spec/rest/api/openapi-spot-order.json | 80 ++++++++-------- spec/rest/entry/openapi-account.json | 12 +-- spec/rest/entry/openapi-broker.json | 8 +- spec/rest/entry/openapi-futures.json | 92 +++++++++---------- spec/rest/entry/openapi-margin.json | 40 ++++---- spec/rest/entry/openapi-spot.json | 80 ++++++++-------- spec/ws/openapi-futures-private.json | 14 +-- spec/ws/openapi-futures-public.json | 2 +- spec/ws/openapi-spot-private.json | 4 +- 21 files changed, 314 insertions(+), 289 deletions(-) diff --git a/generator/postman/collection.py b/generator/postman/collection.py index 193ead0c..491b727c 100644 --- a/generator/postman/collection.py +++ b/generator/postman/collection.py @@ -224,7 +224,7 @@ def escape_url(self, markdown): if match: number = match.group(2) url = '' - if self.doc_id.__contains__(number): + if int(number) in self.doc_id: url = self.gen_doc_api_url(number, True) else: url = self.gen_doc_api_url(number, False) diff --git a/generator/preprocessor/api_meta.py b/generator/preprocessor/api_meta.py index dd8a3ee5..960efbf7 100644 --- a/generator/preprocessor/api_meta.py +++ b/generator/preprocessor/api_meta.py @@ -1,10 +1,16 @@ import codecs import json -import random +import re import sys +apiPath = 'https://www.kucoin.com/docs-new/api-' +docPath = 'https://www.kucoin.com/docs-new/doc-' + class ApiMetaUtil: + + doc_id = [] + @staticmethod def collect_api(collection, result: list): if type(collection) is list: @@ -65,6 +71,7 @@ def parse(file_path): file_content = file.read() json_content = json.loads(file_content) + ApiMetaUtil.doc_id = json_content['doc_id'] api_list = list() for collection in json_content['apiCollection']: @@ -77,13 +84,32 @@ def parse(file_path): print(f"An error occurred when read meta file: {e}") sys.exit(1) + @staticmethod + def gen_doc_api_url(id, doc: bool): + if doc: + return f'{docPath}{id}' + return f'{apiPath}{id}' + + @staticmethod + def escape_url(desc, doc_id): + pattern = r"apidog://link/(pages|endpoint)/(\d+)" + match = re.search(pattern, desc) + if match: + number = match.group(2) + url = '' + if int(number) in doc_id: + url = ApiMetaUtil.gen_doc_api_url(number, True) + else: + url = ApiMetaUtil.gen_doc_api_url(number, False) + desc = re.sub(pattern, url, desc) + return desc + @staticmethod def update_doc_desc(schema): if schema and isinstance(schema, dict) and 'properties' in schema: for p in schema['properties'].values(): if isinstance(p, dict) and 'description' in p: - p['description'] = p['description'].replace('apidog://link', 'doc://link') - + p['description'] = ApiMetaUtil.escape_url(p['description'], ApiMetaUtil.doc_id) @staticmethod def update_tuple(schema): @@ -101,7 +127,6 @@ def update_tuple(schema): 'type': 'AnyType' } - @staticmethod def update_response_schema_required(schema): @@ -256,7 +281,6 @@ def generate_path_operation(api): if name not in req_example: req_example[name] = ApiMetaUtil.gen_default_value_for_example(query_para) - path_operation['parameters'].append(result) # requestBody @@ -279,7 +303,8 @@ def generate_path_operation(api): } try: example_raw = body_data['example'] - filtered_data = "\n".join(line for line in example_raw.splitlines() if not line.strip().startswith("//")) + filtered_data = "\n".join( + line for line in example_raw.splitlines() if not line.strip().startswith("//")) j = json.loads(filtered_data) if len(req_example) == 0 and isinstance(j, list): diff --git a/sdk/postman/collection-Abandoned Endpoints.json b/sdk/postman/collection-Abandoned Endpoints.json index 0268ad56..5006b574 100644 --- a/sdk/postman/collection-Abandoned Endpoints.json +++ b/sdk/postman/collection-Abandoned Endpoints.json @@ -2240,7 +2240,7 @@ ], "query": [] }, - "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470333)\n\n:::tip[]\nIt is recommended to use the **POST /api/v1/hf/orders** endpoint instead of this endpoint\n:::\n\n:::info[Description]\nPlace order to the Spot trading system, you can place two major types of orders: limit and market. Orders can only be placed if your account has sufficient funds. Once an order is placed, your funds will be put on hold for the duration of the order. The amount of funds on hold depends on the order type and parameters specified.\n:::\n\n:::tip[Tips]\nPlease note that once your order enters the order book, the system will freeze the handling fees for the order ahead of time.\n\nBefore placing orders, please be sure to fully understand the meaning of the parameters for each trading pair.\n:::\n\n:::tip[Tips]\nThe maximum number of active orders per account is 2000, with a maximum of 200 active orders per trading pair.(including stop orders).\n:::\n\n**Public order placement request parameters**\n\n| Param | Type | Mandatory | Description |\n| --------- | ------ | --------- | ----------- |\n| clientOid | String | Yes | clientOid, the unique identifier created by the client, use of UUID, with a maximum length of 128 bits. |\n| side | String | Yes | **buy** or **sell** |\n| symbol | String | Yes | symbol, e.g. ETH-BTC |\n| type | String | No | **limit** or **market** (default is **limit**) |\n| remark | String | No | remark, length cannot exceed 50 characters (ASCII) |\n| stp | String | No | self trade prevention, **CN**, **CO**, **CB** or **DC** |\n| tradeType | String | No | The type of trading : **TRADE**๏ผˆSpot Trade๏ผ‰, **MARGIN_TRADE** (Margin Trade). Default is **TRADE**. **Note: To improve the system performance and to accelerate order placing and processing, KuCoin has added a new interface for order placing of margin. For traders still using the current interface, please move to the new one as soon as possible. The current one will no longer accept margin orders by May 1st, 2021 (UTC). At the time, KuCoin will notify users via the announcement, please pay attention to it.** |\n\n##### Additional Request Parameters Required by `limit` Orders\n\n| Param | Type | Mandatory | Description |\n| ----------- | ------- | --------- | ------------ |\n| price | String | Yes | Specify price for currency |\n| size | String | Yes | Specify quantity for currency |\n| timeInForce | String | No | Order timing strategy `GTC`, `GTT`, `IOC`, `FOK` (The default is `GTC`) |\n| cancelAfter | long | No | Cancel after `n` seconds๏ผŒthe order timing strategy is `GTT` |\n| postOnly | boolean | No | passive order labels, this is disabled when the order timing strategy is `IOC` or `FOK` |\n| hidden | boolean | No | Hidden or not (not shown in order book) |\n| iceberg | boolean | No | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | String | No | Maximum visible quantity in iceberg orders |\n\n##### Additional request parameters required by `market` orders\n\n| Param | Type | Mandatory | Description |\n| ----- | ------ | --------- | ------------------------------------------ |\n| size | String | No | (Select one out of two: `size` or `funds`) |\n| funds | String | No | (Select one out of two: `size` or `funds`) |\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.

Please remember the orderId created by the service provider, it used to check for updates in order status. |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | symbol |\n| type | string | specify if the order is an 'limit' order or 'market' order.

The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine.

When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels.

Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. |\n| remark | string | Order placement remarks, length cannot exceed 20 characters (ASCII) |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into four strategies: CN, CO, CB , and DC |\n| price | string | Specify price for order

When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. |\n| size | string | Specify quantity for order

When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.

When **type** is market, select one out of two: size or funds |\n| timeInForce | string | [Time in force](https://www.kucoin.com/docs-new/api-338146) is a special strategy used during trading |\n| postOnly | boolean | passive order labels, this is disabled when the order timing strategy is IOC or FOK |\n| hidden | boolean | Hidden or not (not shown in order book) |\n| iceberg | boolean | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | string | Maximum visible quantity in iceberg orders |\n| cancelAfter | integer | Cancel after n seconds๏ผŒthe order timing strategy is GTT |\n| funds | string | When **type** is market, select one out of two: size or funds |\n| tradeType | string | The type of trading : **TRADE**๏ผˆSpot Trade๏ผ‰, **MARGIN_TRADE** (Margin Trade). Default is **TRADE**. **Note: To improve the system performance and to accelerate order placing and processing, KuCoin has added a new interface for order placing of margin. For traders still using the current interface, please move to the new one as soon as possible. The current one will no longer accept margin orders by May 1st, 2021 (UTC). At the time, KuCoin will notify users via the announcement, please pay attention to it.** |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n\n---\n", + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470333)\n\n:::tip[]\nIt is recommended to use the **POST /api/v1/hf/orders** endpoint instead of this endpoint\n:::\n\n:::info[Description]\nPlace order to the Spot trading system, you can place two major types of orders: limit and market. Orders can only be placed if your account has sufficient funds. Once an order is placed, your funds will be put on hold for the duration of the order. The amount of funds on hold depends on the order type and parameters specified.\n:::\n\n:::tip[Tips]\nPlease note that once your order enters the order book, the system will freeze the handling fees for the order ahead of time.\n\nBefore placing orders, please be sure to fully understand the meaning of the parameters for each trading pair.\n:::\n\n:::tip[Tips]\nThe maximum number of active orders per account is 2000, with a maximum of 200 active orders per trading pair.(including stop orders).\n:::\n\n**Public order placement request parameters**\n\n| Param | Type | Mandatory | Description |\n| --------- | ------ | --------- | ----------- |\n| clientOid | String | Yes | clientOid, the unique identifier created by the client, use of UUID, with a maximum length of 128 bits. |\n| side | String | Yes | **buy** or **sell** |\n| symbol | String | Yes | symbol, e.g. ETH-BTC |\n| type | String | No | **limit** or **market** (default is **limit**) |\n| remark | String | No | remark, length cannot exceed 50 characters (ASCII) |\n| stp | String | No | self trade prevention, **CN**, **CO**, **CB** or **DC** |\n| tradeType | String | No | The type of trading : **TRADE**๏ผˆSpot Trade๏ผ‰, **MARGIN_TRADE** (Margin Trade). Default is **TRADE**. **Note: To improve the system performance and to accelerate order placing and processing, KuCoin has added a new interface for order placing of margin. For traders still using the current interface, please move to the new one as soon as possible. The current one will no longer accept margin orders by May 1st, 2021 (UTC). At the time, KuCoin will notify users via the announcement, please pay attention to it.** |\n\n##### Additional Request Parameters Required by `limit` Orders\n\n| Param | Type | Mandatory | Description |\n| ----------- | ------- | --------- | ------------ |\n| price | String | Yes | Specify price for currency |\n| size | String | Yes | Specify quantity for currency |\n| timeInForce | String | No | Order timing strategy `GTC`, `GTT`, `IOC`, `FOK` (The default is `GTC`) |\n| cancelAfter | long | No | Cancel after `n` seconds๏ผŒthe order timing strategy is `GTT` |\n| postOnly | boolean | No | passive order labels, this is disabled when the order timing strategy is `IOC` or `FOK` |\n| hidden | boolean | No | Hidden or not (not shown in order book) |\n| iceberg | boolean | No | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | String | No | Maximum visible quantity in iceberg orders |\n\n##### Additional request parameters required by `market` orders\n\n| Param | Type | Mandatory | Description |\n| ----- | ------ | --------- | ------------------------------------------ |\n| size | String | No | (Select one out of two: `size` or `funds`) |\n| funds | String | No | (Select one out of two: `size` or `funds`) |\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.

Please remember the orderId created by the service provider, it used to check for updates in order status. |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | symbol |\n| type | string | specify if the order is an 'limit' order or 'market' order.

The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine.

When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels.

Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. |\n| remark | string | Order placement remarks, length cannot exceed 20 characters (ASCII) |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC |\n| price | string | Specify price for order

When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. |\n| size | string | Specify quantity for order

When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.

When **type** is market, select one out of two: size or funds |\n| timeInForce | string | [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading |\n| postOnly | boolean | passive order labels, this is disabled when the order timing strategy is IOC or FOK |\n| hidden | boolean | Hidden or not (not shown in order book) |\n| iceberg | boolean | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | string | Maximum visible quantity in iceberg orders |\n| cancelAfter | integer | Cancel after n seconds๏ผŒthe order timing strategy is GTT |\n| funds | string | When **type** is market, select one out of two: size or funds |\n| tradeType | string | The type of trading : **TRADE**๏ผˆSpot Trade๏ผ‰, **MARGIN_TRADE** (Margin Trade). Default is **TRADE**. **Note: To improve the system performance and to accelerate order placing and processing, KuCoin has added a new interface for order placing of margin. For traders still using the current interface, please move to the new one as soon as possible. The current one will no longer accept margin orders by May 1st, 2021 (UTC). At the time, KuCoin will notify users via the announcement, please pay attention to it.** |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n\n---\n", "body": { "mode": "raw", "raw": "//limit order\n{\n \"type\": \"limit\",\n \"symbol\": \"BTC-USDT\",\n \"side\": \"buy\",\n \"price\": \"50000\",\n \"size\": \"0.00001\",\n \"clientOid\": \"5c52e11203aa677f33e493fb\",\n \"remark\": \"order remarks\"\n}\n\n//market order 1\n// {\n// \"type\": \"market\",\n// \"symbol\": \"BTC-USDT\",\n// \"side\": \"buy\",\n// \"size\": \"0.00001\",\n// \"clientOid\": \"5c52e11203aa677f33e493fc\",\n// \"remark\": \"order remarks\"\n// }\n\n//market order 2\n// {\n// \"type\": \"market\",\n// \"symbol\": \"BTC-USDT\",\n// \"side\": \"buy\",\n// \"funds\": \"1\",\n// \"clientOid\": \"5c52e11203aa677f33e493fc\",\n// \"remark\": \"order remarks\"\n// }\n", @@ -2324,7 +2324,7 @@ ], "query": [] }, - "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470342)\n\n:::tip[]\nIt is recommended to use the **POST /api/v1/hf/orders/multi** endpoint instead of this endpoint\n:::\n\n:::info[Description]\nRequest via this endpoint to place 5 orders at the same time. The order type must be a limit order of the same symbol.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderList | array | Refer to the schema section of orderList |\n| symbol | string | |\n\n**root.orderList Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.

Please remember the orderId created by the service provider, it used to check for updates in order status. |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | symbol |\n| type | string | only limit (default is limit) |\n| remark | string | Order placement remarks, length cannot exceed 20 characters (ASCII) |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into four strategies: CN, CO, CB , and DC |\n| price | string | Specify price for order

When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. |\n| size | string | Specify quantity for order

When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.

When **type** is market, select one out of two: size or funds |\n| timeInForce | string | [Time in force](https://www.kucoin.com/docs-new/api-338146) is a special strategy used during trading |\n| postOnly | boolean | passive order labels, this is disabled when the order timing strategy is IOC or FOK |\n| hidden | boolean | Hidden or not (not shown in order book) |\n| iceberg | boolean | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | string | Maximum visible quantity in iceberg orders |\n| cancelAfter | integer | Cancel after n seconds๏ผŒthe order timing strategy is GTT |\n| tradeType | string | The type of trading : **TRADE**๏ผˆSpot Trade๏ผ‰ |\n| stop | string | Either loss or entry. Requires stopPrice to be defined |\n| stopPrice | string | Stop price, Need to be defined if stop is specified. |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| data | array | Refer to the schema section of data |\n\n**root.data.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | |\n| type | string | |\n| side | string | |\n| price | string | |\n| size | string | |\n| funds | string | |\n| stp | string | |\n| stop | string | |\n| stopPrice | string | |\n| timeInForce | string | |\n| cancelAfter | integer | |\n| postOnly | boolean | |\n| hidden | boolean | |\n| iceberge | boolean | |\n| iceberg | boolean | |\n| visibleSize | string | |\n| channel | string | |\n| id | string | |\n| status | string | |\n| failMsg | string | |\n| clientOid | string | |\n\n---\n", + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470342)\n\n:::tip[]\nIt is recommended to use the **POST /api/v1/hf/orders/multi** endpoint instead of this endpoint\n:::\n\n:::info[Description]\nRequest via this endpoint to place 5 orders at the same time. The order type must be a limit order of the same symbol.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderList | array | Refer to the schema section of orderList |\n| symbol | string | |\n\n**root.orderList Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.

Please remember the orderId created by the service provider, it used to check for updates in order status. |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | symbol |\n| type | string | only limit (default is limit) |\n| remark | string | Order placement remarks, length cannot exceed 20 characters (ASCII) |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC |\n| price | string | Specify price for order

When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. |\n| size | string | Specify quantity for order

When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.

When **type** is market, select one out of two: size or funds |\n| timeInForce | string | [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading |\n| postOnly | boolean | passive order labels, this is disabled when the order timing strategy is IOC or FOK |\n| hidden | boolean | Hidden or not (not shown in order book) |\n| iceberg | boolean | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | string | Maximum visible quantity in iceberg orders |\n| cancelAfter | integer | Cancel after n seconds๏ผŒthe order timing strategy is GTT |\n| tradeType | string | The type of trading : **TRADE**๏ผˆSpot Trade๏ผ‰ |\n| stop | string | Either loss or entry. Requires stopPrice to be defined |\n| stopPrice | string | Stop price, Need to be defined if stop is specified. |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| data | array | Refer to the schema section of data |\n\n**root.data.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| symbol | string | |\n| type | string | |\n| side | string | |\n| price | string | |\n| size | string | |\n| funds | string | |\n| stp | string | |\n| stop | string | |\n| stopPrice | string | |\n| timeInForce | string | |\n| cancelAfter | integer | |\n| postOnly | boolean | |\n| hidden | boolean | |\n| iceberge | boolean | |\n| iceberg | boolean | |\n| visibleSize | string | |\n| channel | string | |\n| id | string | |\n| status | string | |\n| failMsg | string | |\n| clientOid | string | |\n\n---\n", "body": { "mode": "raw", "raw": "{\n \"symbol\": \"BTC-USDT\",\n \"orderList\": [\n {\n \"clientOid\": \"3d07008668054da6b3cb12e432c2b13a\",\n \"side\": \"buy\",\n \"type\": \"limit\",\n \"price\": \"50000\",\n \"size\": \"0.0001\"\n },\n {\n \"clientOid\": \"37245dbe6e134b5c97732bfb36cd4a9d\",\n \"side\": \"buy\",\n \"type\": \"limit\",\n \"price\": \"49999\",\n \"size\": \"0.0001\"\n }\n ]\n}", @@ -2409,7 +2409,7 @@ ], "query": [] }, - "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470341)\n\n:::tip[]\nIt is recommended to use the **POST /api/v1/hf/orders/test** endpoint instead of this endpoint\n:::\n\n:::info[Description]\nOrder test endpoint, the request parameters and return parameters of this endpoint are exactly the same as the order endpoint, and can be used to verify whether the signature is correct and other operations. After placing an order, the order will not enter the matching system, and the order cannot be queried.\n:::\n\n:::tip[Tips]\nPlease note that once your order enters the order book, the system will freeze the handling fees for the order ahead of time.\n\nBefore placing orders, please be sure to fully understand the meaning of the parameters for each trading pair.\n:::\n\n:::tip[Tips]\nThe maximum number of active orders per account is 2000, with a maximum of 200 active orders per trading pair.(including stop orders).\n:::\n\n**Public order placement request parameters**\n\n| Param | Type | Mandatory | Description |\n| --------- | ------ | --------- | ----------- |\n| clientOid | String | Yes | clientOid, the unique identifier created by the client, use of UUID, with a maximum length of 128 bits. |\n| side | String | Yes | **buy** or **sell** |\n| symbol | String | Yes | symbol, e.g. ETH-BTC |\n| type | String | No | **limit** or **market** (default is **limit**) |\n| remark | String | No | remark, length cannot exceed 50 characters (ASCII) |\n| stp | String | No | self trade prevention, **CN**, **CO**, **CB** or **DC** |\n| tradeType | String | No | The type of trading : **TRADE**๏ผˆSpot Trade๏ผ‰, **MARGIN_TRADE** (Margin Trade). Default is **TRADE**. **Note: To improve the system performance and to accelerate order placing and processing, KuCoin has added a new interface for order placing of margin. For traders still using the current interface, please move to the new one as soon as possible. The current one will no longer accept margin orders by May 1st, 2021 (UTC). At the time, KuCoin will notify users via the announcement, please pay attention to it.** |\n\n##### Additional Request Parameters Required by `limit` Orders\n\n| Param | Type | Mandatory | Description |\n| ----------- | ------- | --------- | ------------ |\n| price | String | Yes | Specify price for currency |\n| size | String | Yes | Specify quantity for currency |\n| timeInForce | String | No | Order timing strategy `GTC`, `GTT`, `IOC`, `FOK` (The default is `GTC`) |\n| cancelAfter | long | No | Cancel after `n` seconds๏ผŒthe order timing strategy is `GTT` |\n| postOnly | boolean | No | passive order labels, this is disabled when the order timing strategy is `IOC` or `FOK` |\n| hidden | boolean | No | Hidden or not (not shown in order book) |\n| iceberg | boolean | No | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | String | No | Maximum visible quantity in iceberg orders |\n\n##### Additional request parameters required by `market` orders\n\n| Param | Type | Mandatory | Description |\n| ----- | ------ | --------- | ------------------------------------------ |\n| size | String | No | (Select one out of two: `size` or `funds`) |\n| funds | String | No | (Select one out of two: `size` or `funds`) |\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.

Please remember the orderId created by the service provider, it used to check for updates in order status. |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | symbol |\n| type | string | specify if the order is an 'limit' order or 'market' order.

The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine.

When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels.

Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. |\n| remark | string | Order placement remarks, length cannot exceed 20 characters (ASCII) |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into four strategies: CN, CO, CB , and DC |\n| price | string | Specify price for order

When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. |\n| size | string | Specify quantity for order

When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.

When **type** is market, select one out of two: size or funds |\n| timeInForce | string | [Time in force](https://www.kucoin.com/docs-new/api-338146) is a special strategy used during trading |\n| postOnly | boolean | passive order labels, this is disabled when the order timing strategy is IOC or FOK |\n| hidden | boolean | Hidden or not (not shown in order book) |\n| iceberg | boolean | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | string | Maximum visible quantity in iceberg orders |\n| cancelAfter | integer | Cancel after n seconds๏ผŒthe order timing strategy is GTT |\n| funds | string | When **type** is market, select one out of two: size or funds |\n| tradeType | string | The type of trading : **TRADE**๏ผˆSpot Trade๏ผ‰, **MARGIN_TRADE** (Margin Trade). Default is **TRADE**. **Note: To improve the system performance and to accelerate order placing and processing, KuCoin has added a new interface for order placing of margin. For traders still using the current interface, please move to the new one as soon as possible. The current one will no longer accept margin orders by May 1st, 2021 (UTC). At the time, KuCoin will notify users via the announcement, please pay attention to it.** |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n\n---\n", + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470341)\n\n:::tip[]\nIt is recommended to use the **POST /api/v1/hf/orders/test** endpoint instead of this endpoint\n:::\n\n:::info[Description]\nOrder test endpoint, the request parameters and return parameters of this endpoint are exactly the same as the order endpoint, and can be used to verify whether the signature is correct and other operations. After placing an order, the order will not enter the matching system, and the order cannot be queried.\n:::\n\n:::tip[Tips]\nPlease note that once your order enters the order book, the system will freeze the handling fees for the order ahead of time.\n\nBefore placing orders, please be sure to fully understand the meaning of the parameters for each trading pair.\n:::\n\n:::tip[Tips]\nThe maximum number of active orders per account is 2000, with a maximum of 200 active orders per trading pair.(including stop orders).\n:::\n\n**Public order placement request parameters**\n\n| Param | Type | Mandatory | Description |\n| --------- | ------ | --------- | ----------- |\n| clientOid | String | Yes | clientOid, the unique identifier created by the client, use of UUID, with a maximum length of 128 bits. |\n| side | String | Yes | **buy** or **sell** |\n| symbol | String | Yes | symbol, e.g. ETH-BTC |\n| type | String | No | **limit** or **market** (default is **limit**) |\n| remark | String | No | remark, length cannot exceed 50 characters (ASCII) |\n| stp | String | No | self trade prevention, **CN**, **CO**, **CB** or **DC** |\n| tradeType | String | No | The type of trading : **TRADE**๏ผˆSpot Trade๏ผ‰, **MARGIN_TRADE** (Margin Trade). Default is **TRADE**. **Note: To improve the system performance and to accelerate order placing and processing, KuCoin has added a new interface for order placing of margin. For traders still using the current interface, please move to the new one as soon as possible. The current one will no longer accept margin orders by May 1st, 2021 (UTC). At the time, KuCoin will notify users via the announcement, please pay attention to it.** |\n\n##### Additional Request Parameters Required by `limit` Orders\n\n| Param | Type | Mandatory | Description |\n| ----------- | ------- | --------- | ------------ |\n| price | String | Yes | Specify price for currency |\n| size | String | Yes | Specify quantity for currency |\n| timeInForce | String | No | Order timing strategy `GTC`, `GTT`, `IOC`, `FOK` (The default is `GTC`) |\n| cancelAfter | long | No | Cancel after `n` seconds๏ผŒthe order timing strategy is `GTT` |\n| postOnly | boolean | No | passive order labels, this is disabled when the order timing strategy is `IOC` or `FOK` |\n| hidden | boolean | No | Hidden or not (not shown in order book) |\n| iceberg | boolean | No | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | String | No | Maximum visible quantity in iceberg orders |\n\n##### Additional request parameters required by `market` orders\n\n| Param | Type | Mandatory | Description |\n| ----- | ------ | --------- | ------------------------------------------ |\n| size | String | No | (Select one out of two: `size` or `funds`) |\n| funds | String | No | (Select one out of two: `size` or `funds`) |\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.

Please remember the orderId created by the service provider, it used to check for updates in order status. |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | symbol |\n| type | string | specify if the order is an 'limit' order or 'market' order.

The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine.

When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels.

Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. |\n| remark | string | Order placement remarks, length cannot exceed 20 characters (ASCII) |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC |\n| price | string | Specify price for order

When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. |\n| size | string | Specify quantity for order

When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.

When **type** is market, select one out of two: size or funds |\n| timeInForce | string | [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading |\n| postOnly | boolean | passive order labels, this is disabled when the order timing strategy is IOC or FOK |\n| hidden | boolean | Hidden or not (not shown in order book) |\n| iceberg | boolean | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | string | Maximum visible quantity in iceberg orders |\n| cancelAfter | integer | Cancel after n seconds๏ผŒthe order timing strategy is GTT |\n| funds | string | When **type** is market, select one out of two: size or funds |\n| tradeType | string | The type of trading : **TRADE**๏ผˆSpot Trade๏ผ‰, **MARGIN_TRADE** (Margin Trade). Default is **TRADE**. **Note: To improve the system performance and to accelerate order placing and processing, KuCoin has added a new interface for order placing of margin. For traders still using the current interface, please move to the new one as soon as possible. The current one will no longer accept margin orders by May 1st, 2021 (UTC). At the time, KuCoin will notify users via the announcement, please pay attention to it.** |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n\n---\n", "body": { "mode": "raw", "raw": "//limit order\n{\n \"type\": \"limit\",\n \"symbol\": \"BTC-USDT\",\n \"side\": \"buy\",\n \"price\": \"50000\",\n \"size\": \"0.00001\",\n \"clientOid\": \"5c52e11203aa677f33e493fb\",\n \"remark\": \"order remarks\"\n}\n\n//market order 1\n// {\n// \"type\": \"market\",\n// \"symbol\": \"BTC-USDT\",\n// \"side\": \"buy\",\n// \"size\": \"0.00001\",\n// \"clientOid\": \"5c52e11203aa677f33e493fc\",\n// \"remark\": \"order remarks\"\n// }\n\n//market order 2\n// {\n// \"type\": \"market\",\n// \"symbol\": \"BTC-USDT\",\n// \"side\": \"buy\",\n// \"funds\": \"1\",\n// \"clientOid\": \"5c52e11203aa677f33e493fc\",\n// \"remark\": \"order remarks\"\n// }\n", @@ -2580,7 +2580,7 @@ ], "query": [] }, - "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470312)\n\n:::tip[TIPS]\nIt is recommended to use the **POST /api/v3/hf/margin/order** endpoint instead of this endpoint\n:::\n\n:::info[Description]\nPlace order to the Cross-margin or Isolated-margin trading system, you can place two major types of orders: limit and market. Orders can only be placed if your account has sufficient funds. Once an order is placed, your funds will be put on hold for the duration of the order. The amount of funds on hold depends on the order type and parameters specified.\n:::\n\n:::tip[Tips]\nPlease note that once your order enters the order book, the system will freeze the handling fees for the order ahead of time.\n\nBefore placing orders, please be sure to fully understand the meaning of the parameters for each trading pair.\n:::\n\n:::tip[Tips]\nThe maximum number of active orders per account is 2000, with a maximum of 200 active orders per trading pair.\n:::\n\n\n**Public order placement request parameters**\n\n| Param | Type | Mandatory | Description |\n| --------- | ------ | --------- | ----------- |\n| clientOid | String | Yes | Client Order Id๏ผŒunique identifier created by the user, the use of UUID is recommended |\n| symbol | String | Yes | symbol |\n| side | String | Yes | `buy` or `sell` |\n| type | String | No | Order type `limit` and `market`, defult is limit |\n| stp | String | No | self trade prevention is divided into four strategies: `CN`, `CO`, `CB` , and `DC` |\n| marginModel | String | No | The type of trading, including cross (cross mode) and isolated (isolated mode). It is set at cross by default. |\n| autoBorrow | boolean | No | When Margin Account has inefficient balance, our system autoborrows inefficient assets and opens positions according to the lowest market interest rate. |\n| autoRepay | boolean | No | AutoPay allows returning borrowed assets when you close a position. Our system automatically triggers the repayment and the maximum repayment amount equals to the filled-order amount. |\n\n**Additional Request Parameters Required by `limit` Orders**\n\n| Param | Type | Mandatory | Description |\n| ----------- | ------- | --------- | ----------- |\n| price | String | Yes | Specify price for currency |\n| size | String | Yes | Specify quantity for currency |\n| timeInForce | String | No | Order timing strategy `GTC`, `GTT`, `IOC`, `FOK` (The default is `GTC`) |\n| cancelAfter | long | No | Cancel after `n` seconds๏ผŒthe order timing strategy is `GTT` |\n| postOnly | boolean | No | passive order labels, this is disabled when the order timing strategy is `IOC` or `FOK` |\n| hidden | boolean | No | Hidden or not (not shown in order book) |\n| iceberg | boolean | No | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | String | No | Maximum visible quantity in iceberg orders |\n\n**Additional request parameters required by `market` orders**\n\n| Param | Type | Mandatory | Description |\n| ----- | ------ | --------- | ------------------------------------------ |\n| size | String | No | (Select one out of two: `size` or `funds`) |\n| funds | String | No | (Select one out of two: `size` or `funds`) |\n\n\n\n**Hidden Orders and Iceberg Orders (Hidden & Iceberg)**\n\nHidden orders and iceberg orders can be set in advanced settings (iceberg orders are a special type of hidden orders). When placing limit orders or stop limit orders, you can choose to execute according to hidden orders or iceberg orders.\n\nHidden orders are not shown in order books.\n\nUnlike hidden orders, iceberg orders are divided into visible and hidden portions. When engaging in iceberg orders, visible order sizes must be set. The minimum visible size for an iceberg order is 1/20 of the total order size.\n\nWhen matching, the visible portions of iceberg orders are matched first. Once the visible portions are fully matched, hidden portions will emerge. This will continue until the order is fully filled.\n\nNote:\n\n- The system will charge taker fees for hidden orders and iceberg orders.\n- If you simultaneously set iceberg orders and hidden orders, your order will default to an iceberg order for execution.\n\n**Hold**\n\nFor limit price purchase orders, we will hold the amount of funds (price * size) required for your purchase order. Similarly, for limit price sell orders, we will also hold you sell order assets. When the transaction is executed, the service fees will be calculated. If you cancel a portion of a filled or unfilled order, then the remaining funds or amounts will be released and returned to your account. For market price buy/sell orders that require specific funds, we will hold the required funds in from your account. If only the size is specified, we may freeze (usually for a very short amount of time) all of the funds in your account prior to the order being filled or cancelled.\n\n\n**Order Lifecycle**\n\nWhen an order placement request is successful (the matching engine receives the order) or denied (due to there being insufficient funds or illegal parameter values, etc.), the system will respond to the HTTP request. When an order is successfully placed, the order ID is returned. The order will be matched, which could result in it being fully or partially filled. When an order is fully or partially filled, the remaining portions of the order will be in an active state awaiting to be matched (this does not include IOC orders). Orders that are fully or partially filled(already cancelled) will be put into the โ€œdoneโ€ state.\n\nUsers that have subscribed to the Market Data Channel can use the order ID ๏ผˆorderId๏ผ‰ and client ID ๏ผˆclientOid๏ผ‰ to identify messages.\n\n**Price Protection Mechanisms**\n\nPrice protection mechanisms ae enabled for order placements. Rules are detailed below:\n\n- If the spot trading market order/limit order placed by the user can be directly matched with an order in the current order book, the system will judge whether deviation between the price corresponding to the transaction depth and the spread exceeds the threshold value ๏ผˆthe threshold value can be obtained using the symbol API endpoint๏ผ‰๏ผ›\n\n- If it is exceeded, for limit orders, the order will be directly cancelled;\n\n- If it is a market order, then the system will partially execute the order. The execution limit will be the order size within the price range corresponding to the threshold value. The remaining orders will not be filled.\n\nFor example: if the threshold value is 10%, when a user places a market price purchase order in the KCS/USDT trading market for 10,000 USDT (the selling price is currently 1.20000), the system will determine that after the order is completely filled, the final price will be 1.40000. (1.40000-1.20000)/1.20000=16.7%>10%. The threshold value is 1.32000. The userโ€™s market price purchase order will be filled only to a maximum of 1.32000. The remaining order portions will not be matched with orders in the order book. Note: this feature may not be able to determine depth with complete accuracy. If your order is not completely filled, it may be because the portion exceeding the threshold value was not filled.\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.

Please remember the orderId created by the service provider, it used to check for updates in order status. |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | symbol |\n| type | string | specify if the order is an 'limit' order or 'market' order.

The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine.

When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels.

Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into four strategies: CN, CO, CB , and DC |\n| price | string | Specify price for order

When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. |\n| size | string | Specify quantity for order

When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.

When **type** is market, select one out of two: size or funds |\n| timeInForce | string | [Time in force](https://www.kucoin.com/docs-new/api-338146) is a special strategy used during trading |\n| postOnly | boolean | passive order labels, this is disabled when the order timing strategy is IOC or FOK |\n| hidden | boolean | Hidden or not (not shown in order book) |\n| iceberg | boolean | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | string | Maximum visible quantity in iceberg orders |\n| cancelAfter | integer | Cancel after n seconds๏ผŒthe order timing strategy is GTT |\n| funds | string | When **type** is market, select one out of two: size or funds |\n| autoBorrow | boolean | When Margin Account has inefficient balance, our system autoborrows inefficient assets and opens positions according to the lowest market interest rate. |\n| autoRepay | boolean | AutoPay allows returning borrowed assets when you close a position. Our system automatically triggers the repayment and the maximum repayment amount equals to the filled-order amount. |\n| marginModel | string | The type of trading, including cross (cross mode) and isolated (isolated mode). It is set at cross by default. |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| loanApplyId | string | Borrow order id. The field is returned only after placing the order under the mode of Auto-Borrow. |\n| borrowSize | string | Borrowed amount. The field is returned only after placing the order under the mode of Auto-Borrow. |\n| clientOid | string | This return value is invalid |\n\n---\n", + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470312)\n\n:::tip[TIPS]\nIt is recommended to use the **POST /api/v3/hf/margin/order** endpoint instead of this endpoint\n:::\n\n:::info[Description]\nPlace order to the Cross-margin or Isolated-margin trading system, you can place two major types of orders: limit and market. Orders can only be placed if your account has sufficient funds. Once an order is placed, your funds will be put on hold for the duration of the order. The amount of funds on hold depends on the order type and parameters specified.\n:::\n\n:::tip[Tips]\nPlease note that once your order enters the order book, the system will freeze the handling fees for the order ahead of time.\n\nBefore placing orders, please be sure to fully understand the meaning of the parameters for each trading pair.\n:::\n\n:::tip[Tips]\nThe maximum number of active orders per account is 2000, with a maximum of 200 active orders per trading pair.\n:::\n\n\n**Public order placement request parameters**\n\n| Param | Type | Mandatory | Description |\n| --------- | ------ | --------- | ----------- |\n| clientOid | String | Yes | Client Order Id๏ผŒunique identifier created by the user, the use of UUID is recommended |\n| symbol | String | Yes | symbol |\n| side | String | Yes | `buy` or `sell` |\n| type | String | No | Order type `limit` and `market`, defult is limit |\n| stp | String | No | self trade prevention is divided into four strategies: `CN`, `CO`, `CB` , and `DC` |\n| marginModel | String | No | The type of trading, including cross (cross mode) and isolated (isolated mode). It is set at cross by default. |\n| autoBorrow | boolean | No | When Margin Account has inefficient balance, our system autoborrows inefficient assets and opens positions according to the lowest market interest rate. |\n| autoRepay | boolean | No | AutoPay allows returning borrowed assets when you close a position. Our system automatically triggers the repayment and the maximum repayment amount equals to the filled-order amount. |\n\n**Additional Request Parameters Required by `limit` Orders**\n\n| Param | Type | Mandatory | Description |\n| ----------- | ------- | --------- | ----------- |\n| price | String | Yes | Specify price for currency |\n| size | String | Yes | Specify quantity for currency |\n| timeInForce | String | No | Order timing strategy `GTC`, `GTT`, `IOC`, `FOK` (The default is `GTC`) |\n| cancelAfter | long | No | Cancel after `n` seconds๏ผŒthe order timing strategy is `GTT` |\n| postOnly | boolean | No | passive order labels, this is disabled when the order timing strategy is `IOC` or `FOK` |\n| hidden | boolean | No | Hidden or not (not shown in order book) |\n| iceberg | boolean | No | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | String | No | Maximum visible quantity in iceberg orders |\n\n**Additional request parameters required by `market` orders**\n\n| Param | Type | Mandatory | Description |\n| ----- | ------ | --------- | ------------------------------------------ |\n| size | String | No | (Select one out of two: `size` or `funds`) |\n| funds | String | No | (Select one out of two: `size` or `funds`) |\n\n\n\n**Hidden Orders and Iceberg Orders (Hidden & Iceberg)**\n\nHidden orders and iceberg orders can be set in advanced settings (iceberg orders are a special type of hidden orders). When placing limit orders or stop limit orders, you can choose to execute according to hidden orders or iceberg orders.\n\nHidden orders are not shown in order books.\n\nUnlike hidden orders, iceberg orders are divided into visible and hidden portions. When engaging in iceberg orders, visible order sizes must be set. The minimum visible size for an iceberg order is 1/20 of the total order size.\n\nWhen matching, the visible portions of iceberg orders are matched first. Once the visible portions are fully matched, hidden portions will emerge. This will continue until the order is fully filled.\n\nNote:\n\n- The system will charge taker fees for hidden orders and iceberg orders.\n- If you simultaneously set iceberg orders and hidden orders, your order will default to an iceberg order for execution.\n\n**Hold**\n\nFor limit price purchase orders, we will hold the amount of funds (price * size) required for your purchase order. Similarly, for limit price sell orders, we will also hold you sell order assets. When the transaction is executed, the service fees will be calculated. If you cancel a portion of a filled or unfilled order, then the remaining funds or amounts will be released and returned to your account. For market price buy/sell orders that require specific funds, we will hold the required funds in from your account. If only the size is specified, we may freeze (usually for a very short amount of time) all of the funds in your account prior to the order being filled or cancelled.\n\n\n**Order Lifecycle**\n\nWhen an order placement request is successful (the matching engine receives the order) or denied (due to there being insufficient funds or illegal parameter values, etc.), the system will respond to the HTTP request. When an order is successfully placed, the order ID is returned. The order will be matched, which could result in it being fully or partially filled. When an order is fully or partially filled, the remaining portions of the order will be in an active state awaiting to be matched (this does not include IOC orders). Orders that are fully or partially filled(already cancelled) will be put into the โ€œdoneโ€ state.\n\nUsers that have subscribed to the Market Data Channel can use the order ID ๏ผˆorderId๏ผ‰ and client ID ๏ผˆclientOid๏ผ‰ to identify messages.\n\n**Price Protection Mechanisms**\n\nPrice protection mechanisms ae enabled for order placements. Rules are detailed below:\n\n- If the spot trading market order/limit order placed by the user can be directly matched with an order in the current order book, the system will judge whether deviation between the price corresponding to the transaction depth and the spread exceeds the threshold value ๏ผˆthe threshold value can be obtained using the symbol API endpoint๏ผ‰๏ผ›\n\n- If it is exceeded, for limit orders, the order will be directly cancelled;\n\n- If it is a market order, then the system will partially execute the order. The execution limit will be the order size within the price range corresponding to the threshold value. The remaining orders will not be filled.\n\nFor example: if the threshold value is 10%, when a user places a market price purchase order in the KCS/USDT trading market for 10,000 USDT (the selling price is currently 1.20000), the system will determine that after the order is completely filled, the final price will be 1.40000. (1.40000-1.20000)/1.20000=16.7%>10%. The threshold value is 1.32000. The userโ€™s market price purchase order will be filled only to a maximum of 1.32000. The remaining order portions will not be matched with orders in the order book. Note: this feature may not be able to determine depth with complete accuracy. If your order is not completely filled, it may be because the portion exceeding the threshold value was not filled.\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.

Please remember the orderId created by the service provider, it used to check for updates in order status. |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | symbol |\n| type | string | specify if the order is an 'limit' order or 'market' order.

The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine.

When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels.

Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC |\n| price | string | Specify price for order

When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. |\n| size | string | Specify quantity for order

When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.

When **type** is market, select one out of two: size or funds |\n| timeInForce | string | [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading |\n| postOnly | boolean | passive order labels, this is disabled when the order timing strategy is IOC or FOK |\n| hidden | boolean | Hidden or not (not shown in order book) |\n| iceberg | boolean | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | string | Maximum visible quantity in iceberg orders |\n| cancelAfter | integer | Cancel after n seconds๏ผŒthe order timing strategy is GTT |\n| funds | string | When **type** is market, select one out of two: size or funds |\n| autoBorrow | boolean | When Margin Account has inefficient balance, our system autoborrows inefficient assets and opens positions according to the lowest market interest rate. |\n| autoRepay | boolean | AutoPay allows returning borrowed assets when you close a position. Our system automatically triggers the repayment and the maximum repayment amount equals to the filled-order amount. |\n| marginModel | string | The type of trading, including cross (cross mode) and isolated (isolated mode). It is set at cross by default. |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| loanApplyId | string | Borrow order id. The field is returned only after placing the order under the mode of Auto-Borrow. |\n| borrowSize | string | Borrowed amount. The field is returned only after placing the order under the mode of Auto-Borrow. |\n| clientOid | string | This return value is invalid |\n\n---\n", "body": { "mode": "raw", "raw": "//limit order\n{\n \"type\": \"limit\",\n \"symbol\": \"BTC-USDT\",\n \"side\": \"buy\",\n \"price\": \"50000\",\n \"size\": \"0.00001\",\n \"clientOid\": \"5c52e11203aa677f33e4193fb\",\n \"remark\": \"order remarks\"\n}\n\n//market order 1\n// {\n// \"type\": \"market\",\n// \"symbol\": \"BTC-USDT\",\n// \"side\": \"buy\",\n// \"size\": \"0.00001\",\n// \"clientOid\": \"5c52e11203aa677f33e493fc\",\n// \"remark\": \"order remarks\"\n// }\n\n//market order 2\n// {\n// \"type\": \"market\",\n// \"symbol\": \"BTC-USDT\",\n// \"side\": \"buy\",\n// \"funds\": \"1\",\n// \"clientOid\": \"5c52e11203aa677f33e493fc\",\n// \"remark\": \"order remarks\"\n// }\n", @@ -3087,7 +3087,7 @@ ], "variable": [ { - "key": "symbol", + "key": "orderId", "value": "" }, { @@ -3095,7 +3095,7 @@ "value": "" }, { - "key": "orderId", + "key": "symbol", "value": "" } ], @@ -3106,7 +3106,7 @@ "type": "text/javascript", "packages": {}, "exec": [ - "function extractPathVariable(str) {\n const regex = /^\\{\\{(.+?)\\}\\}$/;\n const match = str.match(regex);\n if (match) {\n return match[1];\n }\n return null;\n}\n\nfunction hasAnyFieldEmpty(obj) {\n for (const key in obj) {\n if (obj[key] === \"\" || obj[key] === null || obj[key] === undefined) {\n return true;\n }\n }\n return false;\n}\n\nfunction sign(text, secret) {\n const hash = CryptoJS.HmacSHA256(text, secret);\n return CryptoJS.enc.Base64.stringify(hash)\n}\n\nfunction auth(apiKey, method, url, data) {\n if (hasAnyFieldEmpty(apiKey)) {\n console.warn('The API key-related information is not configured; only the public channel API is accessible.')\n return {'User-Agent': `Kucoin-Universal-Postman-SDK/v1.0.0`}\n }\n\n const timestamp = Date.now();\n const text = timestamp + method.toUpperCase() + url + data;\n const signature = sign(text, apiKey.secret);\n return {\n 'KC-API-KEY': apiKey.key,\n 'KC-API-SIGN': signature,\n 'KC-API-TIMESTAMP': timestamp.toString(),\n 'KC-API-PASSPHRASE': sign(apiKey.passphrase || '', apiKey.secret),\n 'Content-Type': 'application/json',\n 'User-Agent': `Kucoin-Universal-Postman-SDK/v1.0.0`,\n 'KC-API-KEY-VERSION': 2,\n };\n}\n\nlet key = pm.environment.get('API_KEY')\nlet secret = pm.environment.get('API_SECRET')\nlet passphrase = pm.environment.get('API_PASSPHRASE')\n\nlet url = pm.request.url.getPathWithQuery()\nlet method = pm.request.method\nlet body = pm.request.body ? pm.request.body.toString() : ''\n\nfor (const index in pm.request.url.path) {\n path = pm.request.url.path[index]\n pathVar = extractPathVariable(path)\n if (pathVar != null) {\n let collectionVariable = pm.collectionVariables.get(pathVar);\n if (collectionVariable != null) {\n url = url.replace(path, collectionVariable)\n } else {\n console.warn('no path variable set: ' + path)\n }\n }\n}\n\nheader = auth({ key: key, passphrase: passphrase, secret: secret }, method, url, body)\n\nfor (const [headerName, headerValue] of Object.entries(header)) {\n pm.request.headers.add({ key: headerName, value: headerValue })\n}" + "function extractPathVariable(str) {\n const regex = /^\\{\\{(.+?)\\}\\}$/;\n const match = str.match(regex);\n if (match) {\n return match[1];\n }\n return null;\n}\n\nfunction hasAnyFieldEmpty(obj) {\n for (const key in obj) {\n if (obj[key] === \"\" || obj[key] === null || obj[key] === undefined) {\n return true;\n }\n }\n return false;\n}\n\nfunction sign(text, secret) {\n const hash = CryptoJS.HmacSHA256(text, secret);\n return CryptoJS.enc.Base64.stringify(hash)\n}\n\nfunction auth(apiKey, method, url, data) {\n if (hasAnyFieldEmpty(apiKey)) {\n console.warn('The API key-related information is not configured; only the public channel API is accessible.')\n return {'User-Agent': `Kucoin-Universal-Postman-SDK/`}\n }\n\n const timestamp = Date.now();\n const text = timestamp + method.toUpperCase() + url + data;\n const signature = sign(text, apiKey.secret);\n return {\n 'KC-API-KEY': apiKey.key,\n 'KC-API-SIGN': signature,\n 'KC-API-TIMESTAMP': timestamp.toString(),\n 'KC-API-PASSPHRASE': sign(apiKey.passphrase || '', apiKey.secret),\n 'Content-Type': 'application/json',\n 'User-Agent': `Kucoin-Universal-Postman-SDK/`,\n 'KC-API-KEY-VERSION': 2,\n };\n}\n\nlet key = pm.environment.get('API_KEY')\nlet secret = pm.environment.get('API_SECRET')\nlet passphrase = pm.environment.get('API_PASSPHRASE')\n\nlet url = pm.request.url.getPathWithQuery()\nlet method = pm.request.method\nlet body = pm.request.body ? pm.request.body.toString() : ''\n\nfor (const index in pm.request.url.path) {\n path = pm.request.url.path[index]\n pathVar = extractPathVariable(path)\n if (pathVar != null) {\n let collectionVariable = pm.collectionVariables.get(pathVar);\n if (collectionVariable != null) {\n url = url.replace(path, collectionVariable)\n } else {\n console.warn('no path variable set: ' + path)\n }\n }\n}\n\nheader = auth({ key: key, passphrase: passphrase, secret: secret }, method, url, body)\n\nfor (const [headerName, headerValue] of Object.entries(header)) {\n pm.request.headers.add({ key: headerName, value: headerValue })\n}" ] } }, diff --git a/sdk/postman/collection-REST.json b/sdk/postman/collection-REST.json index cf79574a..d3646484 100644 --- a/sdk/postman/collection-REST.json +++ b/sdk/postman/collection-REST.json @@ -1254,7 +1254,7 @@ ], "query": [] }, - "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470130)\n\n:::info[Description]\nGet the information of the api key. Use the api key pending to be checked to call the endpoint. Both master and sub user's api key are applicable.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| remark | string | Remarks |\n| apiKey | string | Apikey |\n| apiVersion | integer | API Version |\n| permission | string | [Permissions](https://www.kucoin.com/docs-new/api-338144), possible values: General, Spot, Margin, Futures, InnerTransfer, Transfer, Earn |\n| ipWhitelist | string | IP whitelist

|\n| createdAt | integer | Apikey create time |\n| uid | integer | Account UID |\n| isMaster | boolean | Whether it is the master account. |\n| subName | string | Sub Name, There is no such param for the master account |\n\n---\n", + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470130)\n\n:::info[Description]\nGet the information of the api key. Use the api key pending to be checked to call the endpoint. Both master and sub user's api key are applicable.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| remark | string | Remarks |\n| apiKey | string | Apikey |\n| apiVersion | integer | API Version |\n| permission | string | [Permissions](https://www.kucoin.com/docs-new/doc-338144), possible values: General, Spot, Margin, Futures, InnerTransfer, Transfer, Earn |\n| ipWhitelist | string | IP whitelist

|\n| createdAt | integer | Apikey create time |\n| uid | integer | Account UID |\n| isMaster | boolean | Whether it is the master account. |\n| subName | string | Sub Name, There is no such param for the master account |\n\n---\n", "body": {} }, "response": [ @@ -1991,7 +1991,7 @@ } ] }, - "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470136)\n\n:::info[Description]\nThis endpoint can be used to obtain a list of APIs pertaining to a sub-account.(Not contain ND Broker Sub Account)\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| subName | string | Sub Name |\n| remark | string | Remarks |\n| apiKey | string | API Key |\n| apiVersion | integer | API Version |\n| permission | string | [Permissions](https://www.kucoin.com/docs-new/api-338144) |\n| ipWhitelist | string | IP whitelist |\n| createdAt | integer | Apikey create time |\n| uid | integer | Sub-account UID |\n| isMaster | boolean | Whether it is the master account. |\n\n---\n", + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470136)\n\n:::info[Description]\nThis endpoint can be used to obtain a list of APIs pertaining to a sub-account.(Not contain ND Broker Sub Account)\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| subName | string | Sub Name |\n| remark | string | Remarks |\n| apiKey | string | API Key |\n| apiVersion | integer | API Version |\n| permission | string | [Permissions](https://www.kucoin.com/docs-new/doc-338144) |\n| ipWhitelist | string | IP whitelist |\n| createdAt | integer | Apikey create time |\n| uid | integer | Sub-account UID |\n| isMaster | boolean | Whether it is the master account. |\n\n---\n", "body": {} }, "response": [ @@ -2188,7 +2188,7 @@ ], "query": [] }, - "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470138)\n\n:::info[Description]\nThis endpoint can be used to create APIs for sub-accounts.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| passphrase | string | Password(Must contain 7-32 characters. Cannot contain any spaces.) |\n| remark | string | Remarks(1~24 characters) |\n| permission | string | [Permissions](https://www.kucoin.com/docs-new/api-338144)(Only Generalใ€Spotใ€Futuresใ€Marginใ€InnerTransfer(Flex Transfer) permissions can be set, such as \"General, Trade\". The default is \"General\") |\n| ipWhitelist | string | IP whitelist(You may add up to 20 IPs. Use a halfwidth comma to each IP) |\n| expire | string | API expiration time; Never expire(default)-1๏ผŒ30Day30๏ผŒ90Day90๏ผŒ180Day180๏ผŒ360Day360 |\n| subName | string | Sub-account name, create sub account name of API Key. |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| subName | string | Sub-account name |\n| remark | string | Remarks |\n| apiKey | string | API Key |\n| apiSecret | string | API Secret Key
|\n| apiVersion | integer | API Version |\n| passphrase | string | Password |\n| permission | string | [Permissions](https://www.kucoin.com/docs-new/api-338144) |\n| ipWhitelist | string | IP whitelist |\n| createdAt | integer | Time of the event |\n\n---\n", + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470138)\n\n:::info[Description]\nThis endpoint can be used to create APIs for sub-accounts.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| passphrase | string | Password(Must contain 7-32 characters. Cannot contain any spaces.) |\n| remark | string | Remarks(1~24 characters) |\n| permission | string | [Permissions](https://www.kucoin.com/docs-new/doc-338144)(Only Generalใ€Spotใ€Futuresใ€Marginใ€InnerTransfer(Flex Transfer) permissions can be set, such as \"General, Trade\". The default is \"General\") |\n| ipWhitelist | string | IP whitelist(You may add up to 20 IPs. Use a halfwidth comma to each IP) |\n| expire | string | API expiration time; Never expire(default)-1๏ผŒ30Day30๏ผŒ90Day90๏ผŒ180Day180๏ผŒ360Day360 |\n| subName | string | Sub-account name, create sub account name of API Key. |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| subName | string | Sub-account name |\n| remark | string | Remarks |\n| apiKey | string | API Key |\n| apiSecret | string | API Secret Key
|\n| apiVersion | integer | API Version |\n| passphrase | string | Password |\n| permission | string | [Permissions](https://www.kucoin.com/docs-new/doc-338144) |\n| ipWhitelist | string | IP whitelist |\n| createdAt | integer | Time of the event |\n\n---\n", "body": { "mode": "raw", "raw": "{\n \"subName\": \"testapi6\",\n \"passphrase\": \"11223344\",\n \"remark\": \"TheRemark\",\n \"permission\": \"General,Spot,Futures\"\n}", @@ -2274,7 +2274,7 @@ ], "query": [] }, - "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470139)\n\n:::info[Description]\nThis endpoint can be used to modify sub-account APIs.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| passphrase | string | Password(Must contain 7-32 characters. Cannot contain any spaces.) |\n| permission | string | [Permissions](https://www.kucoin.com/docs-new/api-338144)(Only Generalใ€Spotใ€Futuresใ€Marginใ€InnerTransfer(Flex Transfer) permissions can be set, such as \"General, Trade\". The default is \"General\") |\n| ipWhitelist | string | IP whitelist(You may add up to 20 IPs. Use a halfwidth comma to each IP) |\n| expire | string | API expiration time; Never expire(default)-1๏ผŒ30Day30๏ผŒ90Day90๏ผŒ180Day180๏ผŒ360Day360 |\n| subName | string | Sub-account name, create sub account name of API Key. |\n| apiKey | string | API-Key(Sub-account APIKey) |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| subName | string | Sub-account name |\n| apiKey | string | API Key |\n| permission | string | [Permissions](https://www.kucoin.com/docs-new/api-338144) |\n| ipWhitelist | string | IP whitelist |\n\n---\n", + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470139)\n\n:::info[Description]\nThis endpoint can be used to modify sub-account APIs.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| passphrase | string | Password(Must contain 7-32 characters. Cannot contain any spaces.) |\n| permission | string | [Permissions](https://www.kucoin.com/docs-new/doc-338144)(Only Generalใ€Spotใ€Futuresใ€Marginใ€InnerTransfer(Flex Transfer) permissions can be set, such as \"General, Trade\". The default is \"General\") |\n| ipWhitelist | string | IP whitelist(You may add up to 20 IPs. Use a halfwidth comma to each IP) |\n| expire | string | API expiration time; Never expire(default)-1๏ผŒ30Day30๏ผŒ90Day90๏ผŒ180Day180๏ผŒ360Day360 |\n| subName | string | Sub-account name, create sub account name of API Key. |\n| apiKey | string | API-Key(Sub-account APIKey) |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| subName | string | Sub-account name |\n| apiKey | string | API Key |\n| permission | string | [Permissions](https://www.kucoin.com/docs-new/doc-338144) |\n| ipWhitelist | string | IP whitelist |\n\n---\n", "body": { "mode": "raw", "raw": "{\n \"subName\": \"testapi6\",\n \"apiKey\": \"670621e3a25958000159c82f\",\n \"passphrase\": \"11223344\",\n \"permission\": \"General,Spot,Futures\"\n}", @@ -5017,7 +5017,7 @@ ], "query": [] }, - "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470168)\n\n:::info[Description]\nThis endpoint supports sequential batch order placement from a single endpoint. A maximum of 20 orders can be placed simultaneously.\n:::\n\n\n\n:::tip[Tips]\nThis endpoint only supports order placement requests. To obtain the results of the order placement, you will need to check the order status or subscribe to websocket to obtain information about he order.\n:::\n\n:::tip[Tips]\nPlease note that once your order enters the order book, the system will freeze the handling fees for the order ahead of time.\n\nBefore placing orders, please be sure to fully understand the meaning of the parameters for each trading pair.\n:::\n\n:::tip[Tips]\nThe maximum number of active orders per account is 2000, with a maximum of 200 active orders per trading pair.\n:::\n\n**Public order placement request parameters**\n\n| Param | Type | Mandatory | Description |\n| --------- | ------ | --------- | ----------- |\n| clientOid | String | No | Client Order Id๏ผŒunique identifier created by the user, the use of UUID is recommended |\n| symbol | String | Yes | symbol |\n| type | String | Yes | Order type `limit` and `market` |\n| side | String | Yes | `buy` or `sell` |\n| stp | String | No | self trade prevention is divided into four strategies: `CN`, `CO`, `CB` , and `DC` |\n| tags | String | No | Order tag, length cannot exceed `20` characters (ASCII) |\n| remark | String | No | Order placement remarks, length cannot exceed `20` characters (ASCII) |\n\n**Additional Request Parameters Required by `limit` Orders**\n\n| Param | Type | Mandatory | Description |\n| ----------- | ------- | --------- | ----------- |\n| price | String | Yes | Specify price for currency |\n| size | String | Yes | Specify quantity for currency |\n| timeInForce | String | No | Order timing strategy `GTC`, `GTT`, `IOC`, `FOK` (The default is `GTC`) |\n| cancelAfter | long | No | Cancel after `n` seconds๏ผŒthe order timing strategy is `GTT` |\n| postOnly | boolean | No | passive order labels, this is disabled when the order timing strategy is `IOC` or `FOK` |\n| hidden | boolean | No | Hidden or not (not shown in order book) |\n| iceberg | boolean | No | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | String | No | Maximum visible quantity in iceberg orders |\n\n**Additional request parameters required by `market` orders**\n\n| Param | Type | Mandatory | Description |\n| ----- | ------ | --------- | ------------------------------------------ |\n| size | String | No | (Select one out of two: `size` or `funds`) |\n| funds | String | No | (Select one out of two: `size` or `funds`) |\n\n\n**Hold**\n\nFor limit price purchase orders, we will hold the amount of funds (price * size) required for your purchase order. Similarly, for limit price sell orders, we will also hold you sell order assets. When the transaction is executed, the service fees will be calculated. If you cancel a portion of a filled or unfilled order, then the remaining funds or amounts will be released and returned to your account. For market price buy/sell orders that require specific funds, we will hold the required funds in from your account. If only the size is specified, we may freeze (usually for a very short amount of time) all of the funds in your account prior to the order being filled or cancelled.\n\n\n**Order Lifecycle**\n\nWhen an order placement request is successful (the matching engine receives the order) or denied (due to there being insufficient funds or illegal parameter values, etc.), the system will respond to the HTTP request. When an order is successfully placed, the order ID is returned. The order will be matched, which could result in it being fully or partially filled. When an order is fully or partially filled, the remaining portions of the order will be in an active state awaiting to be matched (this does not include IOC orders). Orders that are fully or partially filled(already cancelled) will be put into the โ€œdoneโ€ state.\n\nUsers that have subscribed to the Market Data Channel can use the order ID ๏ผˆorderId๏ผ‰ and client ID ๏ผˆclientOid๏ผ‰ to identify messages.\n\n**Price Protection Mechanisms**\n\nPrice protection mechanisms ae enabled for order placements. Rules are detailed below:\n\n- If the spot trading market order/limit order placed by the user can be directly matched with an order in the current order book, the system will judge whether deviation between the price corresponding to the transaction depth and the spread exceeds the threshold value ๏ผˆthe threshold value can be obtained using the symbol API endpoint๏ผ‰๏ผ›\n\n- If it is exceeded, for limit orders, the order will be directly cancelled;\n\n- If it is a market order, then the system will partially execute the order. The execution limit will be the order size within the price range corresponding to the threshold value. The remaining orders will not be filled.\n\nFor example: if the threshold value is 10%, when a user places a market price purchase order in the KCS/USDT trading market for 10,000 USDT (the selling price is currently 1.20000), the system will determine that after the order is completely filled, the final price will be 1.40000. (1.40000-1.20000)/1.20000=16.7%>10%. The threshold value is 1.32000. The userโ€™s market price purchase order will be filled only to a maximum of 1.32000. The remaining order portions will not be matched with orders in the order book. Note: this feature may not be able to determine depth with complete accuracy. If your order is not completely filled, it may be because the portion exceeding the threshold value was not filled.\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderList | array | Refer to the schema section of orderList |\n\n**root.orderList Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.
|\n| symbol | string | symbol |\n| type | string | Specify if the order is an 'limit' order or 'market' order. |\n| timeInForce | string | [Time in force](https://www.kucoin.com/docs-new/api-338146) is a special strategy used during trading |\n| side | string | Specify if the order is to 'buy' or 'sell' |\n| price | string | Specify price for order |\n| size | string | Specify quantity for order

When **type** is limit, select one out of two: size or funds, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.

When **type** is market, select one out of two: size or funds |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into four strategies: CN, CO, CB , and DC |\n| cancelAfter | integer | Cancel after n seconds๏ผŒthe order timing strategy is GTT |\n| postOnly | boolean | passive order labels, this is disabled when the order timing strategy is IOC or FOK |\n| hidden | boolean | [Hidden order](https://www.kucoin.com/docs-new/api-338146) or not (not shown in order book) |\n| iceberg | boolean | Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/api-338146) |\n| visibleSize | string | Maximum visible quantity in iceberg orders |\n| tags | string | Order tag, length cannot exceed 20 characters (ASCII) |\n| remark | string | Order placement remarks, length cannot exceed 20 characters (ASCII) |\n| funds | string | When **type** is market, select one out of two: size or funds |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| clientOid | string | The user self-defined order id. |\n| success | boolean | Add order success/failure |\n| failMsg | string | error message |\n\n---\n", + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470168)\n\n:::info[Description]\nThis endpoint supports sequential batch order placement from a single endpoint. A maximum of 20 orders can be placed simultaneously.\n:::\n\n\n\n:::tip[Tips]\nThis endpoint only supports order placement requests. To obtain the results of the order placement, you will need to check the order status or subscribe to websocket to obtain information about he order.\n:::\n\n:::tip[Tips]\nPlease note that once your order enters the order book, the system will freeze the handling fees for the order ahead of time.\n\nBefore placing orders, please be sure to fully understand the meaning of the parameters for each trading pair.\n:::\n\n:::tip[Tips]\nThe maximum number of active orders per account is 2000, with a maximum of 200 active orders per trading pair.\n:::\n\n**Public order placement request parameters**\n\n| Param | Type | Mandatory | Description |\n| --------- | ------ | --------- | ----------- |\n| clientOid | String | No | Client Order Id๏ผŒunique identifier created by the user, the use of UUID is recommended |\n| symbol | String | Yes | symbol |\n| type | String | Yes | Order type `limit` and `market` |\n| side | String | Yes | `buy` or `sell` |\n| stp | String | No | self trade prevention is divided into four strategies: `CN`, `CO`, `CB` , and `DC` |\n| tags | String | No | Order tag, length cannot exceed `20` characters (ASCII) |\n| remark | String | No | Order placement remarks, length cannot exceed `20` characters (ASCII) |\n\n**Additional Request Parameters Required by `limit` Orders**\n\n| Param | Type | Mandatory | Description |\n| ----------- | ------- | --------- | ----------- |\n| price | String | Yes | Specify price for currency |\n| size | String | Yes | Specify quantity for currency |\n| timeInForce | String | No | Order timing strategy `GTC`, `GTT`, `IOC`, `FOK` (The default is `GTC`) |\n| cancelAfter | long | No | Cancel after `n` seconds๏ผŒthe order timing strategy is `GTT` |\n| postOnly | boolean | No | passive order labels, this is disabled when the order timing strategy is `IOC` or `FOK` |\n| hidden | boolean | No | Hidden or not (not shown in order book) |\n| iceberg | boolean | No | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | String | No | Maximum visible quantity in iceberg orders |\n\n**Additional request parameters required by `market` orders**\n\n| Param | Type | Mandatory | Description |\n| ----- | ------ | --------- | ------------------------------------------ |\n| size | String | No | (Select one out of two: `size` or `funds`) |\n| funds | String | No | (Select one out of two: `size` or `funds`) |\n\n\n**Hold**\n\nFor limit price purchase orders, we will hold the amount of funds (price * size) required for your purchase order. Similarly, for limit price sell orders, we will also hold you sell order assets. When the transaction is executed, the service fees will be calculated. If you cancel a portion of a filled or unfilled order, then the remaining funds or amounts will be released and returned to your account. For market price buy/sell orders that require specific funds, we will hold the required funds in from your account. If only the size is specified, we may freeze (usually for a very short amount of time) all of the funds in your account prior to the order being filled or cancelled.\n\n\n**Order Lifecycle**\n\nWhen an order placement request is successful (the matching engine receives the order) or denied (due to there being insufficient funds or illegal parameter values, etc.), the system will respond to the HTTP request. When an order is successfully placed, the order ID is returned. The order will be matched, which could result in it being fully or partially filled. When an order is fully or partially filled, the remaining portions of the order will be in an active state awaiting to be matched (this does not include IOC orders). Orders that are fully or partially filled(already cancelled) will be put into the โ€œdoneโ€ state.\n\nUsers that have subscribed to the Market Data Channel can use the order ID ๏ผˆorderId๏ผ‰ and client ID ๏ผˆclientOid๏ผ‰ to identify messages.\n\n**Price Protection Mechanisms**\n\nPrice protection mechanisms ae enabled for order placements. Rules are detailed below:\n\n- If the spot trading market order/limit order placed by the user can be directly matched with an order in the current order book, the system will judge whether deviation between the price corresponding to the transaction depth and the spread exceeds the threshold value ๏ผˆthe threshold value can be obtained using the symbol API endpoint๏ผ‰๏ผ›\n\n- If it is exceeded, for limit orders, the order will be directly cancelled;\n\n- If it is a market order, then the system will partially execute the order. The execution limit will be the order size within the price range corresponding to the threshold value. The remaining orders will not be filled.\n\nFor example: if the threshold value is 10%, when a user places a market price purchase order in the KCS/USDT trading market for 10,000 USDT (the selling price is currently 1.20000), the system will determine that after the order is completely filled, the final price will be 1.40000. (1.40000-1.20000)/1.20000=16.7%>10%. The threshold value is 1.32000. The userโ€™s market price purchase order will be filled only to a maximum of 1.32000. The remaining order portions will not be matched with orders in the order book. Note: this feature may not be able to determine depth with complete accuracy. If your order is not completely filled, it may be because the portion exceeding the threshold value was not filled.\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderList | array | Refer to the schema section of orderList |\n\n**root.orderList Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.
|\n| symbol | string | symbol |\n| type | string | Specify if the order is an 'limit' order or 'market' order. |\n| timeInForce | string | [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading |\n| side | string | Specify if the order is to 'buy' or 'sell' |\n| price | string | Specify price for order |\n| size | string | Specify quantity for order

When **type** is limit, select one out of two: size or funds, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.

When **type** is market, select one out of two: size or funds |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC |\n| cancelAfter | integer | Cancel after n seconds๏ผŒthe order timing strategy is GTT |\n| postOnly | boolean | passive order labels, this is disabled when the order timing strategy is IOC or FOK |\n| hidden | boolean | [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) |\n| iceberg | boolean | Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) |\n| visibleSize | string | Maximum visible quantity in iceberg orders |\n| tags | string | Order tag, length cannot exceed 20 characters (ASCII) |\n| remark | string | Order placement remarks, length cannot exceed 20 characters (ASCII) |\n| funds | string | When **type** is market, select one out of two: size or funds |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| clientOid | string | The user self-defined order id. |\n| success | boolean | Add order success/failure |\n| failMsg | string | error message |\n\n---\n", "body": { "mode": "raw", "raw": "{\n \"orderList\": [\n {\n \"clientOid\": \"client order id 12\",\n \"symbol\": \"BTC-USDT\",\n \"type\": \"limit\",\n \"side\": \"buy\",\n \"price\": \"30000\",\n \"size\": \"0.00001\"\n },\n {\n \"clientOid\": \"client order id 13\",\n \"symbol\": \"ETH-USDT\",\n \"type\": \"limit\",\n \"side\": \"sell\",\n \"price\": \"2000\",\n \"size\": \"0.00001\"\n }\n ]\n}", @@ -5105,7 +5105,7 @@ ], "query": [] }, - "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470169)\n\n:::info[Description]\nThis endpoint supports sequential batch order placement from a single endpoint. A maximum of 20 orders can be placed simultaneously.\n\nThe difference between this interface and \"Batch Add Orders\" is that this interface will synchronously return the order information after the order matching is completed.\n\nFor higher latency requirements, please select the \"Batch Add Orders\" interface. If there is a requirement for returning data integrity, please select this interface\n:::\n\n\n\n:::tip[Tips]\nThis endpoint only supports order placement requests. To obtain the results of the order placement, you will need to check the order status or subscribe to websocket to obtain information about he order.\n:::\n\n:::tip[Tips]\nPlease note that once your order enters the order book, the system will freeze the handling fees for the order ahead of time.\n\nBefore placing orders, please be sure to fully understand the meaning of the parameters for each trading pair.\n:::\n\n:::tip[Tips]\nThe maximum number of active orders per account is 2000, with a maximum of 200 active orders per trading pair.\n:::\n\n**Public order placement request parameters**\n\n| Param | Type | Mandatory | Description |\n| --------- | ------ | --------- | ----------- |\n| clientOid | String | No | Client Order Id๏ผŒunique identifier created by the user, the use of UUID is recommended |\n| symbol | String | Yes | symbol |\n| type | String | Yes | Order type `limit` and `market` |\n| side | String | Yes | `buy` or `sell` |\n| stp | String | No | self trade prevention is divided into four strategies: `CN`, `CO`, `CB` , and `DC` |\n| tags | String | No | Order tag, length cannot exceed `20` characters (ASCII) |\n| remark | String | No | Order placement remarks, length cannot exceed `20` characters (ASCII) |\n\n**Additional Request Parameters Required by `limit` Orders**\n\n| Param | Type | Mandatory | Description |\n| ----------- | ------- | --------- | ----------- |\n| price | String | Yes | Specify price for currency |\n| size | String | Yes | Specify quantity for currency |\n| timeInForce | String | No | Order timing strategy `GTC`, `GTT`, `IOC`, `FOK` (The default is `GTC`) |\n| cancelAfter | long | No | Cancel after `n` seconds๏ผŒthe order timing strategy is `GTT` |\n| postOnly | boolean | No | passive order labels, this is disabled when the order timing strategy is `IOC` or `FOK` |\n| hidden | boolean | No | Hidden or not (not shown in order book) |\n| iceberg | boolean | No | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | String | No | Maximum visible quantity in iceberg orders |\n\n**Additional request parameters required by `market` orders**\n\n| Param | Type | Mandatory | Description |\n| ----- | ------ | --------- | ------------------------------------------ |\n| size | String | No | (Select one out of two: `size` or `funds`) |\n| funds | String | No | (Select one out of two: `size` or `funds`) |\n\n\n**Hold**\n\nFor limit price purchase orders, we will hold the amount of funds (price * size) required for your purchase order. Similarly, for limit price sell orders, we will also hold you sell order assets. When the transaction is executed, the service fees will be calculated. If you cancel a portion of a filled or unfilled order, then the remaining funds or amounts will be released and returned to your account. For market price buy/sell orders that require specific funds, we will hold the required funds in from your account. If only the size is specified, we may freeze (usually for a very short amount of time) all of the funds in your account prior to the order being filled or cancelled.\n\n\n**Order Lifecycle**\n\nWhen an order placement request is successful (the matching engine receives the order) or denied (due to there being insufficient funds or illegal parameter values, etc.), the system will respond to the HTTP request. When an order is successfully placed, the order ID is returned. The order will be matched, which could result in it being fully or partially filled. When an order is fully or partially filled, the remaining portions of the order will be in an active state awaiting to be matched (this does not include IOC orders). Orders that are fully or partially filled(already cancelled) will be put into the โ€œdoneโ€ state.\n\nUsers that have subscribed to the Market Data Channel can use the order ID ๏ผˆorderId๏ผ‰ and client ID ๏ผˆclientOid๏ผ‰ to identify messages.\n\n**Price Protection Mechanisms**\n\nPrice protection mechanisms ae enabled for order placements. Rules are detailed below:\n\n- If the spot trading market order/limit order placed by the user can be directly matched with an order in the current order book, the system will judge whether deviation between the price corresponding to the transaction depth and the spread exceeds the threshold value ๏ผˆthe threshold value can be obtained using the symbol API endpoint๏ผ‰๏ผ›\n\n- If it is exceeded, for limit orders, the order will be directly cancelled;\n\n- If it is a market order, then the system will partially execute the order. The execution limit will be the order size within the price range corresponding to the threshold value. The remaining orders will not be filled.\n\nFor example: if the threshold value is 10%, when a user places a market price purchase order in the KCS/USDT trading market for 10,000 USDT (the selling price is currently 1.20000), the system will determine that after the order is completely filled, the final price will be 1.40000. (1.40000-1.20000)/1.20000=16.7%>10%. The threshold value is 1.32000. The userโ€™s market price purchase order will be filled only to a maximum of 1.32000. The remaining order portions will not be matched with orders in the order book. Note: this feature may not be able to determine depth with complete accuracy. If your order is not completely filled, it may be because the portion exceeding the threshold value was not filled.\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderList | array | Refer to the schema section of orderList |\n\n**root.orderList Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.
|\n| symbol | string | symbol |\n| type | string | Specify if the order is an 'limit' order or 'market' order. |\n| timeInForce | string | [Time in force](https://www.kucoin.com/docs-new/api-338146) is a special strategy used during trading |\n| side | string | Specify if the order is to 'buy' or 'sell' |\n| price | string | Specify price for order |\n| size | string | Specify quantity for order

When **type** is limit, select one out of two: size or funds, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.

When **type** is market, select one out of two: size or funds |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into four strategies: CN, CO, CB , and DC |\n| cancelAfter | integer | Cancel after n seconds๏ผŒthe order timing strategy is GTT |\n| postOnly | boolean | passive order labels, this is disabled when the order timing strategy is IOC or FOK |\n| hidden | boolean | [Hidden order](https://www.kucoin.com/docs-new/api-338146) or not (not shown in order book) |\n| iceberg | boolean | Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/api-338146) |\n| visibleSize | string | Maximum visible quantity in iceberg orders |\n| tags | string | Order tag, length cannot exceed 20 characters (ASCII) |\n| remark | string | Order placement remarks, length cannot exceed 20 characters (ASCII) |\n| funds | string | When **type** is market, select one out of two: size or funds |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| clientOid | string | The user self-defined order id. |\n| orderTime | integer | |\n| originSize | string | original order size |\n| dealSize | string | deal size |\n| remainSize | string | remain size |\n| canceledSize | string | Cumulative canceled size |\n| status | string | Order Status. open๏ผšorder is active; done๏ผšorder has been completed |\n| matchTime | integer | |\n| success | boolean | Add order success/failure |\n| failMsg | string | error message |\n\n---\n", + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470169)\n\n:::info[Description]\nThis endpoint supports sequential batch order placement from a single endpoint. A maximum of 20 orders can be placed simultaneously.\n\nThe difference between this interface and \"Batch Add Orders\" is that this interface will synchronously return the order information after the order matching is completed.\n\nFor higher latency requirements, please select the \"Batch Add Orders\" interface. If there is a requirement for returning data integrity, please select this interface\n:::\n\n\n\n:::tip[Tips]\nThis endpoint only supports order placement requests. To obtain the results of the order placement, you will need to check the order status or subscribe to websocket to obtain information about he order.\n:::\n\n:::tip[Tips]\nPlease note that once your order enters the order book, the system will freeze the handling fees for the order ahead of time.\n\nBefore placing orders, please be sure to fully understand the meaning of the parameters for each trading pair.\n:::\n\n:::tip[Tips]\nThe maximum number of active orders per account is 2000, with a maximum of 200 active orders per trading pair.\n:::\n\n**Public order placement request parameters**\n\n| Param | Type | Mandatory | Description |\n| --------- | ------ | --------- | ----------- |\n| clientOid | String | No | Client Order Id๏ผŒunique identifier created by the user, the use of UUID is recommended |\n| symbol | String | Yes | symbol |\n| type | String | Yes | Order type `limit` and `market` |\n| side | String | Yes | `buy` or `sell` |\n| stp | String | No | self trade prevention is divided into four strategies: `CN`, `CO`, `CB` , and `DC` |\n| tags | String | No | Order tag, length cannot exceed `20` characters (ASCII) |\n| remark | String | No | Order placement remarks, length cannot exceed `20` characters (ASCII) |\n\n**Additional Request Parameters Required by `limit` Orders**\n\n| Param | Type | Mandatory | Description |\n| ----------- | ------- | --------- | ----------- |\n| price | String | Yes | Specify price for currency |\n| size | String | Yes | Specify quantity for currency |\n| timeInForce | String | No | Order timing strategy `GTC`, `GTT`, `IOC`, `FOK` (The default is `GTC`) |\n| cancelAfter | long | No | Cancel after `n` seconds๏ผŒthe order timing strategy is `GTT` |\n| postOnly | boolean | No | passive order labels, this is disabled when the order timing strategy is `IOC` or `FOK` |\n| hidden | boolean | No | Hidden or not (not shown in order book) |\n| iceberg | boolean | No | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | String | No | Maximum visible quantity in iceberg orders |\n\n**Additional request parameters required by `market` orders**\n\n| Param | Type | Mandatory | Description |\n| ----- | ------ | --------- | ------------------------------------------ |\n| size | String | No | (Select one out of two: `size` or `funds`) |\n| funds | String | No | (Select one out of two: `size` or `funds`) |\n\n\n**Hold**\n\nFor limit price purchase orders, we will hold the amount of funds (price * size) required for your purchase order. Similarly, for limit price sell orders, we will also hold you sell order assets. When the transaction is executed, the service fees will be calculated. If you cancel a portion of a filled or unfilled order, then the remaining funds or amounts will be released and returned to your account. For market price buy/sell orders that require specific funds, we will hold the required funds in from your account. If only the size is specified, we may freeze (usually for a very short amount of time) all of the funds in your account prior to the order being filled or cancelled.\n\n\n**Order Lifecycle**\n\nWhen an order placement request is successful (the matching engine receives the order) or denied (due to there being insufficient funds or illegal parameter values, etc.), the system will respond to the HTTP request. When an order is successfully placed, the order ID is returned. The order will be matched, which could result in it being fully or partially filled. When an order is fully or partially filled, the remaining portions of the order will be in an active state awaiting to be matched (this does not include IOC orders). Orders that are fully or partially filled(already cancelled) will be put into the โ€œdoneโ€ state.\n\nUsers that have subscribed to the Market Data Channel can use the order ID ๏ผˆorderId๏ผ‰ and client ID ๏ผˆclientOid๏ผ‰ to identify messages.\n\n**Price Protection Mechanisms**\n\nPrice protection mechanisms ae enabled for order placements. Rules are detailed below:\n\n- If the spot trading market order/limit order placed by the user can be directly matched with an order in the current order book, the system will judge whether deviation between the price corresponding to the transaction depth and the spread exceeds the threshold value ๏ผˆthe threshold value can be obtained using the symbol API endpoint๏ผ‰๏ผ›\n\n- If it is exceeded, for limit orders, the order will be directly cancelled;\n\n- If it is a market order, then the system will partially execute the order. The execution limit will be the order size within the price range corresponding to the threshold value. The remaining orders will not be filled.\n\nFor example: if the threshold value is 10%, when a user places a market price purchase order in the KCS/USDT trading market for 10,000 USDT (the selling price is currently 1.20000), the system will determine that after the order is completely filled, the final price will be 1.40000. (1.40000-1.20000)/1.20000=16.7%>10%. The threshold value is 1.32000. The userโ€™s market price purchase order will be filled only to a maximum of 1.32000. The remaining order portions will not be matched with orders in the order book. Note: this feature may not be able to determine depth with complete accuracy. If your order is not completely filled, it may be because the portion exceeding the threshold value was not filled.\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderList | array | Refer to the schema section of orderList |\n\n**root.orderList Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.
|\n| symbol | string | symbol |\n| type | string | Specify if the order is an 'limit' order or 'market' order. |\n| timeInForce | string | [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading |\n| side | string | Specify if the order is to 'buy' or 'sell' |\n| price | string | Specify price for order |\n| size | string | Specify quantity for order

When **type** is limit, select one out of two: size or funds, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.

When **type** is market, select one out of two: size or funds |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC |\n| cancelAfter | integer | Cancel after n seconds๏ผŒthe order timing strategy is GTT |\n| postOnly | boolean | passive order labels, this is disabled when the order timing strategy is IOC or FOK |\n| hidden | boolean | [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) |\n| iceberg | boolean | Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) |\n| visibleSize | string | Maximum visible quantity in iceberg orders |\n| tags | string | Order tag, length cannot exceed 20 characters (ASCII) |\n| remark | string | Order placement remarks, length cannot exceed 20 characters (ASCII) |\n| funds | string | When **type** is market, select one out of two: size or funds |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| clientOid | string | The user self-defined order id. |\n| orderTime | integer | |\n| originSize | string | original order size |\n| dealSize | string | deal size |\n| remainSize | string | remain size |\n| canceledSize | string | Cumulative canceled size |\n| status | string | Order Status. open๏ผšorder is active; done๏ผšorder has been completed |\n| matchTime | integer | |\n| success | boolean | Add order success/failure |\n| failMsg | string | error message |\n\n---\n", "body": { "mode": "raw", "raw": "{\n \"orderList\": [\n {\n \"clientOid\": \"client order id 13\",\n \"symbol\": \"BTC-USDT\",\n \"type\": \"limit\",\n \"side\": \"buy\",\n \"price\": \"30000\",\n \"size\": \"0.00001\"\n },\n {\n \"clientOid\": \"client order id 14\",\n \"symbol\": \"ETH-USDT\",\n \"type\": \"limit\",\n \"side\": \"sell\",\n \"price\": \"2000\",\n \"size\": \"0.00001\"\n }\n ]\n}", @@ -5193,7 +5193,7 @@ ], "query": [] }, - "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470170)\n\n:::info[Description]\nPlace order to the spot trading system\n\nThe difference between this interface and \"Add order\" is that this interface will synchronously return the order information after the order matching is completed.\n\nFor higher latency requirements, please select the \"Add order\" interface. If there is a requirement for returning data integrity, please select this interface\n:::\n\n:::tip[Tips]\nPlease note that once your order enters the order book, the system will freeze the handling fees for the order ahead of time.\n\nBefore placing orders, please be sure to fully understand the meaning of the parameters for each trading pair.\n:::\n\n:::tip[Tips]\nThe maximum number of active orders per account is 2000, with a maximum of 200 active orders per trading pair.\n:::\n\n\n**Public order placement request parameters**\n\n| Param | Type | Mandatory | Description |\n| --------- | ------ | --------- | ----------- |\n| clientOid | String | No | Client Order Id๏ผŒunique identifier created by the user, the use of UUID is recommended |\n| symbol | String | Yes | symbol |\n| type | String | Yes | Order type `limit` and `market` |\n| side | String | Yes | `buy` or `sell` |\n| stp | String | No | self trade prevention is divided into four strategies: `CN`, `CO`, `CB` , and `DC` |\n| tags | String | No | Order tag, length cannot exceed `20` characters (ASCII) |\n| remark | String | No | Order placement remarks, length cannot exceed `20` characters (ASCII) |\n\n**Additional Request Parameters Required by `limit` Orders**\n\n| Param | Type | Mandatory | Description |\n| ----------- | ------- | --------- | ----------- |\n| price | String | Yes | Specify price for currency |\n| size | String | Yes | Specify quantity for currency |\n| timeInForce | String | No | Order timing strategy `GTC`, `GTT`, `IOC`, `FOK` (The default is `GTC`) |\n| cancelAfter | long | No | Cancel after `n` seconds๏ผŒthe order timing strategy is `GTT` |\n| postOnly | boolean | No | passive order labels, this is disabled when the order timing strategy is `IOC` or `FOK` |\n| hidden | boolean | No | Hidden or not (not shown in order book) |\n| iceberg | boolean | No | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | String | No | Maximum visible quantity in iceberg orders |\n\n**Additional request parameters required by `market` orders**\n\n| Param | Type | Mandatory | Description |\n| ----- | ------ | --------- | ------------------------------------------ |\n| size | String | No | (Select one out of two: `size` or `funds`) |\n| funds | String | No | (Select one out of two: `size` or `funds`) |\n\n\n\n**Hold**\n\nFor limit price purchase orders, we will hold the amount of funds (price * size) required for your purchase order. Similarly, for limit price sell orders, we will also hold you sell order assets. When the transaction is executed, the service fees will be calculated. If you cancel a portion of a filled or unfilled order, then the remaining funds or amounts will be released and returned to your account. For market price buy/sell orders that require specific funds, we will hold the required funds in from your account. If only the size is specified, we may freeze (usually for a very short amount of time) all of the funds in your account prior to the order being filled or cancelled.\n\n\n**Order Lifecycle**\n\nWhen an order placement request is successful (the matching engine receives the order) or denied (due to there being insufficient funds or illegal parameter values, etc.), the system will respond to the HTTP request. When an order is successfully placed, the order ID is returned. The order will be matched, which could result in it being fully or partially filled. When an order is fully or partially filled, the remaining portions of the order will be in an active state awaiting to be matched (this does not include IOC orders). Orders that are fully or partially filled(already cancelled) will be put into the โ€œdoneโ€ state.\n\nUsers that have subscribed to the Market Data Channel can use the order ID ๏ผˆorderId๏ผ‰ and client ID ๏ผˆclientOid๏ผ‰ to identify messages.\n\n**Price Protection Mechanisms**\n\nPrice protection mechanisms ae enabled for order placements. Rules are detailed below:\n\n- If the spot trading market order/limit order placed by the user can be directly matched with an order in the current order book, the system will judge whether deviation between the price corresponding to the transaction depth and the spread exceeds the threshold value ๏ผˆthe threshold value can be obtained using the symbol API endpoint๏ผ‰๏ผ›\n\n- If it is exceeded, for limit orders, the order will be directly cancelled;\n\n- If it is a market order, then the system will partially execute the order. The execution limit will be the order size within the price range corresponding to the threshold value. The remaining orders will not be filled.\n\nFor example: if the threshold value is 10%, when a user places a market price purchase order in the KCS/USDT trading market for 10,000 USDT (the selling price is currently 1.20000), the system will determine that after the order is completely filled, the final price will be 1.40000. (1.40000-1.20000)/1.20000=16.7%>10%. The threshold value is 1.32000. The userโ€™s market price purchase order will be filled only to a maximum of 1.32000. The remaining order portions will not be matched with orders in the order book. Note: this feature may not be able to determine depth with complete accuracy. If your order is not completely filled, it may be because the portion exceeding the threshold value was not filled.\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.

Please remember the orderId created by the service provider, it used to check for updates in order status. |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | symbol |\n| type | string | specify if the order is an 'limit' order or 'market' order.

The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine.

When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels.

Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. |\n| remark | string | Order placement remarks, length cannot exceed 20 characters (ASCII) |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into four strategies: CN, CO, CB , and DC |\n| price | string | Specify price for order

When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. |\n| size | string | Specify quantity for order

When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.

When **type** is market, select one out of two: size or funds |\n| timeInForce | string | [Time in force](https://www.kucoin.com/docs-new/api-338146) is a special strategy used during trading |\n| postOnly | boolean | passive order labels, this is disabled when the order timing strategy is IOC or FOK |\n| hidden | boolean | [Hidden order](https://www.kucoin.com/docs-new/api-338146) or not (not shown in order book) |\n| iceberg | boolean | Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/api-338146) |\n| visibleSize | string | Maximum visible quantity in iceberg orders |\n| tags | string | Order tag, length cannot exceed 20 characters (ASCII) |\n| cancelAfter | integer | Cancel after n seconds๏ผŒthe order timing strategy is GTT |\n| funds | string | When **type** is market, select one out of two: size or funds |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| clientOid | string | The user self-defined order id. |\n| orderTime | integer | |\n| originSize | string | original order size |\n| dealSize | string | deal size |\n| remainSize | string | remain size |\n| canceledSize | string | Cumulative canceled size |\n| status | string | Order Status. open๏ผšorder is active; done๏ผšorder has been completed |\n| matchTime | integer | |\n\n---\n", + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470170)\n\n:::info[Description]\nPlace order to the spot trading system\n\nThe difference between this interface and \"Add order\" is that this interface will synchronously return the order information after the order matching is completed.\n\nFor higher latency requirements, please select the \"Add order\" interface. If there is a requirement for returning data integrity, please select this interface\n:::\n\n:::tip[Tips]\nPlease note that once your order enters the order book, the system will freeze the handling fees for the order ahead of time.\n\nBefore placing orders, please be sure to fully understand the meaning of the parameters for each trading pair.\n:::\n\n:::tip[Tips]\nThe maximum number of active orders per account is 2000, with a maximum of 200 active orders per trading pair.\n:::\n\n\n**Public order placement request parameters**\n\n| Param | Type | Mandatory | Description |\n| --------- | ------ | --------- | ----------- |\n| clientOid | String | No | Client Order Id๏ผŒunique identifier created by the user, the use of UUID is recommended |\n| symbol | String | Yes | symbol |\n| type | String | Yes | Order type `limit` and `market` |\n| side | String | Yes | `buy` or `sell` |\n| stp | String | No | self trade prevention is divided into four strategies: `CN`, `CO`, `CB` , and `DC` |\n| tags | String | No | Order tag, length cannot exceed `20` characters (ASCII) |\n| remark | String | No | Order placement remarks, length cannot exceed `20` characters (ASCII) |\n\n**Additional Request Parameters Required by `limit` Orders**\n\n| Param | Type | Mandatory | Description |\n| ----------- | ------- | --------- | ----------- |\n| price | String | Yes | Specify price for currency |\n| size | String | Yes | Specify quantity for currency |\n| timeInForce | String | No | Order timing strategy `GTC`, `GTT`, `IOC`, `FOK` (The default is `GTC`) |\n| cancelAfter | long | No | Cancel after `n` seconds๏ผŒthe order timing strategy is `GTT` |\n| postOnly | boolean | No | passive order labels, this is disabled when the order timing strategy is `IOC` or `FOK` |\n| hidden | boolean | No | Hidden or not (not shown in order book) |\n| iceberg | boolean | No | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | String | No | Maximum visible quantity in iceberg orders |\n\n**Additional request parameters required by `market` orders**\n\n| Param | Type | Mandatory | Description |\n| ----- | ------ | --------- | ------------------------------------------ |\n| size | String | No | (Select one out of two: `size` or `funds`) |\n| funds | String | No | (Select one out of two: `size` or `funds`) |\n\n\n\n**Hold**\n\nFor limit price purchase orders, we will hold the amount of funds (price * size) required for your purchase order. Similarly, for limit price sell orders, we will also hold you sell order assets. When the transaction is executed, the service fees will be calculated. If you cancel a portion of a filled or unfilled order, then the remaining funds or amounts will be released and returned to your account. For market price buy/sell orders that require specific funds, we will hold the required funds in from your account. If only the size is specified, we may freeze (usually for a very short amount of time) all of the funds in your account prior to the order being filled or cancelled.\n\n\n**Order Lifecycle**\n\nWhen an order placement request is successful (the matching engine receives the order) or denied (due to there being insufficient funds or illegal parameter values, etc.), the system will respond to the HTTP request. When an order is successfully placed, the order ID is returned. The order will be matched, which could result in it being fully or partially filled. When an order is fully or partially filled, the remaining portions of the order will be in an active state awaiting to be matched (this does not include IOC orders). Orders that are fully or partially filled(already cancelled) will be put into the โ€œdoneโ€ state.\n\nUsers that have subscribed to the Market Data Channel can use the order ID ๏ผˆorderId๏ผ‰ and client ID ๏ผˆclientOid๏ผ‰ to identify messages.\n\n**Price Protection Mechanisms**\n\nPrice protection mechanisms ae enabled for order placements. Rules are detailed below:\n\n- If the spot trading market order/limit order placed by the user can be directly matched with an order in the current order book, the system will judge whether deviation between the price corresponding to the transaction depth and the spread exceeds the threshold value ๏ผˆthe threshold value can be obtained using the symbol API endpoint๏ผ‰๏ผ›\n\n- If it is exceeded, for limit orders, the order will be directly cancelled;\n\n- If it is a market order, then the system will partially execute the order. The execution limit will be the order size within the price range corresponding to the threshold value. The remaining orders will not be filled.\n\nFor example: if the threshold value is 10%, when a user places a market price purchase order in the KCS/USDT trading market for 10,000 USDT (the selling price is currently 1.20000), the system will determine that after the order is completely filled, the final price will be 1.40000. (1.40000-1.20000)/1.20000=16.7%>10%. The threshold value is 1.32000. The userโ€™s market price purchase order will be filled only to a maximum of 1.32000. The remaining order portions will not be matched with orders in the order book. Note: this feature may not be able to determine depth with complete accuracy. If your order is not completely filled, it may be because the portion exceeding the threshold value was not filled.\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.

Please remember the orderId created by the service provider, it used to check for updates in order status. |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | symbol |\n| type | string | specify if the order is an 'limit' order or 'market' order.

The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine.

When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels.

Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. |\n| remark | string | Order placement remarks, length cannot exceed 20 characters (ASCII) |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC |\n| price | string | Specify price for order

When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. |\n| size | string | Specify quantity for order

When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.

When **type** is market, select one out of two: size or funds |\n| timeInForce | string | [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading |\n| postOnly | boolean | passive order labels, this is disabled when the order timing strategy is IOC or FOK |\n| hidden | boolean | [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) |\n| iceberg | boolean | Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) |\n| visibleSize | string | Maximum visible quantity in iceberg orders |\n| tags | string | Order tag, length cannot exceed 20 characters (ASCII) |\n| cancelAfter | integer | Cancel after n seconds๏ผŒthe order timing strategy is GTT |\n| funds | string | When **type** is market, select one out of two: size or funds |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| clientOid | string | The user self-defined order id. |\n| orderTime | integer | |\n| originSize | string | original order size |\n| dealSize | string | deal size |\n| remainSize | string | remain size |\n| canceledSize | string | Cumulative canceled size |\n| status | string | Order Status. open๏ผšorder is active; done๏ผšorder has been completed |\n| matchTime | integer | |\n\n---\n", "body": { "mode": "raw", "raw": "//limit order\n{\n \"type\": \"limit\",\n \"symbol\": \"BTC-USDT\",\n \"side\": \"buy\",\n \"price\": \"50000\",\n \"size\": \"0.00001\",\n \"clientOid\": \"5c52e11203aa677f33e493f\",\n \"remark\": \"order remarks\"\n}\n\n//market order 1\n// {\n// \"type\": \"market\",\n// \"symbol\": \"BTC-USDT\",\n// \"side\": \"buy\",\n// \"size\": \"0.00001\",\n// \"clientOid\": \"5c52e11203aa677f33e493fc\",\n// \"remark\": \"order remarks\",\n// }\n\n//market order 2\n// {\n// \"type\": \"market\",\n// \"symbol\": \"BTC-USDT\",\n// \"side\": \"buy\",\n// \"funds\": \"1\",\n// \"clientOid\": \"5c52e11203aa677f33e493fc\",\n// \"remark\": \"order remarks\",\n// }\n", @@ -8023,7 +8023,7 @@ ], "query": [] }, - "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470187)\n\n:::info[Description]\nOrder test endpoint, the request parameters and return parameters of this endpoint are exactly the same as the order endpoint, and can be used to verify whether the signature is correct and other operations. After placing an order, the order will not enter the matching system, and the order cannot be queried.\n:::\n\n:::tip[Tips]\nPlease note that once your order enters the order book, the system will freeze the handling fees for the order ahead of time.\n\nBefore placing orders, please be sure to fully understand the meaning of the parameters for each trading pair.\n:::\n\n:::tip[Tips]\nThe maximum number of active orders per account is 2000, with a maximum of 200 active orders per trading pair.\n:::\n\n\n**Public order placement request parameters**\n\n| Param | Type | Mandatory | Description |\n| --------- | ------ | --------- | ----------- |\n| clientOid | String | No | Client Order Id๏ผŒunique identifier created by the user, the use of UUID is recommended |\n| symbol | String | Yes | symbol |\n| type | String | Yes | Order type `limit` and `market` |\n| side | String | Yes | `buy` or `sell` |\n| stp | String | No | self trade prevention is divided into four strategies: `CN`, `CO`, `CB` , and `DC` |\n| tags | String | No | Order tag, length cannot exceed `20` characters (ASCII) |\n| remark | String | No | Order placement remarks, length cannot exceed `20` characters (ASCII) |\n\n**Additional Request Parameters Required by `limit` Orders**\n\n| Param | Type | Mandatory | Description |\n| ----------- | ------- | --------- | ----------- |\n| price | String | Yes | Specify price for currency |\n| size | String | Yes | Specify quantity for currency |\n| timeInForce | String | No | Order timing strategy `GTC`, `GTT`, `IOC`, `FOK` (The default is `GTC`) |\n| cancelAfter | long | No | Cancel after `n` seconds๏ผŒthe order timing strategy is `GTT` |\n| postOnly | boolean | No | passive order labels, this is disabled when the order timing strategy is `IOC` or `FOK` |\n| hidden | boolean | No | Hidden or not (not shown in order book) |\n| iceberg | boolean | No | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | String | No | Maximum visible quantity in iceberg orders |\n\n**Additional request parameters required by `market` orders**\n\n| Param | Type | Mandatory | Description |\n| ----- | ------ | --------- | ------------------------------------------ |\n| size | String | No | (Select one out of two: `size` or `funds`) |\n| funds | String | No | (Select one out of two: `size` or `funds`) |\n\n\n**Hold**\n\nFor limit price purchase orders, we will hold the amount of funds (price * size) required for your purchase order. Similarly, for limit price sell orders, we will also hold you sell order assets. When the transaction is executed, the service fees will be calculated. If you cancel a portion of a filled or unfilled order, then the remaining funds or amounts will be released and returned to your account. For market price buy/sell orders that require specific funds, we will hold the required funds in from your account. If only the size is specified, we may freeze (usually for a very short amount of time) all of the funds in your account prior to the order being filled or cancelled.\n\n\n**Order Lifecycle**\n\nWhen an order placement request is successful (the matching engine receives the order) or denied (due to there being insufficient funds or illegal parameter values, etc.), the system will respond to the HTTP request. When an order is successfully placed, the order ID is returned. The order will be matched, which could result in it being fully or partially filled. When an order is fully or partially filled, the remaining portions of the order will be in an active state awaiting to be matched (this does not include IOC orders). Orders that are fully or partially filled(already cancelled) will be put into the โ€œdoneโ€ state.\n\nUsers that have subscribed to the Market Data Channel can use the order ID ๏ผˆorderId๏ผ‰ and client ID ๏ผˆclientOid๏ผ‰ to identify messages.\n\n**Price Protection Mechanisms**\n\nPrice protection mechanisms ae enabled for order placements. Rules are detailed below:\n\n- If the spot trading market order/limit order placed by the user can be directly matched with an order in the current order book, the system will judge whether deviation between the price corresponding to the transaction depth and the spread exceeds the threshold value ๏ผˆthe threshold value can be obtained using the symbol API endpoint๏ผ‰๏ผ›\n\n- If it is exceeded, for limit orders, the order will be directly cancelled;\n\n- If it is a market order, then the system will partially execute the order. The execution limit will be the order size within the price range corresponding to the threshold value. The remaining orders will not be filled.\n\nFor example: if the threshold value is 10%, when a user places a market price purchase order in the KCS/USDT trading market for 10,000 USDT (the selling price is currently 1.20000), the system will determine that after the order is completely filled, the final price will be 1.40000. (1.40000-1.20000)/1.20000=16.7%>10%. The threshold value is 1.32000. The userโ€™s market price purchase order will be filled only to a maximum of 1.32000. The remaining order portions will not be matched with orders in the order book. Note: this feature may not be able to determine depth with complete accuracy. If your order is not completely filled, it may be because the portion exceeding the threshold value was not filled.\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.

Please remember the orderId created by the service provider, it used to check for updates in order status. |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | symbol |\n| type | string | specify if the order is an 'limit' order or 'market' order.

The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine.

When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels.

Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. |\n| remark | string | Order placement remarks, length cannot exceed 20 characters (ASCII) |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into four strategies: CN, CO, CB , and DC |\n| price | string | Specify price for order

When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. |\n| size | string | Specify quantity for order

When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.

When **type** is market, select one out of two: size or funds |\n| timeInForce | string | [Time in force](https://www.kucoin.com/docs-new/api-338146) is a special strategy used during trading |\n| postOnly | boolean | passive order labels, this is disabled when the order timing strategy is IOC or FOK |\n| hidden | boolean | [Hidden order](https://www.kucoin.com/docs-new/api-338146) or not (not shown in order book) |\n| iceberg | boolean | Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/api-338146) |\n| visibleSize | string | Maximum visible quantity in iceberg orders |\n| tags | string | Order tag, length cannot exceed 20 characters (ASCII) |\n| cancelAfter | integer | Cancel after n seconds๏ผŒthe order timing strategy is GTT |\n| funds | string | When **type** is market, select one out of two: size or funds |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| clientOid | string | The user self-defined order id. |\n\n---\n", + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470187)\n\n:::info[Description]\nOrder test endpoint, the request parameters and return parameters of this endpoint are exactly the same as the order endpoint, and can be used to verify whether the signature is correct and other operations. After placing an order, the order will not enter the matching system, and the order cannot be queried.\n:::\n\n:::tip[Tips]\nPlease note that once your order enters the order book, the system will freeze the handling fees for the order ahead of time.\n\nBefore placing orders, please be sure to fully understand the meaning of the parameters for each trading pair.\n:::\n\n:::tip[Tips]\nThe maximum number of active orders per account is 2000, with a maximum of 200 active orders per trading pair.\n:::\n\n\n**Public order placement request parameters**\n\n| Param | Type | Mandatory | Description |\n| --------- | ------ | --------- | ----------- |\n| clientOid | String | No | Client Order Id๏ผŒunique identifier created by the user, the use of UUID is recommended |\n| symbol | String | Yes | symbol |\n| type | String | Yes | Order type `limit` and `market` |\n| side | String | Yes | `buy` or `sell` |\n| stp | String | No | self trade prevention is divided into four strategies: `CN`, `CO`, `CB` , and `DC` |\n| tags | String | No | Order tag, length cannot exceed `20` characters (ASCII) |\n| remark | String | No | Order placement remarks, length cannot exceed `20` characters (ASCII) |\n\n**Additional Request Parameters Required by `limit` Orders**\n\n| Param | Type | Mandatory | Description |\n| ----------- | ------- | --------- | ----------- |\n| price | String | Yes | Specify price for currency |\n| size | String | Yes | Specify quantity for currency |\n| timeInForce | String | No | Order timing strategy `GTC`, `GTT`, `IOC`, `FOK` (The default is `GTC`) |\n| cancelAfter | long | No | Cancel after `n` seconds๏ผŒthe order timing strategy is `GTT` |\n| postOnly | boolean | No | passive order labels, this is disabled when the order timing strategy is `IOC` or `FOK` |\n| hidden | boolean | No | Hidden or not (not shown in order book) |\n| iceberg | boolean | No | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | String | No | Maximum visible quantity in iceberg orders |\n\n**Additional request parameters required by `market` orders**\n\n| Param | Type | Mandatory | Description |\n| ----- | ------ | --------- | ------------------------------------------ |\n| size | String | No | (Select one out of two: `size` or `funds`) |\n| funds | String | No | (Select one out of two: `size` or `funds`) |\n\n\n**Hold**\n\nFor limit price purchase orders, we will hold the amount of funds (price * size) required for your purchase order. Similarly, for limit price sell orders, we will also hold you sell order assets. When the transaction is executed, the service fees will be calculated. If you cancel a portion of a filled or unfilled order, then the remaining funds or amounts will be released and returned to your account. For market price buy/sell orders that require specific funds, we will hold the required funds in from your account. If only the size is specified, we may freeze (usually for a very short amount of time) all of the funds in your account prior to the order being filled or cancelled.\n\n\n**Order Lifecycle**\n\nWhen an order placement request is successful (the matching engine receives the order) or denied (due to there being insufficient funds or illegal parameter values, etc.), the system will respond to the HTTP request. When an order is successfully placed, the order ID is returned. The order will be matched, which could result in it being fully or partially filled. When an order is fully or partially filled, the remaining portions of the order will be in an active state awaiting to be matched (this does not include IOC orders). Orders that are fully or partially filled(already cancelled) will be put into the โ€œdoneโ€ state.\n\nUsers that have subscribed to the Market Data Channel can use the order ID ๏ผˆorderId๏ผ‰ and client ID ๏ผˆclientOid๏ผ‰ to identify messages.\n\n**Price Protection Mechanisms**\n\nPrice protection mechanisms ae enabled for order placements. Rules are detailed below:\n\n- If the spot trading market order/limit order placed by the user can be directly matched with an order in the current order book, the system will judge whether deviation between the price corresponding to the transaction depth and the spread exceeds the threshold value ๏ผˆthe threshold value can be obtained using the symbol API endpoint๏ผ‰๏ผ›\n\n- If it is exceeded, for limit orders, the order will be directly cancelled;\n\n- If it is a market order, then the system will partially execute the order. The execution limit will be the order size within the price range corresponding to the threshold value. The remaining orders will not be filled.\n\nFor example: if the threshold value is 10%, when a user places a market price purchase order in the KCS/USDT trading market for 10,000 USDT (the selling price is currently 1.20000), the system will determine that after the order is completely filled, the final price will be 1.40000. (1.40000-1.20000)/1.20000=16.7%>10%. The threshold value is 1.32000. The userโ€™s market price purchase order will be filled only to a maximum of 1.32000. The remaining order portions will not be matched with orders in the order book. Note: this feature may not be able to determine depth with complete accuracy. If your order is not completely filled, it may be because the portion exceeding the threshold value was not filled.\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.

Please remember the orderId created by the service provider, it used to check for updates in order status. |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | symbol |\n| type | string | specify if the order is an 'limit' order or 'market' order.

The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine.

When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels.

Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. |\n| remark | string | Order placement remarks, length cannot exceed 20 characters (ASCII) |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC |\n| price | string | Specify price for order

When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. |\n| size | string | Specify quantity for order

When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.

When **type** is market, select one out of two: size or funds |\n| timeInForce | string | [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading |\n| postOnly | boolean | passive order labels, this is disabled when the order timing strategy is IOC or FOK |\n| hidden | boolean | [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) |\n| iceberg | boolean | Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) |\n| visibleSize | string | Maximum visible quantity in iceberg orders |\n| tags | string | Order tag, length cannot exceed 20 characters (ASCII) |\n| cancelAfter | integer | Cancel after n seconds๏ผŒthe order timing strategy is GTT |\n| funds | string | When **type** is market, select one out of two: size or funds |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| clientOid | string | The user self-defined order id. |\n\n---\n", "body": { "mode": "raw", "raw": "//limit order\n{\n \"type\": \"limit\",\n \"symbol\": \"BTC-USDT\",\n \"side\": \"buy\",\n \"price\": \"50000\",\n \"size\": \"0.00001\",\n \"clientOid\": \"5c52e11203aa677f33e493f\",\n \"remark\": \"order remarks\"\n}\n\n//market order 1\n// {\n// \"type\": \"market\",\n// \"symbol\": \"BTC-USDT\",\n// \"side\": \"buy\",\n// \"size\": \"0.00001\",\n// \"clientOid\": \"5c52e11203aa677f33e493fc\",\n// \"remark\": \"order remarks\",\n// }\n\n//market order 2\n// {\n// \"type\": \"market\",\n// \"symbol\": \"BTC-USDT\",\n// \"side\": \"buy\",\n// \"funds\": \"1\",\n// \"clientOid\": \"5c52e11203aa677f33e493fc\",\n// \"remark\": \"order remarks\",\n// }\n", @@ -8109,7 +8109,7 @@ ], "query": [] }, - "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470188)\n\n:::info[Description]\nPlace order to the Spot trading system, you can place two major types of orders: limit and market. Orders can only be placed if your account has sufficient funds. Once an order is placed, your funds will be put on hold for the duration of the order. The amount of funds on hold depends on the order type and parameters specified.\n:::\n\n:::tip[Tips]\nPlease note that once your order enters the order book, the system will freeze the handling fees for the order ahead of time.\n\nBefore placing orders, please be sure to fully understand the meaning of the parameters for each trading pair.\n:::\n\n:::tip[Tips]\nThe maximum number of active orders per account is 2000, with a maximum of 200 active orders per trading pair.\n:::\n\n\n**Public order placement request parameters**\n\n| Param | Type | Mandatory | Description |\n| --------- | ------ | --------- | ----------- |\n| clientOid | String | No | Client Order Id๏ผŒunique identifier created by the user, the use of UUID is recommended |\n| symbol | String | Yes | symbol |\n| type | String | Yes | Order type `limit` and `market` |\n| side | String | Yes | `buy` or `sell` |\n| stp | String | No | self trade prevention is divided into four strategies: `CN`, `CO`, `CB` , and `DC` |\n| tags | String | No | Order tag, length cannot exceed `20` characters (ASCII) |\n| remark | String | No | Order placement remarks, length cannot exceed `20` characters (ASCII) |\n\n**Additional Request Parameters Required by `limit` Orders**\n\n| Param | Type | Mandatory | Description |\n| ----------- | ------- | --------- | ----------- |\n| price | String | Yes | Specify price for currency |\n| size | String | Yes | Specify quantity for currency |\n| timeInForce | String | No | Order timing strategy `GTC`, `GTT`, `IOC`, `FOK` (The default is `GTC`) |\n| cancelAfter | long | No | Cancel after `n` seconds๏ผŒthe order timing strategy is `GTT` |\n| postOnly | boolean | No | passive order labels, this is disabled when the order timing strategy is `IOC` or `FOK` |\n| hidden | boolean | No | Hidden or not (not shown in order book) |\n| iceberg | boolean | No | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | String | No | Maximum visible quantity in iceberg orders |\n\n**Additional request parameters required by `market` orders**\n\n| Param | Type | Mandatory | Description |\n| ----- | ------ | --------- | ------------------------------------------ |\n| size | String | No | (Select one out of two: `size` or `funds`) |\n| funds | String | No | (Select one out of two: `size` or `funds`) |\n\n\n\n**Hold**\n\nFor limit price purchase orders, we will hold the amount of funds (price * size) required for your purchase order. Similarly, for limit price sell orders, we will also hold you sell order assets. When the transaction is executed, the service fees will be calculated. If you cancel a portion of a filled or unfilled order, then the remaining funds or amounts will be released and returned to your account. For market price buy/sell orders that require specific funds, we will hold the required funds in from your account. If only the size is specified, we may freeze (usually for a very short amount of time) all of the funds in your account prior to the order being filled or cancelled.\n\n\n**Order Lifecycle**\n\nWhen an order placement request is successful (the matching engine receives the order) or denied (due to there being insufficient funds or illegal parameter values, etc.), the system will respond to the HTTP request. When an order is successfully placed, the order ID is returned. The order will be matched, which could result in it being fully or partially filled. When an order is fully or partially filled, the remaining portions of the order will be in an active state awaiting to be matched (this does not include IOC orders). Orders that are fully or partially filled(already cancelled) will be put into the โ€œdoneโ€ state.\n\nUsers that have subscribed to the Market Data Channel can use the order ID ๏ผˆorderId๏ผ‰ and client ID ๏ผˆclientOid๏ผ‰ to identify messages.\n\n**Price Protection Mechanisms**\n\nPrice protection mechanisms ae enabled for order placements. Rules are detailed below:\n\n- If the spot trading market order/limit order placed by the user can be directly matched with an order in the current order book, the system will judge whether deviation between the price corresponding to the transaction depth and the spread exceeds the threshold value ๏ผˆthe threshold value can be obtained using the symbol API endpoint๏ผ‰๏ผ›\n\n- If it is exceeded, for limit orders, the order will be directly cancelled;\n\n- If it is a market order, then the system will partially execute the order. The execution limit will be the order size within the price range corresponding to the threshold value. The remaining orders will not be filled.\n\nFor example: if the threshold value is 10%, when a user places a market price purchase order in the KCS/USDT trading market for 10,000 USDT (the selling price is currently 1.20000), the system will determine that after the order is completely filled, the final price will be 1.40000. (1.40000-1.20000)/1.20000=16.7%>10%. The threshold value is 1.32000. The userโ€™s market price purchase order will be filled only to a maximum of 1.32000. The remaining order portions will not be matched with orders in the order book. Note: this feature may not be able to determine depth with complete accuracy. If your order is not completely filled, it may be because the portion exceeding the threshold value was not filled.\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.

Please remember the orderId created by the service provider, it used to check for updates in order status. |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | symbol |\n| type | string | specify if the order is an 'limit' order or 'market' order.

The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine.

When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels.

Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. |\n| remark | string | Order placement remarks, length cannot exceed 20 characters (ASCII) |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into four strategies: CN, CO, CB , and DC |\n| price | string | Specify price for order

When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. |\n| size | string | Specify quantity for order

When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.

When **type** is market, select one out of two: size or funds |\n| timeInForce | string | [Time in force](https://www.kucoin.com/docs-new/api-338146) is a special strategy used during trading |\n| postOnly | boolean | passive order labels, this is disabled when the order timing strategy is IOC or FOK |\n| hidden | boolean | [Hidden order](https://www.kucoin.com/docs-new/api-338146) or not (not shown in order book) |\n| iceberg | boolean | Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/api-338146) |\n| visibleSize | string | Maximum visible quantity in iceberg orders |\n| tags | string | Order tag, length cannot exceed 20 characters (ASCII) |\n| cancelAfter | integer | Cancel after n seconds๏ผŒthe order timing strategy is GTT |\n| funds | string | When **type** is market, select one out of two: size or funds |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| clientOid | string | The user self-defined order id. |\n\n---\n", + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470188)\n\n:::info[Description]\nPlace order to the Spot trading system, you can place two major types of orders: limit and market. Orders can only be placed if your account has sufficient funds. Once an order is placed, your funds will be put on hold for the duration of the order. The amount of funds on hold depends on the order type and parameters specified.\n:::\n\n:::tip[Tips]\nPlease note that once your order enters the order book, the system will freeze the handling fees for the order ahead of time.\n\nBefore placing orders, please be sure to fully understand the meaning of the parameters for each trading pair.\n:::\n\n:::tip[Tips]\nThe maximum number of active orders per account is 2000, with a maximum of 200 active orders per trading pair.\n:::\n\n\n**Public order placement request parameters**\n\n| Param | Type | Mandatory | Description |\n| --------- | ------ | --------- | ----------- |\n| clientOid | String | No | Client Order Id๏ผŒunique identifier created by the user, the use of UUID is recommended |\n| symbol | String | Yes | symbol |\n| type | String | Yes | Order type `limit` and `market` |\n| side | String | Yes | `buy` or `sell` |\n| stp | String | No | self trade prevention is divided into four strategies: `CN`, `CO`, `CB` , and `DC` |\n| tags | String | No | Order tag, length cannot exceed `20` characters (ASCII) |\n| remark | String | No | Order placement remarks, length cannot exceed `20` characters (ASCII) |\n\n**Additional Request Parameters Required by `limit` Orders**\n\n| Param | Type | Mandatory | Description |\n| ----------- | ------- | --------- | ----------- |\n| price | String | Yes | Specify price for currency |\n| size | String | Yes | Specify quantity for currency |\n| timeInForce | String | No | Order timing strategy `GTC`, `GTT`, `IOC`, `FOK` (The default is `GTC`) |\n| cancelAfter | long | No | Cancel after `n` seconds๏ผŒthe order timing strategy is `GTT` |\n| postOnly | boolean | No | passive order labels, this is disabled when the order timing strategy is `IOC` or `FOK` |\n| hidden | boolean | No | Hidden or not (not shown in order book) |\n| iceberg | boolean | No | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | String | No | Maximum visible quantity in iceberg orders |\n\n**Additional request parameters required by `market` orders**\n\n| Param | Type | Mandatory | Description |\n| ----- | ------ | --------- | ------------------------------------------ |\n| size | String | No | (Select one out of two: `size` or `funds`) |\n| funds | String | No | (Select one out of two: `size` or `funds`) |\n\n\n\n**Hold**\n\nFor limit price purchase orders, we will hold the amount of funds (price * size) required for your purchase order. Similarly, for limit price sell orders, we will also hold you sell order assets. When the transaction is executed, the service fees will be calculated. If you cancel a portion of a filled or unfilled order, then the remaining funds or amounts will be released and returned to your account. For market price buy/sell orders that require specific funds, we will hold the required funds in from your account. If only the size is specified, we may freeze (usually for a very short amount of time) all of the funds in your account prior to the order being filled or cancelled.\n\n\n**Order Lifecycle**\n\nWhen an order placement request is successful (the matching engine receives the order) or denied (due to there being insufficient funds or illegal parameter values, etc.), the system will respond to the HTTP request. When an order is successfully placed, the order ID is returned. The order will be matched, which could result in it being fully or partially filled. When an order is fully or partially filled, the remaining portions of the order will be in an active state awaiting to be matched (this does not include IOC orders). Orders that are fully or partially filled(already cancelled) will be put into the โ€œdoneโ€ state.\n\nUsers that have subscribed to the Market Data Channel can use the order ID ๏ผˆorderId๏ผ‰ and client ID ๏ผˆclientOid๏ผ‰ to identify messages.\n\n**Price Protection Mechanisms**\n\nPrice protection mechanisms ae enabled for order placements. Rules are detailed below:\n\n- If the spot trading market order/limit order placed by the user can be directly matched with an order in the current order book, the system will judge whether deviation between the price corresponding to the transaction depth and the spread exceeds the threshold value ๏ผˆthe threshold value can be obtained using the symbol API endpoint๏ผ‰๏ผ›\n\n- If it is exceeded, for limit orders, the order will be directly cancelled;\n\n- If it is a market order, then the system will partially execute the order. The execution limit will be the order size within the price range corresponding to the threshold value. The remaining orders will not be filled.\n\nFor example: if the threshold value is 10%, when a user places a market price purchase order in the KCS/USDT trading market for 10,000 USDT (the selling price is currently 1.20000), the system will determine that after the order is completely filled, the final price will be 1.40000. (1.40000-1.20000)/1.20000=16.7%>10%. The threshold value is 1.32000. The userโ€™s market price purchase order will be filled only to a maximum of 1.32000. The remaining order portions will not be matched with orders in the order book. Note: this feature may not be able to determine depth with complete accuracy. If your order is not completely filled, it may be because the portion exceeding the threshold value was not filled.\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.

Please remember the orderId created by the service provider, it used to check for updates in order status. |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | symbol |\n| type | string | specify if the order is an 'limit' order or 'market' order.

The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine.

When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels.

Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. |\n| remark | string | Order placement remarks, length cannot exceed 20 characters (ASCII) |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC |\n| price | string | Specify price for order

When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. |\n| size | string | Specify quantity for order

When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.

When **type** is market, select one out of two: size or funds |\n| timeInForce | string | [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading |\n| postOnly | boolean | passive order labels, this is disabled when the order timing strategy is IOC or FOK |\n| hidden | boolean | [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) |\n| iceberg | boolean | Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) |\n| visibleSize | string | Maximum visible quantity in iceberg orders |\n| tags | string | Order tag, length cannot exceed 20 characters (ASCII) |\n| cancelAfter | integer | Cancel after n seconds๏ผŒthe order timing strategy is GTT |\n| funds | string | When **type** is market, select one out of two: size or funds |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| clientOid | string | The user self-defined order id. |\n\n---\n", "body": { "mode": "raw", "raw": "//limit order\n{\n \"type\": \"limit\",\n \"symbol\": \"BTC-USDT\",\n \"side\": \"buy\",\n \"price\": \"50000\",\n \"size\": \"0.00001\",\n \"clientOid\": \"5c52e11203aa677f33e493fb\",\n \"remark\": \"order remarks\"\n}\n\n//market order 1\n// {\n// \"type\": \"market\",\n// \"symbol\": \"BTC-USDT\",\n// \"side\": \"buy\",\n// \"size\": \"0.00001\",\n// \"clientOid\": \"5c52e11203aa677f33e493fc\",\n// \"remark\": \"order remarks\"\n// }\n\n//market order 2\n// {\n// \"type\": \"market\",\n// \"symbol\": \"BTC-USDT\",\n// \"side\": \"buy\",\n// \"funds\": \"1\",\n// \"clientOid\": \"5c52e11203aa677f33e493fc\",\n// \"remark\": \"order remarks\"\n// }\n", @@ -8278,7 +8278,7 @@ ], "query": [] }, - "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470334)\n\n:::info[Description]\nPlace stop order to the Spot trading system. The maximum untriggered stop orders for a single trading pair in one account is 20.\n:::\n\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.

Please remember the orderId created by the service provider, it used to check for updates in order status. |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | symbol |\n| type | string | specify if the order is an 'limit' order or 'market' order.

The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine.

When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels.

Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. |\n| remark | string | Order placement remarks, length cannot exceed 20 characters (ASCII) |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into four strategies: CN, CO, CB , and DC |\n| price | string | Specify price for order, not need for market order.

When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. |\n| size | string | Specify quantity for order

When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.

When **type** is market, select one out of two: size or funds |\n| timeInForce | string | [Time in force](https://www.kucoin.com/docs-new/api-338146) is a special strategy used during trading. Required for limit orders. |\n| postOnly | boolean | passive order labels, this is disabled when the order timing strategy is IOC or FOK if **type** is limit. |\n| hidden | boolean | [Hidden order](https://www.kucoin.com/docs-new/api-338146) or not (not shown in order book) |\n| iceberg | boolean | Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/api-338146) |\n| visibleSize | string | When **type** is limit, this is Maximum visible quantity in iceberg orders. |\n| cancelAfter | integer | Cancel after n seconds๏ผŒthe order timing strategy is GTT when **type** is limit. |\n| funds | string | When **type** is market, select one out of two: size or funds |\n| stopPrice | string | The trigger price. |\n| tradeType | string | The type of trading : TRADE๏ผˆSpot๏ผ‰, MARGIN_TRADE (Cross Margin), MARGIN_ISOLATED_TRADE (Isolated Margin). Default is TRADE |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| clientOid | string | The user self-defined order id. |\n\n---\n", + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470334)\n\n:::info[Description]\nPlace stop order to the Spot trading system. The maximum untriggered stop orders for a single trading pair in one account is 20.\n:::\n\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.

Please remember the orderId created by the service provider, it used to check for updates in order status. |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | symbol |\n| type | string | specify if the order is an 'limit' order or 'market' order.

The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine.

When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels.

Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. |\n| remark | string | Order placement remarks, length cannot exceed 20 characters (ASCII) |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC |\n| price | string | Specify price for order, not need for market order.

When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. |\n| size | string | Specify quantity for order

When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.

When **type** is market, select one out of two: size or funds |\n| timeInForce | string | [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading. Required for limit orders. |\n| postOnly | boolean | passive order labels, this is disabled when the order timing strategy is IOC or FOK if **type** is limit. |\n| hidden | boolean | [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) |\n| iceberg | boolean | Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) |\n| visibleSize | string | When **type** is limit, this is Maximum visible quantity in iceberg orders. |\n| cancelAfter | integer | Cancel after n seconds๏ผŒthe order timing strategy is GTT when **type** is limit. |\n| funds | string | When **type** is market, select one out of two: size or funds |\n| stopPrice | string | The trigger price. |\n| tradeType | string | The type of trading : TRADE๏ผˆSpot๏ผ‰, MARGIN_TRADE (Cross Margin), MARGIN_ISOLATED_TRADE (Isolated Margin). Default is TRADE |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| clientOid | string | The user self-defined order id. |\n\n---\n", "body": { "mode": "raw", "raw": "//limit order\n{\n \"type\": \"limit\",\n \"symbol\": \"BTC-USDT\",\n \"side\": \"buy\",\n \"price\": \"50000\",\n \"size\": \"0.00001\",\n \"clientOid\": \"5c52e11203aa677f33e493fb\",\n \"remark\": \"order remarks\"\n}\n\n//market order 1\n// {\n// \"type\": \"market\",\n// \"symbol\": \"BTC-USDT\",\n// \"side\": \"buy\",\n// \"size\": \"0.00001\",\n// \"clientOid\": \"5c52e11203aa677f33e493fc\",\n// \"remark\": \"order remarks\"\n// }\n\n//market order 2\n// {\n// \"type\": \"market\",\n// \"symbol\": \"BTC-USDT\",\n// \"side\": \"buy\",\n// \"funds\": \"1\",\n// \"clientOid\": \"5c52e11203aa677f33e493fc\",\n// \"remark\": \"order remarks\"\n// }\n", @@ -9170,7 +9170,7 @@ } ] }, - "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470198)\n\n:::info[Description]\nThis interface is to obtain all Margin active order lists, and the return value of the active order interface is the paged data of all uncompleted order lists. The returned data is sorted in descending order according to the latest update time of the order.\n\nAfter the user successfully places an order, the order is in Active state, and the user can use inOrderBook to determine whether the order has entered the order. Canceled or fully filled orders are marked as completed Done status.\n:::\n\n:::tip[Tips]\nFor high-frequency trading users, we recommend locally caching, maintaining your own order records, and using market data streams to update your order information in real time.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | The unique order id generated by the trading system |\n| symbol | string | symbol |\n| opType | string | |\n| type | string | Specify if the order is an 'limit' order or 'market' order. |\n| side | string | Buy or sell |\n| price | string | Order price |\n| size | string | Order size |\n| funds | string | Order Funds |\n| dealSize | string | Number of filled transactions |\n| dealFunds | string | Funds of filled transactions |\n| fee | string | trading fee |\n| feeCurrency | string | currency used to calculate trading fee |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into these strategies: CN, CO, CB , and DC |\n| stop | string | |\n| stopTriggered | boolean | |\n| stopPrice | string | |\n| timeInForce | string | Time in force |\n| postOnly | boolean | Whether its a postOnly order. |\n| hidden | boolean | Whether its a hidden order. |\n| iceberg | boolean | Whether its a iceberg order. |\n| visibleSize | string | Visible size of iceberg order in order book. |\n| cancelAfter | integer | A GTT timeInForce that expires in n seconds |\n| channel | string | |\n| clientOid | string | Client Order Id๏ผŒunique identifier created by the user |\n| remark | string | Order placement remarks |\n| tags | string | Order tag |\n| cancelExist | boolean | Whether there is a cancellation record for the order. |\n| createdAt | integer | |\n| lastUpdatedAt | integer | |\n| tradeType | string | Trade type, redundancy param |\n| inOrderBook | boolean | Whether to enter the orderbook: true: enter the orderbook; false: not enter the orderbook |\n| cancelledSize | string | Number of canceled transactions |\n| cancelledFunds | string | Funds of canceled transactions |\n| remainSize | string | Number of remain transactions |\n| remainFunds | string | Funds of remain transactions |\n| tax | string | Users in some regions need query this field |\n| active | boolean | Order status: true-The status of the order isactive; false-The status of the order is done |\n\n---\n", + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470198)\n\n:::info[Description]\nThis interface is to obtain all Margin active order lists, and the return value of the active order interface is the paged data of all uncompleted order lists. The returned data is sorted in descending order according to the latest update time of the order.\n\nAfter the user successfully places an order, the order is in Active state, and the user can use inOrderBook to determine whether the order has entered the order. Canceled or fully filled orders are marked as completed Done status.\n:::\n\n:::tip[Tips]\nFor high-frequency trading users, we recommend locally caching, maintaining your own order records, and using market data streams to update your order information in real time.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | The unique order id generated by the trading system |\n| symbol | string | symbol |\n| opType | string | |\n| type | string | Specify if the order is an 'limit' order or 'market' order. |\n| side | string | Buy or sell |\n| price | string | Order price |\n| size | string | Order size |\n| funds | string | Order Funds |\n| dealSize | string | Number of filled transactions |\n| dealFunds | string | Funds of filled transactions |\n| fee | string | trading fee |\n| feeCurrency | string | currency used to calculate trading fee |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC |\n| stop | string | |\n| stopTriggered | boolean | |\n| stopPrice | string | |\n| timeInForce | string | Time in force |\n| postOnly | boolean | Whether its a postOnly order. |\n| hidden | boolean | Whether its a hidden order. |\n| iceberg | boolean | Whether its a iceberg order. |\n| visibleSize | string | Visible size of iceberg order in order book. |\n| cancelAfter | integer | A GTT timeInForce that expires in n seconds |\n| channel | string | |\n| clientOid | string | Client Order Id๏ผŒunique identifier created by the user |\n| remark | string | Order placement remarks |\n| tags | string | Order tag |\n| cancelExist | boolean | Whether there is a cancellation record for the order. |\n| createdAt | integer | |\n| lastUpdatedAt | integer | |\n| tradeType | string | Trade type, redundancy param |\n| inOrderBook | boolean | Whether to enter the orderbook: true: enter the orderbook; false: not enter the orderbook |\n| cancelledSize | string | Number of canceled transactions |\n| cancelledFunds | string | Funds of canceled transactions |\n| remainSize | string | Number of remain transactions |\n| remainFunds | string | Funds of remain transactions |\n| tax | string | Users in some regions need query this field |\n| active | boolean | Order status: true-The status of the order isactive; false-The status of the order is done |\n\n---\n", "body": {} }, "response": [ @@ -9303,7 +9303,7 @@ } ] }, - "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470199)\n\n:::info[Description]\nThis interface is to obtain all Margin Closed order lists, and the return value of the active order interface is the paged data of all uncompleted order lists. The returned data is sorted in descending order according to the latest update time of the order.\n\nAfter the user successfully places an order, the order is in Active state, and the user can use inOrderBook to determine whether the order has entered the order. Canceled or fully filled orders are marked as completed Done status.\n:::\n\n:::tip[Tips]\nIf the order is not an active order, you can only get data within the time range of 3 _ 24 hours (ie: from the current time to 3 _ 24 hours ago). If the time range is exceeded, the system will query the data within the time range of 3 * 24 hours by default.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| lastId | integer | The id of the last set of data from the previous batch of data. By default, the latest information is given.
lastId is used to filter data and paginate. If lastId is not entered, the default is a maximum of 100 returned data items. The return results include lastId๏ผŒwhich can be used as a query parameter to look up new data from the next page. |\n| items | array | Refer to the schema section of items |\n\n**root.data.items Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | The unique order id generated by the trading system |\n| symbol | string | symbol |\n| opType | string | |\n| type | string | Specify if the order is an 'limit' order or 'market' order. |\n| side | string | Buy or sell |\n| price | string | Order price |\n| size | string | Order size |\n| funds | string | Order Funds |\n| dealSize | string | Number of filled transactions |\n| dealFunds | string | Funds of filled transactions |\n| fee | string | [Handling fees](https://www.kucoin.com/docs-new/api-5327739) |\n| feeCurrency | string | currency used to calculate trading fee |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into these strategies: CN, CO, CB , and DC |\n| stop | string | |\n| stopTriggered | boolean | |\n| stopPrice | string | |\n| timeInForce | string | Time in force |\n| postOnly | boolean | Whether its a postOnly order. |\n| hidden | boolean | Whether its a hidden order. |\n| iceberg | boolean | Whether its a iceberg order. |\n| visibleSize | string | Visible size of iceberg order in order book. |\n| cancelAfter | integer | A GTT timeInForce that expires in n seconds |\n| channel | string | |\n| clientOid | string | Client Order Id๏ผŒunique identifier created by the user |\n| remark | string | Order placement remarks |\n| tags | string | Order tag |\n| cancelExist | boolean | Whether there is a cancellation record for the order. |\n| createdAt | integer | |\n| lastUpdatedAt | integer | |\n| tradeType | string | Trade type, redundancy param |\n| inOrderBook | boolean | Whether to enter the orderbook: true: enter the orderbook; false: not enter the orderbook |\n| cancelledSize | string | Number of canceled transactions |\n| cancelledFunds | string | Funds of canceled transactions |\n| remainSize | string | Number of remain transactions |\n| remainFunds | string | Funds of remain transactions |\n| tax | string | Users in some regions need query this field |\n| active | boolean | Order status: true-The status of the order isactive; false-The status of the order is done |\n\n---\n", + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470199)\n\n:::info[Description]\nThis interface is to obtain all Margin Closed order lists, and the return value of the active order interface is the paged data of all uncompleted order lists. The returned data is sorted in descending order according to the latest update time of the order.\n\nAfter the user successfully places an order, the order is in Active state, and the user can use inOrderBook to determine whether the order has entered the order. Canceled or fully filled orders are marked as completed Done status.\n:::\n\n:::tip[Tips]\nIf the order is not an active order, you can only get data within the time range of 3 _ 24 hours (ie: from the current time to 3 _ 24 hours ago). If the time range is exceeded, the system will query the data within the time range of 3 * 24 hours by default.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| lastId | integer | The id of the last set of data from the previous batch of data. By default, the latest information is given.
lastId is used to filter data and paginate. If lastId is not entered, the default is a maximum of 100 returned data items. The return results include lastId๏ผŒwhich can be used as a query parameter to look up new data from the next page. |\n| items | array | Refer to the schema section of items |\n\n**root.data.items Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | The unique order id generated by the trading system |\n| symbol | string | symbol |\n| opType | string | |\n| type | string | Specify if the order is an 'limit' order or 'market' order. |\n| side | string | Buy or sell |\n| price | string | Order price |\n| size | string | Order size |\n| funds | string | Order Funds |\n| dealSize | string | Number of filled transactions |\n| dealFunds | string | Funds of filled transactions |\n| fee | string | [Handling fees](https://www.kucoin.com/docs-new/api-5327739) |\n| feeCurrency | string | currency used to calculate trading fee |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC |\n| stop | string | |\n| stopTriggered | boolean | |\n| stopPrice | string | |\n| timeInForce | string | Time in force |\n| postOnly | boolean | Whether its a postOnly order. |\n| hidden | boolean | Whether its a hidden order. |\n| iceberg | boolean | Whether its a iceberg order. |\n| visibleSize | string | Visible size of iceberg order in order book. |\n| cancelAfter | integer | A GTT timeInForce that expires in n seconds |\n| channel | string | |\n| clientOid | string | Client Order Id๏ผŒunique identifier created by the user |\n| remark | string | Order placement remarks |\n| tags | string | Order tag |\n| cancelExist | boolean | Whether there is a cancellation record for the order. |\n| createdAt | integer | |\n| lastUpdatedAt | integer | |\n| tradeType | string | Trade type, redundancy param |\n| inOrderBook | boolean | Whether to enter the orderbook: true: enter the orderbook; false: not enter the orderbook |\n| cancelledSize | string | Number of canceled transactions |\n| cancelledFunds | string | Funds of canceled transactions |\n| remainSize | string | Number of remain transactions |\n| remainFunds | string | Funds of remain transactions |\n| tax | string | Users in some regions need query this field |\n| active | boolean | Order status: true-The status of the order isactive; false-The status of the order is done |\n\n---\n", "body": {} }, "response": [ @@ -9697,7 +9697,7 @@ } ] }, - "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470202)\n\n:::info[Description]\nThis endpoint can be used to obtain information for a single Margin order using the order id.\n\nAfter the user successfully places an order, the order is in Active state, and the user can use inOrderBook to determine whether the order has entered the order. Canceled or fully filled orders are marked as completed Done status.\n:::\n\n:::tip[Tips]\nIf the order is not an active order, you can only get data within the time range of 3 _ 24 hours (ie: from the current time to 3 _ 24 hours ago). If the time range is exceeded, the system will query the data within the time range of 3 * 24 hours by default.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | The unique order id generated by the trading system |\n| symbol | string | symbol |\n| opType | string | |\n| type | string | Specify if the order is an 'limit' order or 'market' order. |\n| side | string | Buy or sell |\n| price | string | Order price |\n| size | string | Order size |\n| funds | string | Order Funds |\n| dealSize | string | Number of filled transactions |\n| dealFunds | string | Funds of filled transactions |\n| fee | string | [Handling fees](https://www.kucoin.com/docs-new/api-5327739) |\n| feeCurrency | string | currency used to calculate trading fee |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into these strategies: CN, CO, CB , and DC |\n| stop | string | |\n| stopTriggered | boolean | |\n| stopPrice | string | |\n| timeInForce | string | Time in force |\n| postOnly | boolean | Whether its a postOnly order. |\n| hidden | boolean | Whether its a hidden order. |\n| iceberg | boolean | Whether its a iceberg order. |\n| visibleSize | string | Visible size of iceberg order in order book. |\n| cancelAfter | integer | A GTT timeInForce that expires in n seconds |\n| channel | string | |\n| clientOid | string | Client Order Id๏ผŒunique identifier created by the user |\n| remark | string | Order placement remarks |\n| tags | string | Order tag |\n| cancelExist | boolean | Whether there is a cancellation record for the order. |\n| createdAt | integer | |\n| lastUpdatedAt | integer | |\n| tradeType | string | Trade type, redundancy param |\n| inOrderBook | boolean | Whether to enter the orderbook: true: enter the orderbook; false: not enter the orderbook |\n| cancelledSize | string | Number of canceled transactions |\n| cancelledFunds | string | Funds of canceled transactions |\n| remainSize | string | Number of remain transactions |\n| remainFunds | string | Funds of remain transactions |\n| tax | string | Users in some regions need query this field |\n| active | boolean | Order status: true-The status of the order isactive; false-The status of the order is done |\n\n---\n", + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470202)\n\n:::info[Description]\nThis endpoint can be used to obtain information for a single Margin order using the order id.\n\nAfter the user successfully places an order, the order is in Active state, and the user can use inOrderBook to determine whether the order has entered the order. Canceled or fully filled orders are marked as completed Done status.\n:::\n\n:::tip[Tips]\nIf the order is not an active order, you can only get data within the time range of 3 _ 24 hours (ie: from the current time to 3 _ 24 hours ago). If the time range is exceeded, the system will query the data within the time range of 3 * 24 hours by default.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | The unique order id generated by the trading system |\n| symbol | string | symbol |\n| opType | string | |\n| type | string | Specify if the order is an 'limit' order or 'market' order. |\n| side | string | Buy or sell |\n| price | string | Order price |\n| size | string | Order size |\n| funds | string | Order Funds |\n| dealSize | string | Number of filled transactions |\n| dealFunds | string | Funds of filled transactions |\n| fee | string | [Handling fees](https://www.kucoin.com/docs-new/api-5327739) |\n| feeCurrency | string | currency used to calculate trading fee |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC |\n| stop | string | |\n| stopTriggered | boolean | |\n| stopPrice | string | |\n| timeInForce | string | Time in force |\n| postOnly | boolean | Whether its a postOnly order. |\n| hidden | boolean | Whether its a hidden order. |\n| iceberg | boolean | Whether its a iceberg order. |\n| visibleSize | string | Visible size of iceberg order in order book. |\n| cancelAfter | integer | A GTT timeInForce that expires in n seconds |\n| channel | string | |\n| clientOid | string | Client Order Id๏ผŒunique identifier created by the user |\n| remark | string | Order placement remarks |\n| tags | string | Order tag |\n| cancelExist | boolean | Whether there is a cancellation record for the order. |\n| createdAt | integer | |\n| lastUpdatedAt | integer | |\n| tradeType | string | Trade type, redundancy param |\n| inOrderBook | boolean | Whether to enter the orderbook: true: enter the orderbook; false: not enter the orderbook |\n| cancelledSize | string | Number of canceled transactions |\n| cancelledFunds | string | Funds of canceled transactions |\n| remainSize | string | Number of remain transactions |\n| remainFunds | string | Funds of remain transactions |\n| tax | string | Users in some regions need query this field |\n| active | boolean | Order status: true-The status of the order isactive; false-The status of the order is done |\n\n---\n", "body": {} }, "response": [ @@ -9791,7 +9791,7 @@ } ] }, - "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470203)\n\n:::info[Description]\nThis endpoint can be used to obtain information for a single Margin order using the client order id.\n\nAfter the user successfully places an order, the order is in Active state, and the user can use inOrderBook to determine whether the order has entered the order. Canceled or fully filled orders are marked as completed Done status.\n:::\n\n:::tip[Tips]\nIf the order is not an active order, you can only get data within the time range of 3 _ 24 hours (ie: from the current time to 3 _ 24 hours ago). If the time range is exceeded, the system will query the data within the time range of 3 * 24 hours by default.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | The unique order id generated by the trading system |\n| symbol | string | symbol |\n| opType | string | |\n| type | string | Specify if the order is an 'limit' order or 'market' order. |\n| side | string | Buy or sell |\n| price | string | Order price |\n| size | string | Order size |\n| funds | string | Order Funds |\n| dealSize | string | Number of filled transactions |\n| dealFunds | string | Funds of filled transactions |\n| fee | string | [Handling fees](https://www.kucoin.com/docs-new/api-5327739) |\n| feeCurrency | string | currency used to calculate trading fee |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into these strategies: CN, CO, CB , and DC |\n| stop | string | |\n| stopTriggered | boolean | |\n| stopPrice | string | |\n| timeInForce | string | Time in force |\n| postOnly | boolean | Whether its a postOnly order. |\n| hidden | boolean | Whether its a hidden order. |\n| iceberg | boolean | Whether its a iceberg order. |\n| visibleSize | string | Visible size of iceberg order in order book. |\n| cancelAfter | integer | A GTT timeInForce that expires in n seconds |\n| channel | string | |\n| clientOid | string | Client Order Id๏ผŒunique identifier created by the user |\n| remark | string | Order placement remarks |\n| tags | string | Order tag |\n| cancelExist | boolean | Whether there is a cancellation record for the order. |\n| createdAt | integer | |\n| lastUpdatedAt | integer | |\n| tradeType | string | Trade type, redundancy param |\n| inOrderBook | boolean | Whether to enter the orderbook: true: enter the orderbook; false: not enter the orderbook |\n| cancelledSize | string | Number of canceled transactions |\n| cancelledFunds | string | Funds of canceled transactions |\n| remainSize | string | Number of remain transactions |\n| remainFunds | string | Funds of remain transactions |\n| tax | string | Users in some regions need query this field |\n| active | boolean | Order status: true-The status of the order isactive; false-The status of the order is done |\n\n---\n", + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470203)\n\n:::info[Description]\nThis endpoint can be used to obtain information for a single Margin order using the client order id.\n\nAfter the user successfully places an order, the order is in Active state, and the user can use inOrderBook to determine whether the order has entered the order. Canceled or fully filled orders are marked as completed Done status.\n:::\n\n:::tip[Tips]\nIf the order is not an active order, you can only get data within the time range of 3 _ 24 hours (ie: from the current time to 3 _ 24 hours ago). If the time range is exceeded, the system will query the data within the time range of 3 * 24 hours by default.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | The unique order id generated by the trading system |\n| symbol | string | symbol |\n| opType | string | |\n| type | string | Specify if the order is an 'limit' order or 'market' order. |\n| side | string | Buy or sell |\n| price | string | Order price |\n| size | string | Order size |\n| funds | string | Order Funds |\n| dealSize | string | Number of filled transactions |\n| dealFunds | string | Funds of filled transactions |\n| fee | string | [Handling fees](https://www.kucoin.com/docs-new/api-5327739) |\n| feeCurrency | string | currency used to calculate trading fee |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC |\n| stop | string | |\n| stopTriggered | boolean | |\n| stopPrice | string | |\n| timeInForce | string | Time in force |\n| postOnly | boolean | Whether its a postOnly order. |\n| hidden | boolean | Whether its a hidden order. |\n| iceberg | boolean | Whether its a iceberg order. |\n| visibleSize | string | Visible size of iceberg order in order book. |\n| cancelAfter | integer | A GTT timeInForce that expires in n seconds |\n| channel | string | |\n| clientOid | string | Client Order Id๏ผŒunique identifier created by the user |\n| remark | string | Order placement remarks |\n| tags | string | Order tag |\n| cancelExist | boolean | Whether there is a cancellation record for the order. |\n| createdAt | integer | |\n| lastUpdatedAt | integer | |\n| tradeType | string | Trade type, redundancy param |\n| inOrderBook | boolean | Whether to enter the orderbook: true: enter the orderbook; false: not enter the orderbook |\n| cancelledSize | string | Number of canceled transactions |\n| cancelledFunds | string | Funds of canceled transactions |\n| remainSize | string | Number of remain transactions |\n| remainFunds | string | Funds of remain transactions |\n| tax | string | Users in some regions need query this field |\n| active | boolean | Order status: true-The status of the order isactive; false-The status of the order is done |\n\n---\n", "body": {} }, "response": [ @@ -9878,7 +9878,7 @@ ], "query": [] }, - "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470204)\n\n:::info[Description]\nPlace order to the Cross-margin or Isolated-margin trading system, you can place two major types of orders: limit and market. Orders can only be placed if your account has sufficient funds. Once an order is placed, your funds will be put on hold for the duration of the order. The amount of funds on hold depends on the order type and parameters specified.\n:::\n\n:::tip[Tips]\nPlease note that once your order enters the order book, the system will freeze the handling fees for the order ahead of time.\n\nBefore placing orders, please be sure to fully understand the meaning of the parameters for each trading pair.\n:::\n\n:::tip[Tips]\nThe maximum number of active orders per account is 2000, with a maximum of 200 active orders per trading pair.\n:::\n\n\n**Public order placement request parameters**\n\n| Param | Type | Mandatory | Description |\n| --------- | ------ | --------- | ----------- |\n| clientOid | String | Yes | Client Order Id๏ผŒunique identifier created by the user, the use of UUID is recommended |\n| symbol | String | Yes | symbol |\n| side | String | Yes | `buy` or `sell` |\n| type | String | No | Order type `limit` and `market`, defult is limit |\n| stp | String | No | self trade prevention is divided into four strategies: `CN`, `CO`, `CB` , and `DC` |\n| isIsolated | boolean | No | true - isolated margin ,false - cross margin. defult as false |\n| autoBorrow | boolean | No | When Margin Account has inefficient balance, our system autoborrows inefficient assets and opens positions according to the lowest market interest rate. |\n| autoRepay | boolean | No | AutoPay allows returning borrowed assets when you close a position. Our system automatically triggers the repayment and the maximum repayment amount equals to the filled-order amount. |\n\n**Additional Request Parameters Required by `limit` Orders**\n\n| Param | Type | Mandatory | Description |\n| ----------- | ------- | --------- | ----------- |\n| price | String | Yes | Specify price for currency |\n| size | String | Yes | Specify quantity for currency |\n| timeInForce | String | No | Order timing strategy `GTC`, `GTT`, `IOC`, `FOK` (The default is `GTC`) |\n| cancelAfter | long | No | Cancel after `n` seconds๏ผŒthe order timing strategy is `GTT` |\n| postOnly | boolean | No | passive order labels, this is disabled when the order timing strategy is `IOC` or `FOK` |\n| hidden | boolean | No | Hidden or not (not shown in order book) |\n| iceberg | boolean | No | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | String | No | Maximum visible quantity in iceberg orders |\n\n**Additional request parameters required by `market` orders**\n\n| Param | Type | Mandatory | Description |\n| ----- | ------ | --------- | ------------------------------------------ |\n| size | String | No | (Select one out of two: `size` or `funds`) |\n| funds | String | No | (Select one out of two: `size` or `funds`) |\n\n\n**Hold**\n\nFor limit price purchase orders, we will hold the amount of funds (price * size) required for your purchase order. Similarly, for limit price sell orders, we will also hold you sell order assets. When the transaction is executed, the service fees will be calculated. If you cancel a portion of a filled or unfilled order, then the remaining funds or amounts will be released and returned to your account. For market price buy/sell orders that require specific funds, we will hold the required funds in from your account. If only the size is specified, we may freeze (usually for a very short amount of time) all of the funds in your account prior to the order being filled or cancelled.\n\n\n**Order Lifecycle**\n\nWhen an order placement request is successful (the matching engine receives the order) or denied (due to there being insufficient funds or illegal parameter values, etc.), the system will respond to the HTTP request. When an order is successfully placed, the order ID is returned. The order will be matched, which could result in it being fully or partially filled. When an order is fully or partially filled, the remaining portions of the order will be in an active state awaiting to be matched (this does not include IOC orders). Orders that are fully or partially filled(already cancelled) will be put into the โ€œdoneโ€ state.\n\nUsers that have subscribed to the Market Data Channel can use the order ID ๏ผˆorderId๏ผ‰ and client ID ๏ผˆclientOid๏ผ‰ to identify messages.\n\n**Price Protection Mechanisms**\n\nPrice protection mechanisms ae enabled for order placements. Rules are detailed below:\n\n- If the spot trading market order/limit order placed by the user can be directly matched with an order in the current order book, the system will judge whether deviation between the price corresponding to the transaction depth and the spread exceeds the threshold value ๏ผˆthe threshold value can be obtained using the symbol API endpoint๏ผ‰๏ผ›\n\n- If it is exceeded, for limit orders, the order will be directly cancelled;\n\n- If it is a market order, then the system will partially execute the order. The execution limit will be the order size within the price range corresponding to the threshold value. The remaining orders will not be filled.\n\nFor example: if the threshold value is 10%, when a user places a market price purchase order in the KCS/USDT trading market for 10,000 USDT (the selling price is currently 1.20000), the system will determine that after the order is completely filled, the final price will be 1.40000. (1.40000-1.20000)/1.20000=16.7%>10%. The threshold value is 1.32000. The userโ€™s market price purchase order will be filled only to a maximum of 1.32000. The remaining order portions will not be matched with orders in the order book. Note: this feature may not be able to determine depth with complete accuracy. If your order is not completely filled, it may be because the portion exceeding the threshold value was not filled.\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.

Please remember the orderId created by the service provider, it used to check for updates in order status. |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | symbol |\n| type | string | specify if the order is an 'limit' order or 'market' order.

The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine.

When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels.

Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into these strategies: CN, CO, CB , and DC |\n| price | string | Specify price for order

When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. |\n| size | string | Specify quantity for order

When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.

When **type** is market, select one out of two: size or funds |\n| timeInForce | string | [Time in force](https://www.kucoin.com/docs-new/api-5176570) is a special strategy used during trading |\n| postOnly | boolean | passive order labels, this is disabled when the order timing strategy is IOC or FOK |\n| hidden | boolean | [Hidden order](https://www.kucoin.com/docs-new/api-338146) or not (not shown in order book) |\n| iceberg | boolean | Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/api-338146) |\n| visibleSize | string | Maximum visible quantity in iceberg orders |\n| cancelAfter | integer | Cancel after n seconds๏ผŒthe order timing strategy is GTT |\n| funds | string | When **type** is market, select one out of two: size or funds |\n| isIsolated | boolean | true - isolated margin ,false - cross margin. defult as false |\n| autoBorrow | boolean | When Margin Account has inefficient balance, our system autoborrows inefficient assets and opens positions according to the lowest market interest rate. |\n| autoRepay | boolean | AutoPay allows returning borrowed assets when you close a position. Our system automatically triggers the repayment and the maximum repayment amount equals to the filled-order amount. |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| loanApplyId | string | Borrow order id. The field is returned only after placing the order under the mode of Auto-Borrow. |\n| borrowSize | string | Borrowed amount. The field is returned only after placing the order under the mode of Auto-Borrow. |\n| clientOid | string | The user self-defined order id. |\n\n---\n", + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470204)\n\n:::info[Description]\nPlace order to the Cross-margin or Isolated-margin trading system, you can place two major types of orders: limit and market. Orders can only be placed if your account has sufficient funds. Once an order is placed, your funds will be put on hold for the duration of the order. The amount of funds on hold depends on the order type and parameters specified.\n:::\n\n:::tip[Tips]\nPlease note that once your order enters the order book, the system will freeze the handling fees for the order ahead of time.\n\nBefore placing orders, please be sure to fully understand the meaning of the parameters for each trading pair.\n:::\n\n:::tip[Tips]\nThe maximum number of active orders per account is 2000, with a maximum of 200 active orders per trading pair.\n:::\n\n\n**Public order placement request parameters**\n\n| Param | Type | Mandatory | Description |\n| --------- | ------ | --------- | ----------- |\n| clientOid | String | Yes | Client Order Id๏ผŒunique identifier created by the user, the use of UUID is recommended |\n| symbol | String | Yes | symbol |\n| side | String | Yes | `buy` or `sell` |\n| type | String | No | Order type `limit` and `market`, defult is limit |\n| stp | String | No | self trade prevention is divided into four strategies: `CN`, `CO`, `CB` , and `DC` |\n| isIsolated | boolean | No | true - isolated margin ,false - cross margin. defult as false |\n| autoBorrow | boolean | No | When Margin Account has inefficient balance, our system autoborrows inefficient assets and opens positions according to the lowest market interest rate. |\n| autoRepay | boolean | No | AutoPay allows returning borrowed assets when you close a position. Our system automatically triggers the repayment and the maximum repayment amount equals to the filled-order amount. |\n\n**Additional Request Parameters Required by `limit` Orders**\n\n| Param | Type | Mandatory | Description |\n| ----------- | ------- | --------- | ----------- |\n| price | String | Yes | Specify price for currency |\n| size | String | Yes | Specify quantity for currency |\n| timeInForce | String | No | Order timing strategy `GTC`, `GTT`, `IOC`, `FOK` (The default is `GTC`) |\n| cancelAfter | long | No | Cancel after `n` seconds๏ผŒthe order timing strategy is `GTT` |\n| postOnly | boolean | No | passive order labels, this is disabled when the order timing strategy is `IOC` or `FOK` |\n| hidden | boolean | No | Hidden or not (not shown in order book) |\n| iceberg | boolean | No | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | String | No | Maximum visible quantity in iceberg orders |\n\n**Additional request parameters required by `market` orders**\n\n| Param | Type | Mandatory | Description |\n| ----- | ------ | --------- | ------------------------------------------ |\n| size | String | No | (Select one out of two: `size` or `funds`) |\n| funds | String | No | (Select one out of two: `size` or `funds`) |\n\n\n**Hold**\n\nFor limit price purchase orders, we will hold the amount of funds (price * size) required for your purchase order. Similarly, for limit price sell orders, we will also hold you sell order assets. When the transaction is executed, the service fees will be calculated. If you cancel a portion of a filled or unfilled order, then the remaining funds or amounts will be released and returned to your account. For market price buy/sell orders that require specific funds, we will hold the required funds in from your account. If only the size is specified, we may freeze (usually for a very short amount of time) all of the funds in your account prior to the order being filled or cancelled.\n\n\n**Order Lifecycle**\n\nWhen an order placement request is successful (the matching engine receives the order) or denied (due to there being insufficient funds or illegal parameter values, etc.), the system will respond to the HTTP request. When an order is successfully placed, the order ID is returned. The order will be matched, which could result in it being fully or partially filled. When an order is fully or partially filled, the remaining portions of the order will be in an active state awaiting to be matched (this does not include IOC orders). Orders that are fully or partially filled(already cancelled) will be put into the โ€œdoneโ€ state.\n\nUsers that have subscribed to the Market Data Channel can use the order ID ๏ผˆorderId๏ผ‰ and client ID ๏ผˆclientOid๏ผ‰ to identify messages.\n\n**Price Protection Mechanisms**\n\nPrice protection mechanisms ae enabled for order placements. Rules are detailed below:\n\n- If the spot trading market order/limit order placed by the user can be directly matched with an order in the current order book, the system will judge whether deviation between the price corresponding to the transaction depth and the spread exceeds the threshold value ๏ผˆthe threshold value can be obtained using the symbol API endpoint๏ผ‰๏ผ›\n\n- If it is exceeded, for limit orders, the order will be directly cancelled;\n\n- If it is a market order, then the system will partially execute the order. The execution limit will be the order size within the price range corresponding to the threshold value. The remaining orders will not be filled.\n\nFor example: if the threshold value is 10%, when a user places a market price purchase order in the KCS/USDT trading market for 10,000 USDT (the selling price is currently 1.20000), the system will determine that after the order is completely filled, the final price will be 1.40000. (1.40000-1.20000)/1.20000=16.7%>10%. The threshold value is 1.32000. The userโ€™s market price purchase order will be filled only to a maximum of 1.32000. The remaining order portions will not be matched with orders in the order book. Note: this feature may not be able to determine depth with complete accuracy. If your order is not completely filled, it may be because the portion exceeding the threshold value was not filled.\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.

Please remember the orderId created by the service provider, it used to check for updates in order status. |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | symbol |\n| type | string | specify if the order is an 'limit' order or 'market' order.

The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine.

When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels.

Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC |\n| price | string | Specify price for order

When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. |\n| size | string | Specify quantity for order

When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.

When **type** is market, select one out of two: size or funds |\n| timeInForce | string | [Time in force](https://www.kucoin.com/docs-new/api-5176570) is a special strategy used during trading |\n| postOnly | boolean | passive order labels, this is disabled when the order timing strategy is IOC or FOK |\n| hidden | boolean | [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) |\n| iceberg | boolean | Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) |\n| visibleSize | string | Maximum visible quantity in iceberg orders |\n| cancelAfter | integer | Cancel after n seconds๏ผŒthe order timing strategy is GTT |\n| funds | string | When **type** is market, select one out of two: size or funds |\n| isIsolated | boolean | true - isolated margin ,false - cross margin. defult as false |\n| autoBorrow | boolean | When Margin Account has inefficient balance, our system autoborrows inefficient assets and opens positions according to the lowest market interest rate. |\n| autoRepay | boolean | AutoPay allows returning borrowed assets when you close a position. Our system automatically triggers the repayment and the maximum repayment amount equals to the filled-order amount. |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| loanApplyId | string | Borrow order id. The field is returned only after placing the order under the mode of Auto-Borrow. |\n| borrowSize | string | Borrowed amount. The field is returned only after placing the order under the mode of Auto-Borrow. |\n| clientOid | string | The user self-defined order id. |\n\n---\n", "body": { "mode": "raw", "raw": "//limit order\n{\n \"type\": \"limit\",\n \"symbol\": \"BTC-USDT\",\n \"side\": \"buy\",\n \"price\": \"50000\",\n \"size\": \"0.00001\",\n \"clientOid\": \"5c52e11203aa677f33e493fb\",\n \"remark\": \"order remarks\"\n}\n\n//market order 1\n// {\n// \"type\": \"market\",\n// \"symbol\": \"BTC-USDT\",\n// \"side\": \"buy\",\n// \"size\": \"0.00001\",\n// \"clientOid\": \"5c52e11203aa677f33e493fc\",\n// \"remark\": \"order remarks\"\n// }\n\n//market order 2\n// {\n// \"type\": \"market\",\n// \"symbol\": \"BTC-USDT\",\n// \"side\": \"buy\",\n// \"funds\": \"1\",\n// \"clientOid\": \"5c52e11203aa677f33e493fc\",\n// \"remark\": \"order remarks\"\n// }\n", @@ -9966,7 +9966,7 @@ ], "query": [] }, - "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470205)\n\n:::info[Description]\nOrder test endpoint, the request parameters and return parameters of this endpoint are exactly the same as the order endpoint, and can be used to verify whether the signature is correct and other operations. After placing an order, the order will not enter the matching system, and the order cannot be queried.\n:::\n\n:::tip[Tips]\nPlease note that once your order enters the order book, the system will freeze the handling fees for the order ahead of time.\n\nBefore placing orders, please be sure to fully understand the meaning of the parameters for each trading pair.\n:::\n\n:::tip[Tips]\nThe maximum number of active orders per account is 2000, with a maximum of 200 active orders per trading pair.\n:::\n\n\n**Public order placement request parameters**\n\n| Param | Type | Mandatory | Description |\n| --------- | ------ | --------- | ----------- |\n| clientOid | String | Yes | Client Order Id๏ผŒunique identifier created by the user, the use of UUID is recommended |\n| symbol | String | Yes | symbol |\n| side | String | Yes | `buy` or `sell` |\n| type | String | No | Order type `limit` and `market`, defult is limit |\n| stp | String | No | self trade prevention is divided into four strategies: `CN`, `CO`, `CB` , and `DC` |\n| isIsolated | boolean | No | true - isolated margin ,false - cross margin. defult as false |\n| autoBorrow | boolean | No | When Margin Account has inefficient balance, our system autoborrows inefficient assets and opens positions according to the lowest market interest rate. |\n| autoRepay | boolean | No | AutoPay allows returning borrowed assets when you close a position. Our system automatically triggers the repayment and the maximum repayment amount equals to the filled-order amount. |\n\n**Additional Request Parameters Required by `limit` Orders**\n\n| Param | Type | Mandatory | Description |\n| ----------- | ------- | --------- | ----------- |\n| price | String | Yes | Specify price for currency |\n| size | String | Yes | Specify quantity for currency |\n| timeInForce | String | No | Order timing strategy `GTC`, `GTT`, `IOC`, `FOK` (The default is `GTC`) |\n| cancelAfter | long | No | Cancel after `n` seconds๏ผŒthe order timing strategy is `GTT` |\n| postOnly | boolean | No | passive order labels, this is disabled when the order timing strategy is `IOC` or `FOK` |\n| hidden | boolean | No | Hidden or not (not shown in order book) |\n| iceberg | boolean | No | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | String | No | Maximum visible quantity in iceberg orders |\n\n**Additional request parameters required by `market` orders**\n\n| Param | Type | Mandatory | Description |\n| ----- | ------ | --------- | ------------------------------------------ |\n| size | String | No | (Select one out of two: `size` or `funds`) |\n| funds | String | No | (Select one out of two: `size` or `funds`) |\n\n\n**Hold**\n\nFor limit price purchase orders, we will hold the amount of funds (price * size) required for your purchase order. Similarly, for limit price sell orders, we will also hold you sell order assets. When the transaction is executed, the service fees will be calculated. If you cancel a portion of a filled or unfilled order, then the remaining funds or amounts will be released and returned to your account. For market price buy/sell orders that require specific funds, we will hold the required funds in from your account. If only the size is specified, we may freeze (usually for a very short amount of time) all of the funds in your account prior to the order being filled or cancelled.\n\n\n**Order Lifecycle**\n\nWhen an order placement request is successful (the matching engine receives the order) or denied (due to there being insufficient funds or illegal parameter values, etc.), the system will respond to the HTTP request. When an order is successfully placed, the order ID is returned. The order will be matched, which could result in it being fully or partially filled. When an order is fully or partially filled, the remaining portions of the order will be in an active state awaiting to be matched (this does not include IOC orders). Orders that are fully or partially filled(already cancelled) will be put into the โ€œdoneโ€ state.\n\nUsers that have subscribed to the Market Data Channel can use the order ID ๏ผˆorderId๏ผ‰ and client ID ๏ผˆclientOid๏ผ‰ to identify messages.\n\n**Price Protection Mechanisms**\n\nPrice protection mechanisms ae enabled for order placements. Rules are detailed below:\n\n- If the spot trading market order/limit order placed by the user can be directly matched with an order in the current order book, the system will judge whether deviation between the price corresponding to the transaction depth and the spread exceeds the threshold value ๏ผˆthe threshold value can be obtained using the symbol API endpoint๏ผ‰๏ผ›\n\n- If it is exceeded, for limit orders, the order will be directly cancelled;\n\n- If it is a market order, then the system will partially execute the order. The execution limit will be the order size within the price range corresponding to the threshold value. The remaining orders will not be filled.\n\nFor example: if the threshold value is 10%, when a user places a market price purchase order in the KCS/USDT trading market for 10,000 USDT (the selling price is currently 1.20000), the system will determine that after the order is completely filled, the final price will be 1.40000. (1.40000-1.20000)/1.20000=16.7%>10%. The threshold value is 1.32000. The userโ€™s market price purchase order will be filled only to a maximum of 1.32000. The remaining order portions will not be matched with orders in the order book. Note: this feature may not be able to determine depth with complete accuracy. If your order is not completely filled, it may be because the portion exceeding the threshold value was not filled.\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.

Please remember the orderId created by the service provider, it used to check for updates in order status. |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | symbol |\n| type | string | specify if the order is an 'limit' order or 'market' order.

The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine.

When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels.

Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into these strategies: CN, CO, CB , and DC |\n| price | string | Specify price for order

When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. |\n| size | string | Specify quantity for order

When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.

When **type** is market, select one out of two: size or funds |\n| timeInForce | string | [Time in force](https://www.kucoin.com/docs-new/api-5176570) is a special strategy used during trading |\n| postOnly | boolean | passive order labels, this is disabled when the order timing strategy is IOC or FOK |\n| hidden | boolean | [Hidden order](https://www.kucoin.com/docs-new/api-338146) or not (not shown in order book) |\n| iceberg | boolean | Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/api-338146) |\n| visibleSize | string | Maximum visible quantity in iceberg orders |\n| cancelAfter | integer | Cancel after n seconds๏ผŒthe order timing strategy is GTT |\n| funds | string | When **type** is market, select one out of two: size or funds |\n| isIsolated | boolean | true - isolated margin ,false - cross margin. defult as false |\n| autoBorrow | boolean | When Margin Account has inefficient balance, our system autoborrows inefficient assets and opens positions according to the lowest market interest rate. |\n| autoRepay | boolean | AutoPay allows returning borrowed assets when you close a position. Our system automatically triggers the repayment and the maximum repayment amount equals to the filled-order amount. |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| loanApplyId | string | Borrowed amount. The field is returned only after placing the order under the mode of Auto-Borrow. |\n| borrowSize | number | ID of the borrowing response. The field is returned only after placing the order under the mode of Auto-Borrow. |\n| clientOid | string | The user self-defined order id. |\n\n---\n", + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470205)\n\n:::info[Description]\nOrder test endpoint, the request parameters and return parameters of this endpoint are exactly the same as the order endpoint, and can be used to verify whether the signature is correct and other operations. After placing an order, the order will not enter the matching system, and the order cannot be queried.\n:::\n\n:::tip[Tips]\nPlease note that once your order enters the order book, the system will freeze the handling fees for the order ahead of time.\n\nBefore placing orders, please be sure to fully understand the meaning of the parameters for each trading pair.\n:::\n\n:::tip[Tips]\nThe maximum number of active orders per account is 2000, with a maximum of 200 active orders per trading pair.\n:::\n\n\n**Public order placement request parameters**\n\n| Param | Type | Mandatory | Description |\n| --------- | ------ | --------- | ----------- |\n| clientOid | String | Yes | Client Order Id๏ผŒunique identifier created by the user, the use of UUID is recommended |\n| symbol | String | Yes | symbol |\n| side | String | Yes | `buy` or `sell` |\n| type | String | No | Order type `limit` and `market`, defult is limit |\n| stp | String | No | self trade prevention is divided into four strategies: `CN`, `CO`, `CB` , and `DC` |\n| isIsolated | boolean | No | true - isolated margin ,false - cross margin. defult as false |\n| autoBorrow | boolean | No | When Margin Account has inefficient balance, our system autoborrows inefficient assets and opens positions according to the lowest market interest rate. |\n| autoRepay | boolean | No | AutoPay allows returning borrowed assets when you close a position. Our system automatically triggers the repayment and the maximum repayment amount equals to the filled-order amount. |\n\n**Additional Request Parameters Required by `limit` Orders**\n\n| Param | Type | Mandatory | Description |\n| ----------- | ------- | --------- | ----------- |\n| price | String | Yes | Specify price for currency |\n| size | String | Yes | Specify quantity for currency |\n| timeInForce | String | No | Order timing strategy `GTC`, `GTT`, `IOC`, `FOK` (The default is `GTC`) |\n| cancelAfter | long | No | Cancel after `n` seconds๏ผŒthe order timing strategy is `GTT` |\n| postOnly | boolean | No | passive order labels, this is disabled when the order timing strategy is `IOC` or `FOK` |\n| hidden | boolean | No | Hidden or not (not shown in order book) |\n| iceberg | boolean | No | Whether or not only visible portions of orders are shown in iceberg orders |\n| visibleSize | String | No | Maximum visible quantity in iceberg orders |\n\n**Additional request parameters required by `market` orders**\n\n| Param | Type | Mandatory | Description |\n| ----- | ------ | --------- | ------------------------------------------ |\n| size | String | No | (Select one out of two: `size` or `funds`) |\n| funds | String | No | (Select one out of two: `size` or `funds`) |\n\n\n**Hold**\n\nFor limit price purchase orders, we will hold the amount of funds (price * size) required for your purchase order. Similarly, for limit price sell orders, we will also hold you sell order assets. When the transaction is executed, the service fees will be calculated. If you cancel a portion of a filled or unfilled order, then the remaining funds or amounts will be released and returned to your account. For market price buy/sell orders that require specific funds, we will hold the required funds in from your account. If only the size is specified, we may freeze (usually for a very short amount of time) all of the funds in your account prior to the order being filled or cancelled.\n\n\n**Order Lifecycle**\n\nWhen an order placement request is successful (the matching engine receives the order) or denied (due to there being insufficient funds or illegal parameter values, etc.), the system will respond to the HTTP request. When an order is successfully placed, the order ID is returned. The order will be matched, which could result in it being fully or partially filled. When an order is fully or partially filled, the remaining portions of the order will be in an active state awaiting to be matched (this does not include IOC orders). Orders that are fully or partially filled(already cancelled) will be put into the โ€œdoneโ€ state.\n\nUsers that have subscribed to the Market Data Channel can use the order ID ๏ผˆorderId๏ผ‰ and client ID ๏ผˆclientOid๏ผ‰ to identify messages.\n\n**Price Protection Mechanisms**\n\nPrice protection mechanisms ae enabled for order placements. Rules are detailed below:\n\n- If the spot trading market order/limit order placed by the user can be directly matched with an order in the current order book, the system will judge whether deviation between the price corresponding to the transaction depth and the spread exceeds the threshold value ๏ผˆthe threshold value can be obtained using the symbol API endpoint๏ผ‰๏ผ›\n\n- If it is exceeded, for limit orders, the order will be directly cancelled;\n\n- If it is a market order, then the system will partially execute the order. The execution limit will be the order size within the price range corresponding to the threshold value. The remaining orders will not be filled.\n\nFor example: if the threshold value is 10%, when a user places a market price purchase order in the KCS/USDT trading market for 10,000 USDT (the selling price is currently 1.20000), the system will determine that after the order is completely filled, the final price will be 1.40000. (1.40000-1.20000)/1.20000=16.7%>10%. The threshold value is 1.32000. The userโ€™s market price purchase order will be filled only to a maximum of 1.32000. The remaining order portions will not be matched with orders in the order book. Note: this feature may not be able to determine depth with complete accuracy. If your order is not completely filled, it may be because the portion exceeding the threshold value was not filled.\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters.

Please remember the orderId created by the service provider, it used to check for updates in order status. |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | symbol |\n| type | string | specify if the order is an 'limit' order or 'market' order.

The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine.

When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels.

Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC |\n| price | string | Specify price for order

When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. |\n| size | string | Specify quantity for order

When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize.

When **type** is market, select one out of two: size or funds |\n| timeInForce | string | [Time in force](https://www.kucoin.com/docs-new/api-5176570) is a special strategy used during trading |\n| postOnly | boolean | passive order labels, this is disabled when the order timing strategy is IOC or FOK |\n| hidden | boolean | [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) |\n| iceberg | boolean | Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) |\n| visibleSize | string | Maximum visible quantity in iceberg orders |\n| cancelAfter | integer | Cancel after n seconds๏ผŒthe order timing strategy is GTT |\n| funds | string | When **type** is market, select one out of two: size or funds |\n| isIsolated | boolean | true - isolated margin ,false - cross margin. defult as false |\n| autoBorrow | boolean | When Margin Account has inefficient balance, our system autoborrows inefficient assets and opens positions according to the lowest market interest rate. |\n| autoRepay | boolean | AutoPay allows returning borrowed assets when you close a position. Our system automatically triggers the repayment and the maximum repayment amount equals to the filled-order amount. |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| loanApplyId | string | Borrowed amount. The field is returned only after placing the order under the mode of Auto-Borrow. |\n| borrowSize | number | ID of the borrowing response. The field is returned only after placing the order under the mode of Auto-Borrow. |\n| clientOid | string | The user self-defined order id. |\n\n---\n", "body": { "mode": "raw", "raw": "//limit order\n{\n \"type\": \"limit\",\n \"symbol\": \"BTC-USDT\",\n \"side\": \"buy\",\n \"price\": \"50000\",\n \"size\": \"0.00001\",\n \"clientOid\": \"5c52e11203aa677f33e493fb\",\n \"remark\": \"order remarks\"\n}\n\n//market order 1\n// {\n// \"type\": \"market\",\n// \"symbol\": \"BTC-USDT\",\n// \"side\": \"buy\",\n// \"size\": \"0.00001\",\n// \"clientOid\": \"5c52e11203aa677f33e493fc\",\n// \"remark\": \"order remarks\"\n// }\n\n//market order 2\n// {\n// \"type\": \"market\",\n// \"symbol\": \"BTC-USDT\",\n// \"side\": \"buy\",\n// \"funds\": \"1\",\n// \"clientOid\": \"5c52e11203aa677f33e493fc\",\n// \"remark\": \"order remarks\"\n// }\n", @@ -13061,7 +13061,7 @@ ], "query": [] }, - "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470235)\n\n:::info[Description]\nPlace order to the futures trading system, you can place two major types of orders: limit and market. Orders can only be placed if your account has sufficient funds. Once an order is placed, your funds will be put on hold for the duration of the order. The amount of funds on hold depends on the order type and parameters specified.\n:::\n\n:::tip[Tips]\nThe maximum limit orders for a single contract is 100 per account, and the maximum stop orders for a single contract is 200 per account.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Unique order id created by users to identify their orders, the maximum length cannot exceed 40, e.g. UUID, Only allows numbers, characters, underline(_), and separator(-) |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| leverage | integer | Used to calculate the margin to be frozen for the order. If you are to close the position, this parameter is not required. |\n| type | string | specify if the order is an 'limit' order or 'market' order |\n| remark | string | remark for the order, length cannot exceed 100 utf8 characters |\n| stop | string | Either 'down' or 'up'. If stop is used,parameter stopPrice and stopPriceType also need to be provieded. |\n| stopPriceType | string | Either 'TP', 'IP' or 'MP', Need to be defined if stop is specified. |\n| stopPrice | string | Need to be defined if stop is specified. |\n| reduceOnly | boolean | A mark to reduce the position size only. Set to false by default. Need to set the position size when reduceOnly is true. If set to true, only the orders reducing the position size will be executed. If the reduce-only order size exceeds the position size, the extra size will be canceled. |\n| closeOrder | boolean | A mark to close the position. Set to false by default. If closeOrder is set to true, the system will close the position and the position size will become 0. Side, Size and Leverage fields can be left empty and the system will determine the side and size automatically. |\n| forceHold | boolean | A mark to forcely hold the funds for an order, even though it's an order to reduce the position size. This helps the order stay on the order book and not get canceled when the position size changes. Set to false by default. The system will forcely freeze certain amount of funds for this order, including orders whose direction is opposite to the current positions. This feature is to ensure that the order wonโ€™t be canceled by the matching engine in such a circumstance that not enough funds are frozen for the order. |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. |\n| marginMode | string | Margin mode: ISOLATED, CROSS, default: ISOLATED |\n| price | string | Required for type is 'limit' order, indicating the operating price |\n| size | integer | **Choose one of size, qty, valueQty**, Order size (Lot), must be a positive integer. The quantity unit of coin-swap contracts is size(lot), and other units are not supported. |\n| timeInForce | string | Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/api-338146) is a special strategy used during trading, default is GTC |\n| postOnly | boolean | Optional for type is 'limit' order, post only flag, invalid when timeInForce is IOC. When postOnly is true, not allowed choose hidden or iceberg. The post-only flag ensures that the trader always pays the maker fee and provides liquidity to the order book. If any part of the order is going to pay taker fee, the order will be fully rejected. |\n| hidden | boolean | Optional for type is 'limit' order, orders not displaying in order book. When hidden chose, not allowed choose postOnly. |\n| iceberg | boolean | Optional for type is 'limit' order, Only visible portion of the order is displayed in the order book. When iceberg chose, not allowed choose postOnly. |\n| visibleSize | string | Optional for type is 'limit' order, The maximum visible size of an iceberg order. please place order in size (lots), The units of qty (base currency) and valueQty (value) are not supported. |\n| qty | string | **Choose one of size, qty, valueQty**, Order size (Base currency) must be an integer multiple of the multiplier. The unit of the quantity of coin-swap is size(lot), which is not supported |\n| valueQty | string | **Choose one of size, qty, valueQty**, Order size (Value), USDS-Swap correspond to USDT or USDC. The unit of the quantity of coin-swap is size(lot), which is not supported |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| clientOid | string | The user self-defined order id. |\n\n---\n", + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470235)\n\n:::info[Description]\nPlace order to the futures trading system, you can place two major types of orders: limit and market. Orders can only be placed if your account has sufficient funds. Once an order is placed, your funds will be put on hold for the duration of the order. The amount of funds on hold depends on the order type and parameters specified.\n:::\n\n:::tip[Tips]\nThe maximum limit orders for a single contract is 100 per account, and the maximum stop orders for a single contract is 200 per account.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Unique order id created by users to identify their orders, the maximum length cannot exceed 40, e.g. UUID, Only allows numbers, characters, underline(_), and separator(-) |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| leverage | integer | Used to calculate the margin to be frozen for the order. If you are to close the position, this parameter is not required. |\n| type | string | specify if the order is an 'limit' order or 'market' order |\n| remark | string | remark for the order, length cannot exceed 100 utf8 characters |\n| stop | string | Either 'down' or 'up'. If stop is used,parameter stopPrice and stopPriceType also need to be provieded. |\n| stopPriceType | string | Either 'TP', 'IP' or 'MP', Need to be defined if stop is specified. |\n| stopPrice | string | Need to be defined if stop is specified. |\n| reduceOnly | boolean | A mark to reduce the position size only. Set to false by default. Need to set the position size when reduceOnly is true. If set to true, only the orders reducing the position size will be executed. If the reduce-only order size exceeds the position size, the extra size will be canceled. |\n| closeOrder | boolean | A mark to close the position. Set to false by default. If closeOrder is set to true, the system will close the position and the position size will become 0. Side, Size and Leverage fields can be left empty and the system will determine the side and size automatically. |\n| forceHold | boolean | A mark to forcely hold the funds for an order, even though it's an order to reduce the position size. This helps the order stay on the order book and not get canceled when the position size changes. Set to false by default. The system will forcely freeze certain amount of funds for this order, including orders whose direction is opposite to the current positions. This feature is to ensure that the order wonโ€™t be canceled by the matching engine in such a circumstance that not enough funds are frozen for the order. |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. |\n| marginMode | string | Margin mode: ISOLATED, CROSS, default: ISOLATED |\n| price | string | Required for type is 'limit' order, indicating the operating price |\n| size | integer | **Choose one of size, qty, valueQty**, Order size (Lot), must be a positive integer. The quantity unit of coin-swap contracts is size(lot), and other units are not supported. |\n| timeInForce | string | Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading, default is GTC |\n| postOnly | boolean | Optional for type is 'limit' order, post only flag, invalid when timeInForce is IOC. When postOnly is true, not allowed choose hidden or iceberg. The post-only flag ensures that the trader always pays the maker fee and provides liquidity to the order book. If any part of the order is going to pay taker fee, the order will be fully rejected. |\n| hidden | boolean | Optional for type is 'limit' order, orders not displaying in order book. When hidden chose, not allowed choose postOnly. |\n| iceberg | boolean | Optional for type is 'limit' order, Only visible portion of the order is displayed in the order book. When iceberg chose, not allowed choose postOnly. |\n| visibleSize | string | Optional for type is 'limit' order, The maximum visible size of an iceberg order. please place order in size (lots), The units of qty (base currency) and valueQty (value) are not supported. |\n| qty | string | **Choose one of size, qty, valueQty**, Order size (Base currency) must be an integer multiple of the multiplier. The unit of the quantity of coin-swap is size(lot), which is not supported |\n| valueQty | string | **Choose one of size, qty, valueQty**, Order size (Value), USDS-Swap correspond to USDT or USDC. The unit of the quantity of coin-swap is size(lot), which is not supported |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| clientOid | string | The user self-defined order id. |\n\n---\n", "body": { "mode": "raw", "raw": "{\n \"clientOid\": \"5c52e11203aa677f33e493fb\",\n \"side\": \"buy\",\n \"symbol\": \"XBTUSDTM\",\n \"leverage\": 3,\n \"type\": \"limit\",\n \"remark\": \"order remarks\",\n \"reduceOnly\": false,\n \"marginMode\": \"ISOLATED\",\n \"price\": \"0.1\",\n \"size\": 1,\n \"timeInForce\": \"GTC\"\n}", @@ -13312,7 +13312,7 @@ ], "query": [] }, - "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470236)\n\n:::info[Description]\nPlace multiple order to the futures trading system, you can place two major types of orders: limit and market. Orders can only be placed if your account has sufficient funds. Once an order is placed, your funds will be put on hold for the duration of the order. The amount of funds on hold depends on the order type and parameters specified.\nYou can place up to 20 orders at one time, including limit orders, market orders, and stop orders\n\nPlease be noted that the system would hold the fees from the orders entered the orderbook in advance.\n\nDo NOT include extra spaces in JSON strings.\n\nPlace Order Limit\nThe maximum limit orders for a single contract is 100 per account, and the maximum stop orders for a single contract is 50 per account.\n:::\n\n:::tip[Tips]\n- The maximum limit orders for a single contract is 100 per account, and the maximum stop orders for a single contract is 50 per account.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Unique order id created by users to identify their orders, the maximum length cannot exceed 40, e.g. UUID, Only allows numbers, characters, underline(_), and separator(-) |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-221752070) |\n| leverage | integer | Used to calculate the margin to be frozen for the order. If you are to close the position, this parameter is not required. |\n| type | string | specify if the order is an 'limit' order or 'market' order |\n| remark | string | remark for the order, length cannot exceed 100 utf8 characters |\n| stop | string | Either 'down' or 'up'. If stop is used,parameter stopPrice and stopPriceType also need to be provieded. |\n| stopPriceType | string | Either 'TP', 'IP' or 'MP', Need to be defined if stop is specified. |\n| stopPrice | string | Need to be defined if stop is specified. |\n| reduceOnly | boolean | A mark to reduce the position size only. Set to false by default. Need to set the position size when reduceOnly is true. If set to true, only the orders reducing the position size will be executed. If the reduce-only order size exceeds the position size, the extra size will be canceled. |\n| closeOrder | boolean | A mark to close the position. Set to false by default. If closeOrder is set to true, the system will close the position and the position size will become 0. Side, Size and Leverage fields can be left empty and the system will determine the side and size automatically. |\n| forceHold | boolean | A mark to forcely hold the funds for an order, even though it's an order to reduce the position size. This helps the order stay on the order book and not get canceled when the position size changes. Set to false by default. The system will forcely freeze certain amount of funds for this order, including orders whose direction is opposite to the current positions. This feature is to ensure that the order wonโ€™t be canceled by the matching engine in such a circumstance that not enough funds are frozen for the order. |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. |\n| marginMode | string | Margin mode: ISOLATED, CROSS, default: ISOLATED |\n| price | string | Required for type is 'limit' order, indicating the operating price |\n| size | integer | **Choose one of size, qty, valueQty**, Order size (Lot), must be a positive integer. The quantity unit of coin-swap contracts is size(lot), and other units are not supported. |\n| timeInForce | string | Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/api-338146) is a special strategy used during trading, default is GTC |\n| postOnly | boolean | Optional for type is 'limit' order, post only flag, invalid when timeInForce is IOC. When postOnly is true, not allowed choose hidden or iceberg. The post-only flag ensures that the trader always pays the maker fee and provides liquidity to the order book. If any part of the order is going to pay taker fee, the order will be fully rejected. |\n| hidden | boolean | Optional for type is 'limit' order, orders not displaying in order book. When hidden chose, not allowed choose postOnly. |\n| iceberg | boolean | Optional for type is 'limit' order, Only visible portion of the order is displayed in the order book. When iceberg chose, not allowed choose postOnly. |\n| visibleSize | string | Optional for type is 'limit' order, The maximum visible size of an iceberg order. please place order in size (lots), The units of qty (base currency) and valueQty (value) are not supported. |\n| qty | string | **Choose one of size, qty, valueQty**, Order size (Base currency) must be an integer multiple of the multiplier. The unit of the quantity of coin-swap is size(lot), which is not supported |\n| valueQty | string | **Choose one of size, qty, valueQty**, Order size (Value), USDS-Swap correspond to USDT or USDC. The unit of the quantity of coin-swap is size(lot), which is not supported |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| clientOid | string | Unique order id created by users to identify their orders, the maximum length cannot exceed 40, e.g. UUID, Only allows numbers, characters, underline(_), and separator(-) |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| code | string | |\n| msg | string | |\n\n---\n", + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470236)\n\n:::info[Description]\nPlace multiple order to the futures trading system, you can place two major types of orders: limit and market. Orders can only be placed if your account has sufficient funds. Once an order is placed, your funds will be put on hold for the duration of the order. The amount of funds on hold depends on the order type and parameters specified.\nYou can place up to 20 orders at one time, including limit orders, market orders, and stop orders\n\nPlease be noted that the system would hold the fees from the orders entered the orderbook in advance.\n\nDo NOT include extra spaces in JSON strings.\n\nPlace Order Limit\nThe maximum limit orders for a single contract is 100 per account, and the maximum stop orders for a single contract is 50 per account.\n:::\n\n:::tip[Tips]\n- The maximum limit orders for a single contract is 100 per account, and the maximum stop orders for a single contract is 50 per account.\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Unique order id created by users to identify their orders, the maximum length cannot exceed 40, e.g. UUID, Only allows numbers, characters, underline(_), and separator(-) |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-221752070) |\n| leverage | integer | Used to calculate the margin to be frozen for the order. If you are to close the position, this parameter is not required. |\n| type | string | specify if the order is an 'limit' order or 'market' order |\n| remark | string | remark for the order, length cannot exceed 100 utf8 characters |\n| stop | string | Either 'down' or 'up'. If stop is used,parameter stopPrice and stopPriceType also need to be provieded. |\n| stopPriceType | string | Either 'TP', 'IP' or 'MP', Need to be defined if stop is specified. |\n| stopPrice | string | Need to be defined if stop is specified. |\n| reduceOnly | boolean | A mark to reduce the position size only. Set to false by default. Need to set the position size when reduceOnly is true. If set to true, only the orders reducing the position size will be executed. If the reduce-only order size exceeds the position size, the extra size will be canceled. |\n| closeOrder | boolean | A mark to close the position. Set to false by default. If closeOrder is set to true, the system will close the position and the position size will become 0. Side, Size and Leverage fields can be left empty and the system will determine the side and size automatically. |\n| forceHold | boolean | A mark to forcely hold the funds for an order, even though it's an order to reduce the position size. This helps the order stay on the order book and not get canceled when the position size changes. Set to false by default. The system will forcely freeze certain amount of funds for this order, including orders whose direction is opposite to the current positions. This feature is to ensure that the order wonโ€™t be canceled by the matching engine in such a circumstance that not enough funds are frozen for the order. |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. |\n| marginMode | string | Margin mode: ISOLATED, CROSS, default: ISOLATED |\n| price | string | Required for type is 'limit' order, indicating the operating price |\n| size | integer | **Choose one of size, qty, valueQty**, Order size (Lot), must be a positive integer. The quantity unit of coin-swap contracts is size(lot), and other units are not supported. |\n| timeInForce | string | Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading, default is GTC |\n| postOnly | boolean | Optional for type is 'limit' order, post only flag, invalid when timeInForce is IOC. When postOnly is true, not allowed choose hidden or iceberg. The post-only flag ensures that the trader always pays the maker fee and provides liquidity to the order book. If any part of the order is going to pay taker fee, the order will be fully rejected. |\n| hidden | boolean | Optional for type is 'limit' order, orders not displaying in order book. When hidden chose, not allowed choose postOnly. |\n| iceberg | boolean | Optional for type is 'limit' order, Only visible portion of the order is displayed in the order book. When iceberg chose, not allowed choose postOnly. |\n| visibleSize | string | Optional for type is 'limit' order, The maximum visible size of an iceberg order. please place order in size (lots), The units of qty (base currency) and valueQty (value) are not supported. |\n| qty | string | **Choose one of size, qty, valueQty**, Order size (Base currency) must be an integer multiple of the multiplier. The unit of the quantity of coin-swap is size(lot), which is not supported |\n| valueQty | string | **Choose one of size, qty, valueQty**, Order size (Value), USDS-Swap correspond to USDT or USDC. The unit of the quantity of coin-swap is size(lot), which is not supported |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | array | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| clientOid | string | Unique order id created by users to identify their orders, the maximum length cannot exceed 40, e.g. UUID, Only allows numbers, characters, underline(_), and separator(-) |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| code | string | |\n| msg | string | |\n\n---\n", "body": { "mode": "raw", "raw": "[\n {\n \"clientOid\": \"5c52e11203aa677f33e493fb\",\n \"side\": \"buy\",\n \"symbol\": \"XBTUSDTM\",\n \"leverage\": 3,\n \"type\": \"limit\",\n \"remark\": \"order remarks\",\n \"reduceOnly\": false,\n \"marginMode\": \"ISOLATED\",\n \"price\": \"0.1\",\n \"size\": 1,\n \"timeInForce\": \"GTC\"\n },\n {\n \"clientOid\": \"5c52e11203aa677f33e493fc\",\n \"side\": \"buy\",\n \"symbol\": \"XBTUSDTM\",\n \"leverage\": 3,\n \"type\": \"limit\",\n \"remark\": \"order remarks\",\n \"reduceOnly\": false,\n \"marginMode\": \"ISOLATED\",\n \"price\": \"0.1\",\n \"size\": 1,\n \"timeInForce\": \"GTC\"\n }\n]", @@ -13483,7 +13483,7 @@ ], "query": [] }, - "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470237)\n\n:::info[Description]\nPlace take profit and stop loss order supports both take-profit and stop-loss functions, and other functions are exactly the same as the place order interface.\n\nYou can place two types of orders: limit and market. Orders can only be placed if your account has sufficient funds. Once an order is placed, your funds will be put on hold for the duration of the order. The amount of funds on hold depends on the order type and parameters specified.\n\nPlease be noted that the system would hold the fees from the orders entered the orderbook in advance. \n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Unique order id created by users to identify their orders, the maximum length cannot exceed 40, e.g. UUID, Only allows numbers, characters, underline(_), and separator(-) |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| leverage | integer | Used to calculate the margin to be frozen for the order. If you are to close the position, this parameter is not required. |\n| type | string | specify if the order is an 'limit' order or 'market' order |\n| remark | string | remark for the order, length cannot exceed 100 utf8 characters |\n| stopPriceType | string | Either 'TP', 'IP' or 'MP' |\n| reduceOnly | boolean | A mark to reduce the position size only. Set to false by default. Need to set the position size when reduceOnly is true. If set to true, only the orders reducing the position size will be executed. If the reduce-only order size exceeds the position size, the extra size will be canceled. |\n| closeOrder | boolean | A mark to close the position. Set to false by default. If closeOrder is set to true, the system will close the position and the position size will become 0. Side, Size and Leverage fields can be left empty and the system will determine the side and size automatically. |\n| forceHold | boolean | A mark to forcely hold the funds for an order, even though it's an order to reduce the position size. This helps the order stay on the order book and not get canceled when the position size changes. Set to false by default. The system will forcely freeze certain amount of funds for this order, including orders whose direction is opposite to the current positions. This feature is to ensure that the order wonโ€™t be canceled by the matching engine in such a circumstance that not enough funds are frozen for the order. |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. |\n| marginMode | string | Margin mode: ISOLATED, CROSS, default: ISOLATED |\n| price | string | Required for type is 'limit' order, indicating the operating price |\n| size | integer | **Choose one of size, qty, valueQty**, Order size (Lot), must be a positive integer. The quantity unit of coin-swap contracts is size(lot), and other units are not supported. |\n| timeInForce | string | Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/api-338146) is a special strategy used during trading, default is GTC |\n| postOnly | boolean | Optional for type is 'limit' order, post only flag, invalid when timeInForce is IOC. When postOnly is true, not allowed choose hidden or iceberg. The post-only flag ensures that the trader always pays the maker fee and provides liquidity to the order book. If any part of the order is going to pay taker fee, the order will be fully rejected. |\n| hidden | boolean | Optional for type is 'limit' order, orders not displaying in order book. When hidden chose, not allowed choose postOnly. |\n| iceberg | boolean | Optional for type is 'limit' order, Only visible portion of the order is displayed in the order book. When iceberg chose, not allowed choose postOnly. |\n| visibleSize | string | Optional for type is 'limit' order, The maximum visible size of an iceberg order. please place order in size (lots), The units of qty (base currency) and valueQty (value) are not supported. |\n| triggerStopUpPrice | string | Take profit price |\n| triggerStopDownPrice | string | Stop loss price |\n| qty | string | **Choose one of size, qty, valueQty**, Order size (Base currency) must be an integer multiple of the multiplier. The unit of the quantity of coin-swap is size(lot), which is not supported |\n| valueQty | string | **Choose one of size, qty, valueQty**, Order size (Value), USDS-Swap correspond to USDT or USDC. The unit of the quantity of coin-swap is size(lot), which is not supported |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| clientOid | string | The user self-defined order id. |\n\n---\n", + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470237)\n\n:::info[Description]\nPlace take profit and stop loss order supports both take-profit and stop-loss functions, and other functions are exactly the same as the place order interface.\n\nYou can place two types of orders: limit and market. Orders can only be placed if your account has sufficient funds. Once an order is placed, your funds will be put on hold for the duration of the order. The amount of funds on hold depends on the order type and parameters specified.\n\nPlease be noted that the system would hold the fees from the orders entered the orderbook in advance. \n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Unique order id created by users to identify their orders, the maximum length cannot exceed 40, e.g. UUID, Only allows numbers, characters, underline(_), and separator(-) |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| leverage | integer | Used to calculate the margin to be frozen for the order. If you are to close the position, this parameter is not required. |\n| type | string | specify if the order is an 'limit' order or 'market' order |\n| remark | string | remark for the order, length cannot exceed 100 utf8 characters |\n| stopPriceType | string | Either 'TP', 'IP' or 'MP' |\n| reduceOnly | boolean | A mark to reduce the position size only. Set to false by default. Need to set the position size when reduceOnly is true. If set to true, only the orders reducing the position size will be executed. If the reduce-only order size exceeds the position size, the extra size will be canceled. |\n| closeOrder | boolean | A mark to close the position. Set to false by default. If closeOrder is set to true, the system will close the position and the position size will become 0. Side, Size and Leverage fields can be left empty and the system will determine the side and size automatically. |\n| forceHold | boolean | A mark to forcely hold the funds for an order, even though it's an order to reduce the position size. This helps the order stay on the order book and not get canceled when the position size changes. Set to false by default. The system will forcely freeze certain amount of funds for this order, including orders whose direction is opposite to the current positions. This feature is to ensure that the order wonโ€™t be canceled by the matching engine in such a circumstance that not enough funds are frozen for the order. |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. |\n| marginMode | string | Margin mode: ISOLATED, CROSS, default: ISOLATED |\n| price | string | Required for type is 'limit' order, indicating the operating price |\n| size | integer | **Choose one of size, qty, valueQty**, Order size (Lot), must be a positive integer. The quantity unit of coin-swap contracts is size(lot), and other units are not supported. |\n| timeInForce | string | Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading, default is GTC |\n| postOnly | boolean | Optional for type is 'limit' order, post only flag, invalid when timeInForce is IOC. When postOnly is true, not allowed choose hidden or iceberg. The post-only flag ensures that the trader always pays the maker fee and provides liquidity to the order book. If any part of the order is going to pay taker fee, the order will be fully rejected. |\n| hidden | boolean | Optional for type is 'limit' order, orders not displaying in order book. When hidden chose, not allowed choose postOnly. |\n| iceberg | boolean | Optional for type is 'limit' order, Only visible portion of the order is displayed in the order book. When iceberg chose, not allowed choose postOnly. |\n| visibleSize | string | Optional for type is 'limit' order, The maximum visible size of an iceberg order. please place order in size (lots), The units of qty (base currency) and valueQty (value) are not supported. |\n| triggerStopUpPrice | string | Take profit price |\n| triggerStopDownPrice | string | Stop loss price |\n| qty | string | **Choose one of size, qty, valueQty**, Order size (Base currency) must be an integer multiple of the multiplier. The unit of the quantity of coin-swap is size(lot), which is not supported |\n| valueQty | string | **Choose one of size, qty, valueQty**, Order size (Value), USDS-Swap correspond to USDT or USDC. The unit of the quantity of coin-swap is size(lot), which is not supported |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| clientOid | string | The user self-defined order id. |\n\n---\n", "body": { "mode": "raw", "raw": "{\n \"clientOid\": \"5c52e11203aa677f33e493fb\",\n \"side\": \"buy\",\n \"symbol\": \"XBTUSDTM\",\n \"leverage\": 3,\n \"type\": \"limit\",\n \"remark\": \"order remarks\",\n \"reduceOnly\": false,\n \"marginMode\": \"ISOLATED\",\n \"price\": \"0.2\",\n \"size\": 1,\n \"timeInForce\": \"GTC\",\n \"triggerStopUpPrice\": \"0.3\",\n \"triggerStopDownPrice\": \"0.1\",\n \"stopPriceType\": \"TP\"\n}", @@ -13654,7 +13654,7 @@ ], "query": [] }, - "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470238)\n\n:::info[Description]\nOrder test endpoint, the request parameters and return parameters of this endpoint are exactly the same as the order endpoint, and can be used to verify whether the signature is correct and other operations. After placing an order, the order will not enter the matching system, and the order cannot be queried.\n:::\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Unique order id created by users to identify their orders, the maximum length cannot exceed 40, e.g. UUID, Only allows numbers, characters, underline(_), and separator(-) |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| leverage | integer | Used to calculate the margin to be frozen for the order. If you are to close the position, this parameter is not required. |\n| type | string | specify if the order is an 'limit' order or 'market' order |\n| remark | string | remark for the order, length cannot exceed 100 utf8 characters |\n| stop | string | Either 'down' or 'up'. If stop is used,parameter stopPrice and stopPriceType also need to be provieded. |\n| stopPriceType | string | Either 'TP', 'IP' or 'MP', Need to be defined if stop is specified. |\n| stopPrice | string | Need to be defined if stop is specified. |\n| reduceOnly | boolean | A mark to reduce the position size only. Set to false by default. Need to set the position size when reduceOnly is true. If set to true, only the orders reducing the position size will be executed. If the reduce-only order size exceeds the position size, the extra size will be canceled. |\n| closeOrder | boolean | A mark to close the position. Set to false by default. If closeOrder is set to true, the system will close the position and the position size will become 0. Side, Size and Leverage fields can be left empty and the system will determine the side and size automatically. |\n| forceHold | boolean | A mark to forcely hold the funds for an order, even though it's an order to reduce the position size. This helps the order stay on the order book and not get canceled when the position size changes. Set to false by default. The system will forcely freeze certain amount of funds for this order, including orders whose direction is opposite to the current positions. This feature is to ensure that the order wonโ€™t be canceled by the matching engine in such a circumstance that not enough funds are frozen for the order. |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. |\n| marginMode | string | Margin mode: ISOLATED, CROSS, default: ISOLATED |\n| price | string | Required for type is 'limit' order, indicating the operating price |\n| size | integer | **Choose one of size, qty, valueQty**, Order size (Lot), must be a positive integer. The quantity unit of coin-swap contracts is size(lot), and other units are not supported. |\n| timeInForce | string | Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/api-338146) is a special strategy used during trading, default is GTC |\n| postOnly | boolean | Optional for type is 'limit' order, post only flag, invalid when timeInForce is IOC. When postOnly is true, not allowed choose hidden or iceberg. The post-only flag ensures that the trader always pays the maker fee and provides liquidity to the order book. If any part of the order is going to pay taker fee, the order will be fully rejected. |\n| hidden | boolean | Optional for type is 'limit' order, orders not displaying in order book. When hidden chose, not allowed choose postOnly. |\n| iceberg | boolean | Optional for type is 'limit' order, Only visible portion of the order is displayed in the order book. When iceberg chose, not allowed choose postOnly. |\n| visibleSize | string | Optional for type is 'limit' order, The maximum visible size of an iceberg order. please place order in size (lots), The units of qty (base currency) and valueQty (value) are not supported. |\n| qty | string | **Choose one of size, qty, valueQty**, Order size (Base currency) must be an integer multiple of the multiplier. The unit of the quantity of coin-swap is size(lot), which is not supported |\n| valueQty | string | **Choose one of size, qty, valueQty**, Order size (Value), USDS-Swap correspond to USDT or USDC. The unit of the quantity of coin-swap is size(lot), which is not supported |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| clientOid | string | The user self-defined order id. |\n\n---\n", + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470238)\n\n:::info[Description]\nOrder test endpoint, the request parameters and return parameters of this endpoint are exactly the same as the order endpoint, and can be used to verify whether the signature is correct and other operations. After placing an order, the order will not enter the matching system, and the order cannot be queried.\n:::\n\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| clientOid | string | Unique order id created by users to identify their orders, the maximum length cannot exceed 40, e.g. UUID, Only allows numbers, characters, underline(_), and separator(-) |\n| side | string | specify if the order is to 'buy' or 'sell' |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| leverage | integer | Used to calculate the margin to be frozen for the order. If you are to close the position, this parameter is not required. |\n| type | string | specify if the order is an 'limit' order or 'market' order |\n| remark | string | remark for the order, length cannot exceed 100 utf8 characters |\n| stop | string | Either 'down' or 'up'. If stop is used,parameter stopPrice and stopPriceType also need to be provieded. |\n| stopPriceType | string | Either 'TP', 'IP' or 'MP', Need to be defined if stop is specified. |\n| stopPrice | string | Need to be defined if stop is specified. |\n| reduceOnly | boolean | A mark to reduce the position size only. Set to false by default. Need to set the position size when reduceOnly is true. If set to true, only the orders reducing the position size will be executed. If the reduce-only order size exceeds the position size, the extra size will be canceled. |\n| closeOrder | boolean | A mark to close the position. Set to false by default. If closeOrder is set to true, the system will close the position and the position size will become 0. Side, Size and Leverage fields can be left empty and the system will determine the side and size automatically. |\n| forceHold | boolean | A mark to forcely hold the funds for an order, even though it's an order to reduce the position size. This helps the order stay on the order book and not get canceled when the position size changes. Set to false by default. The system will forcely freeze certain amount of funds for this order, including orders whose direction is opposite to the current positions. This feature is to ensure that the order wonโ€™t be canceled by the matching engine in such a circumstance that not enough funds are frozen for the order. |\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. |\n| marginMode | string | Margin mode: ISOLATED, CROSS, default: ISOLATED |\n| price | string | Required for type is 'limit' order, indicating the operating price |\n| size | integer | **Choose one of size, qty, valueQty**, Order size (Lot), must be a positive integer. The quantity unit of coin-swap contracts is size(lot), and other units are not supported. |\n| timeInForce | string | Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading, default is GTC |\n| postOnly | boolean | Optional for type is 'limit' order, post only flag, invalid when timeInForce is IOC. When postOnly is true, not allowed choose hidden or iceberg. The post-only flag ensures that the trader always pays the maker fee and provides liquidity to the order book. If any part of the order is going to pay taker fee, the order will be fully rejected. |\n| hidden | boolean | Optional for type is 'limit' order, orders not displaying in order book. When hidden chose, not allowed choose postOnly. |\n| iceberg | boolean | Optional for type is 'limit' order, Only visible portion of the order is displayed in the order book. When iceberg chose, not allowed choose postOnly. |\n| visibleSize | string | Optional for type is 'limit' order, The maximum visible size of an iceberg order. please place order in size (lots), The units of qty (base currency) and valueQty (value) are not supported. |\n| qty | string | **Choose one of size, qty, valueQty**, Order size (Base currency) must be an integer multiple of the multiplier. The unit of the quantity of coin-swap is size(lot), which is not supported |\n| valueQty | string | **Choose one of size, qty, valueQty**, Order size (Value), USDS-Swap correspond to USDT or USDC. The unit of the quantity of coin-swap is size(lot), which is not supported |\n\n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| orderId | string | The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. |\n| clientOid | string | The user self-defined order id. |\n\n---\n", "body": { "mode": "raw", "raw": "{\n \"clientOid\": \"5c52e11203aa677f33e493fb\",\n \"side\": \"buy\",\n \"symbol\": \"XBTUSDTM\",\n \"leverage\": 3,\n \"type\": \"limit\",\n \"remark\": \"order remarks\",\n \"reduceOnly\": false,\n \"marginMode\": \"ISOLATED\",\n \"price\": \"0.1\",\n \"size\": 1,\n \"timeInForce\": \"GTC\"\n}", @@ -14323,7 +14323,7 @@ ], "query": [] }, - "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470245)\n\n:::info[Description]\nGet a single order by order id (including a stop order).\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | Order ID |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| type | string | Order type, market order or limit order |\n| side | string | Transaction side |\n| price | string | Order price |\n| size | integer | Order quantity |\n| value | string | Order value
|\n| dealValue | string | Executed size of funds
|\n| dealSize | integer | Executed quantity
|\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. |\n| stop | string | Stop order type (stop limit or stop market)
|\n| stopPriceType | string | Trigger price type of stop orders |\n| stopTriggered | boolean | Mark to show whether the stop order is triggered |\n| stopPrice | number | Trigger price of stop orders |\n| timeInForce | string | Time in force policy type
|\n| postOnly | boolean | Mark of post only
|\n| hidden | boolean | Mark of the hidden order
|\n| iceberg | boolean | Mark of the iceberg order
|\n| leverage | string | Leverage of the order
|\n| forceHold | boolean | A mark to forcely hold the funds for an order
|\n| closeOrder | boolean | A mark to close the position
|\n| visibleSize | integer | Visible size of the iceberg order
|\n| clientOid | string | Unique order id created by users to identify their orders
|\n| remark | string | Remark |\n| tags | string | tag order source
|\n| isActive | boolean | Mark of the active orders
|\n| cancelExist | boolean | Mark of the canceled orders
|\n| createdAt | integer | Time the order created
|\n| updatedAt | integer | last update time
|\n| endAt | integer | Order Endtime |\n| orderTime | integer | Order create time in nanosecond
|\n| settleCurrency | string | settlement currency
|\n| marginMode | string | Margin mode: ISOLATED (isolated), CROSS (cross margin).
|\n| avgDealPrice | string | Average transaction price, forward contract average transaction price = sum (transaction value) / sum (transaction quantity), reverse contract average transaction price = sum (transaction quantity) / sum (transaction value). Transaction quantity = lots * multiplier
|\n| filledSize | integer | Value of the executed orders
|\n| filledValue | string | Executed order quantity
|\n| status | string | order status: โ€œopenโ€ or โ€œdoneโ€
|\n| reduceOnly | boolean | A mark to reduce the position size only
|\n\n---\n", + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470245)\n\n:::info[Description]\nGet a single order by order id (including a stop order).\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | Order ID |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| type | string | Order type, market order or limit order |\n| side | string | Transaction side |\n| price | string | Order price |\n| size | integer | Order quantity |\n| value | string | Order value
|\n| dealValue | string | Executed size of funds
|\n| dealSize | integer | Executed quantity
|\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. |\n| stop | string | Stop order type (stop limit or stop market)
|\n| stopPriceType | string | Trigger price type of stop orders |\n| stopTriggered | boolean | Mark to show whether the stop order is triggered |\n| stopPrice | number | Trigger price of stop orders |\n| timeInForce | string | Time in force policy type
|\n| postOnly | boolean | Mark of post only
|\n| hidden | boolean | Mark of the hidden order
|\n| iceberg | boolean | Mark of the iceberg order
|\n| leverage | string | Leverage of the order
|\n| forceHold | boolean | A mark to forcely hold the funds for an order
|\n| closeOrder | boolean | A mark to close the position
|\n| visibleSize | integer | Visible size of the iceberg order
|\n| clientOid | string | Unique order id created by users to identify their orders
|\n| remark | string | Remark |\n| tags | string | tag order source
|\n| isActive | boolean | Mark of the active orders
|\n| cancelExist | boolean | Mark of the canceled orders
|\n| createdAt | integer | Time the order created
|\n| updatedAt | integer | last update time
|\n| endAt | integer | Order Endtime |\n| orderTime | integer | Order create time in nanosecond
|\n| settleCurrency | string | settlement currency
|\n| marginMode | string | Margin mode: ISOLATED (isolated), CROSS (cross margin).
|\n| avgDealPrice | string | Average transaction price, forward contract average transaction price = sum (transaction value) / sum (transaction quantity), reverse contract average transaction price = sum (transaction quantity) / sum (transaction value). Transaction quantity = lots * multiplier
|\n| filledSize | integer | Value of the executed orders
|\n| filledValue | string | Executed order quantity
|\n| status | string | order status: โ€œopenโ€ or โ€œdoneโ€
|\n| reduceOnly | boolean | A mark to reduce the position size only
|\n\n---\n", "body": {} }, "response": [ @@ -14406,7 +14406,7 @@ } ] }, - "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470352)\n\n:::info[Description]\nGet a single order by client order id (including a stop order).\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | Order ID |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| type | string | Order type, market order or limit order |\n| side | string | Transaction side |\n| price | string | Order price |\n| size | integer | Order quantity |\n| value | string | Order value
|\n| dealValue | string | Executed size of funds
|\n| dealSize | integer | Executed quantity
|\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/api-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. |\n| stop | string | Stop order type (stop limit or stop market)
|\n| stopPriceType | string | Trigger price type of stop orders |\n| stopTriggered | boolean | Mark to show whether the stop order is triggered |\n| stopPrice | number | Trigger price of stop orders |\n| timeInForce | string | Time in force policy type
|\n| postOnly | boolean | Mark of post only
|\n| hidden | boolean | Mark of the hidden order
|\n| iceberg | boolean | Mark of the iceberg order
|\n| leverage | string | Leverage of the order
|\n| forceHold | boolean | A mark to forcely hold the funds for an order
|\n| closeOrder | boolean | A mark to close the position
|\n| visibleSize | integer | Visible size of the iceberg order
|\n| clientOid | string | Unique order id created by users to identify their orders
|\n| remark | string | Remark |\n| tags | string | tag order source
|\n| isActive | boolean | Mark of the active orders
|\n| cancelExist | boolean | Mark of the canceled orders
|\n| createdAt | integer | Time the order created
|\n| updatedAt | integer | last update time
|\n| endAt | integer | Order Endtime |\n| orderTime | integer | Order create time in nanosecond
|\n| settleCurrency | string | settlement currency
|\n| marginMode | string | Margin mode: ISOLATED (isolated), CROSS (cross margin).
|\n| avgDealPrice | string | Average transaction price, forward contract average transaction price = sum (transaction value) / sum (transaction quantity), reverse contract average transaction price = sum (transaction quantity) / sum (transaction value). Transaction quantity = lots * multiplier
|\n| filledSize | integer | Value of the executed orders
|\n| filledValue | string | Executed order quantity
|\n| status | string | order status: โ€œopenโ€ or โ€œdoneโ€
|\n| reduceOnly | boolean | A mark to reduce the position size only
|\n\n---\n", + "description": "# API Description\n\nFor the complete API documentation, please refer to [doc](https://www.kucoin.com/docs-new/api-3470352)\n\n:::info[Description]\nGet a single order by client order id (including a stop order).\n:::\n# API Schema\n\n## Request Schema\n\n\n**Request Body**\n\n---\n **None** \n---\n## Response Schema\n\n\n**Response Body**\n\n---\n**root Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| code | string | |\n| data | object | Refer to the schema section of data |\n\n**root.data Schema**\n\n| name | type | description |\n| --- | --- | --- |\n| id | string | Order ID |\n| symbol | string | Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) |\n| type | string | Order type, market order or limit order |\n| side | string | Transaction side |\n| price | string | Order price |\n| size | integer | Order quantity |\n| value | string | Order value
|\n| dealValue | string | Executed size of funds
|\n| dealSize | integer | Executed quantity
|\n| stp | string | [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. |\n| stop | string | Stop order type (stop limit or stop market)
|\n| stopPriceType | string | Trigger price type of stop orders |\n| stopTriggered | boolean | Mark to show whether the stop order is triggered |\n| stopPrice | number | Trigger price of stop orders |\n| timeInForce | string | Time in force policy type
|\n| postOnly | boolean | Mark of post only
|\n| hidden | boolean | Mark of the hidden order
|\n| iceberg | boolean | Mark of the iceberg order
|\n| leverage | string | Leverage of the order
|\n| forceHold | boolean | A mark to forcely hold the funds for an order
|\n| closeOrder | boolean | A mark to close the position
|\n| visibleSize | integer | Visible size of the iceberg order
|\n| clientOid | string | Unique order id created by users to identify their orders
|\n| remark | string | Remark |\n| tags | string | tag order source
|\n| isActive | boolean | Mark of the active orders
|\n| cancelExist | boolean | Mark of the canceled orders
|\n| createdAt | integer | Time the order created
|\n| updatedAt | integer | last update time
|\n| endAt | integer | Order Endtime |\n| orderTime | integer | Order create time in nanosecond
|\n| settleCurrency | string | settlement currency
|\n| marginMode | string | Margin mode: ISOLATED (isolated), CROSS (cross margin).
|\n| avgDealPrice | string | Average transaction price, forward contract average transaction price = sum (transaction value) / sum (transaction quantity), reverse contract average transaction price = sum (transaction quantity) / sum (transaction value). Transaction quantity = lots * multiplier
|\n| filledSize | integer | Value of the executed orders
|\n| filledValue | string | Executed order quantity
|\n| status | string | order status: โ€œopenโ€ or โ€œdoneโ€
|\n| reduceOnly | boolean | A mark to reduce the position size only
|\n\n---\n", "body": {} }, "response": [ @@ -18841,7 +18841,7 @@ "type": "text/javascript", "packages": {}, "exec": [ - "\nfunction extractPathVariable(str) {\n const regex = /^\\{\\{(.+?)\\}\\}$/;\n const match = str.match(regex);\n if (match) {\n return match[1];\n }\n return null;\n}\n\nfunction hasAnyFieldEmpty(obj) {\n for (const key in obj) {\n if (obj[key] === \"\" || obj[key] === null || obj[key] === undefined) {\n return true;\n }\n }\n return false;\n}\n\nfunction sign(text, secret) {\n const hash = CryptoJS.HmacSHA256(text, secret);\n return CryptoJS.enc.Base64.stringify(hash)\n}\n\nfunction auth(apiKey, method, url, data) {\n if (hasAnyFieldEmpty(apiKey)) {\n console.warn('The API key-related (or broker-related) information is not configured. Please check the fields in the environment variables.')\n return {'User-Agent': `Kucoin-Universal-Postman-SDK/v1.0.0`}\n }\n\n\n const timestamp = Date.now();\n const text = timestamp + method.toUpperCase() + url + data;\n const signature = sign(text, apiKey.secret);\n const brokerText = timestamp + apiKey.partner + apiKey.key;\n const brokerSignature = sign(brokerText, apiKey.brokerKey);\n return {\n 'KC-API-KEY': apiKey.key,\n 'KC-API-SIGN': signature,\n 'KC-API-TIMESTAMP': timestamp.toString(),\n 'KC-API-PASSPHRASE': sign(apiKey.passphrase || '', apiKey.secret),\n 'Content-Type': 'application/json',\n 'User-Agent': `Kucoin-Universal-Postman-SDK/v1.0.0`,\n 'KC-API-KEY-VERSION': 2,\n 'KC-API-PARTNER': apiKey.partner,\n 'KC-BROKER-NAME': apiKey.brokerName,\n 'KC-API-PARTNER-VERIFY': 'true',\n 'KC-API-PARTNER-SIGN': brokerSignature,\n };\n}\n\nlet key = pm.environment.get('API_KEY')\nlet secret = pm.environment.get('API_SECRET')\nlet passphrase = pm.environment.get('API_PASSPHRASE')\n\nlet brokerName = pm.environment.get('BROKER_NAME')\nlet partner = pm.environment.get('BROKER_PARTNER')\nlet brokerKey = pm.environment.get('BROKER_KEY')\n\nlet url = pm.request.url.getPathWithQuery()\nlet method = pm.request.method\nlet body = pm.request.body ? pm.request.body.toString() : ''\n\nfor (const index in pm.request.url.path) {\n path = pm.request.url.path[index]\n pathVar = extractPathVariable(path)\n if (pathVar != null) {\n let collectionVariable = pm.collectionVariables.get(pathVar);\n if (collectionVariable != null) {\n url = url.replace(path, collectionVariable)\n } else {\n console.warn('no path variable set: ' + path)\n }\n }\n}\n\nheader = auth({\n key: key, passphrase: passphrase, secret: secret, brokerName: brokerName, partner: partner, brokerKey: brokerKey\n}, method, url, body)\n\nfor (const [headerName, headerValue] of Object.entries(header)) {\n pm.request.headers.add({ key: headerName, value: headerValue })\n}" + "\nfunction extractPathVariable(str) {\n const regex = /^\\{\\{(.+?)\\}\\}$/;\n const match = str.match(regex);\n if (match) {\n return match[1];\n }\n return null;\n}\n\nfunction hasAnyFieldEmpty(obj) {\n for (const key in obj) {\n if (obj[key] === \"\" || obj[key] === null || obj[key] === undefined) {\n return true;\n }\n }\n return false;\n}\n\nfunction sign(text, secret) {\n const hash = CryptoJS.HmacSHA256(text, secret);\n return CryptoJS.enc.Base64.stringify(hash)\n}\n\nfunction auth(apiKey, method, url, data) {\n if (hasAnyFieldEmpty(apiKey)) {\n console.warn('The API key-related (or broker-related) information is not configured. Please check the fields in the environment variables.')\n return {'User-Agent': `Kucoin-Universal-Postman-SDK/`}\n }\n\n\n const timestamp = Date.now();\n const text = timestamp + method.toUpperCase() + url + data;\n const signature = sign(text, apiKey.secret);\n const brokerText = timestamp + apiKey.partner + apiKey.key;\n const brokerSignature = sign(brokerText, apiKey.brokerKey);\n return {\n 'KC-API-KEY': apiKey.key,\n 'KC-API-SIGN': signature,\n 'KC-API-TIMESTAMP': timestamp.toString(),\n 'KC-API-PASSPHRASE': sign(apiKey.passphrase || '', apiKey.secret),\n 'Content-Type': 'application/json',\n 'User-Agent': `Kucoin-Universal-Postman-SDK/`,\n 'KC-API-KEY-VERSION': 2,\n 'KC-API-PARTNER': apiKey.partner,\n 'KC-BROKER-NAME': apiKey.brokerName,\n 'KC-API-PARTNER-VERIFY': 'true',\n 'KC-API-PARTNER-SIGN': brokerSignature,\n };\n}\n\nlet key = pm.environment.get('API_KEY')\nlet secret = pm.environment.get('API_SECRET')\nlet passphrase = pm.environment.get('API_PASSPHRASE')\n\nlet brokerName = pm.environment.get('BROKER_NAME')\nlet partner = pm.environment.get('BROKER_PARTNER')\nlet brokerKey = pm.environment.get('BROKER_KEY')\n\nlet url = pm.request.url.getPathWithQuery()\nlet method = pm.request.method\nlet body = pm.request.body ? pm.request.body.toString() : ''\n\nfor (const index in pm.request.url.path) {\n path = pm.request.url.path[index]\n pathVar = extractPathVariable(path)\n if (pathVar != null) {\n let collectionVariable = pm.collectionVariables.get(pathVar);\n if (collectionVariable != null) {\n url = url.replace(path, collectionVariable)\n } else {\n console.warn('no path variable set: ' + path)\n }\n }\n}\n\nheader = auth({\n key: key, passphrase: passphrase, secret: secret, brokerName: brokerName, partner: partner, brokerKey: brokerKey\n}, method, url, body)\n\nfor (const [headerName, headerValue] of Object.entries(header)) {\n pm.request.headers.add({ key: headerName, value: headerValue })\n}" ] } }, @@ -18860,39 +18860,39 @@ ], "variable": [ { - "key": "symbol", + "key": "clientOid", "value": "" }, { - "key": "order-id", + "key": "subUserId", "value": "" }, { - "key": "withdrawalId", + "key": "size", "value": "" }, { - "key": "currency", + "key": "accountId", "value": "" }, { - "key": "subUserId", + "key": "withdrawalId", "value": "" }, { - "key": "clientOid", + "key": "currency", "value": "" }, { - "key": "accountId", + "key": "symbol", "value": "" }, { - "key": "size", + "key": "orderId", "value": "" }, { - "key": "orderId", + "key": "order-id", "value": "" } ], @@ -18903,7 +18903,7 @@ "type": "text/javascript", "packages": {}, "exec": [ - "function extractPathVariable(str) {\n const regex = /^\\{\\{(.+?)\\}\\}$/;\n const match = str.match(regex);\n if (match) {\n return match[1];\n }\n return null;\n}\n\nfunction hasAnyFieldEmpty(obj) {\n for (const key in obj) {\n if (obj[key] === \"\" || obj[key] === null || obj[key] === undefined) {\n return true;\n }\n }\n return false;\n}\n\nfunction sign(text, secret) {\n const hash = CryptoJS.HmacSHA256(text, secret);\n return CryptoJS.enc.Base64.stringify(hash)\n}\n\nfunction auth(apiKey, method, url, data) {\n if (hasAnyFieldEmpty(apiKey)) {\n console.warn('The API key-related information is not configured; only the public channel API is accessible.')\n return {'User-Agent': `Kucoin-Universal-Postman-SDK/v1.0.0`}\n }\n\n const timestamp = Date.now();\n const text = timestamp + method.toUpperCase() + url + data;\n const signature = sign(text, apiKey.secret);\n return {\n 'KC-API-KEY': apiKey.key,\n 'KC-API-SIGN': signature,\n 'KC-API-TIMESTAMP': timestamp.toString(),\n 'KC-API-PASSPHRASE': sign(apiKey.passphrase || '', apiKey.secret),\n 'Content-Type': 'application/json',\n 'User-Agent': `Kucoin-Universal-Postman-SDK/v1.0.0`,\n 'KC-API-KEY-VERSION': 2,\n };\n}\n\nlet key = pm.environment.get('API_KEY')\nlet secret = pm.environment.get('API_SECRET')\nlet passphrase = pm.environment.get('API_PASSPHRASE')\n\nlet url = pm.request.url.getPathWithQuery()\nlet method = pm.request.method\nlet body = pm.request.body ? pm.request.body.toString() : ''\n\nfor (const index in pm.request.url.path) {\n path = pm.request.url.path[index]\n pathVar = extractPathVariable(path)\n if (pathVar != null) {\n let collectionVariable = pm.collectionVariables.get(pathVar);\n if (collectionVariable != null) {\n url = url.replace(path, collectionVariable)\n } else {\n console.warn('no path variable set: ' + path)\n }\n }\n}\n\nheader = auth({ key: key, passphrase: passphrase, secret: secret }, method, url, body)\n\nfor (const [headerName, headerValue] of Object.entries(header)) {\n pm.request.headers.add({ key: headerName, value: headerValue })\n}" + "function extractPathVariable(str) {\n const regex = /^\\{\\{(.+?)\\}\\}$/;\n const match = str.match(regex);\n if (match) {\n return match[1];\n }\n return null;\n}\n\nfunction hasAnyFieldEmpty(obj) {\n for (const key in obj) {\n if (obj[key] === \"\" || obj[key] === null || obj[key] === undefined) {\n return true;\n }\n }\n return false;\n}\n\nfunction sign(text, secret) {\n const hash = CryptoJS.HmacSHA256(text, secret);\n return CryptoJS.enc.Base64.stringify(hash)\n}\n\nfunction auth(apiKey, method, url, data) {\n if (hasAnyFieldEmpty(apiKey)) {\n console.warn('The API key-related information is not configured; only the public channel API is accessible.')\n return {'User-Agent': `Kucoin-Universal-Postman-SDK/`}\n }\n\n const timestamp = Date.now();\n const text = timestamp + method.toUpperCase() + url + data;\n const signature = sign(text, apiKey.secret);\n return {\n 'KC-API-KEY': apiKey.key,\n 'KC-API-SIGN': signature,\n 'KC-API-TIMESTAMP': timestamp.toString(),\n 'KC-API-PASSPHRASE': sign(apiKey.passphrase || '', apiKey.secret),\n 'Content-Type': 'application/json',\n 'User-Agent': `Kucoin-Universal-Postman-SDK/`,\n 'KC-API-KEY-VERSION': 2,\n };\n}\n\nlet key = pm.environment.get('API_KEY')\nlet secret = pm.environment.get('API_SECRET')\nlet passphrase = pm.environment.get('API_PASSPHRASE')\n\nlet url = pm.request.url.getPathWithQuery()\nlet method = pm.request.method\nlet body = pm.request.body ? pm.request.body.toString() : ''\n\nfor (const index in pm.request.url.path) {\n path = pm.request.url.path[index]\n pathVar = extractPathVariable(path)\n if (pathVar != null) {\n let collectionVariable = pm.collectionVariables.get(pathVar);\n if (collectionVariable != null) {\n url = url.replace(path, collectionVariable)\n } else {\n console.warn('no path variable set: ' + path)\n }\n }\n}\n\nheader = auth({ key: key, passphrase: passphrase, secret: secret }, method, url, body)\n\nfor (const [headerName, headerValue] of Object.entries(header)) {\n pm.request.headers.add({ key: headerName, value: headerValue })\n}" ] } }, diff --git a/spec/rest/api/openapi-account-account.json b/spec/rest/api/openapi-account-account.json index 39ccfa80..75cbc330 100644 --- a/spec/rest/api/openapi-account-account.json +++ b/spec/rest/api/openapi-account-account.json @@ -1828,7 +1828,7 @@ }, "permission": { "type": "string", - "description": "[Permissions](doc://link/pages/338144), possible values: General, Spot, Margin, Futures, InnerTransfer, Transfer, Earn" + "description": "[Permissions](https://www.kucoin.com/docs-new/doc-338144), possible values: General, Spot, Margin, Futures, InnerTransfer, Transfer, Earn" }, "ipWhitelist": { "type": "string", diff --git a/spec/rest/api/openapi-account-subaccount.json b/spec/rest/api/openapi-account-subaccount.json index 4e83d25b..b50934af 100644 --- a/spec/rest/api/openapi-account-subaccount.json +++ b/spec/rest/api/openapi-account-subaccount.json @@ -1147,7 +1147,7 @@ }, "permission": { "type": "string", - "description": "[Permissions](doc://link/pages/338144)" + "description": "[Permissions](https://www.kucoin.com/docs-new/doc-338144)" }, "ipWhitelist": { "type": "string", @@ -1323,7 +1323,7 @@ }, "permission": { "type": "string", - "description": "[Permissions](doc://link/pages/338144)" + "description": "[Permissions](https://www.kucoin.com/docs-new/doc-338144)" }, "ipWhitelist": { "type": "string", @@ -1383,7 +1383,7 @@ }, "permission": { "type": "string", - "description": "[Permissions](doc://link/pages/338144)(Only Generalใ€Spotใ€Futuresใ€Marginใ€InnerTransfer(Flex Transfer) permissions can be set, such as \"General, Trade\". The default is \"General\")", + "description": "[Permissions](https://www.kucoin.com/docs-new/doc-338144)(Only Generalใ€Spotใ€Futuresใ€Marginใ€InnerTransfer(Flex Transfer) permissions can be set, such as \"General, Trade\". The default is \"General\")", "default": "General", "example": [ "General, Trade" @@ -1485,7 +1485,7 @@ }, "permission": { "type": "string", - "description": "[Permissions](doc://link/pages/338144)" + "description": "[Permissions](https://www.kucoin.com/docs-new/doc-338144)" }, "ipWhitelist": { "type": "string", @@ -1531,7 +1531,7 @@ }, "permission": { "type": "string", - "description": "[Permissions](doc://link/pages/338144)(Only Generalใ€Spotใ€Futuresใ€Marginใ€InnerTransfer(Flex Transfer) permissions can be set, such as \"General, Trade\". The default is \"General\")", + "description": "[Permissions](https://www.kucoin.com/docs-new/doc-338144)(Only Generalใ€Spotใ€Futuresใ€Marginใ€InnerTransfer(Flex Transfer) permissions can be set, such as \"General, Trade\". The default is \"General\")", "default": "General", "example": [ "General,Trade" diff --git a/spec/rest/api/openapi-broker-ndbroker.json b/spec/rest/api/openapi-broker-ndbroker.json index 6fc2a658..6be0ed4f 100644 --- a/spec/rest/api/openapi-broker-ndbroker.json +++ b/spec/rest/api/openapi-broker-ndbroker.json @@ -518,7 +518,7 @@ } ] }, - "description": "[Permissions](doc://link/pages/338144) group list" + "description": "[Permissions](https://www.kucoin.com/docs-new/doc-338144) group list" }, "ipWhitelist": { "type": "array", @@ -674,7 +674,7 @@ "items": { "type": "string" }, - "description": "[Permissions](doc://link/pages/338144) group list" + "description": "[Permissions](https://www.kucoin.com/docs-new/doc-338144) group list" }, "ipWhitelist": { "type": "array", @@ -1599,7 +1599,7 @@ "items": { "type": "string" }, - "description": "[Permissions](doc://link/pages/338144) group list" + "description": "[Permissions](https://www.kucoin.com/docs-new/doc-338144) group list" }, "ipWhitelist": { "type": "array", @@ -1688,7 +1688,7 @@ } ] }, - "description": "[Permissions](doc://link/pages/338144) group list(Only Generalใ€Spotใ€Futures permissions can be set, such as \"General, Trade\". )\n" + "description": "[Permissions](https://www.kucoin.com/docs-new/doc-338144) group list(Only Generalใ€Spotใ€Futures permissions can be set, such as \"General, Trade\". )\n" }, "label": { "type": "string", diff --git a/spec/rest/api/openapi-futures-fundingfees.json b/spec/rest/api/openapi-futures-fundingfees.json index 8d6dbccc..3106051e 100644 --- a/spec/rest/api/openapi-futures-fundingfees.json +++ b/spec/rest/api/openapi-futures-fundingfees.json @@ -157,7 +157,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "fundingRate": { "type": "number", @@ -299,7 +299,7 @@ }, "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "timePoint": { "type": "integer", diff --git a/spec/rest/api/openapi-futures-market.json b/spec/rest/api/openapi-futures-market.json index eb25f4af..1d916795 100644 --- a/spec/rest/api/openapi-futures-market.json +++ b/spec/rest/api/openapi-futures-market.json @@ -968,7 +968,7 @@ }, "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "side": { "type": "string", @@ -1226,7 +1226,7 @@ }, "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "bids": { "type": "array", @@ -1335,7 +1335,7 @@ }, "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "bids": { "type": "array", @@ -1503,7 +1503,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: fundingBaseSymbol, fundingQuoteSymbol, fundingBaseSymbol1M, fundingQuoteSymbol1M](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: fundingBaseSymbol, fundingQuoteSymbol, fundingBaseSymbol1M, fundingQuoteSymbol1M](https://www.kucoin.com/docs-new/api-3470220) " }, "granularity": { "type": "integer", @@ -1665,7 +1665,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: premiumsSymbol1M, premiumsSymbol8H](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: premiumsSymbol1M, premiumsSymbol8H](https://www.kucoin.com/docs-new/api-3470220) " }, "granularity": { "type": "integer", @@ -2005,7 +2005,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: indexSymbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: indexSymbol](https://www.kucoin.com/docs-new/api-3470220) " }, "granularity": { "type": "integer", @@ -2248,7 +2248,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "granularity": { "type": "integer", diff --git a/spec/rest/api/openapi-futures-order.json b/spec/rest/api/openapi-futures-order.json index de769cb7..5ad30185 100644 --- a/spec/rest/api/openapi-futures-order.json +++ b/spec/rest/api/openapi-futures-order.json @@ -100,7 +100,7 @@ }, "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "example": [ "XBTUSDTM" ] @@ -207,7 +207,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment.", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment.", "enum": [ "CN", "CO", @@ -265,7 +265,7 @@ }, "timeInForce": { "type": "string", - "description": "Optional for type is 'limit' order, [Time in force](doc://link/pages/338146) is a special strategy used during trading, default is GTC", + "description": "Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading, default is GTC", "enum": [ "GTC", "IOC" @@ -494,7 +494,7 @@ }, "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "type": { "type": "string", @@ -963,7 +963,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "tradeId": { "type": "string", @@ -1273,7 +1273,7 @@ }, "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "code": { "type": "string" @@ -1351,7 +1351,7 @@ }, "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/221752070) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-221752070) ", "example": [ "XBTUSDTM" ] @@ -1458,7 +1458,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment.", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment.", "enum": [ "CN", "CO", @@ -1516,7 +1516,7 @@ }, "timeInForce": { "type": "string", - "description": "Optional for type is 'limit' order, [Time in force](doc://link/pages/338146) is a special strategy used during trading, default is GTC", + "description": "Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading, default is GTC", "enum": [ "GTC", "IOC" @@ -1615,7 +1615,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "tradeId": { "type": "string", @@ -1983,7 +1983,7 @@ }, "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "example": [ "XBTUSDTM" ] @@ -2066,7 +2066,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment.", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment.", "enum": [ "CN", "CO", @@ -2124,7 +2124,7 @@ }, "timeInForce": { "type": "string", - "description": "Optional for type is 'limit' order, [Time in force](doc://link/pages/338146) is a special strategy used during trading, default is GTC", + "description": "Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading, default is GTC", "enum": [ "GTC", "IOC" @@ -2372,7 +2372,7 @@ }, "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "example": [ "XBTUSDTM" ] @@ -2479,7 +2479,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment.", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment.", "enum": [ "CN", "CO", @@ -2537,7 +2537,7 @@ }, "timeInForce": { "type": "string", - "description": "Optional for type is 'limit' order, [Time in force](doc://link/pages/338146) is a special strategy used during trading, default is GTC", + "description": "Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading, default is GTC", "enum": [ "GTC", "IOC" @@ -2824,7 +2824,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "clientOid": { "type": "string" @@ -3129,7 +3129,7 @@ }, "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "type": { "type": "string", @@ -3392,7 +3392,7 @@ }, "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "type": { "type": "string", @@ -3456,7 +3456,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment.", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment.", "enum": [ "", "CN", @@ -3764,7 +3764,7 @@ }, "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "type": { "type": "string", @@ -3828,7 +3828,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment.", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment.", "enum": [ "", "CN", @@ -4139,7 +4139,7 @@ }, "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "type": { "type": "string", diff --git a/spec/rest/api/openapi-futures-positions.json b/spec/rest/api/openapi-futures-positions.json index b34a1bff..0a6aeb1f 100644 --- a/spec/rest/api/openapi-futures-positions.json +++ b/spec/rest/api/openapi-futures-positions.json @@ -63,7 +63,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "maxBuyOpenSize": { "type": "integer", @@ -139,7 +139,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "level": { "type": "integer", @@ -238,7 +238,7 @@ }, "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "example": [ "XBTUSDTM", "XBTUSDM", @@ -550,7 +550,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "level": { "type": "integer", @@ -614,7 +614,7 @@ }, "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "example": [ "XBTUSDTM", "XBTUSDM", @@ -980,7 +980,7 @@ }, "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "settleCurrency": { "type": "string", @@ -1156,7 +1156,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "withdrawAmount": { "type": "string", @@ -1203,7 +1203,7 @@ }, "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "autoDeposit": { "type": "boolean", @@ -1416,7 +1416,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "margin": { "type": "number", @@ -1530,7 +1530,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "marginMode": { "type": "string", @@ -1615,7 +1615,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "leverage": { "type": "string", @@ -1712,7 +1712,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "leverage": { "type": "string", @@ -1755,7 +1755,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "marginMode": { "type": "string", @@ -1811,7 +1811,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "example": [ "XBTUSDTM", "XBTUSDCM", diff --git a/spec/rest/api/openapi-margin-order.json b/spec/rest/api/openapi-margin-order.json index 501103e6..6bec3b75 100644 --- a/spec/rest/api/openapi-margin-order.json +++ b/spec/rest/api/openapi-margin-order.json @@ -206,7 +206,7 @@ }, "fee": { "type": "string", - "description": "[Handling fees](doc://link/pages/5327739)" + "description": "[Handling fees](https://www.kucoin.com/docs-new/api-5327739)" }, "feeCurrency": { "type": "string", @@ -214,7 +214,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB , and DC", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC", "enum": [ "DC", "CO", @@ -748,7 +748,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB , and DC", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC", "enum": [ "DC", "CO", @@ -1185,7 +1185,7 @@ }, "fee": { "type": "string", - "description": "[Handling fees](doc://link/pages/5327739)" + "description": "[Handling fees](https://www.kucoin.com/docs-new/api-5327739)" }, "feeCurrency": { "type": "string", @@ -1193,7 +1193,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB , and DC", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC", "enum": [ "DC", "CO", @@ -1662,7 +1662,7 @@ }, "fee": { "type": "string", - "description": "[Handling fees](doc://link/pages/5327739)" + "description": "[Handling fees](https://www.kucoin.com/docs-new/api-5327739)" }, "feeRate": { "type": "string", @@ -1971,7 +1971,7 @@ }, "fee": { "type": "string", - "description": "[Handling fees](doc://link/pages/5327739)" + "description": "[Handling fees](https://www.kucoin.com/docs-new/api-5327739)" }, "feeCurrency": { "type": "string", @@ -1979,7 +1979,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB , and DC", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC", "enum": [ "DC", "CO", @@ -2323,7 +2323,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB , and DC", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC", "enum": [ "DC", "CO", @@ -2363,7 +2363,7 @@ }, "timeInForce": { "type": "string", - "description": "[Time in force](doc://link/pages/5176570) is a special strategy used during trading", + "description": "[Time in force](https://www.kucoin.com/docs-new/api-5176570) is a special strategy used during trading", "enum": [ "GTC", "GTT", @@ -2401,12 +2401,12 @@ }, "hidden": { "type": "boolean", - "description": "[Hidden order](doc://link/pages/338146) or not (not shown in order book)", + "description": "[Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book)", "default": false }, "iceberg": { "type": "boolean", - "description": "Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146)", + "description": "Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146)", "default": false }, "visibleSize": { @@ -2585,7 +2585,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB , and DC", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC", "enum": [ "DC", "CO", @@ -2625,7 +2625,7 @@ }, "timeInForce": { "type": "string", - "description": "[Time in force](doc://link/pages/5176570) is a special strategy used during trading", + "description": "[Time in force](https://www.kucoin.com/docs-new/api-5176570) is a special strategy used during trading", "enum": [ "GTC", "GTT", @@ -2663,12 +2663,12 @@ }, "hidden": { "type": "boolean", - "description": "[Hidden order](doc://link/pages/338146) or not (not shown in order book)", + "description": "[Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book)", "default": false }, "iceberg": { "type": "boolean", - "description": "Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146)", + "description": "Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146)", "default": false }, "visibleSize": { @@ -2847,7 +2847,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC", "enum": [ "DC", "CO", @@ -2887,7 +2887,7 @@ }, "timeInForce": { "type": "string", - "description": "[Time in force](doc://link/pages/338146) is a special strategy used during trading", + "description": "[Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading", "enum": [ "GTC", "GTT", @@ -3125,7 +3125,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/5176570) is divided into four strategies: CN, CO, CB , and DC", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/api-5176570) is divided into four strategies: CN, CO, CB , and DC", "enum": [ "DC", "CO", @@ -3165,7 +3165,7 @@ }, "timeInForce": { "type": "string", - "description": "[Time in force](doc://link/pages/5176570) is a special strategy used during trading", + "description": "[Time in force](https://www.kucoin.com/docs-new/api-5176570) is a special strategy used during trading", "enum": [ "GTC", "GTT", diff --git a/spec/rest/api/openapi-spot-order.json b/spec/rest/api/openapi-spot-order.json index d01a3101..2db1fc47 100644 --- a/spec/rest/api/openapi-spot-order.json +++ b/spec/rest/api/openapi-spot-order.json @@ -112,7 +112,7 @@ }, "timeInForce": { "type": "string", - "description": "[Time in force](doc://link/pages/338146) is a special strategy used during trading", + "description": "[Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading", "enum": [ "GTC", "GTT", @@ -173,7 +173,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC", "enum": [ "DC", "CO", @@ -215,12 +215,12 @@ }, "hidden": { "type": "boolean", - "description": "[Hidden order](doc://link/pages/338146) or not (not shown in order book)", + "description": "[Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book)", "default": false }, "iceberg": { "type": "boolean", - "description": "Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146)", + "description": "Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146)", "default": false }, "visibleSize": { @@ -411,7 +411,7 @@ }, "timeInForce": { "type": "string", - "description": "[Time in force](doc://link/pages/338146) is a special strategy used during trading", + "description": "[Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading", "enum": [ "GTC", "GTT", @@ -472,7 +472,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC", "enum": [ "DC", "CO", @@ -514,12 +514,12 @@ }, "hidden": { "type": "boolean", - "description": "[Hidden order](doc://link/pages/338146) or not (not shown in order book)", + "description": "[Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book)", "default": false }, "iceberg": { "type": "boolean", - "description": "Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146)", + "description": "Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146)", "default": false }, "visibleSize": { @@ -741,7 +741,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC", "enum": [ "DC", "CO", @@ -781,7 +781,7 @@ }, "timeInForce": { "type": "string", - "description": "[Time in force](doc://link/pages/338146) is a special strategy used during trading", + "description": "[Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading", "enum": [ "GTC", "GTT", @@ -819,12 +819,12 @@ }, "hidden": { "type": "boolean", - "description": "[Hidden order](doc://link/pages/338146) or not (not shown in order book)", + "description": "[Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book)", "default": false }, "iceberg": { "type": "boolean", - "description": "Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146)", + "description": "Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146)", "default": false }, "visibleSize": { @@ -1310,7 +1310,7 @@ }, "fee": { "type": "string", - "description": "[Handling fees](doc://link/pages/5327739)" + "description": "[Handling fees](https://www.kucoin.com/docs-new/api-5327739)" }, "feeCurrency": { "type": "string", @@ -1318,7 +1318,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/5176570)", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/api-5176570)", "enum": [ "DC", "CO", @@ -1956,7 +1956,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC", "enum": [ "DC", "CO", @@ -1996,7 +1996,7 @@ }, "timeInForce": { "type": "string", - "description": "[Time in force](doc://link/pages/338146) is a special strategy used during trading", + "description": "[Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading", "enum": [ "GTC", "GTT", @@ -2034,12 +2034,12 @@ }, "hidden": { "type": "boolean", - "description": "[Hidden order](doc://link/pages/338146) or not (not shown in order book)", + "description": "[Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book)", "default": false }, "iceberg": { "type": "boolean", - "description": "Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146)", + "description": "Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146)", "default": false }, "visibleSize": { @@ -2503,7 +2503,7 @@ }, "fee": { "type": "string", - "description": "[Handling fees](doc://link/pages/5327739)" + "description": "[Handling fees](https://www.kucoin.com/docs-new/api-5327739)" }, "feeCurrency": { "type": "string", @@ -2511,7 +2511,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/5176570)", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/api-5176570)", "enum": [ "DC", "CO", @@ -3154,7 +3154,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC", "enum": [ "DC", "CO", @@ -3194,7 +3194,7 @@ }, "timeInForce": { "type": "string", - "description": "[Time in force](doc://link/pages/338146) is a special strategy used during trading. Required for limit orders.", + "description": "[Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading. Required for limit orders.", "enum": [ "GTC", "GTT", @@ -3232,12 +3232,12 @@ }, "hidden": { "type": "boolean", - "description": "[Hidden order](doc://link/pages/338146) or not (not shown in order book)", + "description": "[Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book)", "default": false }, "iceberg": { "type": "boolean", - "description": "Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146)", + "description": "Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146)", "default": false }, "visibleSize": { @@ -3493,7 +3493,7 @@ }, "fee": { "type": "string", - "description": "[Handling fees](doc://link/pages/5327739)" + "description": "[Handling fees](https://www.kucoin.com/docs-new/api-5327739)" }, "feeCurrency": { "type": "string", @@ -3501,7 +3501,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/5176570)", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/api-5176570)", "enum": [ "DC", "CO", @@ -4487,7 +4487,7 @@ }, "fee": { "type": "string", - "description": "[Handling fees](doc://link/pages/5327739)" + "description": "[Handling fees](https://www.kucoin.com/docs-new/api-5327739)" }, "feeRate": { "type": "string", @@ -4994,7 +4994,7 @@ }, "fee": { "type": "string", - "description": "[Handling fees](doc://link/pages/5327739)" + "description": "[Handling fees](https://www.kucoin.com/docs-new/api-5327739)" }, "feeCurrency": { "type": "string", @@ -5002,7 +5002,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/5176570)", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/api-5176570)", "enum": [ "DC", "CO", @@ -5820,7 +5820,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC", "enum": [ "DC", "CO", @@ -5860,7 +5860,7 @@ }, "timeInForce": { "type": "string", - "description": "[Time in force](doc://link/pages/338146) is a special strategy used during trading", + "description": "[Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading", "enum": [ "GTC", "GTT", @@ -5898,12 +5898,12 @@ }, "hidden": { "type": "boolean", - "description": "[Hidden order](doc://link/pages/338146) or not (not shown in order book)", + "description": "[Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book)", "default": false }, "iceberg": { "type": "boolean", - "description": "Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146)", + "description": "Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146)", "default": false }, "visibleSize": { @@ -6939,7 +6939,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC", "enum": [ "DC", "CO", @@ -6979,7 +6979,7 @@ }, "timeInForce": { "type": "string", - "description": "[Time in force](doc://link/pages/338146) is a special strategy used during trading", + "description": "[Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading", "enum": [ "GTC", "GTT", @@ -7779,7 +7779,7 @@ }, "fee": { "type": "string", - "description": "[Handling fees](doc://link/pages/5327739)" + "description": "[Handling fees](https://www.kucoin.com/docs-new/api-5327739)" }, "feeRate": { "type": "string", @@ -8179,7 +8179,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC", "enum": [ "DC", "CO", @@ -8219,7 +8219,7 @@ }, "timeInForce": { "type": "string", - "description": "[Time in force](doc://link/pages/338146) is a special strategy used during trading", + "description": "[Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading", "enum": [ "GTC", "GTT", @@ -8461,7 +8461,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC", "enum": [ "DC", "CO", @@ -8501,7 +8501,7 @@ }, "timeInForce": { "type": "string", - "description": "[Time in force](doc://link/pages/338146) is a special strategy used during trading", + "description": "[Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading", "enum": [ "GTC", "GTT", diff --git a/spec/rest/entry/openapi-account.json b/spec/rest/entry/openapi-account.json index b900392e..0154ad92 100644 --- a/spec/rest/entry/openapi-account.json +++ b/spec/rest/entry/openapi-account.json @@ -1828,7 +1828,7 @@ }, "permission": { "type": "string", - "description": "[Permissions](doc://link/pages/338144), possible values: General, Spot, Margin, Futures, InnerTransfer, Transfer, Earn" + "description": "[Permissions](https://www.kucoin.com/docs-new/doc-338144), possible values: General, Spot, Margin, Futures, InnerTransfer, Transfer, Earn" }, "ipWhitelist": { "type": "string", @@ -3025,7 +3025,7 @@ }, "permission": { "type": "string", - "description": "[Permissions](doc://link/pages/338144)" + "description": "[Permissions](https://www.kucoin.com/docs-new/doc-338144)" }, "ipWhitelist": { "type": "string", @@ -3201,7 +3201,7 @@ }, "permission": { "type": "string", - "description": "[Permissions](doc://link/pages/338144)" + "description": "[Permissions](https://www.kucoin.com/docs-new/doc-338144)" }, "ipWhitelist": { "type": "string", @@ -3261,7 +3261,7 @@ }, "permission": { "type": "string", - "description": "[Permissions](doc://link/pages/338144)(Only Generalใ€Spotใ€Futuresใ€Marginใ€InnerTransfer(Flex Transfer) permissions can be set, such as \"General, Trade\". The default is \"General\")", + "description": "[Permissions](https://www.kucoin.com/docs-new/doc-338144)(Only Generalใ€Spotใ€Futuresใ€Marginใ€InnerTransfer(Flex Transfer) permissions can be set, such as \"General, Trade\". The default is \"General\")", "default": "General", "example": [ "General, Trade" @@ -3363,7 +3363,7 @@ }, "permission": { "type": "string", - "description": "[Permissions](doc://link/pages/338144)" + "description": "[Permissions](https://www.kucoin.com/docs-new/doc-338144)" }, "ipWhitelist": { "type": "string", @@ -3409,7 +3409,7 @@ }, "permission": { "type": "string", - "description": "[Permissions](doc://link/pages/338144)(Only Generalใ€Spotใ€Futuresใ€Marginใ€InnerTransfer(Flex Transfer) permissions can be set, such as \"General, Trade\". The default is \"General\")", + "description": "[Permissions](https://www.kucoin.com/docs-new/doc-338144)(Only Generalใ€Spotใ€Futuresใ€Marginใ€InnerTransfer(Flex Transfer) permissions can be set, such as \"General, Trade\". The default is \"General\")", "default": "General", "example": [ "General,Trade" diff --git a/spec/rest/entry/openapi-broker.json b/spec/rest/entry/openapi-broker.json index 9d220cce..edf2d186 100644 --- a/spec/rest/entry/openapi-broker.json +++ b/spec/rest/entry/openapi-broker.json @@ -616,7 +616,7 @@ } ] }, - "description": "[Permissions](doc://link/pages/338144) group list" + "description": "[Permissions](https://www.kucoin.com/docs-new/doc-338144) group list" }, "ipWhitelist": { "type": "array", @@ -772,7 +772,7 @@ "items": { "type": "string" }, - "description": "[Permissions](doc://link/pages/338144) group list" + "description": "[Permissions](https://www.kucoin.com/docs-new/doc-338144) group list" }, "ipWhitelist": { "type": "array", @@ -1697,7 +1697,7 @@ "items": { "type": "string" }, - "description": "[Permissions](doc://link/pages/338144) group list" + "description": "[Permissions](https://www.kucoin.com/docs-new/doc-338144) group list" }, "ipWhitelist": { "type": "array", @@ -1786,7 +1786,7 @@ } ] }, - "description": "[Permissions](doc://link/pages/338144) group list(Only Generalใ€Spotใ€Futures permissions can be set, such as \"General, Trade\". )\n" + "description": "[Permissions](https://www.kucoin.com/docs-new/doc-338144) group list(Only Generalใ€Spotใ€Futures permissions can be set, such as \"General, Trade\". )\n" }, "label": { "type": "string", diff --git a/spec/rest/entry/openapi-futures.json b/spec/rest/entry/openapi-futures.json index 4d3b0f05..d543d7c1 100644 --- a/spec/rest/entry/openapi-futures.json +++ b/spec/rest/entry/openapi-futures.json @@ -968,7 +968,7 @@ }, "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "side": { "type": "string", @@ -1226,7 +1226,7 @@ }, "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "bids": { "type": "array", @@ -1335,7 +1335,7 @@ }, "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "bids": { "type": "array", @@ -1503,7 +1503,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: fundingBaseSymbol, fundingQuoteSymbol, fundingBaseSymbol1M, fundingQuoteSymbol1M](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: fundingBaseSymbol, fundingQuoteSymbol, fundingBaseSymbol1M, fundingQuoteSymbol1M](https://www.kucoin.com/docs-new/api-3470220) " }, "granularity": { "type": "integer", @@ -1665,7 +1665,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: premiumsSymbol1M, premiumsSymbol8H](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: premiumsSymbol1M, premiumsSymbol8H](https://www.kucoin.com/docs-new/api-3470220) " }, "granularity": { "type": "integer", @@ -2005,7 +2005,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: indexSymbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: indexSymbol](https://www.kucoin.com/docs-new/api-3470220) " }, "granularity": { "type": "integer", @@ -2248,7 +2248,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "granularity": { "type": "integer", @@ -2561,7 +2561,7 @@ }, "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "example": [ "XBTUSDTM" ] @@ -2668,7 +2668,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment.", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment.", "enum": [ "CN", "CO", @@ -2726,7 +2726,7 @@ }, "timeInForce": { "type": "string", - "description": "Optional for type is 'limit' order, [Time in force](doc://link/pages/338146) is a special strategy used during trading, default is GTC", + "description": "Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading, default is GTC", "enum": [ "GTC", "IOC" @@ -2955,7 +2955,7 @@ }, "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "type": { "type": "string", @@ -3424,7 +3424,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "tradeId": { "type": "string", @@ -3734,7 +3734,7 @@ }, "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "code": { "type": "string" @@ -3812,7 +3812,7 @@ }, "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/221752070) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-221752070) ", "example": [ "XBTUSDTM" ] @@ -3919,7 +3919,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment.", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment.", "enum": [ "CN", "CO", @@ -3977,7 +3977,7 @@ }, "timeInForce": { "type": "string", - "description": "Optional for type is 'limit' order, [Time in force](doc://link/pages/338146) is a special strategy used during trading, default is GTC", + "description": "Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading, default is GTC", "enum": [ "GTC", "IOC" @@ -4076,7 +4076,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "tradeId": { "type": "string", @@ -4444,7 +4444,7 @@ }, "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "example": [ "XBTUSDTM" ] @@ -4527,7 +4527,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment.", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment.", "enum": [ "CN", "CO", @@ -4585,7 +4585,7 @@ }, "timeInForce": { "type": "string", - "description": "Optional for type is 'limit' order, [Time in force](doc://link/pages/338146) is a special strategy used during trading, default is GTC", + "description": "Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading, default is GTC", "enum": [ "GTC", "IOC" @@ -4833,7 +4833,7 @@ }, "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "example": [ "XBTUSDTM" ] @@ -4940,7 +4940,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment.", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment.", "enum": [ "CN", "CO", @@ -4998,7 +4998,7 @@ }, "timeInForce": { "type": "string", - "description": "Optional for type is 'limit' order, [Time in force](doc://link/pages/338146) is a special strategy used during trading, default is GTC", + "description": "Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading, default is GTC", "enum": [ "GTC", "IOC" @@ -5285,7 +5285,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "clientOid": { "type": "string" @@ -5590,7 +5590,7 @@ }, "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "type": { "type": "string", @@ -5853,7 +5853,7 @@ }, "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "type": { "type": "string", @@ -5917,7 +5917,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment.", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment.", "enum": [ "", "CN", @@ -6225,7 +6225,7 @@ }, "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "type": { "type": "string", @@ -6289,7 +6289,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment.", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment.", "enum": [ "", "CN", @@ -6600,7 +6600,7 @@ }, "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "type": { "type": "string", @@ -6873,7 +6873,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "maxBuyOpenSize": { "type": "integer", @@ -6949,7 +6949,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "level": { "type": "integer", @@ -7048,7 +7048,7 @@ }, "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "example": [ "XBTUSDTM", "XBTUSDM", @@ -7360,7 +7360,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "level": { "type": "integer", @@ -7424,7 +7424,7 @@ }, "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "example": [ "XBTUSDTM", "XBTUSDM", @@ -7790,7 +7790,7 @@ }, "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "settleCurrency": { "type": "string", @@ -7966,7 +7966,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "withdrawAmount": { "type": "string", @@ -8013,7 +8013,7 @@ }, "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "autoDeposit": { "type": "boolean", @@ -8226,7 +8226,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "margin": { "type": "number", @@ -8340,7 +8340,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "marginMode": { "type": "string", @@ -8425,7 +8425,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "leverage": { "type": "string", @@ -8522,7 +8522,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "leverage": { "type": "string", @@ -8565,7 +8565,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "marginMode": { "type": "string", @@ -8621,7 +8621,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "example": [ "XBTUSDTM", "XBTUSDCM", @@ -8812,7 +8812,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "fundingRate": { "type": "number", @@ -8954,7 +8954,7 @@ }, "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "timePoint": { "type": "integer", diff --git a/spec/rest/entry/openapi-margin.json b/spec/rest/entry/openapi-margin.json index eee328fa..33d7db7c 100644 --- a/spec/rest/entry/openapi-margin.json +++ b/spec/rest/entry/openapi-margin.json @@ -783,7 +783,7 @@ }, "fee": { "type": "string", - "description": "[Handling fees](doc://link/pages/5327739)" + "description": "[Handling fees](https://www.kucoin.com/docs-new/api-5327739)" }, "feeCurrency": { "type": "string", @@ -791,7 +791,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB , and DC", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC", "enum": [ "DC", "CO", @@ -1325,7 +1325,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB , and DC", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC", "enum": [ "DC", "CO", @@ -1762,7 +1762,7 @@ }, "fee": { "type": "string", - "description": "[Handling fees](doc://link/pages/5327739)" + "description": "[Handling fees](https://www.kucoin.com/docs-new/api-5327739)" }, "feeCurrency": { "type": "string", @@ -1770,7 +1770,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB , and DC", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC", "enum": [ "DC", "CO", @@ -2239,7 +2239,7 @@ }, "fee": { "type": "string", - "description": "[Handling fees](doc://link/pages/5327739)" + "description": "[Handling fees](https://www.kucoin.com/docs-new/api-5327739)" }, "feeRate": { "type": "string", @@ -2548,7 +2548,7 @@ }, "fee": { "type": "string", - "description": "[Handling fees](doc://link/pages/5327739)" + "description": "[Handling fees](https://www.kucoin.com/docs-new/api-5327739)" }, "feeCurrency": { "type": "string", @@ -2556,7 +2556,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB , and DC", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC", "enum": [ "DC", "CO", @@ -2900,7 +2900,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB , and DC", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC", "enum": [ "DC", "CO", @@ -2940,7 +2940,7 @@ }, "timeInForce": { "type": "string", - "description": "[Time in force](doc://link/pages/5176570) is a special strategy used during trading", + "description": "[Time in force](https://www.kucoin.com/docs-new/api-5176570) is a special strategy used during trading", "enum": [ "GTC", "GTT", @@ -2978,12 +2978,12 @@ }, "hidden": { "type": "boolean", - "description": "[Hidden order](doc://link/pages/338146) or not (not shown in order book)", + "description": "[Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book)", "default": false }, "iceberg": { "type": "boolean", - "description": "Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146)", + "description": "Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146)", "default": false }, "visibleSize": { @@ -3162,7 +3162,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB , and DC", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC", "enum": [ "DC", "CO", @@ -3202,7 +3202,7 @@ }, "timeInForce": { "type": "string", - "description": "[Time in force](doc://link/pages/5176570) is a special strategy used during trading", + "description": "[Time in force](https://www.kucoin.com/docs-new/api-5176570) is a special strategy used during trading", "enum": [ "GTC", "GTT", @@ -3240,12 +3240,12 @@ }, "hidden": { "type": "boolean", - "description": "[Hidden order](doc://link/pages/338146) or not (not shown in order book)", + "description": "[Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book)", "default": false }, "iceberg": { "type": "boolean", - "description": "Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146)", + "description": "Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146)", "default": false }, "visibleSize": { @@ -5451,7 +5451,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC", "enum": [ "DC", "CO", @@ -5491,7 +5491,7 @@ }, "timeInForce": { "type": "string", - "description": "[Time in force](doc://link/pages/338146) is a special strategy used during trading", + "description": "[Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading", "enum": [ "GTC", "GTT", @@ -5729,7 +5729,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/5176570) is divided into four strategies: CN, CO, CB , and DC", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/api-5176570) is divided into four strategies: CN, CO, CB , and DC", "enum": [ "DC", "CO", @@ -5769,7 +5769,7 @@ }, "timeInForce": { "type": "string", - "description": "[Time in force](doc://link/pages/5176570) is a special strategy used during trading", + "description": "[Time in force](https://www.kucoin.com/docs-new/api-5176570) is a special strategy used during trading", "enum": [ "GTC", "GTT", diff --git a/spec/rest/entry/openapi-spot.json b/spec/rest/entry/openapi-spot.json index e7f65bbd..52f241bd 100644 --- a/spec/rest/entry/openapi-spot.json +++ b/spec/rest/entry/openapi-spot.json @@ -6025,7 +6025,7 @@ }, "timeInForce": { "type": "string", - "description": "[Time in force](doc://link/pages/338146) is a special strategy used during trading", + "description": "[Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading", "enum": [ "GTC", "GTT", @@ -6086,7 +6086,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC", "enum": [ "DC", "CO", @@ -6128,12 +6128,12 @@ }, "hidden": { "type": "boolean", - "description": "[Hidden order](doc://link/pages/338146) or not (not shown in order book)", + "description": "[Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book)", "default": false }, "iceberg": { "type": "boolean", - "description": "Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146)", + "description": "Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146)", "default": false }, "visibleSize": { @@ -6324,7 +6324,7 @@ }, "timeInForce": { "type": "string", - "description": "[Time in force](doc://link/pages/338146) is a special strategy used during trading", + "description": "[Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading", "enum": [ "GTC", "GTT", @@ -6385,7 +6385,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC", "enum": [ "DC", "CO", @@ -6427,12 +6427,12 @@ }, "hidden": { "type": "boolean", - "description": "[Hidden order](doc://link/pages/338146) or not (not shown in order book)", + "description": "[Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book)", "default": false }, "iceberg": { "type": "boolean", - "description": "Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146)", + "description": "Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146)", "default": false }, "visibleSize": { @@ -6654,7 +6654,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC", "enum": [ "DC", "CO", @@ -6694,7 +6694,7 @@ }, "timeInForce": { "type": "string", - "description": "[Time in force](doc://link/pages/338146) is a special strategy used during trading", + "description": "[Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading", "enum": [ "GTC", "GTT", @@ -6732,12 +6732,12 @@ }, "hidden": { "type": "boolean", - "description": "[Hidden order](doc://link/pages/338146) or not (not shown in order book)", + "description": "[Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book)", "default": false }, "iceberg": { "type": "boolean", - "description": "Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146)", + "description": "Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146)", "default": false }, "visibleSize": { @@ -7223,7 +7223,7 @@ }, "fee": { "type": "string", - "description": "[Handling fees](doc://link/pages/5327739)" + "description": "[Handling fees](https://www.kucoin.com/docs-new/api-5327739)" }, "feeCurrency": { "type": "string", @@ -7231,7 +7231,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/5176570)", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/api-5176570)", "enum": [ "DC", "CO", @@ -7869,7 +7869,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC", "enum": [ "DC", "CO", @@ -7909,7 +7909,7 @@ }, "timeInForce": { "type": "string", - "description": "[Time in force](doc://link/pages/338146) is a special strategy used during trading", + "description": "[Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading", "enum": [ "GTC", "GTT", @@ -7947,12 +7947,12 @@ }, "hidden": { "type": "boolean", - "description": "[Hidden order](doc://link/pages/338146) or not (not shown in order book)", + "description": "[Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book)", "default": false }, "iceberg": { "type": "boolean", - "description": "Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146)", + "description": "Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146)", "default": false }, "visibleSize": { @@ -8416,7 +8416,7 @@ }, "fee": { "type": "string", - "description": "[Handling fees](doc://link/pages/5327739)" + "description": "[Handling fees](https://www.kucoin.com/docs-new/api-5327739)" }, "feeCurrency": { "type": "string", @@ -8424,7 +8424,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/5176570)", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/api-5176570)", "enum": [ "DC", "CO", @@ -9067,7 +9067,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC", "enum": [ "DC", "CO", @@ -9107,7 +9107,7 @@ }, "timeInForce": { "type": "string", - "description": "[Time in force](doc://link/pages/338146) is a special strategy used during trading. Required for limit orders.", + "description": "[Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading. Required for limit orders.", "enum": [ "GTC", "GTT", @@ -9145,12 +9145,12 @@ }, "hidden": { "type": "boolean", - "description": "[Hidden order](doc://link/pages/338146) or not (not shown in order book)", + "description": "[Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book)", "default": false }, "iceberg": { "type": "boolean", - "description": "Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146)", + "description": "Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146)", "default": false }, "visibleSize": { @@ -9406,7 +9406,7 @@ }, "fee": { "type": "string", - "description": "[Handling fees](doc://link/pages/5327739)" + "description": "[Handling fees](https://www.kucoin.com/docs-new/api-5327739)" }, "feeCurrency": { "type": "string", @@ -9414,7 +9414,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/5176570)", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/api-5176570)", "enum": [ "DC", "CO", @@ -10400,7 +10400,7 @@ }, "fee": { "type": "string", - "description": "[Handling fees](doc://link/pages/5327739)" + "description": "[Handling fees](https://www.kucoin.com/docs-new/api-5327739)" }, "feeRate": { "type": "string", @@ -10907,7 +10907,7 @@ }, "fee": { "type": "string", - "description": "[Handling fees](doc://link/pages/5327739)" + "description": "[Handling fees](https://www.kucoin.com/docs-new/api-5327739)" }, "feeCurrency": { "type": "string", @@ -10915,7 +10915,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/5176570)", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/api-5176570)", "enum": [ "DC", "CO", @@ -11733,7 +11733,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC", "enum": [ "DC", "CO", @@ -11773,7 +11773,7 @@ }, "timeInForce": { "type": "string", - "description": "[Time in force](doc://link/pages/338146) is a special strategy used during trading", + "description": "[Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading", "enum": [ "GTC", "GTT", @@ -11811,12 +11811,12 @@ }, "hidden": { "type": "boolean", - "description": "[Hidden order](doc://link/pages/338146) or not (not shown in order book)", + "description": "[Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book)", "default": false }, "iceberg": { "type": "boolean", - "description": "Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146)", + "description": "Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146)", "default": false }, "visibleSize": { @@ -13050,7 +13050,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC", "enum": [ "DC", "CO", @@ -13090,7 +13090,7 @@ }, "timeInForce": { "type": "string", - "description": "[Time in force](doc://link/pages/338146) is a special strategy used during trading", + "description": "[Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading", "enum": [ "GTC", "GTT", @@ -13890,7 +13890,7 @@ }, "fee": { "type": "string", - "description": "[Handling fees](doc://link/pages/5327739)" + "description": "[Handling fees](https://www.kucoin.com/docs-new/api-5327739)" }, "feeRate": { "type": "string", @@ -14290,7 +14290,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC", "enum": [ "DC", "CO", @@ -14330,7 +14330,7 @@ }, "timeInForce": { "type": "string", - "description": "[Time in force](doc://link/pages/338146) is a special strategy used during trading", + "description": "[Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading", "enum": [ "GTC", "GTT", @@ -14572,7 +14572,7 @@ }, "stp": { "type": "string", - "description": "[Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC", + "description": "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC", "enum": [ "DC", "CO", @@ -14612,7 +14612,7 @@ }, "timeInForce": { "type": "string", - "description": "[Time in force](doc://link/pages/338146) is a special strategy used during trading", + "description": "[Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading", "enum": [ "GTC", "GTT", diff --git a/spec/ws/openapi-futures-private.json b/spec/ws/openapi-futures-private.json index 624a36e0..39e24e48 100644 --- a/spec/ws/openapi-futures-private.json +++ b/spec/ws/openapi-futures-private.json @@ -273,7 +273,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/221752070) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-221752070) " }, "orderType": { "type": "string", @@ -439,7 +439,7 @@ "taker", "maker" ], - "description": "Actual transaction order type, If the counterparty order is an [Hidden/Iceberg Order](doc://link/pages/338146), even if it is a maker order, this param will be displayed as taker. For actual trading fee, please refer to the **feeType** ", + "description": "Actual transaction order type, If the counterparty order is an [Hidden/Iceberg Order](https://www.kucoin.com/docs-new/doc-338146), even if it is a maker order, this param will be displayed as taker. For actual trading fee, please refer to the **feeType** ", "x-api-enum": [ { "value": "taker", @@ -673,7 +673,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/221752070) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-221752070) ", "example": [ "XBTUSDTM", "XBTUSDM", @@ -1050,7 +1050,7 @@ }, "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/221752070) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-221752070) " }, "ts": { "type": "integer", @@ -1244,7 +1244,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/221752070) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-221752070) " }, "orderType": { "type": "string", @@ -1410,7 +1410,7 @@ "taker", "maker" ], - "description": "Actual transaction order type, If the counterparty order is an [Hidden/Iceberg Order](doc://link/pages/338146), even if it is a maker order, this param will be displayed as taker. For actual trading fee, please refer to the **feeType** ", + "description": "Actual transaction order type, If the counterparty order is an [Hidden/Iceberg Order](https://www.kucoin.com/docs-new/doc-338146), even if it is a maker order, this param will be displayed as taker. For actual trading fee, please refer to the **feeType** ", "x-api-enum": [ { "value": "taker", @@ -1530,7 +1530,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/221752070) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-221752070) ", "example": [ "XBTUSDTM", "XBTUSDM", diff --git a/spec/ws/openapi-futures-public.json b/spec/ws/openapi-futures-public.json index e83a0d3e..c4b4c816 100644 --- a/spec/ws/openapi-futures-public.json +++ b/spec/ws/openapi-futures-public.json @@ -697,7 +697,7 @@ "properties": { "symbol": { "type": "string", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " }, "candles": { "type": "array", diff --git a/spec/ws/openapi-spot-private.json b/spec/ws/openapi-spot-private.json index d1dc9b0c..e9df26ec 100644 --- a/spec/ws/openapi-spot-private.json +++ b/spec/ws/openapi-spot-private.json @@ -333,7 +333,7 @@ "taker", "maker" ], - "description": "Actual transaction order type, If the counterparty order is an [Hidden/Iceberg Order](doc://link/pages/338146), even if it is a maker order, this param will be displayed as taker. For actual trading fee, please refer to the **feeType** ", + "description": "Actual transaction order type, If the counterparty order is an [Hidden/Iceberg Order](https://www.kucoin.com/docs-new/doc-338146), even if it is a maker order, this param will be displayed as taker. For actual trading fee, please refer to the **feeType** ", "x-api-enum": [ { "value": "taker", @@ -616,7 +616,7 @@ "taker", "maker" ], - "description": "Actual transaction order type, If the counterparty order is an [Hidden/Iceberg Order](doc://link/pages/338146), even if it is a maker order, this param will be displayed as taker. For actual trading fee, please refer to the **feeType** ", + "description": "Actual transaction order type, If the counterparty order is an [Hidden/Iceberg Order](https://www.kucoin.com/docs-new/doc-338146), even if it is a maker order, this param will be displayed as taker. For actual trading fee, please refer to the **feeType** ", "x-api-enum": [ { "value": "taker", From 12209a602933d39b8cb7823c6f3c2318c7312044 Mon Sep 17 00:00:00 2001 From: "Isaac.Tang" Date: Mon, 30 Dec 2024 14:35:00 +0800 Subject: [PATCH 14/16] feat(docs): update docs link --- generator/preprocessor/api_meta.py | 4 +- .../account/types_get_apikey_info_resp.go | 2 +- .../types_add_sub_account_api_req.go | 4 +- .../types_add_sub_account_api_resp.go | 2 +- .../types_get_sub_account_api_list_data.go | 2 +- .../types_modify_sub_account_api_req.go | 4 +- .../types_modify_sub_account_api_resp.go | 2 +- .../types_add_sub_account_api_resp.go | 2 +- .../types_get_sub_account_api_data.go | 2 +- .../types_modify_sub_account_api_req.go | 4 +- .../types_modify_sub_account_api_resp.go | 2 +- .../types_get_current_funding_rate_req.go | 4 +- ...s_get_private_funding_history_data_list.go | 2 +- .../types_get_private_funding_history_req.go | 4 +- .../types_get_public_funding_history_data.go | 2 +- .../types_get_public_funding_history_req.go | 4 +- .../futuresprivate/types_all_order_event.go | 4 +- .../types_all_position_event.go | 2 +- .../futuresprivate/types_order_event.go | 4 +- .../futuresprivate/types_position_event.go | 2 +- .../futuresprivate/types_stop_orders_event.go | 2 +- .../futurespublic/types_klines_event.go | 2 +- .../market/types_get_full_order_book_req.go | 4 +- .../market/types_get_full_order_book_resp.go | 2 +- ...types_get_interest_rate_index_data_list.go | 2 +- .../types_get_interest_rate_index_req.go | 4 +- .../futures/market/types_get_klines_req.go | 4 +- .../market/types_get_mark_price_req.go | 4 +- .../market/types_get_mark_price_resp.go | 2 +- .../market/types_get_part_order_book_req.go | 4 +- .../market/types_get_part_order_book_resp.go | 2 +- .../types_get_premium_index_data_list.go | 2 +- .../market/types_get_premium_index_req.go | 4 +- .../types_get_spot_index_price_data_list.go | 2 +- .../market/types_get_spot_index_price_req.go | 4 +- .../futures/market/types_get_ticker_req.go | 4 +- .../futures/market/types_get_ticker_resp.go | 2 +- .../market/types_get_trade_history_req.go | 4 +- .../futures/order/types_add_order_req.go | 12 ++-- .../futures/order/types_add_order_test_req.go | 12 ++-- .../futures/order/types_add_tpsl_order_req.go | 12 ++-- .../order/types_batch_add_orders_data.go | 2 +- .../order/types_batch_add_orders_item.go | 12 ++-- ...es_batch_cancel_orders_client_oids_list.go | 4 +- .../order/types_cancel_all_orders_v1_req.go | 4 +- .../order/types_cancel_all_orders_v3_req.go | 4 +- .../order/types_cancel_all_stop_orders_req.go | 4 +- .../types_cancel_order_by_client_oid_req.go | 4 +- .../order/types_get_open_order_value_req.go | 4 +- .../types_get_order_by_client_oid_resp.go | 4 +- .../order/types_get_order_by_order_id_resp.go | 4 +- .../order/types_get_order_list_items.go | 2 +- .../futures/order/types_get_order_list_req.go | 4 +- .../types_get_recent_closed_orders_data.go | 2 +- .../types_get_recent_closed_orders_req.go | 4 +- .../types_get_recent_trade_history_data.go | 2 +- .../types_get_recent_trade_history_req.go | 4 +- .../order/types_get_stop_order_list_items.go | 2 +- .../order/types_get_stop_order_list_req.go | 4 +- .../order/types_get_trade_history_items.go | 2 +- .../order/types_get_trade_history_req.go | 4 +- .../types_add_isolated_margin_req.go | 4 +- .../types_add_isolated_margin_resp.go | 2 +- .../types_get_cross_margin_leverage_req.go | 4 +- .../types_get_cross_margin_leverage_resp.go | 2 +- ...pes_get_isolated_margin_risk_limit_data.go | 2 +- ...ypes_get_isolated_margin_risk_limit_req.go | 4 +- .../positions/types_get_margin_mode_req.go | 4 +- .../positions/types_get_margin_mode_resp.go | 2 +- .../positions/types_get_max_open_size_req.go | 4 +- .../positions/types_get_max_open_size_resp.go | 2 +- .../types_get_max_withdraw_margin_req.go | 4 +- .../types_get_position_details_req.go | 4 +- .../types_get_position_details_resp.go | 2 +- .../positions/types_get_position_list_data.go | 2 +- .../positions/types_get_position_list_req.go | 4 +- .../types_get_positions_history_items.go | 2 +- .../types_get_positions_history_req.go | 4 +- ...es_modify_isolated_margin_risk_limt_req.go | 4 +- .../types_modify_margin_leverage_req.go | 4 +- .../types_remove_isolated_margin_req.go | 4 +- .../positions/types_switch_margin_mode_req.go | 4 +- .../types_switch_margin_mode_resp.go | 2 +- .../margin/order/types_add_order_req.go | 16 ++--- .../margin/order/types_add_order_test_req.go | 16 ++--- .../order/types_add_order_test_v1_req.go | 8 +-- .../margin/order/types_add_order_v1_req.go | 8 +-- .../order/types_get_closed_orders_items.go | 4 +- .../order/types_get_open_orders_data.go | 2 +- .../types_get_order_by_client_oid_resp.go | 4 +- .../order/types_get_order_by_order_id_resp.go | 4 +- .../order/types_get_trade_history_items.go | 2 +- .../spot/market/types_get_all_symbols_req.go | 4 +- .../spot/order/types_add_order_old_req.go | 8 +-- .../spot/order/types_add_order_req.go | 16 ++--- .../spot/order/types_add_order_sync_req.go | 16 ++--- .../order/types_add_order_test_old_req.go | 8 +-- .../spot/order/types_add_order_test_req.go | 16 ++--- .../spot/order/types_add_stop_order_req.go | 16 ++--- .../types_batch_add_orders_old_order_list.go | 8 +-- .../types_batch_add_orders_order_list.go | 16 ++--- .../types_batch_add_orders_sync_order_list.go | 16 ++--- .../order/types_get_closed_orders_items.go | 4 +- .../spot/order/types_get_open_orders_data.go | 4 +- .../types_get_order_by_client_oid_resp.go | 4 +- .../order/types_get_order_by_order_id_resp.go | 4 +- .../order/types_get_trade_history_items.go | 2 +- .../types_get_trade_history_old_items.go | 2 +- .../spot/spotprivate/types_order_v1_event.go | 2 +- .../spot/spotprivate/types_order_v2_event.go | 2 +- .../collection-Abandoned Endpoints.json | 6 +- sdk/postman/collection-REST.json | 18 +++--- .../account/model_get_apikey_info_resp.py | 4 +- .../model_add_sub_account_api_req.py | 6 +- .../model_add_sub_account_api_resp.py | 6 +- .../model_get_sub_account_api_list_data.py | 6 +- .../model_modify_sub_account_api_req.py | 6 +- .../model_modify_sub_account_api_resp.py | 6 +- .../model_add_sub_account_api_resp.py | 5 +- .../model_get_sub_account_api_data.py | 5 +- .../model_modify_sub_account_api_req.py | 6 +- .../model_modify_sub_account_api_resp.py | 5 +- .../model_get_current_funding_rate_req.py | 6 +- ...l_get_private_funding_history_data_list.py | 4 +- .../model_get_private_funding_history_req.py | 6 +- .../model_get_public_funding_history_data.py | 4 +- .../model_get_public_funding_history_req.py | 6 +- .../futures_private/model_all_order_event.py | 8 +-- .../model_all_position_event.py | 4 +- .../futures_private/model_order_event.py | 8 +-- .../futures_private/model_position_event.py | 4 +- .../model_stop_orders_event.py | 4 +- .../futures_public/model_klines_event.py | 4 +- .../market/model_get_full_order_book_req.py | 6 +- .../market/model_get_full_order_book_resp.py | 4 +- ...model_get_interest_rate_index_data_list.py | 4 +- .../model_get_interest_rate_index_req.py | 6 +- .../futures/market/model_get_klines_req.py | 6 +- .../market/model_get_mark_price_req.py | 6 +- .../market/model_get_mark_price_resp.py | 4 +- .../market/model_get_part_order_book_req.py | 6 +- .../market/model_get_part_order_book_resp.py | 4 +- .../model_get_premium_index_data_list.py | 4 +- .../market/model_get_premium_index_req.py | 6 +- .../model_get_spot_index_price_data_list.py | 4 +- .../market/model_get_spot_index_price_req.py | 6 +- .../futures/market/model_get_ticker_req.py | 6 +- .../futures/market/model_get_ticker_resp.py | 4 +- .../market/model_get_trade_history_req.py | 6 +- .../futures/order/model_add_order_req.py | 18 +++--- .../futures/order/model_add_order_test_req.py | 18 +++--- .../futures/order/model_add_tpsl_order_req.py | 18 +++--- .../order/model_batch_add_orders_data.py | 4 +- .../order/model_batch_add_orders_item.py | 18 +++--- ...el_batch_cancel_orders_client_oids_list.py | 6 +- .../order/model_cancel_all_orders_v1_req.py | 6 +- .../order/model_cancel_all_orders_v3_req.py | 6 +- .../order/model_cancel_all_stop_orders_req.py | 6 +- .../model_cancel_order_by_client_oid_req.py | 6 +- .../order/model_get_open_order_value_req.py | 6 +- .../model_get_order_by_client_oid_resp.py | 8 +-- .../order/model_get_order_by_order_id_resp.py | 8 +-- .../order/model_get_order_list_items.py | 4 +- .../futures/order/model_get_order_list_req.py | 6 +- .../model_get_recent_closed_orders_data.py | 4 +- .../model_get_recent_closed_orders_req.py | 6 +- .../model_get_recent_trade_history_data.py | 4 +- .../model_get_recent_trade_history_req.py | 6 +- .../order/model_get_stop_order_list_items.py | 4 +- .../order/model_get_stop_order_list_req.py | 6 +- .../order/model_get_trade_history_items.py | 4 +- .../order/model_get_trade_history_req.py | 6 +- .../model_add_isolated_margin_req.py | 6 +- .../model_add_isolated_margin_resp.py | 4 +- .../model_get_cross_margin_leverage_req.py | 6 +- .../model_get_cross_margin_leverage_resp.py | 4 +- ...del_get_isolated_margin_risk_limit_data.py | 4 +- ...odel_get_isolated_margin_risk_limit_req.py | 6 +- .../positions/model_get_margin_mode_req.py | 6 +- .../positions/model_get_margin_mode_resp.py | 4 +- .../positions/model_get_max_open_size_req.py | 6 +- .../positions/model_get_max_open_size_resp.py | 4 +- .../model_get_max_withdraw_margin_req.py | 6 +- .../model_get_position_details_req.py | 6 +- .../model_get_position_details_resp.py | 4 +- .../positions/model_get_position_list_data.py | 4 +- .../positions/model_get_position_list_req.py | 6 +- .../model_get_positions_history_items.py | 4 +- .../model_get_positions_history_req.py | 6 +- ...el_modify_isolated_margin_risk_limt_req.py | 6 +- .../model_modify_margin_leverage_req.py | 6 +- .../model_remove_isolated_margin_req.py | 6 +- .../positions/model_switch_margin_mode_req.py | 6 +- .../model_switch_margin_mode_resp.py | 4 +- .../margin/order/model_add_order_req.py | 24 ++++---- .../margin/order/model_add_order_test_req.py | 24 ++++---- .../order/model_add_order_test_v1_req.py | 12 ++-- .../margin/order/model_add_order_v1_req.py | 12 ++-- .../order/model_get_closed_orders_items.py | 10 ++-- .../order/model_get_open_orders_data.py | 4 +- .../model_get_order_by_client_oid_resp.py | 10 ++-- .../order/model_get_order_by_order_id_resp.py | 10 ++-- .../order/model_get_trade_history_items.py | 6 +- .../spot/market/model_get_all_symbols_req.py | 7 ++- .../spot/order/model_add_order_old_req.py | 12 ++-- .../spot/order/model_add_order_req.py | 24 ++++---- .../spot/order/model_add_order_sync_req.py | 24 ++++---- .../order/model_add_order_test_old_req.py | 12 ++-- .../spot/order/model_add_order_test_req.py | 24 ++++---- .../spot/order/model_add_stop_order_req.py | 24 ++++---- .../model_batch_add_orders_old_order_list.py | 12 ++-- .../model_batch_add_orders_order_list.py | 24 ++++---- .../model_batch_add_orders_sync_order_list.py | 24 ++++---- .../order/model_get_closed_orders_items.py | 11 ++-- .../spot/order/model_get_open_orders_data.py | 11 ++-- .../model_get_order_by_client_oid_resp.py | 11 ++-- .../order/model_get_order_by_order_id_resp.py | 11 ++-- .../order/model_get_trade_history_items.py | 6 +- .../model_get_trade_history_old_items.py | 6 +- .../spot/spot_private/model_order_v1_event.py | 4 +- .../spot/spot_private/model_order_v2_event.py | 4 +- .../rest/api/openapi-futures-fundingfees.json | 6 +- spec/rest/api/openapi-futures-market.json | 18 +++--- spec/rest/api/openapi-futures-order.json | 20 +++---- spec/rest/api/openapi-futures-positions.json | 16 ++--- spec/rest/api/openapi-spot-market.json | 2 +- spec/rest/entry/openapi-futures.json | 60 +++++++++---------- spec/rest/entry/openapi-spot.json | 2 +- 228 files changed, 769 insertions(+), 735 deletions(-) diff --git a/generator/preprocessor/api_meta.py b/generator/preprocessor/api_meta.py index 960efbf7..2c7721aa 100644 --- a/generator/preprocessor/api_meta.py +++ b/generator/preprocessor/api_meta.py @@ -223,7 +223,7 @@ def generate_path_operation(api): result = { 'name': path_para['name'], 'in': 'path', - 'description': path_para['description'], + 'description': ApiMetaUtil.escape_url(path_para['description'], ApiMetaUtil.doc_id), 'required': path_para['required'], 'schema': { 'type': path_para['type'], @@ -253,7 +253,7 @@ def generate_path_operation(api): result = { 'name': query_para['name'], 'in': 'query', - 'description': query_para['description'], + 'description': ApiMetaUtil.escape_url(query_para['description'], ApiMetaUtil.doc_id), 'required': query_para['required'], 'schema': schema, } diff --git a/sdk/golang/pkg/generate/account/account/types_get_apikey_info_resp.go b/sdk/golang/pkg/generate/account/account/types_get_apikey_info_resp.go index a93dca83..2c3c84a7 100644 --- a/sdk/golang/pkg/generate/account/account/types_get_apikey_info_resp.go +++ b/sdk/golang/pkg/generate/account/account/types_get_apikey_info_resp.go @@ -16,7 +16,7 @@ type GetApikeyInfoResp struct { ApiKey string `json:"apiKey,omitempty"` // API Version ApiVersion int32 `json:"apiVersion,omitempty"` - // [Permissions](doc://link/pages/338144), possible values: General, Spot, Margin, Futures, InnerTransfer, Transfer, Earn + // [Permissions](https://www.kucoin.com/docs-new/doc-338144), possible values: General, Spot, Margin, Futures, InnerTransfer, Transfer, Earn Permission string `json:"permission,omitempty"` // IP whitelist IpWhitelist *string `json:"ipWhitelist,omitempty"` diff --git a/sdk/golang/pkg/generate/account/subaccount/types_add_sub_account_api_req.go b/sdk/golang/pkg/generate/account/subaccount/types_add_sub_account_api_req.go index 76626589..9b1aa44a 100644 --- a/sdk/golang/pkg/generate/account/subaccount/types_add_sub_account_api_req.go +++ b/sdk/golang/pkg/generate/account/subaccount/types_add_sub_account_api_req.go @@ -8,7 +8,7 @@ type AddSubAccountApiReq struct { Passphrase string `json:"passphrase,omitempty"` // Remarks(1~24 characters) Remark string `json:"remark,omitempty"` - // [Permissions](doc://link/pages/338144)(Only Generalใ€Spotใ€Futuresใ€Marginใ€InnerTransfer(Flex Transfer) permissions can be set, such as \"General, Trade\". The default is \"General\") + // [Permissions](https://www.kucoin.com/docs-new/doc-338144)(Only Generalใ€Spotใ€Futuresใ€Marginใ€InnerTransfer(Flex Transfer) permissions can be set, such as \"General, Trade\". The default is \"General\") Permission *string `json:"permission,omitempty"` // IP whitelist(You may add up to 20 IPs. Use a halfwidth comma to each IP) IpWhitelist *string `json:"ipWhitelist,omitempty"` @@ -74,7 +74,7 @@ func (builder *AddSubAccountApiReqBuilder) SetRemark(value string) *AddSubAccoun return builder } -// [Permissions](doc://link/pages/338144)(Only Generalใ€Spotใ€Futuresใ€Marginใ€InnerTransfer(Flex Transfer) permissions can be set, such as \"General, Trade\". The default is \"General\") +// [Permissions](https://www.kucoin.com/docs-new/doc-338144)(Only Generalใ€Spotใ€Futuresใ€Marginใ€InnerTransfer(Flex Transfer) permissions can be set, such as \"General, Trade\". The default is \"General\") func (builder *AddSubAccountApiReqBuilder) SetPermission(value string) *AddSubAccountApiReqBuilder { builder.obj.Permission = &value return builder diff --git a/sdk/golang/pkg/generate/account/subaccount/types_add_sub_account_api_resp.go b/sdk/golang/pkg/generate/account/subaccount/types_add_sub_account_api_resp.go index 6c50a6e3..89e707d3 100644 --- a/sdk/golang/pkg/generate/account/subaccount/types_add_sub_account_api_resp.go +++ b/sdk/golang/pkg/generate/account/subaccount/types_add_sub_account_api_resp.go @@ -22,7 +22,7 @@ type AddSubAccountApiResp struct { ApiVersion int32 `json:"apiVersion,omitempty"` // Password Passphrase string `json:"passphrase,omitempty"` - // [Permissions](doc://link/pages/338144) + // [Permissions](https://www.kucoin.com/docs-new/doc-338144) Permission string `json:"permission,omitempty"` // IP whitelist IpWhitelist *string `json:"ipWhitelist,omitempty"` diff --git a/sdk/golang/pkg/generate/account/subaccount/types_get_sub_account_api_list_data.go b/sdk/golang/pkg/generate/account/subaccount/types_get_sub_account_api_list_data.go index 1df53d5a..89846bd2 100644 --- a/sdk/golang/pkg/generate/account/subaccount/types_get_sub_account_api_list_data.go +++ b/sdk/golang/pkg/generate/account/subaccount/types_get_sub_account_api_list_data.go @@ -12,7 +12,7 @@ type GetSubAccountApiListData struct { ApiKey *string `json:"apiKey,omitempty"` // API Version ApiVersion *int32 `json:"apiVersion,omitempty"` - // [Permissions](doc://link/pages/338144) + // [Permissions](https://www.kucoin.com/docs-new/doc-338144) Permission *string `json:"permission,omitempty"` // IP whitelist IpWhitelist *string `json:"ipWhitelist,omitempty"` diff --git a/sdk/golang/pkg/generate/account/subaccount/types_modify_sub_account_api_req.go b/sdk/golang/pkg/generate/account/subaccount/types_modify_sub_account_api_req.go index 721e50ee..10e136c2 100644 --- a/sdk/golang/pkg/generate/account/subaccount/types_modify_sub_account_api_req.go +++ b/sdk/golang/pkg/generate/account/subaccount/types_modify_sub_account_api_req.go @@ -6,7 +6,7 @@ package subaccount type ModifySubAccountApiReq struct { // Password(Must contain 7-32 characters. Cannot contain any spaces.) Passphrase string `json:"passphrase,omitempty"` - // [Permissions](doc://link/pages/338144)(Only Generalใ€Spotใ€Futuresใ€Marginใ€InnerTransfer(Flex Transfer) permissions can be set, such as \"General, Trade\". The default is \"General\") + // [Permissions](https://www.kucoin.com/docs-new/doc-338144)(Only Generalใ€Spotใ€Futuresใ€Marginใ€InnerTransfer(Flex Transfer) permissions can be set, such as \"General, Trade\". The default is \"General\") Permission *string `json:"permission,omitempty"` // IP whitelist(You may add up to 20 IPs. Use a halfwidth comma to each IP) IpWhitelist *string `json:"ipWhitelist,omitempty"` @@ -68,7 +68,7 @@ func (builder *ModifySubAccountApiReqBuilder) SetPassphrase(value string) *Modif return builder } -// [Permissions](doc://link/pages/338144)(Only Generalใ€Spotใ€Futuresใ€Marginใ€InnerTransfer(Flex Transfer) permissions can be set, such as \"General, Trade\". The default is \"General\") +// [Permissions](https://www.kucoin.com/docs-new/doc-338144)(Only Generalใ€Spotใ€Futuresใ€Marginใ€InnerTransfer(Flex Transfer) permissions can be set, such as \"General, Trade\". The default is \"General\") func (builder *ModifySubAccountApiReqBuilder) SetPermission(value string) *ModifySubAccountApiReqBuilder { builder.obj.Permission = &value return builder diff --git a/sdk/golang/pkg/generate/account/subaccount/types_modify_sub_account_api_resp.go b/sdk/golang/pkg/generate/account/subaccount/types_modify_sub_account_api_resp.go index 3195c2d5..d2360cab 100644 --- a/sdk/golang/pkg/generate/account/subaccount/types_modify_sub_account_api_resp.go +++ b/sdk/golang/pkg/generate/account/subaccount/types_modify_sub_account_api_resp.go @@ -14,7 +14,7 @@ type ModifySubAccountApiResp struct { SubName string `json:"subName,omitempty"` // API Key ApiKey string `json:"apiKey,omitempty"` - // [Permissions](doc://link/pages/338144) + // [Permissions](https://www.kucoin.com/docs-new/doc-338144) Permission string `json:"permission,omitempty"` // IP whitelist IpWhitelist *string `json:"ipWhitelist,omitempty"` diff --git a/sdk/golang/pkg/generate/broker/ndbroker/types_add_sub_account_api_resp.go b/sdk/golang/pkg/generate/broker/ndbroker/types_add_sub_account_api_resp.go index 1aa3afde..db7c5cb8 100644 --- a/sdk/golang/pkg/generate/broker/ndbroker/types_add_sub_account_api_resp.go +++ b/sdk/golang/pkg/generate/broker/ndbroker/types_add_sub_account_api_resp.go @@ -20,7 +20,7 @@ type AddSubAccountApiResp struct { SecretKey string `json:"secretKey,omitempty"` // apiVersion ApiVersion int32 `json:"apiVersion,omitempty"` - // [Permissions](doc://link/pages/338144) group list + // [Permissions](https://www.kucoin.com/docs-new/doc-338144) group list Permissions []string `json:"permissions,omitempty"` // IP whitelist list IpWhitelist []string `json:"ipWhitelist,omitempty"` diff --git a/sdk/golang/pkg/generate/broker/ndbroker/types_get_sub_account_api_data.go b/sdk/golang/pkg/generate/broker/ndbroker/types_get_sub_account_api_data.go index b58722c4..a011f94a 100644 --- a/sdk/golang/pkg/generate/broker/ndbroker/types_get_sub_account_api_data.go +++ b/sdk/golang/pkg/generate/broker/ndbroker/types_get_sub_account_api_data.go @@ -12,7 +12,7 @@ type GetSubAccountAPIData struct { ApiKey string `json:"apiKey,omitempty"` // apiVersion ApiVersion int32 `json:"apiVersion,omitempty"` - // [Permissions](doc://link/pages/338144) group list + // [Permissions](https://www.kucoin.com/docs-new/doc-338144) group list Permissions []string `json:"permissions,omitempty"` // IP whitelist list IpWhitelist []string `json:"ipWhitelist,omitempty"` diff --git a/sdk/golang/pkg/generate/broker/ndbroker/types_modify_sub_account_api_req.go b/sdk/golang/pkg/generate/broker/ndbroker/types_modify_sub_account_api_req.go index 938fcc84..eec23e65 100644 --- a/sdk/golang/pkg/generate/broker/ndbroker/types_modify_sub_account_api_req.go +++ b/sdk/golang/pkg/generate/broker/ndbroker/types_modify_sub_account_api_req.go @@ -8,7 +8,7 @@ type ModifySubAccountApiReq struct { Uid string `json:"uid,omitempty"` // IP whitelist list, supports up to 20 IPs IpWhitelist []string `json:"ipWhitelist,omitempty"` - // [Permissions](doc://link/pages/338144) group list(Only Generalใ€Spotใ€Futures permissions can be set, such as \"General, Trade\". ) + // [Permissions](https://www.kucoin.com/docs-new/doc-338144) group list(Only Generalใ€Spotใ€Futures permissions can be set, such as \"General, Trade\". ) Permissions []string `json:"permissions,omitempty"` // apikey remarks (length 4~32) Label string `json:"label,omitempty"` @@ -65,7 +65,7 @@ func (builder *ModifySubAccountApiReqBuilder) SetIpWhitelist(value []string) *Mo return builder } -// [Permissions](doc://link/pages/338144) group list(Only Generalใ€Spotใ€Futures permissions can be set, such as \"General, Trade\". ) +// [Permissions](https://www.kucoin.com/docs-new/doc-338144) group list(Only Generalใ€Spotใ€Futures permissions can be set, such as \"General, Trade\". ) func (builder *ModifySubAccountApiReqBuilder) SetPermissions(value []string) *ModifySubAccountApiReqBuilder { builder.obj.Permissions = value return builder diff --git a/sdk/golang/pkg/generate/broker/ndbroker/types_modify_sub_account_api_resp.go b/sdk/golang/pkg/generate/broker/ndbroker/types_modify_sub_account_api_resp.go index f554b399..e5c396d5 100644 --- a/sdk/golang/pkg/generate/broker/ndbroker/types_modify_sub_account_api_resp.go +++ b/sdk/golang/pkg/generate/broker/ndbroker/types_modify_sub_account_api_resp.go @@ -18,7 +18,7 @@ type ModifySubAccountApiResp struct { ApiKey string `json:"apiKey,omitempty"` // apiVersion ApiVersion int32 `json:"apiVersion,omitempty"` - // [Permissions](doc://link/pages/338144) group list + // [Permissions](https://www.kucoin.com/docs-new/doc-338144) group list Permissions []string `json:"permissions,omitempty"` // IP whitelist list IpWhitelist []string `json:"ipWhitelist,omitempty"` diff --git a/sdk/golang/pkg/generate/futures/fundingfees/types_get_current_funding_rate_req.go b/sdk/golang/pkg/generate/futures/fundingfees/types_get_current_funding_rate_req.go index c19444e0..980f38a9 100644 --- a/sdk/golang/pkg/generate/futures/fundingfees/types_get_current_funding_rate_req.go +++ b/sdk/golang/pkg/generate/futures/fundingfees/types_get_current_funding_rate_req.go @@ -4,7 +4,7 @@ package fundingfees // GetCurrentFundingRateReq struct for GetCurrentFundingRateReq type GetCurrentFundingRateReq struct { - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol *string `json:"symbol,omitempty" path:"symbol" url:"-"` } @@ -36,7 +36,7 @@ func NewGetCurrentFundingRateReqBuilder() *GetCurrentFundingRateReqBuilder { return &GetCurrentFundingRateReqBuilder{obj: NewGetCurrentFundingRateReqWithDefaults()} } -// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) +// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) func (builder *GetCurrentFundingRateReqBuilder) SetSymbol(value string) *GetCurrentFundingRateReqBuilder { builder.obj.Symbol = &value return builder diff --git a/sdk/golang/pkg/generate/futures/fundingfees/types_get_private_funding_history_data_list.go b/sdk/golang/pkg/generate/futures/fundingfees/types_get_private_funding_history_data_list.go index 2ddc3710..a86ed0ba 100644 --- a/sdk/golang/pkg/generate/futures/fundingfees/types_get_private_funding_history_data_list.go +++ b/sdk/golang/pkg/generate/futures/fundingfees/types_get_private_funding_history_data_list.go @@ -6,7 +6,7 @@ package fundingfees type GetPrivateFundingHistoryDataList struct { // id Id int64 `json:"id,omitempty"` - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol string `json:"symbol,omitempty"` // Time point (milisecond) TimePoint int64 `json:"timePoint,omitempty"` diff --git a/sdk/golang/pkg/generate/futures/fundingfees/types_get_private_funding_history_req.go b/sdk/golang/pkg/generate/futures/fundingfees/types_get_private_funding_history_req.go index af00fb56..1e8e9401 100644 --- a/sdk/golang/pkg/generate/futures/fundingfees/types_get_private_funding_history_req.go +++ b/sdk/golang/pkg/generate/futures/fundingfees/types_get_private_funding_history_req.go @@ -4,7 +4,7 @@ package fundingfees // GetPrivateFundingHistoryReq struct for GetPrivateFundingHistoryReq type GetPrivateFundingHistoryReq struct { - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol *string `json:"symbol,omitempty" url:"symbol,omitempty"` // Begin time (milisecond) From *int64 `json:"from,omitempty" url:"from,omitempty"` @@ -54,7 +54,7 @@ func NewGetPrivateFundingHistoryReqBuilder() *GetPrivateFundingHistoryReqBuilder return &GetPrivateFundingHistoryReqBuilder{obj: NewGetPrivateFundingHistoryReqWithDefaults()} } -// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) +// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) func (builder *GetPrivateFundingHistoryReqBuilder) SetSymbol(value string) *GetPrivateFundingHistoryReqBuilder { builder.obj.Symbol = &value return builder diff --git a/sdk/golang/pkg/generate/futures/fundingfees/types_get_public_funding_history_data.go b/sdk/golang/pkg/generate/futures/fundingfees/types_get_public_funding_history_data.go index 7a3905c9..4deba88b 100644 --- a/sdk/golang/pkg/generate/futures/fundingfees/types_get_public_funding_history_data.go +++ b/sdk/golang/pkg/generate/futures/fundingfees/types_get_public_funding_history_data.go @@ -4,7 +4,7 @@ package fundingfees // GetPublicFundingHistoryData struct for GetPublicFundingHistoryData type GetPublicFundingHistoryData struct { - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol string `json:"symbol,omitempty"` // Funding rate FundingRate float32 `json:"fundingRate,omitempty"` diff --git a/sdk/golang/pkg/generate/futures/fundingfees/types_get_public_funding_history_req.go b/sdk/golang/pkg/generate/futures/fundingfees/types_get_public_funding_history_req.go index a8fb5ed8..68eb7be3 100644 --- a/sdk/golang/pkg/generate/futures/fundingfees/types_get_public_funding_history_req.go +++ b/sdk/golang/pkg/generate/futures/fundingfees/types_get_public_funding_history_req.go @@ -4,7 +4,7 @@ package fundingfees // GetPublicFundingHistoryReq struct for GetPublicFundingHistoryReq type GetPublicFundingHistoryReq struct { - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol *string `json:"symbol,omitempty" url:"symbol,omitempty"` // Begin time (milisecond) From *int64 `json:"from,omitempty" url:"from,omitempty"` @@ -42,7 +42,7 @@ func NewGetPublicFundingHistoryReqBuilder() *GetPublicFundingHistoryReqBuilder { return &GetPublicFundingHistoryReqBuilder{obj: NewGetPublicFundingHistoryReqWithDefaults()} } -// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) +// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) func (builder *GetPublicFundingHistoryReqBuilder) SetSymbol(value string) *GetPublicFundingHistoryReqBuilder { builder.obj.Symbol = &value return builder diff --git a/sdk/golang/pkg/generate/futures/futuresprivate/types_all_order_event.go b/sdk/golang/pkg/generate/futures/futuresprivate/types_all_order_event.go index 31350e1f..5ccc00bf 100644 --- a/sdk/golang/pkg/generate/futures/futuresprivate/types_all_order_event.go +++ b/sdk/golang/pkg/generate/futures/futuresprivate/types_all_order_event.go @@ -11,7 +11,7 @@ import ( type AllOrderEvent struct { // common response CommonResponse *types.WsMessage - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/221752070) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-221752070) Symbol string `json:"symbol,omitempty"` // User-specified order type OrderType *string `json:"orderType,omitempty"` @@ -39,7 +39,7 @@ type AllOrderEvent struct { Status string `json:"status,omitempty"` // Push time(Nanosecond) Ts int64 `json:"ts,omitempty"` - // Actual transaction order type, If the counterparty order is an [Hidden/Iceberg Order](doc://link/pages/338146), even if it is a maker order, this param will be displayed as taker. For actual trading fee, please refer to the **feeType** + // Actual transaction order type, If the counterparty order is an [Hidden/Iceberg Order](https://www.kucoin.com/docs-new/doc-338146), even if it is a maker order, this param will be displayed as taker. For actual trading fee, please refer to the **feeType** Liquidity *string `json:"liquidity,omitempty"` // Actual Fee Type FeeType *string `json:"feeType,omitempty"` diff --git a/sdk/golang/pkg/generate/futures/futuresprivate/types_all_position_event.go b/sdk/golang/pkg/generate/futures/futuresprivate/types_all_position_event.go index e315e7f2..0b68ec0d 100644 --- a/sdk/golang/pkg/generate/futures/futuresprivate/types_all_position_event.go +++ b/sdk/golang/pkg/generate/futures/futuresprivate/types_all_position_event.go @@ -11,7 +11,7 @@ import ( type AllPositionEvent struct { // common response CommonResponse *types.WsMessage - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/221752070) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-221752070) Symbol string `json:"symbol,omitempty"` // Whether it is cross margin. CrossMode bool `json:"crossMode,omitempty"` diff --git a/sdk/golang/pkg/generate/futures/futuresprivate/types_order_event.go b/sdk/golang/pkg/generate/futures/futuresprivate/types_order_event.go index 8109cd5f..a7aea56b 100644 --- a/sdk/golang/pkg/generate/futures/futuresprivate/types_order_event.go +++ b/sdk/golang/pkg/generate/futures/futuresprivate/types_order_event.go @@ -11,7 +11,7 @@ import ( type OrderEvent struct { // common response CommonResponse *types.WsMessage - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/221752070) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-221752070) Symbol string `json:"symbol,omitempty"` // User-specified order type OrderType *string `json:"orderType,omitempty"` @@ -39,7 +39,7 @@ type OrderEvent struct { Status string `json:"status,omitempty"` // Push time(Nanosecond) Ts int64 `json:"ts,omitempty"` - // Actual transaction order type, If the counterparty order is an [Hidden/Iceberg Order](doc://link/pages/338146), even if it is a maker order, this param will be displayed as taker. For actual trading fee, please refer to the **feeType** + // Actual transaction order type, If the counterparty order is an [Hidden/Iceberg Order](https://www.kucoin.com/docs-new/doc-338146), even if it is a maker order, this param will be displayed as taker. For actual trading fee, please refer to the **feeType** Liquidity *string `json:"liquidity,omitempty"` // Actual Fee Type FeeType *string `json:"feeType,omitempty"` diff --git a/sdk/golang/pkg/generate/futures/futuresprivate/types_position_event.go b/sdk/golang/pkg/generate/futures/futuresprivate/types_position_event.go index 5d80558c..e6dff424 100644 --- a/sdk/golang/pkg/generate/futures/futuresprivate/types_position_event.go +++ b/sdk/golang/pkg/generate/futures/futuresprivate/types_position_event.go @@ -11,7 +11,7 @@ import ( type PositionEvent struct { // common response CommonResponse *types.WsMessage - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/221752070) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-221752070) Symbol string `json:"symbol,omitempty"` // Whether it is cross margin. CrossMode bool `json:"crossMode,omitempty"` diff --git a/sdk/golang/pkg/generate/futures/futuresprivate/types_stop_orders_event.go b/sdk/golang/pkg/generate/futures/futuresprivate/types_stop_orders_event.go index 21e25a19..20a1a0bc 100644 --- a/sdk/golang/pkg/generate/futures/futuresprivate/types_stop_orders_event.go +++ b/sdk/golang/pkg/generate/futures/futuresprivate/types_stop_orders_event.go @@ -29,7 +29,7 @@ type StopOrdersEvent struct { // Stop Price StopPrice string `json:"stopPrice,omitempty"` StopPriceType string `json:"stopPriceType,omitempty"` - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/221752070) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-221752070) Symbol string `json:"symbol,omitempty"` Ts int64 `json:"ts,omitempty"` // Order Type diff --git a/sdk/golang/pkg/generate/futures/futurespublic/types_klines_event.go b/sdk/golang/pkg/generate/futures/futurespublic/types_klines_event.go index 29d7a9f5..29d48804 100644 --- a/sdk/golang/pkg/generate/futures/futurespublic/types_klines_event.go +++ b/sdk/golang/pkg/generate/futures/futurespublic/types_klines_event.go @@ -11,7 +11,7 @@ import ( type KlinesEvent struct { // common response CommonResponse *types.WsMessage - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol string `json:"symbol,omitempty"` // Start time, open price, close price, high price, low price, Transaction volume(This value is incorrect, please do not use it, we will fix it in subsequent versions), Transaction amount Candles []string `json:"candles,omitempty"` diff --git a/sdk/golang/pkg/generate/futures/market/types_get_full_order_book_req.go b/sdk/golang/pkg/generate/futures/market/types_get_full_order_book_req.go index 0f01e368..8168794e 100644 --- a/sdk/golang/pkg/generate/futures/market/types_get_full_order_book_req.go +++ b/sdk/golang/pkg/generate/futures/market/types_get_full_order_book_req.go @@ -4,7 +4,7 @@ package market // GetFullOrderBookReq struct for GetFullOrderBookReq type GetFullOrderBookReq struct { - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol *string `json:"symbol,omitempty" url:"symbol,omitempty"` } @@ -36,7 +36,7 @@ func NewGetFullOrderBookReqBuilder() *GetFullOrderBookReqBuilder { return &GetFullOrderBookReqBuilder{obj: NewGetFullOrderBookReqWithDefaults()} } -// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) +// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) func (builder *GetFullOrderBookReqBuilder) SetSymbol(value string) *GetFullOrderBookReqBuilder { builder.obj.Symbol = &value return builder diff --git a/sdk/golang/pkg/generate/futures/market/types_get_full_order_book_resp.go b/sdk/golang/pkg/generate/futures/market/types_get_full_order_book_resp.go index 846bc8a1..fbf33053 100644 --- a/sdk/golang/pkg/generate/futures/market/types_get_full_order_book_resp.go +++ b/sdk/golang/pkg/generate/futures/market/types_get_full_order_book_resp.go @@ -12,7 +12,7 @@ type GetFullOrderBookResp struct { CommonResponse *types.RestResponse // Sequence number Sequence int64 `json:"sequence,omitempty"` - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol string `json:"symbol,omitempty"` // bids, from high to low Bids [][]float32 `json:"bids,omitempty"` diff --git a/sdk/golang/pkg/generate/futures/market/types_get_interest_rate_index_data_list.go b/sdk/golang/pkg/generate/futures/market/types_get_interest_rate_index_data_list.go index d8967f59..c3fbb480 100644 --- a/sdk/golang/pkg/generate/futures/market/types_get_interest_rate_index_data_list.go +++ b/sdk/golang/pkg/generate/futures/market/types_get_interest_rate_index_data_list.go @@ -4,7 +4,7 @@ package market // GetInterestRateIndexDataList struct for GetInterestRateIndexDataList type GetInterestRateIndexDataList struct { - // Symbol of the contract, Please refer to [Get Symbol endpoint: fundingBaseSymbol, fundingQuoteSymbol, fundingBaseSymbol1M, fundingQuoteSymbol1M](doc://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: fundingBaseSymbol, fundingQuoteSymbol, fundingBaseSymbol1M, fundingQuoteSymbol1M](https://www.kucoin.com/docs-new/api-3470220) Symbol string `json:"symbol,omitempty"` // Granularity (milisecond) Granularity int32 `json:"granularity,omitempty"` diff --git a/sdk/golang/pkg/generate/futures/market/types_get_interest_rate_index_req.go b/sdk/golang/pkg/generate/futures/market/types_get_interest_rate_index_req.go index 4ef609a8..bf70033b 100644 --- a/sdk/golang/pkg/generate/futures/market/types_get_interest_rate_index_req.go +++ b/sdk/golang/pkg/generate/futures/market/types_get_interest_rate_index_req.go @@ -4,7 +4,7 @@ package market // GetInterestRateIndexReq struct for GetInterestRateIndexReq type GetInterestRateIndexReq struct { - // Symbol of the contract, Please refer to [Get Symbol endpoint: fundingBaseSymbol, fundingQuoteSymbol, fundingBaseSymbol1M, fundingQuoteSymbol1M](apidog://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: fundingBaseSymbol, fundingQuoteSymbol, fundingBaseSymbol1M, fundingQuoteSymbol1M](https://www.kucoin.com/docs-new/api-3470220) Symbol *string `json:"symbol,omitempty" url:"symbol,omitempty"` // Start time (milisecond) StartAt *int64 `json:"startAt,omitempty" url:"startAt,omitempty"` @@ -66,7 +66,7 @@ func NewGetInterestRateIndexReqBuilder() *GetInterestRateIndexReqBuilder { return &GetInterestRateIndexReqBuilder{obj: NewGetInterestRateIndexReqWithDefaults()} } -// Symbol of the contract, Please refer to [Get Symbol endpoint: fundingBaseSymbol, fundingQuoteSymbol, fundingBaseSymbol1M, fundingQuoteSymbol1M](apidog://link/endpoint/3470220) +// Symbol of the contract, Please refer to [Get Symbol endpoint: fundingBaseSymbol, fundingQuoteSymbol, fundingBaseSymbol1M, fundingQuoteSymbol1M](https://www.kucoin.com/docs-new/api-3470220) func (builder *GetInterestRateIndexReqBuilder) SetSymbol(value string) *GetInterestRateIndexReqBuilder { builder.obj.Symbol = &value return builder diff --git a/sdk/golang/pkg/generate/futures/market/types_get_klines_req.go b/sdk/golang/pkg/generate/futures/market/types_get_klines_req.go index 12087c3d..98704220 100644 --- a/sdk/golang/pkg/generate/futures/market/types_get_klines_req.go +++ b/sdk/golang/pkg/generate/futures/market/types_get_klines_req.go @@ -4,7 +4,7 @@ package market // GetKlinesReq struct for GetKlinesReq type GetKlinesReq struct { - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol, indexSymbol, premiumsSymbol1M, premiumsSymbol8H](apidog://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol, indexSymbol, premiumsSymbol1M, premiumsSymbol8H](https://www.kucoin.com/docs-new/api-3470220) Symbol *string `json:"symbol,omitempty" url:"symbol,omitempty"` // Type of candlestick patterns(minute) Granularity *int64 `json:"granularity,omitempty" url:"granularity,omitempty"` @@ -45,7 +45,7 @@ func NewGetKlinesReqBuilder() *GetKlinesReqBuilder { return &GetKlinesReqBuilder{obj: NewGetKlinesReqWithDefaults()} } -// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol, indexSymbol, premiumsSymbol1M, premiumsSymbol8H](apidog://link/endpoint/3470220) +// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol, indexSymbol, premiumsSymbol1M, premiumsSymbol8H](https://www.kucoin.com/docs-new/api-3470220) func (builder *GetKlinesReqBuilder) SetSymbol(value string) *GetKlinesReqBuilder { builder.obj.Symbol = &value return builder diff --git a/sdk/golang/pkg/generate/futures/market/types_get_mark_price_req.go b/sdk/golang/pkg/generate/futures/market/types_get_mark_price_req.go index ab48c96d..43240b8f 100644 --- a/sdk/golang/pkg/generate/futures/market/types_get_mark_price_req.go +++ b/sdk/golang/pkg/generate/futures/market/types_get_mark_price_req.go @@ -4,7 +4,7 @@ package market // GetMarkPriceReq struct for GetMarkPriceReq type GetMarkPriceReq struct { - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol *string `json:"symbol,omitempty" path:"symbol" url:"-"` } @@ -36,7 +36,7 @@ func NewGetMarkPriceReqBuilder() *GetMarkPriceReqBuilder { return &GetMarkPriceReqBuilder{obj: NewGetMarkPriceReqWithDefaults()} } -// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) +// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) func (builder *GetMarkPriceReqBuilder) SetSymbol(value string) *GetMarkPriceReqBuilder { builder.obj.Symbol = &value return builder diff --git a/sdk/golang/pkg/generate/futures/market/types_get_mark_price_resp.go b/sdk/golang/pkg/generate/futures/market/types_get_mark_price_resp.go index d8be9eed..3e9dee8c 100644 --- a/sdk/golang/pkg/generate/futures/market/types_get_mark_price_resp.go +++ b/sdk/golang/pkg/generate/futures/market/types_get_mark_price_resp.go @@ -10,7 +10,7 @@ import ( type GetMarkPriceResp struct { // common response CommonResponse *types.RestResponse - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol string `json:"symbol,omitempty"` // Granularity (milisecond) Granularity int32 `json:"granularity,omitempty"` diff --git a/sdk/golang/pkg/generate/futures/market/types_get_part_order_book_req.go b/sdk/golang/pkg/generate/futures/market/types_get_part_order_book_req.go index fbacba30..e97dac87 100644 --- a/sdk/golang/pkg/generate/futures/market/types_get_part_order_book_req.go +++ b/sdk/golang/pkg/generate/futures/market/types_get_part_order_book_req.go @@ -4,7 +4,7 @@ package market // GetPartOrderBookReq struct for GetPartOrderBookReq type GetPartOrderBookReq struct { - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol *string `json:"symbol,omitempty" url:"symbol,omitempty"` // Get the depth layer, optional value: 20, 100 Size *string `json:"size,omitempty" path:"size" url:"-"` @@ -39,7 +39,7 @@ func NewGetPartOrderBookReqBuilder() *GetPartOrderBookReqBuilder { return &GetPartOrderBookReqBuilder{obj: NewGetPartOrderBookReqWithDefaults()} } -// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) +// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) func (builder *GetPartOrderBookReqBuilder) SetSymbol(value string) *GetPartOrderBookReqBuilder { builder.obj.Symbol = &value return builder diff --git a/sdk/golang/pkg/generate/futures/market/types_get_part_order_book_resp.go b/sdk/golang/pkg/generate/futures/market/types_get_part_order_book_resp.go index da86ba05..5627c5f5 100644 --- a/sdk/golang/pkg/generate/futures/market/types_get_part_order_book_resp.go +++ b/sdk/golang/pkg/generate/futures/market/types_get_part_order_book_resp.go @@ -12,7 +12,7 @@ type GetPartOrderBookResp struct { CommonResponse *types.RestResponse // Sequence number Sequence int64 `json:"sequence,omitempty"` - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol string `json:"symbol,omitempty"` // bids, from high to low Bids [][]float32 `json:"bids,omitempty"` diff --git a/sdk/golang/pkg/generate/futures/market/types_get_premium_index_data_list.go b/sdk/golang/pkg/generate/futures/market/types_get_premium_index_data_list.go index 08a62cf0..b1bfee73 100644 --- a/sdk/golang/pkg/generate/futures/market/types_get_premium_index_data_list.go +++ b/sdk/golang/pkg/generate/futures/market/types_get_premium_index_data_list.go @@ -4,7 +4,7 @@ package market // GetPremiumIndexDataList struct for GetPremiumIndexDataList type GetPremiumIndexDataList struct { - // Symbol of the contract, Please refer to [Get Symbol endpoint: premiumsSymbol1M, premiumsSymbol8H](doc://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: premiumsSymbol1M, premiumsSymbol8H](https://www.kucoin.com/docs-new/api-3470220) Symbol string `json:"symbol,omitempty"` // Granularity(milisecond) Granularity int32 `json:"granularity,omitempty"` diff --git a/sdk/golang/pkg/generate/futures/market/types_get_premium_index_req.go b/sdk/golang/pkg/generate/futures/market/types_get_premium_index_req.go index 79c16348..54a38c91 100644 --- a/sdk/golang/pkg/generate/futures/market/types_get_premium_index_req.go +++ b/sdk/golang/pkg/generate/futures/market/types_get_premium_index_req.go @@ -4,7 +4,7 @@ package market // GetPremiumIndexReq struct for GetPremiumIndexReq type GetPremiumIndexReq struct { - // Symbol of the contract, Please refer to [Get Symbol endpoint: premiumsSymbol1M, premiumsSymbol8H](apidog://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: premiumsSymbol1M, premiumsSymbol8H](https://www.kucoin.com/docs-new/api-3470220) Symbol *string `json:"symbol,omitempty" url:"symbol,omitempty"` // Start time (milisecond) StartAt *int64 `json:"startAt,omitempty" url:"startAt,omitempty"` @@ -66,7 +66,7 @@ func NewGetPremiumIndexReqBuilder() *GetPremiumIndexReqBuilder { return &GetPremiumIndexReqBuilder{obj: NewGetPremiumIndexReqWithDefaults()} } -// Symbol of the contract, Please refer to [Get Symbol endpoint: premiumsSymbol1M, premiumsSymbol8H](apidog://link/endpoint/3470220) +// Symbol of the contract, Please refer to [Get Symbol endpoint: premiumsSymbol1M, premiumsSymbol8H](https://www.kucoin.com/docs-new/api-3470220) func (builder *GetPremiumIndexReqBuilder) SetSymbol(value string) *GetPremiumIndexReqBuilder { builder.obj.Symbol = &value return builder diff --git a/sdk/golang/pkg/generate/futures/market/types_get_spot_index_price_data_list.go b/sdk/golang/pkg/generate/futures/market/types_get_spot_index_price_data_list.go index 62ff506c..1a10e605 100644 --- a/sdk/golang/pkg/generate/futures/market/types_get_spot_index_price_data_list.go +++ b/sdk/golang/pkg/generate/futures/market/types_get_spot_index_price_data_list.go @@ -4,7 +4,7 @@ package market // GetSpotIndexPriceDataList struct for GetSpotIndexPriceDataList type GetSpotIndexPriceDataList struct { - // Symbol of the contract, Please refer to [Get Symbol endpoint: indexSymbol](doc://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: indexSymbol](https://www.kucoin.com/docs-new/api-3470220) Symbol string `json:"symbol,omitempty"` // Granularity (milisecond) Granularity int32 `json:"granularity,omitempty"` diff --git a/sdk/golang/pkg/generate/futures/market/types_get_spot_index_price_req.go b/sdk/golang/pkg/generate/futures/market/types_get_spot_index_price_req.go index e5fa1e19..5a6d4395 100644 --- a/sdk/golang/pkg/generate/futures/market/types_get_spot_index_price_req.go +++ b/sdk/golang/pkg/generate/futures/market/types_get_spot_index_price_req.go @@ -4,7 +4,7 @@ package market // GetSpotIndexPriceReq struct for GetSpotIndexPriceReq type GetSpotIndexPriceReq struct { - // Symbol of the contract, Please refer to [Get Symbol endpoint: indexSymbol](apidog://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: indexSymbol](https://www.kucoin.com/docs-new/api-3470220) Symbol *string `json:"symbol,omitempty" url:"symbol,omitempty"` // Start time (milisecond) StartAt *int64 `json:"startAt,omitempty" url:"startAt,omitempty"` @@ -66,7 +66,7 @@ func NewGetSpotIndexPriceReqBuilder() *GetSpotIndexPriceReqBuilder { return &GetSpotIndexPriceReqBuilder{obj: NewGetSpotIndexPriceReqWithDefaults()} } -// Symbol of the contract, Please refer to [Get Symbol endpoint: indexSymbol](apidog://link/endpoint/3470220) +// Symbol of the contract, Please refer to [Get Symbol endpoint: indexSymbol](https://www.kucoin.com/docs-new/api-3470220) func (builder *GetSpotIndexPriceReqBuilder) SetSymbol(value string) *GetSpotIndexPriceReqBuilder { builder.obj.Symbol = &value return builder diff --git a/sdk/golang/pkg/generate/futures/market/types_get_ticker_req.go b/sdk/golang/pkg/generate/futures/market/types_get_ticker_req.go index 3f27b905..0975ccb3 100644 --- a/sdk/golang/pkg/generate/futures/market/types_get_ticker_req.go +++ b/sdk/golang/pkg/generate/futures/market/types_get_ticker_req.go @@ -4,7 +4,7 @@ package market // GetTickerReq struct for GetTickerReq type GetTickerReq struct { - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol *string `json:"symbol,omitempty" url:"symbol,omitempty"` } @@ -36,7 +36,7 @@ func NewGetTickerReqBuilder() *GetTickerReqBuilder { return &GetTickerReqBuilder{obj: NewGetTickerReqWithDefaults()} } -// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) +// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) func (builder *GetTickerReqBuilder) SetSymbol(value string) *GetTickerReqBuilder { builder.obj.Symbol = &value return builder diff --git a/sdk/golang/pkg/generate/futures/market/types_get_ticker_resp.go b/sdk/golang/pkg/generate/futures/market/types_get_ticker_resp.go index 8f95f983..4d773052 100644 --- a/sdk/golang/pkg/generate/futures/market/types_get_ticker_resp.go +++ b/sdk/golang/pkg/generate/futures/market/types_get_ticker_resp.go @@ -12,7 +12,7 @@ type GetTickerResp struct { CommonResponse *types.RestResponse // Sequence number, used to judge whether the messages pushed by Websocket is continuous. Sequence int64 `json:"sequence,omitempty"` - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol string `json:"symbol,omitempty"` // Filled side, The trade side indicates the taker order side. A taker order is the order that was matched with orders opened on the order book. Side string `json:"side,omitempty"` diff --git a/sdk/golang/pkg/generate/futures/market/types_get_trade_history_req.go b/sdk/golang/pkg/generate/futures/market/types_get_trade_history_req.go index febfb590..e2c1fb29 100644 --- a/sdk/golang/pkg/generate/futures/market/types_get_trade_history_req.go +++ b/sdk/golang/pkg/generate/futures/market/types_get_trade_history_req.go @@ -4,7 +4,7 @@ package market // GetTradeHistoryReq struct for GetTradeHistoryReq type GetTradeHistoryReq struct { - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol *string `json:"symbol,omitempty" url:"symbol,omitempty"` } @@ -36,7 +36,7 @@ func NewGetTradeHistoryReqBuilder() *GetTradeHistoryReqBuilder { return &GetTradeHistoryReqBuilder{obj: NewGetTradeHistoryReqWithDefaults()} } -// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) +// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) func (builder *GetTradeHistoryReqBuilder) SetSymbol(value string) *GetTradeHistoryReqBuilder { builder.obj.Symbol = &value return builder diff --git a/sdk/golang/pkg/generate/futures/order/types_add_order_req.go b/sdk/golang/pkg/generate/futures/order/types_add_order_req.go index 8041481b..ffc72e1b 100644 --- a/sdk/golang/pkg/generate/futures/order/types_add_order_req.go +++ b/sdk/golang/pkg/generate/futures/order/types_add_order_req.go @@ -8,7 +8,7 @@ type AddOrderReq struct { ClientOid string `json:"clientOid,omitempty"` // specify if the order is to 'buy' or 'sell' Side string `json:"side,omitempty"` - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol string `json:"symbol,omitempty"` // Used to calculate the margin to be frozen for the order. If you are to close the position, this parameter is not required. Leverage int32 `json:"leverage,omitempty"` @@ -28,7 +28,7 @@ type AddOrderReq struct { CloseOrder *bool `json:"closeOrder,omitempty"` // A mark to forcely hold the funds for an order, even though it's an order to reduce the position size. This helps the order stay on the order book and not get canceled when the position size changes. Set to false by default. The system will forcely freeze certain amount of funds for this order, including orders whose direction is opposite to the current positions. This feature is to ensure that the order wonโ€™t be canceled by the matching engine in such a circumstance that not enough funds are frozen for the order. ForceHold *bool `json:"forceHold,omitempty"` - // [Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. + // [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. Stp *string `json:"stp,omitempty"` // Margin mode: ISOLATED, CROSS, default: ISOLATED MarginMode *string `json:"marginMode,omitempty"` @@ -36,7 +36,7 @@ type AddOrderReq struct { Price *string `json:"price,omitempty"` // **Choose one of size, qty, valueQty**, Order size (Lot), must be a positive integer. The quantity unit of coin-swap contracts is size(lot), and other units are not supported. Size *int32 `json:"size,omitempty"` - // Optional for type is 'limit' order, [Time in force](doc://link/pages/338146) is a special strategy used during trading, default is GTC + // Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading, default is GTC TimeInForce *string `json:"timeInForce,omitempty"` // Optional for type is 'limit' order, post only flag, invalid when timeInForce is IOC. When postOnly is true, not allowed choose hidden or iceberg. The post-only flag ensures that the trader always pays the maker fee and provides liquidity to the order book. If any part of the order is going to pay taker fee, the order will be fully rejected. PostOnly *bool `json:"postOnly,omitempty"` @@ -154,7 +154,7 @@ func (builder *AddOrderReqBuilder) SetSide(value string) *AddOrderReqBuilder { return builder } -// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) +// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) func (builder *AddOrderReqBuilder) SetSymbol(value string) *AddOrderReqBuilder { builder.obj.Symbol = value return builder @@ -214,7 +214,7 @@ func (builder *AddOrderReqBuilder) SetForceHold(value bool) *AddOrderReqBuilder return builder } -// [Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. +// [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. func (builder *AddOrderReqBuilder) SetStp(value string) *AddOrderReqBuilder { builder.obj.Stp = &value return builder @@ -238,7 +238,7 @@ func (builder *AddOrderReqBuilder) SetSize(value int32) *AddOrderReqBuilder { return builder } -// Optional for type is 'limit' order, [Time in force](doc://link/pages/338146) is a special strategy used during trading, default is GTC +// Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading, default is GTC func (builder *AddOrderReqBuilder) SetTimeInForce(value string) *AddOrderReqBuilder { builder.obj.TimeInForce = &value return builder diff --git a/sdk/golang/pkg/generate/futures/order/types_add_order_test_req.go b/sdk/golang/pkg/generate/futures/order/types_add_order_test_req.go index c36fab08..1189f584 100644 --- a/sdk/golang/pkg/generate/futures/order/types_add_order_test_req.go +++ b/sdk/golang/pkg/generate/futures/order/types_add_order_test_req.go @@ -8,7 +8,7 @@ type AddOrderTestReq struct { ClientOid string `json:"clientOid,omitempty"` // specify if the order is to 'buy' or 'sell' Side string `json:"side,omitempty"` - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol string `json:"symbol,omitempty"` // Used to calculate the margin to be frozen for the order. If you are to close the position, this parameter is not required. Leverage int32 `json:"leverage,omitempty"` @@ -28,7 +28,7 @@ type AddOrderTestReq struct { CloseOrder *bool `json:"closeOrder,omitempty"` // A mark to forcely hold the funds for an order, even though it's an order to reduce the position size. This helps the order stay on the order book and not get canceled when the position size changes. Set to false by default. The system will forcely freeze certain amount of funds for this order, including orders whose direction is opposite to the current positions. This feature is to ensure that the order wonโ€™t be canceled by the matching engine in such a circumstance that not enough funds are frozen for the order. ForceHold *bool `json:"forceHold,omitempty"` - // [Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. + // [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. Stp *string `json:"stp,omitempty"` // Margin mode: ISOLATED, CROSS, default: ISOLATED MarginMode *string `json:"marginMode,omitempty"` @@ -36,7 +36,7 @@ type AddOrderTestReq struct { Price *string `json:"price,omitempty"` // **Choose one of size, qty, valueQty**, Order size (Lot), must be a positive integer. The quantity unit of coin-swap contracts is size(lot), and other units are not supported. Size *int32 `json:"size,omitempty"` - // Optional for type is 'limit' order, [Time in force](doc://link/pages/338146) is a special strategy used during trading, default is GTC + // Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading, default is GTC TimeInForce *string `json:"timeInForce,omitempty"` // Optional for type is 'limit' order, post only flag, invalid when timeInForce is IOC. When postOnly is true, not allowed choose hidden or iceberg. The post-only flag ensures that the trader always pays the maker fee and provides liquidity to the order book. If any part of the order is going to pay taker fee, the order will be fully rejected. PostOnly *bool `json:"postOnly,omitempty"` @@ -153,7 +153,7 @@ func (builder *AddOrderTestReqBuilder) SetSide(value string) *AddOrderTestReqBui return builder } -// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) +// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) func (builder *AddOrderTestReqBuilder) SetSymbol(value string) *AddOrderTestReqBuilder { builder.obj.Symbol = value return builder @@ -213,7 +213,7 @@ func (builder *AddOrderTestReqBuilder) SetForceHold(value bool) *AddOrderTestReq return builder } -// [Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. +// [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. func (builder *AddOrderTestReqBuilder) SetStp(value string) *AddOrderTestReqBuilder { builder.obj.Stp = &value return builder @@ -237,7 +237,7 @@ func (builder *AddOrderTestReqBuilder) SetSize(value int32) *AddOrderTestReqBuil return builder } -// Optional for type is 'limit' order, [Time in force](doc://link/pages/338146) is a special strategy used during trading, default is GTC +// Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading, default is GTC func (builder *AddOrderTestReqBuilder) SetTimeInForce(value string) *AddOrderTestReqBuilder { builder.obj.TimeInForce = &value return builder diff --git a/sdk/golang/pkg/generate/futures/order/types_add_tpsl_order_req.go b/sdk/golang/pkg/generate/futures/order/types_add_tpsl_order_req.go index fe2fd82c..b5a6c6c6 100644 --- a/sdk/golang/pkg/generate/futures/order/types_add_tpsl_order_req.go +++ b/sdk/golang/pkg/generate/futures/order/types_add_tpsl_order_req.go @@ -8,7 +8,7 @@ type AddTPSLOrderReq struct { ClientOid string `json:"clientOid,omitempty"` // specify if the order is to 'buy' or 'sell' Side string `json:"side,omitempty"` - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol string `json:"symbol,omitempty"` // Used to calculate the margin to be frozen for the order. If you are to close the position, this parameter is not required. Leverage int32 `json:"leverage,omitempty"` @@ -24,7 +24,7 @@ type AddTPSLOrderReq struct { CloseOrder *bool `json:"closeOrder,omitempty"` // A mark to forcely hold the funds for an order, even though it's an order to reduce the position size. This helps the order stay on the order book and not get canceled when the position size changes. Set to false by default. The system will forcely freeze certain amount of funds for this order, including orders whose direction is opposite to the current positions. This feature is to ensure that the order wonโ€™t be canceled by the matching engine in such a circumstance that not enough funds are frozen for the order. ForceHold *bool `json:"forceHold,omitempty"` - // [Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. + // [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. Stp *string `json:"stp,omitempty"` // Margin mode: ISOLATED, CROSS, default: ISOLATED MarginMode *string `json:"marginMode,omitempty"` @@ -32,7 +32,7 @@ type AddTPSLOrderReq struct { Price *string `json:"price,omitempty"` // **Choose one of size, qty, valueQty**, Order size (Lot), must be a positive integer. The quantity unit of coin-swap contracts is size(lot), and other units are not supported. Size *int32 `json:"size,omitempty"` - // Optional for type is 'limit' order, [Time in force](doc://link/pages/338146) is a special strategy used during trading, default is GTC + // Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading, default is GTC TimeInForce *string `json:"timeInForce,omitempty"` // Optional for type is 'limit' order, post only flag, invalid when timeInForce is IOC. When postOnly is true, not allowed choose hidden or iceberg. The post-only flag ensures that the trader always pays the maker fee and provides liquidity to the order book. If any part of the order is going to pay taker fee, the order will be fully rejected. PostOnly *bool `json:"postOnly,omitempty"` @@ -153,7 +153,7 @@ func (builder *AddTPSLOrderReqBuilder) SetSide(value string) *AddTPSLOrderReqBui return builder } -// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) +// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) func (builder *AddTPSLOrderReqBuilder) SetSymbol(value string) *AddTPSLOrderReqBuilder { builder.obj.Symbol = value return builder @@ -201,7 +201,7 @@ func (builder *AddTPSLOrderReqBuilder) SetForceHold(value bool) *AddTPSLOrderReq return builder } -// [Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. +// [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. func (builder *AddTPSLOrderReqBuilder) SetStp(value string) *AddTPSLOrderReqBuilder { builder.obj.Stp = &value return builder @@ -225,7 +225,7 @@ func (builder *AddTPSLOrderReqBuilder) SetSize(value int32) *AddTPSLOrderReqBuil return builder } -// Optional for type is 'limit' order, [Time in force](doc://link/pages/338146) is a special strategy used during trading, default is GTC +// Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading, default is GTC func (builder *AddTPSLOrderReqBuilder) SetTimeInForce(value string) *AddTPSLOrderReqBuilder { builder.obj.TimeInForce = &value return builder diff --git a/sdk/golang/pkg/generate/futures/order/types_batch_add_orders_data.go b/sdk/golang/pkg/generate/futures/order/types_batch_add_orders_data.go index 25a751c4..872c1a6b 100644 --- a/sdk/golang/pkg/generate/futures/order/types_batch_add_orders_data.go +++ b/sdk/golang/pkg/generate/futures/order/types_batch_add_orders_data.go @@ -8,7 +8,7 @@ type BatchAddOrdersData struct { OrderId string `json:"orderId,omitempty"` // Unique order id created by users to identify their orders, the maximum length cannot exceed 40, e.g. UUID, Only allows numbers, characters, underline(_), and separator(-) ClientOid string `json:"clientOid,omitempty"` - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol string `json:"symbol,omitempty"` Code string `json:"code,omitempty"` Msg string `json:"msg,omitempty"` diff --git a/sdk/golang/pkg/generate/futures/order/types_batch_add_orders_item.go b/sdk/golang/pkg/generate/futures/order/types_batch_add_orders_item.go index 44affc6a..65ae2133 100644 --- a/sdk/golang/pkg/generate/futures/order/types_batch_add_orders_item.go +++ b/sdk/golang/pkg/generate/futures/order/types_batch_add_orders_item.go @@ -8,7 +8,7 @@ type BatchAddOrdersItem struct { ClientOid string `json:"clientOid,omitempty"` // specify if the order is to 'buy' or 'sell' Side string `json:"side,omitempty"` - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/221752070) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-221752070) Symbol string `json:"symbol,omitempty"` // Used to calculate the margin to be frozen for the order. If you are to close the position, this parameter is not required. Leverage int32 `json:"leverage,omitempty"` @@ -28,7 +28,7 @@ type BatchAddOrdersItem struct { CloseOrder *bool `json:"closeOrder,omitempty"` // A mark to forcely hold the funds for an order, even though it's an order to reduce the position size. This helps the order stay on the order book and not get canceled when the position size changes. Set to false by default. The system will forcely freeze certain amount of funds for this order, including orders whose direction is opposite to the current positions. This feature is to ensure that the order wonโ€™t be canceled by the matching engine in such a circumstance that not enough funds are frozen for the order. ForceHold *bool `json:"forceHold,omitempty"` - // [Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. + // [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. Stp *string `json:"stp,omitempty"` // Margin mode: ISOLATED, CROSS, default: ISOLATED MarginMode *string `json:"marginMode,omitempty"` @@ -36,7 +36,7 @@ type BatchAddOrdersItem struct { Price *string `json:"price,omitempty"` // **Choose one of size, qty, valueQty**, Order size (Lot), must be a positive integer. The quantity unit of coin-swap contracts is size(lot), and other units are not supported. Size *int32 `json:"size,omitempty"` - // Optional for type is 'limit' order, [Time in force](doc://link/pages/338146) is a special strategy used during trading, default is GTC + // Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading, default is GTC TimeInForce *string `json:"timeInForce,omitempty"` // Optional for type is 'limit' order, post only flag, invalid when timeInForce is IOC. When postOnly is true, not allowed choose hidden or iceberg. The post-only flag ensures that the trader always pays the maker fee and provides liquidity to the order book. If any part of the order is going to pay taker fee, the order will be fully rejected. PostOnly *bool `json:"postOnly,omitempty"` @@ -153,7 +153,7 @@ func (builder *BatchAddOrdersItemBuilder) SetSide(value string) *BatchAddOrdersI return builder } -// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/221752070) +// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-221752070) func (builder *BatchAddOrdersItemBuilder) SetSymbol(value string) *BatchAddOrdersItemBuilder { builder.obj.Symbol = value return builder @@ -213,7 +213,7 @@ func (builder *BatchAddOrdersItemBuilder) SetForceHold(value bool) *BatchAddOrde return builder } -// [Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. +// [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. func (builder *BatchAddOrdersItemBuilder) SetStp(value string) *BatchAddOrdersItemBuilder { builder.obj.Stp = &value return builder @@ -237,7 +237,7 @@ func (builder *BatchAddOrdersItemBuilder) SetSize(value int32) *BatchAddOrdersIt return builder } -// Optional for type is 'limit' order, [Time in force](doc://link/pages/338146) is a special strategy used during trading, default is GTC +// Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading, default is GTC func (builder *BatchAddOrdersItemBuilder) SetTimeInForce(value string) *BatchAddOrdersItemBuilder { builder.obj.TimeInForce = &value return builder diff --git a/sdk/golang/pkg/generate/futures/order/types_batch_cancel_orders_client_oids_list.go b/sdk/golang/pkg/generate/futures/order/types_batch_cancel_orders_client_oids_list.go index 17f189ee..b207eea4 100644 --- a/sdk/golang/pkg/generate/futures/order/types_batch_cancel_orders_client_oids_list.go +++ b/sdk/golang/pkg/generate/futures/order/types_batch_cancel_orders_client_oids_list.go @@ -4,7 +4,7 @@ package order // BatchCancelOrdersClientOidsList struct for BatchCancelOrdersClientOidsList type BatchCancelOrdersClientOidsList struct { - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol string `json:"symbol,omitempty"` ClientOid string `json:"clientOid,omitempty"` } @@ -40,7 +40,7 @@ func NewBatchCancelOrdersClientOidsListBuilder() *BatchCancelOrdersClientOidsLis return &BatchCancelOrdersClientOidsListBuilder{obj: NewBatchCancelOrdersClientOidsListWithDefaults()} } -// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) +// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) func (builder *BatchCancelOrdersClientOidsListBuilder) SetSymbol(value string) *BatchCancelOrdersClientOidsListBuilder { builder.obj.Symbol = value return builder diff --git a/sdk/golang/pkg/generate/futures/order/types_cancel_all_orders_v1_req.go b/sdk/golang/pkg/generate/futures/order/types_cancel_all_orders_v1_req.go index 5c0ae169..a6ae6a47 100644 --- a/sdk/golang/pkg/generate/futures/order/types_cancel_all_orders_v1_req.go +++ b/sdk/golang/pkg/generate/futures/order/types_cancel_all_orders_v1_req.go @@ -4,7 +4,7 @@ package order // CancelAllOrdersV1Req struct for CancelAllOrdersV1Req type CancelAllOrdersV1Req struct { - // Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + // Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol *string `json:"symbol,omitempty" url:"symbol,omitempty"` } @@ -36,7 +36,7 @@ func NewCancelAllOrdersV1ReqBuilder() *CancelAllOrdersV1ReqBuilder { return &CancelAllOrdersV1ReqBuilder{obj: NewCancelAllOrdersV1ReqWithDefaults()} } -// Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) +// Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) func (builder *CancelAllOrdersV1ReqBuilder) SetSymbol(value string) *CancelAllOrdersV1ReqBuilder { builder.obj.Symbol = &value return builder diff --git a/sdk/golang/pkg/generate/futures/order/types_cancel_all_orders_v3_req.go b/sdk/golang/pkg/generate/futures/order/types_cancel_all_orders_v3_req.go index f1ae502c..2a8b51cc 100644 --- a/sdk/golang/pkg/generate/futures/order/types_cancel_all_orders_v3_req.go +++ b/sdk/golang/pkg/generate/futures/order/types_cancel_all_orders_v3_req.go @@ -4,7 +4,7 @@ package order // CancelAllOrdersV3Req struct for CancelAllOrdersV3Req type CancelAllOrdersV3Req struct { - // Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + // Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol *string `json:"symbol,omitempty" url:"symbol,omitempty"` } @@ -36,7 +36,7 @@ func NewCancelAllOrdersV3ReqBuilder() *CancelAllOrdersV3ReqBuilder { return &CancelAllOrdersV3ReqBuilder{obj: NewCancelAllOrdersV3ReqWithDefaults()} } -// Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) +// Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) func (builder *CancelAllOrdersV3ReqBuilder) SetSymbol(value string) *CancelAllOrdersV3ReqBuilder { builder.obj.Symbol = &value return builder diff --git a/sdk/golang/pkg/generate/futures/order/types_cancel_all_stop_orders_req.go b/sdk/golang/pkg/generate/futures/order/types_cancel_all_stop_orders_req.go index 8925a1ce..16bb515e 100644 --- a/sdk/golang/pkg/generate/futures/order/types_cancel_all_stop_orders_req.go +++ b/sdk/golang/pkg/generate/futures/order/types_cancel_all_stop_orders_req.go @@ -4,7 +4,7 @@ package order // CancelAllStopOrdersReq struct for CancelAllStopOrdersReq type CancelAllStopOrdersReq struct { - // Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + // Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol *string `json:"symbol,omitempty" url:"symbol,omitempty"` } @@ -36,7 +36,7 @@ func NewCancelAllStopOrdersReqBuilder() *CancelAllStopOrdersReqBuilder { return &CancelAllStopOrdersReqBuilder{obj: NewCancelAllStopOrdersReqWithDefaults()} } -// Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) +// Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) func (builder *CancelAllStopOrdersReqBuilder) SetSymbol(value string) *CancelAllStopOrdersReqBuilder { builder.obj.Symbol = &value return builder diff --git a/sdk/golang/pkg/generate/futures/order/types_cancel_order_by_client_oid_req.go b/sdk/golang/pkg/generate/futures/order/types_cancel_order_by_client_oid_req.go index 05e6feb7..d4496f1c 100644 --- a/sdk/golang/pkg/generate/futures/order/types_cancel_order_by_client_oid_req.go +++ b/sdk/golang/pkg/generate/futures/order/types_cancel_order_by_client_oid_req.go @@ -4,7 +4,7 @@ package order // CancelOrderByClientOidReq struct for CancelOrderByClientOidReq type CancelOrderByClientOidReq struct { - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol *string `json:"symbol,omitempty" url:"symbol,omitempty"` // client order id ClientOid *string `json:"clientOid,omitempty" path:"clientOid" url:"-"` @@ -39,7 +39,7 @@ func NewCancelOrderByClientOidReqBuilder() *CancelOrderByClientOidReqBuilder { return &CancelOrderByClientOidReqBuilder{obj: NewCancelOrderByClientOidReqWithDefaults()} } -// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) +// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) func (builder *CancelOrderByClientOidReqBuilder) SetSymbol(value string) *CancelOrderByClientOidReqBuilder { builder.obj.Symbol = &value return builder diff --git a/sdk/golang/pkg/generate/futures/order/types_get_open_order_value_req.go b/sdk/golang/pkg/generate/futures/order/types_get_open_order_value_req.go index e0a93adc..1445b1e3 100644 --- a/sdk/golang/pkg/generate/futures/order/types_get_open_order_value_req.go +++ b/sdk/golang/pkg/generate/futures/order/types_get_open_order_value_req.go @@ -4,7 +4,7 @@ package order // GetOpenOrderValueReq struct for GetOpenOrderValueReq type GetOpenOrderValueReq struct { - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol *string `json:"symbol,omitempty" url:"symbol,omitempty"` } @@ -36,7 +36,7 @@ func NewGetOpenOrderValueReqBuilder() *GetOpenOrderValueReqBuilder { return &GetOpenOrderValueReqBuilder{obj: NewGetOpenOrderValueReqWithDefaults()} } -// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) +// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) func (builder *GetOpenOrderValueReqBuilder) SetSymbol(value string) *GetOpenOrderValueReqBuilder { builder.obj.Symbol = &value return builder diff --git a/sdk/golang/pkg/generate/futures/order/types_get_order_by_client_oid_resp.go b/sdk/golang/pkg/generate/futures/order/types_get_order_by_client_oid_resp.go index 324b7ce1..6fff8a62 100644 --- a/sdk/golang/pkg/generate/futures/order/types_get_order_by_client_oid_resp.go +++ b/sdk/golang/pkg/generate/futures/order/types_get_order_by_client_oid_resp.go @@ -12,7 +12,7 @@ type GetOrderByClientOidResp struct { CommonResponse *types.RestResponse // Order ID Id string `json:"id,omitempty"` - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol string `json:"symbol,omitempty"` // Order type, market order or limit order Type string `json:"type,omitempty"` @@ -28,7 +28,7 @@ type GetOrderByClientOidResp struct { DealValue string `json:"dealValue,omitempty"` // Executed quantity DealSize int32 `json:"dealSize,omitempty"` - // [Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. + // [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. Stp string `json:"stp,omitempty"` // Stop order type (stop limit or stop market) Stop string `json:"stop,omitempty"` diff --git a/sdk/golang/pkg/generate/futures/order/types_get_order_by_order_id_resp.go b/sdk/golang/pkg/generate/futures/order/types_get_order_by_order_id_resp.go index 9facea59..eeed6c46 100644 --- a/sdk/golang/pkg/generate/futures/order/types_get_order_by_order_id_resp.go +++ b/sdk/golang/pkg/generate/futures/order/types_get_order_by_order_id_resp.go @@ -12,7 +12,7 @@ type GetOrderByOrderIdResp struct { CommonResponse *types.RestResponse // Order ID Id string `json:"id,omitempty"` - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol string `json:"symbol,omitempty"` // Order type, market order or limit order Type string `json:"type,omitempty"` @@ -28,7 +28,7 @@ type GetOrderByOrderIdResp struct { DealValue string `json:"dealValue,omitempty"` // Executed quantity DealSize int32 `json:"dealSize,omitempty"` - // [Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. + // [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. Stp string `json:"stp,omitempty"` // Stop order type (stop limit or stop market) Stop string `json:"stop,omitempty"` diff --git a/sdk/golang/pkg/generate/futures/order/types_get_order_list_items.go b/sdk/golang/pkg/generate/futures/order/types_get_order_list_items.go index 925d861c..ce8a878a 100644 --- a/sdk/golang/pkg/generate/futures/order/types_get_order_list_items.go +++ b/sdk/golang/pkg/generate/futures/order/types_get_order_list_items.go @@ -6,7 +6,7 @@ package order type GetOrderListItems struct { // Order ID Id string `json:"id,omitempty"` - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol string `json:"symbol,omitempty"` // Order type, market order or limit order Type string `json:"type,omitempty"` diff --git a/sdk/golang/pkg/generate/futures/order/types_get_order_list_req.go b/sdk/golang/pkg/generate/futures/order/types_get_order_list_req.go index db9f3cf4..3aa4776c 100644 --- a/sdk/golang/pkg/generate/futures/order/types_get_order_list_req.go +++ b/sdk/golang/pkg/generate/futures/order/types_get_order_list_req.go @@ -6,7 +6,7 @@ package order type GetOrderListReq struct { // active or done, done as default. Only list orders for a specific status Status *string `json:"status,omitempty" url:"status,omitempty"` - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol *string `json:"symbol,omitempty" url:"symbol,omitempty"` // buy or sell Side *string `json:"side,omitempty" url:"side,omitempty"` @@ -63,7 +63,7 @@ func (builder *GetOrderListReqBuilder) SetStatus(value string) *GetOrderListReqB return builder } -// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) +// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) func (builder *GetOrderListReqBuilder) SetSymbol(value string) *GetOrderListReqBuilder { builder.obj.Symbol = &value return builder diff --git a/sdk/golang/pkg/generate/futures/order/types_get_recent_closed_orders_data.go b/sdk/golang/pkg/generate/futures/order/types_get_recent_closed_orders_data.go index b5b07638..57425cca 100644 --- a/sdk/golang/pkg/generate/futures/order/types_get_recent_closed_orders_data.go +++ b/sdk/golang/pkg/generate/futures/order/types_get_recent_closed_orders_data.go @@ -6,7 +6,7 @@ package order type GetRecentClosedOrdersData struct { // Order ID Id string `json:"id,omitempty"` - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol string `json:"symbol,omitempty"` // Order type, market order or limit order Type string `json:"type,omitempty"` diff --git a/sdk/golang/pkg/generate/futures/order/types_get_recent_closed_orders_req.go b/sdk/golang/pkg/generate/futures/order/types_get_recent_closed_orders_req.go index f53f60f3..e327f9b1 100644 --- a/sdk/golang/pkg/generate/futures/order/types_get_recent_closed_orders_req.go +++ b/sdk/golang/pkg/generate/futures/order/types_get_recent_closed_orders_req.go @@ -4,7 +4,7 @@ package order // GetRecentClosedOrdersReq struct for GetRecentClosedOrdersReq type GetRecentClosedOrdersReq struct { - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol *string `json:"symbol,omitempty" url:"symbol,omitempty"` } @@ -36,7 +36,7 @@ func NewGetRecentClosedOrdersReqBuilder() *GetRecentClosedOrdersReqBuilder { return &GetRecentClosedOrdersReqBuilder{obj: NewGetRecentClosedOrdersReqWithDefaults()} } -// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) +// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) func (builder *GetRecentClosedOrdersReqBuilder) SetSymbol(value string) *GetRecentClosedOrdersReqBuilder { builder.obj.Symbol = &value return builder diff --git a/sdk/golang/pkg/generate/futures/order/types_get_recent_trade_history_data.go b/sdk/golang/pkg/generate/futures/order/types_get_recent_trade_history_data.go index 1c79ed6b..829486cf 100644 --- a/sdk/golang/pkg/generate/futures/order/types_get_recent_trade_history_data.go +++ b/sdk/golang/pkg/generate/futures/order/types_get_recent_trade_history_data.go @@ -4,7 +4,7 @@ package order // GetRecentTradeHistoryData struct for GetRecentTradeHistoryData type GetRecentTradeHistoryData struct { - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol string `json:"symbol,omitempty"` // Trade ID TradeId string `json:"tradeId,omitempty"` diff --git a/sdk/golang/pkg/generate/futures/order/types_get_recent_trade_history_req.go b/sdk/golang/pkg/generate/futures/order/types_get_recent_trade_history_req.go index 1e0d67d1..9e390199 100644 --- a/sdk/golang/pkg/generate/futures/order/types_get_recent_trade_history_req.go +++ b/sdk/golang/pkg/generate/futures/order/types_get_recent_trade_history_req.go @@ -4,7 +4,7 @@ package order // GetRecentTradeHistoryReq struct for GetRecentTradeHistoryReq type GetRecentTradeHistoryReq struct { - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol *string `json:"symbol,omitempty" url:"symbol,omitempty"` } @@ -36,7 +36,7 @@ func NewGetRecentTradeHistoryReqBuilder() *GetRecentTradeHistoryReqBuilder { return &GetRecentTradeHistoryReqBuilder{obj: NewGetRecentTradeHistoryReqWithDefaults()} } -// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) +// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) func (builder *GetRecentTradeHistoryReqBuilder) SetSymbol(value string) *GetRecentTradeHistoryReqBuilder { builder.obj.Symbol = &value return builder diff --git a/sdk/golang/pkg/generate/futures/order/types_get_stop_order_list_items.go b/sdk/golang/pkg/generate/futures/order/types_get_stop_order_list_items.go index 9411c113..0720b7f8 100644 --- a/sdk/golang/pkg/generate/futures/order/types_get_stop_order_list_items.go +++ b/sdk/golang/pkg/generate/futures/order/types_get_stop_order_list_items.go @@ -6,7 +6,7 @@ package order type GetStopOrderListItems struct { // Order ID Id string `json:"id,omitempty"` - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol string `json:"symbol,omitempty"` // Order type, market order or limit order Type string `json:"type,omitempty"` diff --git a/sdk/golang/pkg/generate/futures/order/types_get_stop_order_list_req.go b/sdk/golang/pkg/generate/futures/order/types_get_stop_order_list_req.go index 0e6b9950..9601bc12 100644 --- a/sdk/golang/pkg/generate/futures/order/types_get_stop_order_list_req.go +++ b/sdk/golang/pkg/generate/futures/order/types_get_stop_order_list_req.go @@ -4,7 +4,7 @@ package order // GetStopOrderListReq struct for GetStopOrderListReq type GetStopOrderListReq struct { - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol *string `json:"symbol,omitempty" url:"symbol,omitempty"` // buy or sell Side *string `json:"side,omitempty" url:"side,omitempty"` @@ -58,7 +58,7 @@ func NewGetStopOrderListReqBuilder() *GetStopOrderListReqBuilder { return &GetStopOrderListReqBuilder{obj: NewGetStopOrderListReqWithDefaults()} } -// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) +// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) func (builder *GetStopOrderListReqBuilder) SetSymbol(value string) *GetStopOrderListReqBuilder { builder.obj.Symbol = &value return builder diff --git a/sdk/golang/pkg/generate/futures/order/types_get_trade_history_items.go b/sdk/golang/pkg/generate/futures/order/types_get_trade_history_items.go index 02924482..c5c1f349 100644 --- a/sdk/golang/pkg/generate/futures/order/types_get_trade_history_items.go +++ b/sdk/golang/pkg/generate/futures/order/types_get_trade_history_items.go @@ -4,7 +4,7 @@ package order // GetTradeHistoryItems struct for GetTradeHistoryItems type GetTradeHistoryItems struct { - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol string `json:"symbol,omitempty"` // Trade ID TradeId string `json:"tradeId,omitempty"` diff --git a/sdk/golang/pkg/generate/futures/order/types_get_trade_history_req.go b/sdk/golang/pkg/generate/futures/order/types_get_trade_history_req.go index 3c23211d..6090cad2 100644 --- a/sdk/golang/pkg/generate/futures/order/types_get_trade_history_req.go +++ b/sdk/golang/pkg/generate/futures/order/types_get_trade_history_req.go @@ -6,7 +6,7 @@ package order type GetTradeHistoryReq struct { // List fills for a specific order only (If you specify orderId, other parameters can be ignored) OrderId *string `json:"orderId,omitempty" url:"orderId,omitempty"` - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol *string `json:"symbol,omitempty" url:"symbol,omitempty"` // Order side Side *string `json:"side,omitempty" url:"side,omitempty"` @@ -74,7 +74,7 @@ func (builder *GetTradeHistoryReqBuilder) SetOrderId(value string) *GetTradeHist return builder } -// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) +// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) func (builder *GetTradeHistoryReqBuilder) SetSymbol(value string) *GetTradeHistoryReqBuilder { builder.obj.Symbol = &value return builder diff --git a/sdk/golang/pkg/generate/futures/positions/types_add_isolated_margin_req.go b/sdk/golang/pkg/generate/futures/positions/types_add_isolated_margin_req.go index a36a175e..c0d5f38e 100644 --- a/sdk/golang/pkg/generate/futures/positions/types_add_isolated_margin_req.go +++ b/sdk/golang/pkg/generate/futures/positions/types_add_isolated_margin_req.go @@ -4,7 +4,7 @@ package positions // AddIsolatedMarginReq struct for AddIsolatedMarginReq type AddIsolatedMarginReq struct { - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol string `json:"symbol,omitempty"` // Margin amount (min. margin amountโ‰ฅ0.00001667XBT๏ผ‰ Margin float32 `json:"margin,omitempty"` @@ -45,7 +45,7 @@ func NewAddIsolatedMarginReqBuilder() *AddIsolatedMarginReqBuilder { return &AddIsolatedMarginReqBuilder{obj: NewAddIsolatedMarginReqWithDefaults()} } -// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) +// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) func (builder *AddIsolatedMarginReqBuilder) SetSymbol(value string) *AddIsolatedMarginReqBuilder { builder.obj.Symbol = value return builder diff --git a/sdk/golang/pkg/generate/futures/positions/types_add_isolated_margin_resp.go b/sdk/golang/pkg/generate/futures/positions/types_add_isolated_margin_resp.go index 9b12caf4..af5a6ae7 100644 --- a/sdk/golang/pkg/generate/futures/positions/types_add_isolated_margin_resp.go +++ b/sdk/golang/pkg/generate/futures/positions/types_add_isolated_margin_resp.go @@ -12,7 +12,7 @@ type AddIsolatedMarginResp struct { CommonResponse *types.RestResponse // Position ID Id string `json:"id,omitempty"` - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol string `json:"symbol,omitempty"` // Auto deposit margin or not AutoDeposit bool `json:"autoDeposit,omitempty"` diff --git a/sdk/golang/pkg/generate/futures/positions/types_get_cross_margin_leverage_req.go b/sdk/golang/pkg/generate/futures/positions/types_get_cross_margin_leverage_req.go index bfbb154e..35343e32 100644 --- a/sdk/golang/pkg/generate/futures/positions/types_get_cross_margin_leverage_req.go +++ b/sdk/golang/pkg/generate/futures/positions/types_get_cross_margin_leverage_req.go @@ -4,7 +4,7 @@ package positions // GetCrossMarginLeverageReq struct for GetCrossMarginLeverageReq type GetCrossMarginLeverageReq struct { - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol *string `json:"symbol,omitempty" url:"symbol,omitempty"` } @@ -36,7 +36,7 @@ func NewGetCrossMarginLeverageReqBuilder() *GetCrossMarginLeverageReqBuilder { return &GetCrossMarginLeverageReqBuilder{obj: NewGetCrossMarginLeverageReqWithDefaults()} } -// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) +// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) func (builder *GetCrossMarginLeverageReqBuilder) SetSymbol(value string) *GetCrossMarginLeverageReqBuilder { builder.obj.Symbol = &value return builder diff --git a/sdk/golang/pkg/generate/futures/positions/types_get_cross_margin_leverage_resp.go b/sdk/golang/pkg/generate/futures/positions/types_get_cross_margin_leverage_resp.go index e5e322a9..04ffb9f0 100644 --- a/sdk/golang/pkg/generate/futures/positions/types_get_cross_margin_leverage_resp.go +++ b/sdk/golang/pkg/generate/futures/positions/types_get_cross_margin_leverage_resp.go @@ -10,7 +10,7 @@ import ( type GetCrossMarginLeverageResp struct { // common response CommonResponse *types.RestResponse - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol string `json:"symbol,omitempty"` // Leverage multiple Leverage string `json:"leverage,omitempty"` diff --git a/sdk/golang/pkg/generate/futures/positions/types_get_isolated_margin_risk_limit_data.go b/sdk/golang/pkg/generate/futures/positions/types_get_isolated_margin_risk_limit_data.go index c24d7180..b40b7026 100644 --- a/sdk/golang/pkg/generate/futures/positions/types_get_isolated_margin_risk_limit_data.go +++ b/sdk/golang/pkg/generate/futures/positions/types_get_isolated_margin_risk_limit_data.go @@ -4,7 +4,7 @@ package positions // GetIsolatedMarginRiskLimitData struct for GetIsolatedMarginRiskLimitData type GetIsolatedMarginRiskLimitData struct { - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol string `json:"symbol,omitempty"` // level Level int32 `json:"level,omitempty"` diff --git a/sdk/golang/pkg/generate/futures/positions/types_get_isolated_margin_risk_limit_req.go b/sdk/golang/pkg/generate/futures/positions/types_get_isolated_margin_risk_limit_req.go index 5a3e4143..cc9c7679 100644 --- a/sdk/golang/pkg/generate/futures/positions/types_get_isolated_margin_risk_limit_req.go +++ b/sdk/golang/pkg/generate/futures/positions/types_get_isolated_margin_risk_limit_req.go @@ -4,7 +4,7 @@ package positions // GetIsolatedMarginRiskLimitReq struct for GetIsolatedMarginRiskLimitReq type GetIsolatedMarginRiskLimitReq struct { - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol *string `json:"symbol,omitempty" path:"symbol" url:"-"` } @@ -36,7 +36,7 @@ func NewGetIsolatedMarginRiskLimitReqBuilder() *GetIsolatedMarginRiskLimitReqBui return &GetIsolatedMarginRiskLimitReqBuilder{obj: NewGetIsolatedMarginRiskLimitReqWithDefaults()} } -// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) +// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) func (builder *GetIsolatedMarginRiskLimitReqBuilder) SetSymbol(value string) *GetIsolatedMarginRiskLimitReqBuilder { builder.obj.Symbol = &value return builder diff --git a/sdk/golang/pkg/generate/futures/positions/types_get_margin_mode_req.go b/sdk/golang/pkg/generate/futures/positions/types_get_margin_mode_req.go index 74bace6d..999aa628 100644 --- a/sdk/golang/pkg/generate/futures/positions/types_get_margin_mode_req.go +++ b/sdk/golang/pkg/generate/futures/positions/types_get_margin_mode_req.go @@ -4,7 +4,7 @@ package positions // GetMarginModeReq struct for GetMarginModeReq type GetMarginModeReq struct { - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol *string `json:"symbol,omitempty" url:"symbol,omitempty"` } @@ -36,7 +36,7 @@ func NewGetMarginModeReqBuilder() *GetMarginModeReqBuilder { return &GetMarginModeReqBuilder{obj: NewGetMarginModeReqWithDefaults()} } -// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) +// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) func (builder *GetMarginModeReqBuilder) SetSymbol(value string) *GetMarginModeReqBuilder { builder.obj.Symbol = &value return builder diff --git a/sdk/golang/pkg/generate/futures/positions/types_get_margin_mode_resp.go b/sdk/golang/pkg/generate/futures/positions/types_get_margin_mode_resp.go index 837b7ad6..37dc223e 100644 --- a/sdk/golang/pkg/generate/futures/positions/types_get_margin_mode_resp.go +++ b/sdk/golang/pkg/generate/futures/positions/types_get_margin_mode_resp.go @@ -10,7 +10,7 @@ import ( type GetMarginModeResp struct { // common response CommonResponse *types.RestResponse - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol string `json:"symbol,omitempty"` // Margin mode: ISOLATED (isolated), CROSS (cross margin). MarginMode string `json:"marginMode,omitempty"` diff --git a/sdk/golang/pkg/generate/futures/positions/types_get_max_open_size_req.go b/sdk/golang/pkg/generate/futures/positions/types_get_max_open_size_req.go index f2a12566..b00abf73 100644 --- a/sdk/golang/pkg/generate/futures/positions/types_get_max_open_size_req.go +++ b/sdk/golang/pkg/generate/futures/positions/types_get_max_open_size_req.go @@ -4,7 +4,7 @@ package positions // GetMaxOpenSizeReq struct for GetMaxOpenSizeReq type GetMaxOpenSizeReq struct { - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol *string `json:"symbol,omitempty" url:"symbol,omitempty"` // Order price Price *string `json:"price,omitempty" url:"price,omitempty"` @@ -42,7 +42,7 @@ func NewGetMaxOpenSizeReqBuilder() *GetMaxOpenSizeReqBuilder { return &GetMaxOpenSizeReqBuilder{obj: NewGetMaxOpenSizeReqWithDefaults()} } -// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) +// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) func (builder *GetMaxOpenSizeReqBuilder) SetSymbol(value string) *GetMaxOpenSizeReqBuilder { builder.obj.Symbol = &value return builder diff --git a/sdk/golang/pkg/generate/futures/positions/types_get_max_open_size_resp.go b/sdk/golang/pkg/generate/futures/positions/types_get_max_open_size_resp.go index 76f1f28a..eed86724 100644 --- a/sdk/golang/pkg/generate/futures/positions/types_get_max_open_size_resp.go +++ b/sdk/golang/pkg/generate/futures/positions/types_get_max_open_size_resp.go @@ -10,7 +10,7 @@ import ( type GetMaxOpenSizeResp struct { // common response CommonResponse *types.RestResponse - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol string `json:"symbol,omitempty"` // Maximum buy size MaxBuyOpenSize int32 `json:"maxBuyOpenSize,omitempty"` diff --git a/sdk/golang/pkg/generate/futures/positions/types_get_max_withdraw_margin_req.go b/sdk/golang/pkg/generate/futures/positions/types_get_max_withdraw_margin_req.go index e60f94a6..8ce7697f 100644 --- a/sdk/golang/pkg/generate/futures/positions/types_get_max_withdraw_margin_req.go +++ b/sdk/golang/pkg/generate/futures/positions/types_get_max_withdraw_margin_req.go @@ -4,7 +4,7 @@ package positions // GetMaxWithdrawMarginReq struct for GetMaxWithdrawMarginReq type GetMaxWithdrawMarginReq struct { - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol *string `json:"symbol,omitempty" url:"symbol,omitempty"` } @@ -36,7 +36,7 @@ func NewGetMaxWithdrawMarginReqBuilder() *GetMaxWithdrawMarginReqBuilder { return &GetMaxWithdrawMarginReqBuilder{obj: NewGetMaxWithdrawMarginReqWithDefaults()} } -// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) +// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) func (builder *GetMaxWithdrawMarginReqBuilder) SetSymbol(value string) *GetMaxWithdrawMarginReqBuilder { builder.obj.Symbol = &value return builder diff --git a/sdk/golang/pkg/generate/futures/positions/types_get_position_details_req.go b/sdk/golang/pkg/generate/futures/positions/types_get_position_details_req.go index 636241d2..b0b149e6 100644 --- a/sdk/golang/pkg/generate/futures/positions/types_get_position_details_req.go +++ b/sdk/golang/pkg/generate/futures/positions/types_get_position_details_req.go @@ -4,7 +4,7 @@ package positions // GetPositionDetailsReq struct for GetPositionDetailsReq type GetPositionDetailsReq struct { - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol *string `json:"symbol,omitempty" url:"symbol,omitempty"` } @@ -36,7 +36,7 @@ func NewGetPositionDetailsReqBuilder() *GetPositionDetailsReqBuilder { return &GetPositionDetailsReqBuilder{obj: NewGetPositionDetailsReqWithDefaults()} } -// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) +// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) func (builder *GetPositionDetailsReqBuilder) SetSymbol(value string) *GetPositionDetailsReqBuilder { builder.obj.Symbol = &value return builder diff --git a/sdk/golang/pkg/generate/futures/positions/types_get_position_details_resp.go b/sdk/golang/pkg/generate/futures/positions/types_get_position_details_resp.go index 6b97a63d..d9eafcb8 100644 --- a/sdk/golang/pkg/generate/futures/positions/types_get_position_details_resp.go +++ b/sdk/golang/pkg/generate/futures/positions/types_get_position_details_resp.go @@ -12,7 +12,7 @@ type GetPositionDetailsResp struct { CommonResponse *types.RestResponse // Position ID Id string `json:"id,omitempty"` - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol string `json:"symbol,omitempty"` // Whether it is cross margin. CrossMode bool `json:"crossMode,omitempty"` diff --git a/sdk/golang/pkg/generate/futures/positions/types_get_position_list_data.go b/sdk/golang/pkg/generate/futures/positions/types_get_position_list_data.go index 9fd5ef77..2d7a3ccd 100644 --- a/sdk/golang/pkg/generate/futures/positions/types_get_position_list_data.go +++ b/sdk/golang/pkg/generate/futures/positions/types_get_position_list_data.go @@ -6,7 +6,7 @@ package positions type GetPositionListData struct { // Position ID Id string `json:"id,omitempty"` - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol string `json:"symbol,omitempty"` // Whether it is cross margin. CrossMode bool `json:"crossMode,omitempty"` diff --git a/sdk/golang/pkg/generate/futures/positions/types_get_position_list_req.go b/sdk/golang/pkg/generate/futures/positions/types_get_position_list_req.go index bcc95afc..69d261d6 100644 --- a/sdk/golang/pkg/generate/futures/positions/types_get_position_list_req.go +++ b/sdk/golang/pkg/generate/futures/positions/types_get_position_list_req.go @@ -4,7 +4,7 @@ package positions // GetPositionListReq struct for GetPositionListReq type GetPositionListReq struct { - // Currency code, Please refer to [rootSymbol](apidog://link/endpoint/221752070) , such as USDT,XBT. Query all positions when empty + // Currency code, Please refer to [rootSymbol](https://www.kucoin.com/docs-new/api-221752070) , such as USDT,XBT. Query all positions when empty Currency *string `json:"currency,omitempty" url:"currency,omitempty"` } @@ -36,7 +36,7 @@ func NewGetPositionListReqBuilder() *GetPositionListReqBuilder { return &GetPositionListReqBuilder{obj: NewGetPositionListReqWithDefaults()} } -// Currency code, Please refer to [rootSymbol](apidog://link/endpoint/221752070) , such as USDT,XBT. Query all positions when empty +// Currency code, Please refer to [rootSymbol](https://www.kucoin.com/docs-new/api-221752070) , such as USDT,XBT. Query all positions when empty func (builder *GetPositionListReqBuilder) SetCurrency(value string) *GetPositionListReqBuilder { builder.obj.Currency = &value return builder diff --git a/sdk/golang/pkg/generate/futures/positions/types_get_positions_history_items.go b/sdk/golang/pkg/generate/futures/positions/types_get_positions_history_items.go index 0c3f765a..e583bf09 100644 --- a/sdk/golang/pkg/generate/futures/positions/types_get_positions_history_items.go +++ b/sdk/golang/pkg/generate/futures/positions/types_get_positions_history_items.go @@ -8,7 +8,7 @@ type GetPositionsHistoryItems struct { CloseId string `json:"closeId,omitempty"` // User ID UserId string `json:"userId,omitempty"` - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol string `json:"symbol,omitempty"` // Currency used to settle trades SettleCurrency string `json:"settleCurrency,omitempty"` diff --git a/sdk/golang/pkg/generate/futures/positions/types_get_positions_history_req.go b/sdk/golang/pkg/generate/futures/positions/types_get_positions_history_req.go index abe1d902..af995634 100644 --- a/sdk/golang/pkg/generate/futures/positions/types_get_positions_history_req.go +++ b/sdk/golang/pkg/generate/futures/positions/types_get_positions_history_req.go @@ -4,7 +4,7 @@ package positions // GetPositionsHistoryReq struct for GetPositionsHistoryReq type GetPositionsHistoryReq struct { - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol *string `json:"symbol,omitempty" url:"symbol,omitempty"` // Closing start time(ms) From *int64 `json:"from,omitempty" url:"from,omitempty"` @@ -56,7 +56,7 @@ func NewGetPositionsHistoryReqBuilder() *GetPositionsHistoryReqBuilder { return &GetPositionsHistoryReqBuilder{obj: NewGetPositionsHistoryReqWithDefaults()} } -// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) +// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) func (builder *GetPositionsHistoryReqBuilder) SetSymbol(value string) *GetPositionsHistoryReqBuilder { builder.obj.Symbol = &value return builder diff --git a/sdk/golang/pkg/generate/futures/positions/types_modify_isolated_margin_risk_limt_req.go b/sdk/golang/pkg/generate/futures/positions/types_modify_isolated_margin_risk_limt_req.go index 9575a8d0..e3c20105 100644 --- a/sdk/golang/pkg/generate/futures/positions/types_modify_isolated_margin_risk_limt_req.go +++ b/sdk/golang/pkg/generate/futures/positions/types_modify_isolated_margin_risk_limt_req.go @@ -4,7 +4,7 @@ package positions // ModifyIsolatedMarginRiskLimtReq struct for ModifyIsolatedMarginRiskLimtReq type ModifyIsolatedMarginRiskLimtReq struct { - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol string `json:"symbol,omitempty"` // level Level int32 `json:"level,omitempty"` @@ -41,7 +41,7 @@ func NewModifyIsolatedMarginRiskLimtReqBuilder() *ModifyIsolatedMarginRiskLimtRe return &ModifyIsolatedMarginRiskLimtReqBuilder{obj: NewModifyIsolatedMarginRiskLimtReqWithDefaults()} } -// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) +// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) func (builder *ModifyIsolatedMarginRiskLimtReqBuilder) SetSymbol(value string) *ModifyIsolatedMarginRiskLimtReqBuilder { builder.obj.Symbol = value return builder diff --git a/sdk/golang/pkg/generate/futures/positions/types_modify_margin_leverage_req.go b/sdk/golang/pkg/generate/futures/positions/types_modify_margin_leverage_req.go index 7f9ee4f3..9767918a 100644 --- a/sdk/golang/pkg/generate/futures/positions/types_modify_margin_leverage_req.go +++ b/sdk/golang/pkg/generate/futures/positions/types_modify_margin_leverage_req.go @@ -4,7 +4,7 @@ package positions // ModifyMarginLeverageReq struct for ModifyMarginLeverageReq type ModifyMarginLeverageReq struct { - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol string `json:"symbol,omitempty"` // Leverage multiple Leverage string `json:"leverage,omitempty"` @@ -41,7 +41,7 @@ func NewModifyMarginLeverageReqBuilder() *ModifyMarginLeverageReqBuilder { return &ModifyMarginLeverageReqBuilder{obj: NewModifyMarginLeverageReqWithDefaults()} } -// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) +// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) func (builder *ModifyMarginLeverageReqBuilder) SetSymbol(value string) *ModifyMarginLeverageReqBuilder { builder.obj.Symbol = value return builder diff --git a/sdk/golang/pkg/generate/futures/positions/types_remove_isolated_margin_req.go b/sdk/golang/pkg/generate/futures/positions/types_remove_isolated_margin_req.go index b7406bcf..da919969 100644 --- a/sdk/golang/pkg/generate/futures/positions/types_remove_isolated_margin_req.go +++ b/sdk/golang/pkg/generate/futures/positions/types_remove_isolated_margin_req.go @@ -4,7 +4,7 @@ package positions // RemoveIsolatedMarginReq struct for RemoveIsolatedMarginReq type RemoveIsolatedMarginReq struct { - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol string `json:"symbol,omitempty"` // The size of the position that can be deposited. If it is USDT-margin, it represents the amount of USDT. If it is coin-margin, this value represents the number of coins WithdrawAmount string `json:"withdrawAmount,omitempty"` @@ -41,7 +41,7 @@ func NewRemoveIsolatedMarginReqBuilder() *RemoveIsolatedMarginReqBuilder { return &RemoveIsolatedMarginReqBuilder{obj: NewRemoveIsolatedMarginReqWithDefaults()} } -// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) +// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) func (builder *RemoveIsolatedMarginReqBuilder) SetSymbol(value string) *RemoveIsolatedMarginReqBuilder { builder.obj.Symbol = value return builder diff --git a/sdk/golang/pkg/generate/futures/positions/types_switch_margin_mode_req.go b/sdk/golang/pkg/generate/futures/positions/types_switch_margin_mode_req.go index 9ff4406f..971de61a 100644 --- a/sdk/golang/pkg/generate/futures/positions/types_switch_margin_mode_req.go +++ b/sdk/golang/pkg/generate/futures/positions/types_switch_margin_mode_req.go @@ -4,7 +4,7 @@ package positions // SwitchMarginModeReq struct for SwitchMarginModeReq type SwitchMarginModeReq struct { - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol string `json:"symbol,omitempty"` // Modified margin model: ISOLATED (isolated), CROSS (cross margin). MarginMode string `json:"marginMode,omitempty"` @@ -41,7 +41,7 @@ func NewSwitchMarginModeReqBuilder() *SwitchMarginModeReqBuilder { return &SwitchMarginModeReqBuilder{obj: NewSwitchMarginModeReqWithDefaults()} } -// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) +// Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) func (builder *SwitchMarginModeReqBuilder) SetSymbol(value string) *SwitchMarginModeReqBuilder { builder.obj.Symbol = value return builder diff --git a/sdk/golang/pkg/generate/futures/positions/types_switch_margin_mode_resp.go b/sdk/golang/pkg/generate/futures/positions/types_switch_margin_mode_resp.go index c4a65abf..2e6d5f76 100644 --- a/sdk/golang/pkg/generate/futures/positions/types_switch_margin_mode_resp.go +++ b/sdk/golang/pkg/generate/futures/positions/types_switch_margin_mode_resp.go @@ -10,7 +10,7 @@ import ( type SwitchMarginModeResp struct { // common response CommonResponse *types.RestResponse - // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + // Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) Symbol string `json:"symbol,omitempty"` // Margin mode: ISOLATED (isolated), CROSS (cross margin). MarginMode string `json:"marginMode,omitempty"` diff --git a/sdk/golang/pkg/generate/margin/order/types_add_order_req.go b/sdk/golang/pkg/generate/margin/order/types_add_order_req.go index c1dc180a..02193b0d 100644 --- a/sdk/golang/pkg/generate/margin/order/types_add_order_req.go +++ b/sdk/golang/pkg/generate/margin/order/types_add_order_req.go @@ -12,19 +12,19 @@ type AddOrderReq struct { Symbol string `json:"symbol,omitempty"` // specify if the order is an 'limit' order or 'market' order. The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine. When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels. Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. Type *string `json:"type,omitempty"` - // [Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB , and DC + // [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC Stp *string `json:"stp,omitempty"` // Specify price for order When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. Price *string `json:"price,omitempty"` // Specify quantity for order When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize. When **type** is market, select one out of two: size or funds Size *string `json:"size,omitempty"` - // [Time in force](doc://link/pages/5176570) is a special strategy used during trading + // [Time in force](https://www.kucoin.com/docs-new/api-5176570) is a special strategy used during trading TimeInForce *string `json:"timeInForce,omitempty"` // passive order labels, this is disabled when the order timing strategy is IOC or FOK PostOnly *bool `json:"postOnly,omitempty"` - // [Hidden order](doc://link/pages/338146) or not (not shown in order book) + // [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) Hidden *bool `json:"hidden,omitempty"` - // Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146) + // Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) Iceberg *bool `json:"iceberg,omitempty"` // Maximum visible quantity in iceberg orders VisibleSize *string `json:"visibleSize,omitempty"` @@ -143,7 +143,7 @@ func (builder *AddOrderReqBuilder) SetType(value string) *AddOrderReqBuilder { return builder } -// [Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB , and DC +// [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC func (builder *AddOrderReqBuilder) SetStp(value string) *AddOrderReqBuilder { builder.obj.Stp = &value return builder @@ -161,7 +161,7 @@ func (builder *AddOrderReqBuilder) SetSize(value string) *AddOrderReqBuilder { return builder } -// [Time in force](doc://link/pages/5176570) is a special strategy used during trading +// [Time in force](https://www.kucoin.com/docs-new/api-5176570) is a special strategy used during trading func (builder *AddOrderReqBuilder) SetTimeInForce(value string) *AddOrderReqBuilder { builder.obj.TimeInForce = &value return builder @@ -173,13 +173,13 @@ func (builder *AddOrderReqBuilder) SetPostOnly(value bool) *AddOrderReqBuilder { return builder } -// [Hidden order](doc://link/pages/338146) or not (not shown in order book) +// [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) func (builder *AddOrderReqBuilder) SetHidden(value bool) *AddOrderReqBuilder { builder.obj.Hidden = &value return builder } -// Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146) +// Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) func (builder *AddOrderReqBuilder) SetIceberg(value bool) *AddOrderReqBuilder { builder.obj.Iceberg = &value return builder diff --git a/sdk/golang/pkg/generate/margin/order/types_add_order_test_req.go b/sdk/golang/pkg/generate/margin/order/types_add_order_test_req.go index baf2018b..c00777a7 100644 --- a/sdk/golang/pkg/generate/margin/order/types_add_order_test_req.go +++ b/sdk/golang/pkg/generate/margin/order/types_add_order_test_req.go @@ -12,19 +12,19 @@ type AddOrderTestReq struct { Symbol string `json:"symbol,omitempty"` // specify if the order is an 'limit' order or 'market' order. The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine. When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels. Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. Type *string `json:"type,omitempty"` - // [Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB , and DC + // [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC Stp *string `json:"stp,omitempty"` // Specify price for order When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. Price *string `json:"price,omitempty"` // Specify quantity for order When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize. When **type** is market, select one out of two: size or funds Size *string `json:"size,omitempty"` - // [Time in force](doc://link/pages/5176570) is a special strategy used during trading + // [Time in force](https://www.kucoin.com/docs-new/api-5176570) is a special strategy used during trading TimeInForce *string `json:"timeInForce,omitempty"` // passive order labels, this is disabled when the order timing strategy is IOC or FOK PostOnly *bool `json:"postOnly,omitempty"` - // [Hidden order](doc://link/pages/338146) or not (not shown in order book) + // [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) Hidden *bool `json:"hidden,omitempty"` - // Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146) + // Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) Iceberg *bool `json:"iceberg,omitempty"` // Maximum visible quantity in iceberg orders VisibleSize *string `json:"visibleSize,omitempty"` @@ -143,7 +143,7 @@ func (builder *AddOrderTestReqBuilder) SetType(value string) *AddOrderTestReqBui return builder } -// [Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB , and DC +// [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC func (builder *AddOrderTestReqBuilder) SetStp(value string) *AddOrderTestReqBuilder { builder.obj.Stp = &value return builder @@ -161,7 +161,7 @@ func (builder *AddOrderTestReqBuilder) SetSize(value string) *AddOrderTestReqBui return builder } -// [Time in force](doc://link/pages/5176570) is a special strategy used during trading +// [Time in force](https://www.kucoin.com/docs-new/api-5176570) is a special strategy used during trading func (builder *AddOrderTestReqBuilder) SetTimeInForce(value string) *AddOrderTestReqBuilder { builder.obj.TimeInForce = &value return builder @@ -173,13 +173,13 @@ func (builder *AddOrderTestReqBuilder) SetPostOnly(value bool) *AddOrderTestReqB return builder } -// [Hidden order](doc://link/pages/338146) or not (not shown in order book) +// [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) func (builder *AddOrderTestReqBuilder) SetHidden(value bool) *AddOrderTestReqBuilder { builder.obj.Hidden = &value return builder } -// Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146) +// Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) func (builder *AddOrderTestReqBuilder) SetIceberg(value bool) *AddOrderTestReqBuilder { builder.obj.Iceberg = &value return builder diff --git a/sdk/golang/pkg/generate/margin/order/types_add_order_test_v1_req.go b/sdk/golang/pkg/generate/margin/order/types_add_order_test_v1_req.go index 774125d0..d19029be 100644 --- a/sdk/golang/pkg/generate/margin/order/types_add_order_test_v1_req.go +++ b/sdk/golang/pkg/generate/margin/order/types_add_order_test_v1_req.go @@ -12,13 +12,13 @@ type AddOrderTestV1Req struct { Symbol string `json:"symbol,omitempty"` // specify if the order is an 'limit' order or 'market' order. The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine. When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels. Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. Type *string `json:"type,omitempty"` - // [Self Trade Prevention](doc://link/pages/5176570) is divided into four strategies: CN, CO, CB , and DC + // [Self Trade Prevention](https://www.kucoin.com/docs-new/api-5176570) is divided into four strategies: CN, CO, CB , and DC Stp *string `json:"stp,omitempty"` // Specify price for order When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. Price *string `json:"price,omitempty"` // Specify quantity for order When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize. When **type** is market, select one out of two: size or funds Size *string `json:"size,omitempty"` - // [Time in force](doc://link/pages/5176570) is a special strategy used during trading + // [Time in force](https://www.kucoin.com/docs-new/api-5176570) is a special strategy used during trading TimeInForce *string `json:"timeInForce,omitempty"` // passive order labels, this is disabled when the order timing strategy is IOC or FOK PostOnly *bool `json:"postOnly,omitempty"` @@ -143,7 +143,7 @@ func (builder *AddOrderTestV1ReqBuilder) SetType(value string) *AddOrderTestV1Re return builder } -// [Self Trade Prevention](doc://link/pages/5176570) is divided into four strategies: CN, CO, CB , and DC +// [Self Trade Prevention](https://www.kucoin.com/docs-new/api-5176570) is divided into four strategies: CN, CO, CB , and DC func (builder *AddOrderTestV1ReqBuilder) SetStp(value string) *AddOrderTestV1ReqBuilder { builder.obj.Stp = &value return builder @@ -161,7 +161,7 @@ func (builder *AddOrderTestV1ReqBuilder) SetSize(value string) *AddOrderTestV1Re return builder } -// [Time in force](doc://link/pages/5176570) is a special strategy used during trading +// [Time in force](https://www.kucoin.com/docs-new/api-5176570) is a special strategy used during trading func (builder *AddOrderTestV1ReqBuilder) SetTimeInForce(value string) *AddOrderTestV1ReqBuilder { builder.obj.TimeInForce = &value return builder diff --git a/sdk/golang/pkg/generate/margin/order/types_add_order_v1_req.go b/sdk/golang/pkg/generate/margin/order/types_add_order_v1_req.go index 29a9d00f..63f7a4a2 100644 --- a/sdk/golang/pkg/generate/margin/order/types_add_order_v1_req.go +++ b/sdk/golang/pkg/generate/margin/order/types_add_order_v1_req.go @@ -12,13 +12,13 @@ type AddOrderV1Req struct { Symbol string `json:"symbol,omitempty"` // specify if the order is an 'limit' order or 'market' order. The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine. When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels. Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. Type *string `json:"type,omitempty"` - // [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC + // [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC Stp *string `json:"stp,omitempty"` // Specify price for order When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. Price *string `json:"price,omitempty"` // Specify quantity for order When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize. When **type** is market, select one out of two: size or funds Size *string `json:"size,omitempty"` - // [Time in force](doc://link/pages/338146) is a special strategy used during trading + // [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading TimeInForce *string `json:"timeInForce,omitempty"` // passive order labels, this is disabled when the order timing strategy is IOC or FOK PostOnly *bool `json:"postOnly,omitempty"` @@ -143,7 +143,7 @@ func (builder *AddOrderV1ReqBuilder) SetType(value string) *AddOrderV1ReqBuilder return builder } -// [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC +// [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC func (builder *AddOrderV1ReqBuilder) SetStp(value string) *AddOrderV1ReqBuilder { builder.obj.Stp = &value return builder @@ -161,7 +161,7 @@ func (builder *AddOrderV1ReqBuilder) SetSize(value string) *AddOrderV1ReqBuilder return builder } -// [Time in force](doc://link/pages/338146) is a special strategy used during trading +// [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading func (builder *AddOrderV1ReqBuilder) SetTimeInForce(value string) *AddOrderV1ReqBuilder { builder.obj.TimeInForce = &value return builder diff --git a/sdk/golang/pkg/generate/margin/order/types_get_closed_orders_items.go b/sdk/golang/pkg/generate/margin/order/types_get_closed_orders_items.go index 74ee4fbe..aa346f4c 100644 --- a/sdk/golang/pkg/generate/margin/order/types_get_closed_orders_items.go +++ b/sdk/golang/pkg/generate/margin/order/types_get_closed_orders_items.go @@ -23,11 +23,11 @@ type GetClosedOrdersItems struct { DealSize string `json:"dealSize,omitempty"` // Funds of filled transactions DealFunds string `json:"dealFunds,omitempty"` - // [Handling fees](doc://link/pages/5327739) + // [Handling fees](https://www.kucoin.com/docs-new/api-5327739) Fee string `json:"fee,omitempty"` // currency used to calculate trading fee FeeCurrency string `json:"feeCurrency,omitempty"` - // [Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB , and DC + // [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC Stp *string `json:"stp,omitempty"` Stop *string `json:"stop,omitempty"` StopTriggered bool `json:"stopTriggered,omitempty"` diff --git a/sdk/golang/pkg/generate/margin/order/types_get_open_orders_data.go b/sdk/golang/pkg/generate/margin/order/types_get_open_orders_data.go index 1754f478..2102679a 100644 --- a/sdk/golang/pkg/generate/margin/order/types_get_open_orders_data.go +++ b/sdk/golang/pkg/generate/margin/order/types_get_open_orders_data.go @@ -27,7 +27,7 @@ type GetOpenOrdersData struct { Fee string `json:"fee,omitempty"` // currency used to calculate trading fee FeeCurrency string `json:"feeCurrency,omitempty"` - // [Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB , and DC + // [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC Stp *string `json:"stp,omitempty"` Stop *string `json:"stop,omitempty"` StopTriggered bool `json:"stopTriggered,omitempty"` diff --git a/sdk/golang/pkg/generate/margin/order/types_get_order_by_client_oid_resp.go b/sdk/golang/pkg/generate/margin/order/types_get_order_by_client_oid_resp.go index 7586f9f3..ecbc571f 100644 --- a/sdk/golang/pkg/generate/margin/order/types_get_order_by_client_oid_resp.go +++ b/sdk/golang/pkg/generate/margin/order/types_get_order_by_client_oid_resp.go @@ -29,11 +29,11 @@ type GetOrderByClientOidResp struct { DealSize string `json:"dealSize,omitempty"` // Funds of filled transactions DealFunds string `json:"dealFunds,omitempty"` - // [Handling fees](doc://link/pages/5327739) + // [Handling fees](https://www.kucoin.com/docs-new/api-5327739) Fee string `json:"fee,omitempty"` // currency used to calculate trading fee FeeCurrency string `json:"feeCurrency,omitempty"` - // [Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB , and DC + // [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC Stp *string `json:"stp,omitempty"` Stop *string `json:"stop,omitempty"` StopTriggered bool `json:"stopTriggered,omitempty"` diff --git a/sdk/golang/pkg/generate/margin/order/types_get_order_by_order_id_resp.go b/sdk/golang/pkg/generate/margin/order/types_get_order_by_order_id_resp.go index 71ddc437..97bec085 100644 --- a/sdk/golang/pkg/generate/margin/order/types_get_order_by_order_id_resp.go +++ b/sdk/golang/pkg/generate/margin/order/types_get_order_by_order_id_resp.go @@ -29,11 +29,11 @@ type GetOrderByOrderIdResp struct { DealSize string `json:"dealSize,omitempty"` // Funds of filled transactions DealFunds string `json:"dealFunds,omitempty"` - // [Handling fees](doc://link/pages/5327739) + // [Handling fees](https://www.kucoin.com/docs-new/api-5327739) Fee string `json:"fee,omitempty"` // currency used to calculate trading fee FeeCurrency string `json:"feeCurrency,omitempty"` - // [Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB , and DC + // [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC Stp *string `json:"stp,omitempty"` Stop *string `json:"stop,omitempty"` StopTriggered bool `json:"stopTriggered,omitempty"` diff --git a/sdk/golang/pkg/generate/margin/order/types_get_trade_history_items.go b/sdk/golang/pkg/generate/margin/order/types_get_trade_history_items.go index 164edbe6..70484ac9 100644 --- a/sdk/golang/pkg/generate/margin/order/types_get_trade_history_items.go +++ b/sdk/golang/pkg/generate/margin/order/types_get_trade_history_items.go @@ -25,7 +25,7 @@ type GetTradeHistoryItems struct { Size string `json:"size,omitempty"` // Order Funds Funds string `json:"funds,omitempty"` - // [Handling fees](doc://link/pages/5327739) + // [Handling fees](https://www.kucoin.com/docs-new/api-5327739) Fee string `json:"fee,omitempty"` // Fee rate FeeRate string `json:"feeRate,omitempty"` diff --git a/sdk/golang/pkg/generate/spot/market/types_get_all_symbols_req.go b/sdk/golang/pkg/generate/spot/market/types_get_all_symbols_req.go index 88a75d87..20226e52 100644 --- a/sdk/golang/pkg/generate/spot/market/types_get_all_symbols_req.go +++ b/sdk/golang/pkg/generate/spot/market/types_get_all_symbols_req.go @@ -4,7 +4,7 @@ package market // GetAllSymbolsReq struct for GetAllSymbolsReq type GetAllSymbolsReq struct { - // [The trading market](apidog://link/endpoint/222921786) + // [The trading market](https://www.kucoin.com/docs-new/api-222921786) Market *string `json:"market,omitempty" url:"market,omitempty"` } @@ -36,7 +36,7 @@ func NewGetAllSymbolsReqBuilder() *GetAllSymbolsReqBuilder { return &GetAllSymbolsReqBuilder{obj: NewGetAllSymbolsReqWithDefaults()} } -// [The trading market](apidog://link/endpoint/222921786) +// [The trading market](https://www.kucoin.com/docs-new/api-222921786) func (builder *GetAllSymbolsReqBuilder) SetMarket(value string) *GetAllSymbolsReqBuilder { builder.obj.Market = &value return builder diff --git a/sdk/golang/pkg/generate/spot/order/types_add_order_old_req.go b/sdk/golang/pkg/generate/spot/order/types_add_order_old_req.go index 0ab43933..be4f35d6 100644 --- a/sdk/golang/pkg/generate/spot/order/types_add_order_old_req.go +++ b/sdk/golang/pkg/generate/spot/order/types_add_order_old_req.go @@ -14,13 +14,13 @@ type AddOrderOldReq struct { Type *string `json:"type,omitempty"` // Order placement remarks, length cannot exceed 20 characters (ASCII) Remark *string `json:"remark,omitempty"` - // [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC + // [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC Stp *string `json:"stp,omitempty"` // Specify price for order When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. Price *string `json:"price,omitempty"` // Specify quantity for order When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize. When **type** is market, select one out of two: size or funds Size *string `json:"size,omitempty"` - // [Time in force](doc://link/pages/338146) is a special strategy used during trading + // [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading TimeInForce *string `json:"timeInForce,omitempty"` // passive order labels, this is disabled when the order timing strategy is IOC or FOK PostOnly *bool `json:"postOnly,omitempty"` @@ -138,7 +138,7 @@ func (builder *AddOrderOldReqBuilder) SetRemark(value string) *AddOrderOldReqBui return builder } -// [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC +// [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC func (builder *AddOrderOldReqBuilder) SetStp(value string) *AddOrderOldReqBuilder { builder.obj.Stp = &value return builder @@ -156,7 +156,7 @@ func (builder *AddOrderOldReqBuilder) SetSize(value string) *AddOrderOldReqBuild return builder } -// [Time in force](doc://link/pages/338146) is a special strategy used during trading +// [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading func (builder *AddOrderOldReqBuilder) SetTimeInForce(value string) *AddOrderOldReqBuilder { builder.obj.TimeInForce = &value return builder diff --git a/sdk/golang/pkg/generate/spot/order/types_add_order_req.go b/sdk/golang/pkg/generate/spot/order/types_add_order_req.go index 4bfeda55..5bc9d072 100644 --- a/sdk/golang/pkg/generate/spot/order/types_add_order_req.go +++ b/sdk/golang/pkg/generate/spot/order/types_add_order_req.go @@ -14,19 +14,19 @@ type AddOrderReq struct { Type string `json:"type,omitempty"` // Order placement remarks, length cannot exceed 20 characters (ASCII) Remark *string `json:"remark,omitempty"` - // [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC + // [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC Stp *string `json:"stp,omitempty"` // Specify price for order When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. Price *string `json:"price,omitempty"` // Specify quantity for order When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize. When **type** is market, select one out of two: size or funds Size *string `json:"size,omitempty"` - // [Time in force](doc://link/pages/338146) is a special strategy used during trading + // [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading TimeInForce *string `json:"timeInForce,omitempty"` // passive order labels, this is disabled when the order timing strategy is IOC or FOK PostOnly *bool `json:"postOnly,omitempty"` - // [Hidden order](doc://link/pages/338146) or not (not shown in order book) + // [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) Hidden *bool `json:"hidden,omitempty"` - // Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146) + // Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) Iceberg *bool `json:"iceberg,omitempty"` // Maximum visible quantity in iceberg orders VisibleSize *string `json:"visibleSize,omitempty"` @@ -130,7 +130,7 @@ func (builder *AddOrderReqBuilder) SetRemark(value string) *AddOrderReqBuilder { return builder } -// [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC +// [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC func (builder *AddOrderReqBuilder) SetStp(value string) *AddOrderReqBuilder { builder.obj.Stp = &value return builder @@ -148,7 +148,7 @@ func (builder *AddOrderReqBuilder) SetSize(value string) *AddOrderReqBuilder { return builder } -// [Time in force](doc://link/pages/338146) is a special strategy used during trading +// [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading func (builder *AddOrderReqBuilder) SetTimeInForce(value string) *AddOrderReqBuilder { builder.obj.TimeInForce = &value return builder @@ -160,13 +160,13 @@ func (builder *AddOrderReqBuilder) SetPostOnly(value bool) *AddOrderReqBuilder { return builder } -// [Hidden order](doc://link/pages/338146) or not (not shown in order book) +// [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) func (builder *AddOrderReqBuilder) SetHidden(value bool) *AddOrderReqBuilder { builder.obj.Hidden = &value return builder } -// Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146) +// Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) func (builder *AddOrderReqBuilder) SetIceberg(value bool) *AddOrderReqBuilder { builder.obj.Iceberg = &value return builder diff --git a/sdk/golang/pkg/generate/spot/order/types_add_order_sync_req.go b/sdk/golang/pkg/generate/spot/order/types_add_order_sync_req.go index bebc63ef..eda9593f 100644 --- a/sdk/golang/pkg/generate/spot/order/types_add_order_sync_req.go +++ b/sdk/golang/pkg/generate/spot/order/types_add_order_sync_req.go @@ -14,19 +14,19 @@ type AddOrderSyncReq struct { Type string `json:"type,omitempty"` // Order placement remarks, length cannot exceed 20 characters (ASCII) Remark *string `json:"remark,omitempty"` - // [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC + // [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC Stp *string `json:"stp,omitempty"` // Specify price for order When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. Price *string `json:"price,omitempty"` // Specify quantity for order When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize. When **type** is market, select one out of two: size or funds Size *string `json:"size,omitempty"` - // [Time in force](doc://link/pages/338146) is a special strategy used during trading + // [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading TimeInForce *string `json:"timeInForce,omitempty"` // passive order labels, this is disabled when the order timing strategy is IOC or FOK PostOnly *bool `json:"postOnly,omitempty"` - // [Hidden order](doc://link/pages/338146) or not (not shown in order book) + // [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) Hidden *bool `json:"hidden,omitempty"` - // Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146) + // Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) Iceberg *bool `json:"iceberg,omitempty"` // Maximum visible quantity in iceberg orders VisibleSize *string `json:"visibleSize,omitempty"` @@ -130,7 +130,7 @@ func (builder *AddOrderSyncReqBuilder) SetRemark(value string) *AddOrderSyncReqB return builder } -// [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC +// [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC func (builder *AddOrderSyncReqBuilder) SetStp(value string) *AddOrderSyncReqBuilder { builder.obj.Stp = &value return builder @@ -148,7 +148,7 @@ func (builder *AddOrderSyncReqBuilder) SetSize(value string) *AddOrderSyncReqBui return builder } -// [Time in force](doc://link/pages/338146) is a special strategy used during trading +// [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading func (builder *AddOrderSyncReqBuilder) SetTimeInForce(value string) *AddOrderSyncReqBuilder { builder.obj.TimeInForce = &value return builder @@ -160,13 +160,13 @@ func (builder *AddOrderSyncReqBuilder) SetPostOnly(value bool) *AddOrderSyncReqB return builder } -// [Hidden order](doc://link/pages/338146) or not (not shown in order book) +// [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) func (builder *AddOrderSyncReqBuilder) SetHidden(value bool) *AddOrderSyncReqBuilder { builder.obj.Hidden = &value return builder } -// Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146) +// Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) func (builder *AddOrderSyncReqBuilder) SetIceberg(value bool) *AddOrderSyncReqBuilder { builder.obj.Iceberg = &value return builder diff --git a/sdk/golang/pkg/generate/spot/order/types_add_order_test_old_req.go b/sdk/golang/pkg/generate/spot/order/types_add_order_test_old_req.go index 536d3c3a..a97d9459 100644 --- a/sdk/golang/pkg/generate/spot/order/types_add_order_test_old_req.go +++ b/sdk/golang/pkg/generate/spot/order/types_add_order_test_old_req.go @@ -14,13 +14,13 @@ type AddOrderTestOldReq struct { Type *string `json:"type,omitempty"` // Order placement remarks, length cannot exceed 20 characters (ASCII) Remark *string `json:"remark,omitempty"` - // [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC + // [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC Stp *string `json:"stp,omitempty"` // Specify price for order When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. Price *string `json:"price,omitempty"` // Specify quantity for order When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize. When **type** is market, select one out of two: size or funds Size *string `json:"size,omitempty"` - // [Time in force](doc://link/pages/338146) is a special strategy used during trading + // [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading TimeInForce *string `json:"timeInForce,omitempty"` // passive order labels, this is disabled when the order timing strategy is IOC or FOK PostOnly *bool `json:"postOnly,omitempty"` @@ -138,7 +138,7 @@ func (builder *AddOrderTestOldReqBuilder) SetRemark(value string) *AddOrderTestO return builder } -// [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC +// [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC func (builder *AddOrderTestOldReqBuilder) SetStp(value string) *AddOrderTestOldReqBuilder { builder.obj.Stp = &value return builder @@ -156,7 +156,7 @@ func (builder *AddOrderTestOldReqBuilder) SetSize(value string) *AddOrderTestOld return builder } -// [Time in force](doc://link/pages/338146) is a special strategy used during trading +// [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading func (builder *AddOrderTestOldReqBuilder) SetTimeInForce(value string) *AddOrderTestOldReqBuilder { builder.obj.TimeInForce = &value return builder diff --git a/sdk/golang/pkg/generate/spot/order/types_add_order_test_req.go b/sdk/golang/pkg/generate/spot/order/types_add_order_test_req.go index bb2da284..a53761c5 100644 --- a/sdk/golang/pkg/generate/spot/order/types_add_order_test_req.go +++ b/sdk/golang/pkg/generate/spot/order/types_add_order_test_req.go @@ -14,19 +14,19 @@ type AddOrderTestReq struct { Type string `json:"type,omitempty"` // Order placement remarks, length cannot exceed 20 characters (ASCII) Remark *string `json:"remark,omitempty"` - // [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC + // [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC Stp *string `json:"stp,omitempty"` // Specify price for order When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. Price *string `json:"price,omitempty"` // Specify quantity for order When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize. When **type** is market, select one out of two: size or funds Size *string `json:"size,omitempty"` - // [Time in force](doc://link/pages/338146) is a special strategy used during trading + // [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading TimeInForce *string `json:"timeInForce,omitempty"` // passive order labels, this is disabled when the order timing strategy is IOC or FOK PostOnly *bool `json:"postOnly,omitempty"` - // [Hidden order](doc://link/pages/338146) or not (not shown in order book) + // [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) Hidden *bool `json:"hidden,omitempty"` - // Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146) + // Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) Iceberg *bool `json:"iceberg,omitempty"` // Maximum visible quantity in iceberg orders VisibleSize *string `json:"visibleSize,omitempty"` @@ -130,7 +130,7 @@ func (builder *AddOrderTestReqBuilder) SetRemark(value string) *AddOrderTestReqB return builder } -// [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC +// [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC func (builder *AddOrderTestReqBuilder) SetStp(value string) *AddOrderTestReqBuilder { builder.obj.Stp = &value return builder @@ -148,7 +148,7 @@ func (builder *AddOrderTestReqBuilder) SetSize(value string) *AddOrderTestReqBui return builder } -// [Time in force](doc://link/pages/338146) is a special strategy used during trading +// [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading func (builder *AddOrderTestReqBuilder) SetTimeInForce(value string) *AddOrderTestReqBuilder { builder.obj.TimeInForce = &value return builder @@ -160,13 +160,13 @@ func (builder *AddOrderTestReqBuilder) SetPostOnly(value bool) *AddOrderTestReqB return builder } -// [Hidden order](doc://link/pages/338146) or not (not shown in order book) +// [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) func (builder *AddOrderTestReqBuilder) SetHidden(value bool) *AddOrderTestReqBuilder { builder.obj.Hidden = &value return builder } -// Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146) +// Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) func (builder *AddOrderTestReqBuilder) SetIceberg(value bool) *AddOrderTestReqBuilder { builder.obj.Iceberg = &value return builder diff --git a/sdk/golang/pkg/generate/spot/order/types_add_stop_order_req.go b/sdk/golang/pkg/generate/spot/order/types_add_stop_order_req.go index a2f71087..a77e3ebe 100644 --- a/sdk/golang/pkg/generate/spot/order/types_add_stop_order_req.go +++ b/sdk/golang/pkg/generate/spot/order/types_add_stop_order_req.go @@ -14,19 +14,19 @@ type AddStopOrderReq struct { Type string `json:"type,omitempty"` // Order placement remarks, length cannot exceed 20 characters (ASCII) Remark *string `json:"remark,omitempty"` - // [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC + // [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC Stp *string `json:"stp,omitempty"` // Specify price for order, not need for market order. When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. Price *string `json:"price,omitempty"` // Specify quantity for order When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize. When **type** is market, select one out of two: size or funds Size *string `json:"size,omitempty"` - // [Time in force](doc://link/pages/338146) is a special strategy used during trading. Required for limit orders. + // [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading. Required for limit orders. TimeInForce *string `json:"timeInForce,omitempty"` // passive order labels, this is disabled when the order timing strategy is IOC or FOK if **type** is limit. PostOnly *bool `json:"postOnly,omitempty"` - // [Hidden order](doc://link/pages/338146) or not (not shown in order book) + // [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) Hidden *bool `json:"hidden,omitempty"` - // Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146) + // Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) Iceberg *bool `json:"iceberg,omitempty"` // When **type** is limit, this is Maximum visible quantity in iceberg orders. VisibleSize *string `json:"visibleSize,omitempty"` @@ -134,7 +134,7 @@ func (builder *AddStopOrderReqBuilder) SetRemark(value string) *AddStopOrderReqB return builder } -// [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC +// [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC func (builder *AddStopOrderReqBuilder) SetStp(value string) *AddStopOrderReqBuilder { builder.obj.Stp = &value return builder @@ -152,7 +152,7 @@ func (builder *AddStopOrderReqBuilder) SetSize(value string) *AddStopOrderReqBui return builder } -// [Time in force](doc://link/pages/338146) is a special strategy used during trading. Required for limit orders. +// [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading. Required for limit orders. func (builder *AddStopOrderReqBuilder) SetTimeInForce(value string) *AddStopOrderReqBuilder { builder.obj.TimeInForce = &value return builder @@ -164,13 +164,13 @@ func (builder *AddStopOrderReqBuilder) SetPostOnly(value bool) *AddStopOrderReqB return builder } -// [Hidden order](doc://link/pages/338146) or not (not shown in order book) +// [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) func (builder *AddStopOrderReqBuilder) SetHidden(value bool) *AddStopOrderReqBuilder { builder.obj.Hidden = &value return builder } -// Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146) +// Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) func (builder *AddStopOrderReqBuilder) SetIceberg(value bool) *AddStopOrderReqBuilder { builder.obj.Iceberg = &value return builder diff --git a/sdk/golang/pkg/generate/spot/order/types_batch_add_orders_old_order_list.go b/sdk/golang/pkg/generate/spot/order/types_batch_add_orders_old_order_list.go index ab76176c..a0eb5078 100644 --- a/sdk/golang/pkg/generate/spot/order/types_batch_add_orders_old_order_list.go +++ b/sdk/golang/pkg/generate/spot/order/types_batch_add_orders_old_order_list.go @@ -14,13 +14,13 @@ type BatchAddOrdersOldOrderList struct { Type *string `json:"type,omitempty"` // Order placement remarks, length cannot exceed 20 characters (ASCII) Remark *string `json:"remark,omitempty"` - // [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC + // [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC Stp *string `json:"stp,omitempty"` // Specify price for order When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. Price string `json:"price,omitempty"` // Specify quantity for order When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize. When **type** is market, select one out of two: size or funds Size string `json:"size,omitempty"` - // [Time in force](doc://link/pages/338146) is a special strategy used during trading + // [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading TimeInForce *string `json:"timeInForce,omitempty"` // passive order labels, this is disabled when the order timing strategy is IOC or FOK PostOnly *bool `json:"postOnly,omitempty"` @@ -143,7 +143,7 @@ func (builder *BatchAddOrdersOldOrderListBuilder) SetRemark(value string) *Batch return builder } -// [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC +// [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC func (builder *BatchAddOrdersOldOrderListBuilder) SetStp(value string) *BatchAddOrdersOldOrderListBuilder { builder.obj.Stp = &value return builder @@ -161,7 +161,7 @@ func (builder *BatchAddOrdersOldOrderListBuilder) SetSize(value string) *BatchAd return builder } -// [Time in force](doc://link/pages/338146) is a special strategy used during trading +// [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading func (builder *BatchAddOrdersOldOrderListBuilder) SetTimeInForce(value string) *BatchAddOrdersOldOrderListBuilder { builder.obj.TimeInForce = &value return builder diff --git a/sdk/golang/pkg/generate/spot/order/types_batch_add_orders_order_list.go b/sdk/golang/pkg/generate/spot/order/types_batch_add_orders_order_list.go index 4f494380..7afbbe92 100644 --- a/sdk/golang/pkg/generate/spot/order/types_batch_add_orders_order_list.go +++ b/sdk/golang/pkg/generate/spot/order/types_batch_add_orders_order_list.go @@ -10,7 +10,7 @@ type BatchAddOrdersOrderList struct { Symbol string `json:"symbol,omitempty"` // Specify if the order is an 'limit' order or 'market' order. Type string `json:"type,omitempty"` - // [Time in force](doc://link/pages/338146) is a special strategy used during trading + // [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading TimeInForce *string `json:"timeInForce,omitempty"` // Specify if the order is to 'buy' or 'sell' Side string `json:"side,omitempty"` @@ -18,15 +18,15 @@ type BatchAddOrdersOrderList struct { Price string `json:"price,omitempty"` // Specify quantity for order When **type** is limit, select one out of two: size or funds, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize. When **type** is market, select one out of two: size or funds Size *string `json:"size,omitempty"` - // [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC + // [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC Stp *string `json:"stp,omitempty"` // Cancel after n seconds๏ผŒthe order timing strategy is GTT CancelAfter *int64 `json:"cancelAfter,omitempty"` // passive order labels, this is disabled when the order timing strategy is IOC or FOK PostOnly *bool `json:"postOnly,omitempty"` - // [Hidden order](doc://link/pages/338146) or not (not shown in order book) + // [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) Hidden *bool `json:"hidden,omitempty"` - // Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146) + // Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) Iceberg *bool `json:"iceberg,omitempty"` // Maximum visible quantity in iceberg orders VisibleSize *string `json:"visibleSize,omitempty"` @@ -119,7 +119,7 @@ func (builder *BatchAddOrdersOrderListBuilder) SetType(value string) *BatchAddOr return builder } -// [Time in force](doc://link/pages/338146) is a special strategy used during trading +// [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading func (builder *BatchAddOrdersOrderListBuilder) SetTimeInForce(value string) *BatchAddOrdersOrderListBuilder { builder.obj.TimeInForce = &value return builder @@ -143,7 +143,7 @@ func (builder *BatchAddOrdersOrderListBuilder) SetSize(value string) *BatchAddOr return builder } -// [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC +// [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC func (builder *BatchAddOrdersOrderListBuilder) SetStp(value string) *BatchAddOrdersOrderListBuilder { builder.obj.Stp = &value return builder @@ -161,13 +161,13 @@ func (builder *BatchAddOrdersOrderListBuilder) SetPostOnly(value bool) *BatchAdd return builder } -// [Hidden order](doc://link/pages/338146) or not (not shown in order book) +// [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) func (builder *BatchAddOrdersOrderListBuilder) SetHidden(value bool) *BatchAddOrdersOrderListBuilder { builder.obj.Hidden = &value return builder } -// Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146) +// Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) func (builder *BatchAddOrdersOrderListBuilder) SetIceberg(value bool) *BatchAddOrdersOrderListBuilder { builder.obj.Iceberg = &value return builder diff --git a/sdk/golang/pkg/generate/spot/order/types_batch_add_orders_sync_order_list.go b/sdk/golang/pkg/generate/spot/order/types_batch_add_orders_sync_order_list.go index a2604e89..61dea2bd 100644 --- a/sdk/golang/pkg/generate/spot/order/types_batch_add_orders_sync_order_list.go +++ b/sdk/golang/pkg/generate/spot/order/types_batch_add_orders_sync_order_list.go @@ -10,7 +10,7 @@ type BatchAddOrdersSyncOrderList struct { Symbol string `json:"symbol,omitempty"` // Specify if the order is an 'limit' order or 'market' order. Type string `json:"type,omitempty"` - // [Time in force](doc://link/pages/338146) is a special strategy used during trading + // [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading TimeInForce *string `json:"timeInForce,omitempty"` // Specify if the order is to 'buy' or 'sell' Side string `json:"side,omitempty"` @@ -18,15 +18,15 @@ type BatchAddOrdersSyncOrderList struct { Price string `json:"price,omitempty"` // Specify quantity for order When **type** is limit, select one out of two: size or funds, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize. When **type** is market, select one out of two: size or funds Size *string `json:"size,omitempty"` - // [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC + // [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC Stp *string `json:"stp,omitempty"` // Cancel after n seconds๏ผŒthe order timing strategy is GTT CancelAfter *int64 `json:"cancelAfter,omitempty"` // passive order labels, this is disabled when the order timing strategy is IOC or FOK PostOnly *bool `json:"postOnly,omitempty"` - // [Hidden order](doc://link/pages/338146) or not (not shown in order book) + // [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) Hidden *bool `json:"hidden,omitempty"` - // Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146) + // Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) Iceberg *bool `json:"iceberg,omitempty"` // Maximum visible quantity in iceberg orders VisibleSize *string `json:"visibleSize,omitempty"` @@ -119,7 +119,7 @@ func (builder *BatchAddOrdersSyncOrderListBuilder) SetType(value string) *BatchA return builder } -// [Time in force](doc://link/pages/338146) is a special strategy used during trading +// [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading func (builder *BatchAddOrdersSyncOrderListBuilder) SetTimeInForce(value string) *BatchAddOrdersSyncOrderListBuilder { builder.obj.TimeInForce = &value return builder @@ -143,7 +143,7 @@ func (builder *BatchAddOrdersSyncOrderListBuilder) SetSize(value string) *BatchA return builder } -// [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC +// [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC func (builder *BatchAddOrdersSyncOrderListBuilder) SetStp(value string) *BatchAddOrdersSyncOrderListBuilder { builder.obj.Stp = &value return builder @@ -161,13 +161,13 @@ func (builder *BatchAddOrdersSyncOrderListBuilder) SetPostOnly(value bool) *Batc return builder } -// [Hidden order](doc://link/pages/338146) or not (not shown in order book) +// [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) func (builder *BatchAddOrdersSyncOrderListBuilder) SetHidden(value bool) *BatchAddOrdersSyncOrderListBuilder { builder.obj.Hidden = &value return builder } -// Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146) +// Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) func (builder *BatchAddOrdersSyncOrderListBuilder) SetIceberg(value bool) *BatchAddOrdersSyncOrderListBuilder { builder.obj.Iceberg = &value return builder diff --git a/sdk/golang/pkg/generate/spot/order/types_get_closed_orders_items.go b/sdk/golang/pkg/generate/spot/order/types_get_closed_orders_items.go index c8b74640..2763cecc 100644 --- a/sdk/golang/pkg/generate/spot/order/types_get_closed_orders_items.go +++ b/sdk/golang/pkg/generate/spot/order/types_get_closed_orders_items.go @@ -23,11 +23,11 @@ type GetClosedOrdersItems struct { DealSize string `json:"dealSize,omitempty"` // Funds of filled transactions DealFunds string `json:"dealFunds,omitempty"` - // [Handling fees](doc://link/pages/5327739) + // [Handling fees](https://www.kucoin.com/docs-new/api-5327739) Fee string `json:"fee,omitempty"` // currency used to calculate trading fee FeeCurrency string `json:"feeCurrency,omitempty"` - // [Self Trade Prevention](doc://link/pages/5176570) + // [Self Trade Prevention](https://www.kucoin.com/docs-new/api-5176570) Stp *string `json:"stp,omitempty"` // Time in force TimeInForce string `json:"timeInForce,omitempty"` diff --git a/sdk/golang/pkg/generate/spot/order/types_get_open_orders_data.go b/sdk/golang/pkg/generate/spot/order/types_get_open_orders_data.go index 9f582af7..a8b490b0 100644 --- a/sdk/golang/pkg/generate/spot/order/types_get_open_orders_data.go +++ b/sdk/golang/pkg/generate/spot/order/types_get_open_orders_data.go @@ -23,11 +23,11 @@ type GetOpenOrdersData struct { DealSize string `json:"dealSize,omitempty"` // Funds of filled transactions DealFunds string `json:"dealFunds,omitempty"` - // [Handling fees](doc://link/pages/5327739) + // [Handling fees](https://www.kucoin.com/docs-new/api-5327739) Fee string `json:"fee,omitempty"` // currency used to calculate trading fee FeeCurrency string `json:"feeCurrency,omitempty"` - // [Self Trade Prevention](doc://link/pages/5176570) + // [Self Trade Prevention](https://www.kucoin.com/docs-new/api-5176570) Stp *string `json:"stp,omitempty"` // Time in force TimeInForce string `json:"timeInForce,omitempty"` diff --git a/sdk/golang/pkg/generate/spot/order/types_get_order_by_client_oid_resp.go b/sdk/golang/pkg/generate/spot/order/types_get_order_by_client_oid_resp.go index 8c6ec746..fb143295 100644 --- a/sdk/golang/pkg/generate/spot/order/types_get_order_by_client_oid_resp.go +++ b/sdk/golang/pkg/generate/spot/order/types_get_order_by_client_oid_resp.go @@ -29,11 +29,11 @@ type GetOrderByClientOidResp struct { DealSize string `json:"dealSize,omitempty"` // Funds of filled transactions DealFunds string `json:"dealFunds,omitempty"` - // [Handling fees](doc://link/pages/5327739) + // [Handling fees](https://www.kucoin.com/docs-new/api-5327739) Fee string `json:"fee,omitempty"` // currency used to calculate trading fee FeeCurrency string `json:"feeCurrency,omitempty"` - // [Self Trade Prevention](doc://link/pages/5176570) + // [Self Trade Prevention](https://www.kucoin.com/docs-new/api-5176570) Stp *string `json:"stp,omitempty"` // Time in force TimeInForce string `json:"timeInForce,omitempty"` diff --git a/sdk/golang/pkg/generate/spot/order/types_get_order_by_order_id_resp.go b/sdk/golang/pkg/generate/spot/order/types_get_order_by_order_id_resp.go index 70a3e25e..9cd700c4 100644 --- a/sdk/golang/pkg/generate/spot/order/types_get_order_by_order_id_resp.go +++ b/sdk/golang/pkg/generate/spot/order/types_get_order_by_order_id_resp.go @@ -29,11 +29,11 @@ type GetOrderByOrderIdResp struct { DealSize string `json:"dealSize,omitempty"` // Funds of filled transactions DealFunds string `json:"dealFunds,omitempty"` - // [Handling fees](doc://link/pages/5327739) + // [Handling fees](https://www.kucoin.com/docs-new/api-5327739) Fee string `json:"fee,omitempty"` // currency used to calculate trading fee FeeCurrency string `json:"feeCurrency,omitempty"` - // [Self Trade Prevention](doc://link/pages/5176570) + // [Self Trade Prevention](https://www.kucoin.com/docs-new/api-5176570) Stp *string `json:"stp,omitempty"` // Time in force TimeInForce string `json:"timeInForce,omitempty"` diff --git a/sdk/golang/pkg/generate/spot/order/types_get_trade_history_items.go b/sdk/golang/pkg/generate/spot/order/types_get_trade_history_items.go index ab4816d2..dd760c27 100644 --- a/sdk/golang/pkg/generate/spot/order/types_get_trade_history_items.go +++ b/sdk/golang/pkg/generate/spot/order/types_get_trade_history_items.go @@ -25,7 +25,7 @@ type GetTradeHistoryItems struct { Size string `json:"size,omitempty"` // Order Funds Funds string `json:"funds,omitempty"` - // [Handling fees](doc://link/pages/5327739) + // [Handling fees](https://www.kucoin.com/docs-new/api-5327739) Fee string `json:"fee,omitempty"` // Fee rate FeeRate string `json:"feeRate,omitempty"` diff --git a/sdk/golang/pkg/generate/spot/order/types_get_trade_history_old_items.go b/sdk/golang/pkg/generate/spot/order/types_get_trade_history_old_items.go index 200962d7..278c8123 100644 --- a/sdk/golang/pkg/generate/spot/order/types_get_trade_history_old_items.go +++ b/sdk/golang/pkg/generate/spot/order/types_get_trade_history_old_items.go @@ -22,7 +22,7 @@ type GetTradeHistoryOldItems struct { Size *string `json:"size,omitempty"` // Order Funds Funds *string `json:"funds,omitempty"` - // [Handling fees](doc://link/pages/5327739) + // [Handling fees](https://www.kucoin.com/docs-new/api-5327739) Fee *string `json:"fee,omitempty"` // Fee rate FeeRate *string `json:"feeRate,omitempty"` diff --git a/sdk/golang/pkg/generate/spot/spotprivate/types_order_v1_event.go b/sdk/golang/pkg/generate/spot/spotprivate/types_order_v1_event.go index f223e664..c65dc201 100644 --- a/sdk/golang/pkg/generate/spot/spotprivate/types_order_v1_event.go +++ b/sdk/golang/pkg/generate/spot/spotprivate/types_order_v1_event.go @@ -47,7 +47,7 @@ type OrderV1Event struct { OldSize *string `json:"oldSize,omitempty"` // Actual Fee Type FeeType *string `json:"feeType,omitempty"` - // Actual transaction order type, If the counterparty order is an [Hidden/Iceberg Order](doc://link/pages/338146), even if it is a maker order, this param will be displayed as taker. For actual trading fee, please refer to the **feeType** + // Actual transaction order type, If the counterparty order is an [Hidden/Iceberg Order](https://www.kucoin.com/docs-new/doc-338146), even if it is a maker order, this param will be displayed as taker. For actual trading fee, please refer to the **feeType** Liquidity *string `json:"liquidity,omitempty"` // Match Price (when the type is \"match\") MatchPrice *string `json:"matchPrice,omitempty"` diff --git a/sdk/golang/pkg/generate/spot/spotprivate/types_order_v2_event.go b/sdk/golang/pkg/generate/spot/spotprivate/types_order_v2_event.go index 6905ca3e..0ab62741 100644 --- a/sdk/golang/pkg/generate/spot/spotprivate/types_order_v2_event.go +++ b/sdk/golang/pkg/generate/spot/spotprivate/types_order_v2_event.go @@ -47,7 +47,7 @@ type OrderV2Event struct { OldSize *string `json:"oldSize,omitempty"` // Actual Fee Type FeeType *string `json:"feeType,omitempty"` - // Actual transaction order type, If the counterparty order is an [Hidden/Iceberg Order](doc://link/pages/338146), even if it is a maker order, this param will be displayed as taker. For actual trading fee, please refer to the **feeType** + // Actual transaction order type, If the counterparty order is an [Hidden/Iceberg Order](https://www.kucoin.com/docs-new/doc-338146), even if it is a maker order, this param will be displayed as taker. For actual trading fee, please refer to the **feeType** Liquidity *string `json:"liquidity,omitempty"` // Match Price (when the type is \"match\") MatchPrice *string `json:"matchPrice,omitempty"` diff --git a/sdk/postman/collection-Abandoned Endpoints.json b/sdk/postman/collection-Abandoned Endpoints.json index 5006b574..03710a8e 100644 --- a/sdk/postman/collection-Abandoned Endpoints.json +++ b/sdk/postman/collection-Abandoned Endpoints.json @@ -3087,11 +3087,11 @@ ], "variable": [ { - "key": "orderId", + "key": "clientOid", "value": "" }, { - "key": "clientOid", + "key": "orderId", "value": "" }, { @@ -3106,7 +3106,7 @@ "type": "text/javascript", "packages": {}, "exec": [ - "function extractPathVariable(str) {\n const regex = /^\\{\\{(.+?)\\}\\}$/;\n const match = str.match(regex);\n if (match) {\n return match[1];\n }\n return null;\n}\n\nfunction hasAnyFieldEmpty(obj) {\n for (const key in obj) {\n if (obj[key] === \"\" || obj[key] === null || obj[key] === undefined) {\n return true;\n }\n }\n return false;\n}\n\nfunction sign(text, secret) {\n const hash = CryptoJS.HmacSHA256(text, secret);\n return CryptoJS.enc.Base64.stringify(hash)\n}\n\nfunction auth(apiKey, method, url, data) {\n if (hasAnyFieldEmpty(apiKey)) {\n console.warn('The API key-related information is not configured; only the public channel API is accessible.')\n return {'User-Agent': `Kucoin-Universal-Postman-SDK/`}\n }\n\n const timestamp = Date.now();\n const text = timestamp + method.toUpperCase() + url + data;\n const signature = sign(text, apiKey.secret);\n return {\n 'KC-API-KEY': apiKey.key,\n 'KC-API-SIGN': signature,\n 'KC-API-TIMESTAMP': timestamp.toString(),\n 'KC-API-PASSPHRASE': sign(apiKey.passphrase || '', apiKey.secret),\n 'Content-Type': 'application/json',\n 'User-Agent': `Kucoin-Universal-Postman-SDK/`,\n 'KC-API-KEY-VERSION': 2,\n };\n}\n\nlet key = pm.environment.get('API_KEY')\nlet secret = pm.environment.get('API_SECRET')\nlet passphrase = pm.environment.get('API_PASSPHRASE')\n\nlet url = pm.request.url.getPathWithQuery()\nlet method = pm.request.method\nlet body = pm.request.body ? pm.request.body.toString() : ''\n\nfor (const index in pm.request.url.path) {\n path = pm.request.url.path[index]\n pathVar = extractPathVariable(path)\n if (pathVar != null) {\n let collectionVariable = pm.collectionVariables.get(pathVar);\n if (collectionVariable != null) {\n url = url.replace(path, collectionVariable)\n } else {\n console.warn('no path variable set: ' + path)\n }\n }\n}\n\nheader = auth({ key: key, passphrase: passphrase, secret: secret }, method, url, body)\n\nfor (const [headerName, headerValue] of Object.entries(header)) {\n pm.request.headers.add({ key: headerName, value: headerValue })\n}" + "function extractPathVariable(str) {\n const regex = /^\\{\\{(.+?)\\}\\}$/;\n const match = str.match(regex);\n if (match) {\n return match[1];\n }\n return null;\n}\n\nfunction hasAnyFieldEmpty(obj) {\n for (const key in obj) {\n if (obj[key] === \"\" || obj[key] === null || obj[key] === undefined) {\n return true;\n }\n }\n return false;\n}\n\nfunction sign(text, secret) {\n const hash = CryptoJS.HmacSHA256(text, secret);\n return CryptoJS.enc.Base64.stringify(hash)\n}\n\nfunction auth(apiKey, method, url, data) {\n if (hasAnyFieldEmpty(apiKey)) {\n console.warn('The API key-related information is not configured; only the public channel API is accessible.')\n return {'User-Agent': `Kucoin-Universal-Postman-SDK/v1.0.0`}\n }\n\n const timestamp = Date.now();\n const text = timestamp + method.toUpperCase() + url + data;\n const signature = sign(text, apiKey.secret);\n return {\n 'KC-API-KEY': apiKey.key,\n 'KC-API-SIGN': signature,\n 'KC-API-TIMESTAMP': timestamp.toString(),\n 'KC-API-PASSPHRASE': sign(apiKey.passphrase || '', apiKey.secret),\n 'Content-Type': 'application/json',\n 'User-Agent': `Kucoin-Universal-Postman-SDK/v1.0.0`,\n 'KC-API-KEY-VERSION': 2,\n };\n}\n\nlet key = pm.environment.get('API_KEY')\nlet secret = pm.environment.get('API_SECRET')\nlet passphrase = pm.environment.get('API_PASSPHRASE')\n\nlet url = pm.request.url.getPathWithQuery()\nlet method = pm.request.method\nlet body = pm.request.body ? pm.request.body.toString() : ''\n\nfor (const index in pm.request.url.path) {\n path = pm.request.url.path[index]\n pathVar = extractPathVariable(path)\n if (pathVar != null) {\n let collectionVariable = pm.collectionVariables.get(pathVar);\n if (collectionVariable != null) {\n url = url.replace(path, collectionVariable)\n } else {\n console.warn('no path variable set: ' + path)\n }\n }\n}\n\nheader = auth({ key: key, passphrase: passphrase, secret: secret }, method, url, body)\n\nfor (const [headerName, headerValue] of Object.entries(header)) {\n pm.request.headers.add({ key: headerName, value: headerValue })\n}" ] } }, diff --git a/sdk/postman/collection-REST.json b/sdk/postman/collection-REST.json index d3646484..b0d12d39 100644 --- a/sdk/postman/collection-REST.json +++ b/sdk/postman/collection-REST.json @@ -18841,7 +18841,7 @@ "type": "text/javascript", "packages": {}, "exec": [ - "\nfunction extractPathVariable(str) {\n const regex = /^\\{\\{(.+?)\\}\\}$/;\n const match = str.match(regex);\n if (match) {\n return match[1];\n }\n return null;\n}\n\nfunction hasAnyFieldEmpty(obj) {\n for (const key in obj) {\n if (obj[key] === \"\" || obj[key] === null || obj[key] === undefined) {\n return true;\n }\n }\n return false;\n}\n\nfunction sign(text, secret) {\n const hash = CryptoJS.HmacSHA256(text, secret);\n return CryptoJS.enc.Base64.stringify(hash)\n}\n\nfunction auth(apiKey, method, url, data) {\n if (hasAnyFieldEmpty(apiKey)) {\n console.warn('The API key-related (or broker-related) information is not configured. Please check the fields in the environment variables.')\n return {'User-Agent': `Kucoin-Universal-Postman-SDK/`}\n }\n\n\n const timestamp = Date.now();\n const text = timestamp + method.toUpperCase() + url + data;\n const signature = sign(text, apiKey.secret);\n const brokerText = timestamp + apiKey.partner + apiKey.key;\n const brokerSignature = sign(brokerText, apiKey.brokerKey);\n return {\n 'KC-API-KEY': apiKey.key,\n 'KC-API-SIGN': signature,\n 'KC-API-TIMESTAMP': timestamp.toString(),\n 'KC-API-PASSPHRASE': sign(apiKey.passphrase || '', apiKey.secret),\n 'Content-Type': 'application/json',\n 'User-Agent': `Kucoin-Universal-Postman-SDK/`,\n 'KC-API-KEY-VERSION': 2,\n 'KC-API-PARTNER': apiKey.partner,\n 'KC-BROKER-NAME': apiKey.brokerName,\n 'KC-API-PARTNER-VERIFY': 'true',\n 'KC-API-PARTNER-SIGN': brokerSignature,\n };\n}\n\nlet key = pm.environment.get('API_KEY')\nlet secret = pm.environment.get('API_SECRET')\nlet passphrase = pm.environment.get('API_PASSPHRASE')\n\nlet brokerName = pm.environment.get('BROKER_NAME')\nlet partner = pm.environment.get('BROKER_PARTNER')\nlet brokerKey = pm.environment.get('BROKER_KEY')\n\nlet url = pm.request.url.getPathWithQuery()\nlet method = pm.request.method\nlet body = pm.request.body ? pm.request.body.toString() : ''\n\nfor (const index in pm.request.url.path) {\n path = pm.request.url.path[index]\n pathVar = extractPathVariable(path)\n if (pathVar != null) {\n let collectionVariable = pm.collectionVariables.get(pathVar);\n if (collectionVariable != null) {\n url = url.replace(path, collectionVariable)\n } else {\n console.warn('no path variable set: ' + path)\n }\n }\n}\n\nheader = auth({\n key: key, passphrase: passphrase, secret: secret, brokerName: brokerName, partner: partner, brokerKey: brokerKey\n}, method, url, body)\n\nfor (const [headerName, headerValue] of Object.entries(header)) {\n pm.request.headers.add({ key: headerName, value: headerValue })\n}" + "\nfunction extractPathVariable(str) {\n const regex = /^\\{\\{(.+?)\\}\\}$/;\n const match = str.match(regex);\n if (match) {\n return match[1];\n }\n return null;\n}\n\nfunction hasAnyFieldEmpty(obj) {\n for (const key in obj) {\n if (obj[key] === \"\" || obj[key] === null || obj[key] === undefined) {\n return true;\n }\n }\n return false;\n}\n\nfunction sign(text, secret) {\n const hash = CryptoJS.HmacSHA256(text, secret);\n return CryptoJS.enc.Base64.stringify(hash)\n}\n\nfunction auth(apiKey, method, url, data) {\n if (hasAnyFieldEmpty(apiKey)) {\n console.warn('The API key-related (or broker-related) information is not configured. Please check the fields in the environment variables.')\n return {'User-Agent': `Kucoin-Universal-Postman-SDK/v1.0.0`}\n }\n\n\n const timestamp = Date.now();\n const text = timestamp + method.toUpperCase() + url + data;\n const signature = sign(text, apiKey.secret);\n const brokerText = timestamp + apiKey.partner + apiKey.key;\n const brokerSignature = sign(brokerText, apiKey.brokerKey);\n return {\n 'KC-API-KEY': apiKey.key,\n 'KC-API-SIGN': signature,\n 'KC-API-TIMESTAMP': timestamp.toString(),\n 'KC-API-PASSPHRASE': sign(apiKey.passphrase || '', apiKey.secret),\n 'Content-Type': 'application/json',\n 'User-Agent': `Kucoin-Universal-Postman-SDK/v1.0.0`,\n 'KC-API-KEY-VERSION': 2,\n 'KC-API-PARTNER': apiKey.partner,\n 'KC-BROKER-NAME': apiKey.brokerName,\n 'KC-API-PARTNER-VERIFY': 'true',\n 'KC-API-PARTNER-SIGN': brokerSignature,\n };\n}\n\nlet key = pm.environment.get('API_KEY')\nlet secret = pm.environment.get('API_SECRET')\nlet passphrase = pm.environment.get('API_PASSPHRASE')\n\nlet brokerName = pm.environment.get('BROKER_NAME')\nlet partner = pm.environment.get('BROKER_PARTNER')\nlet brokerKey = pm.environment.get('BROKER_KEY')\n\nlet url = pm.request.url.getPathWithQuery()\nlet method = pm.request.method\nlet body = pm.request.body ? pm.request.body.toString() : ''\n\nfor (const index in pm.request.url.path) {\n path = pm.request.url.path[index]\n pathVar = extractPathVariable(path)\n if (pathVar != null) {\n let collectionVariable = pm.collectionVariables.get(pathVar);\n if (collectionVariable != null) {\n url = url.replace(path, collectionVariable)\n } else {\n console.warn('no path variable set: ' + path)\n }\n }\n}\n\nheader = auth({\n key: key, passphrase: passphrase, secret: secret, brokerName: brokerName, partner: partner, brokerKey: brokerKey\n}, method, url, body)\n\nfor (const [headerName, headerValue] of Object.entries(header)) {\n pm.request.headers.add({ key: headerName, value: headerValue })\n}" ] } }, @@ -18864,15 +18864,15 @@ "value": "" }, { - "key": "subUserId", + "key": "orderId", "value": "" }, { - "key": "size", + "key": "symbol", "value": "" }, { - "key": "accountId", + "key": "currency", "value": "" }, { @@ -18880,19 +18880,19 @@ "value": "" }, { - "key": "currency", + "key": "order-id", "value": "" }, { - "key": "symbol", + "key": "accountId", "value": "" }, { - "key": "orderId", + "key": "size", "value": "" }, { - "key": "order-id", + "key": "subUserId", "value": "" } ], @@ -18903,7 +18903,7 @@ "type": "text/javascript", "packages": {}, "exec": [ - "function extractPathVariable(str) {\n const regex = /^\\{\\{(.+?)\\}\\}$/;\n const match = str.match(regex);\n if (match) {\n return match[1];\n }\n return null;\n}\n\nfunction hasAnyFieldEmpty(obj) {\n for (const key in obj) {\n if (obj[key] === \"\" || obj[key] === null || obj[key] === undefined) {\n return true;\n }\n }\n return false;\n}\n\nfunction sign(text, secret) {\n const hash = CryptoJS.HmacSHA256(text, secret);\n return CryptoJS.enc.Base64.stringify(hash)\n}\n\nfunction auth(apiKey, method, url, data) {\n if (hasAnyFieldEmpty(apiKey)) {\n console.warn('The API key-related information is not configured; only the public channel API is accessible.')\n return {'User-Agent': `Kucoin-Universal-Postman-SDK/`}\n }\n\n const timestamp = Date.now();\n const text = timestamp + method.toUpperCase() + url + data;\n const signature = sign(text, apiKey.secret);\n return {\n 'KC-API-KEY': apiKey.key,\n 'KC-API-SIGN': signature,\n 'KC-API-TIMESTAMP': timestamp.toString(),\n 'KC-API-PASSPHRASE': sign(apiKey.passphrase || '', apiKey.secret),\n 'Content-Type': 'application/json',\n 'User-Agent': `Kucoin-Universal-Postman-SDK/`,\n 'KC-API-KEY-VERSION': 2,\n };\n}\n\nlet key = pm.environment.get('API_KEY')\nlet secret = pm.environment.get('API_SECRET')\nlet passphrase = pm.environment.get('API_PASSPHRASE')\n\nlet url = pm.request.url.getPathWithQuery()\nlet method = pm.request.method\nlet body = pm.request.body ? pm.request.body.toString() : ''\n\nfor (const index in pm.request.url.path) {\n path = pm.request.url.path[index]\n pathVar = extractPathVariable(path)\n if (pathVar != null) {\n let collectionVariable = pm.collectionVariables.get(pathVar);\n if (collectionVariable != null) {\n url = url.replace(path, collectionVariable)\n } else {\n console.warn('no path variable set: ' + path)\n }\n }\n}\n\nheader = auth({ key: key, passphrase: passphrase, secret: secret }, method, url, body)\n\nfor (const [headerName, headerValue] of Object.entries(header)) {\n pm.request.headers.add({ key: headerName, value: headerValue })\n}" + "function extractPathVariable(str) {\n const regex = /^\\{\\{(.+?)\\}\\}$/;\n const match = str.match(regex);\n if (match) {\n return match[1];\n }\n return null;\n}\n\nfunction hasAnyFieldEmpty(obj) {\n for (const key in obj) {\n if (obj[key] === \"\" || obj[key] === null || obj[key] === undefined) {\n return true;\n }\n }\n return false;\n}\n\nfunction sign(text, secret) {\n const hash = CryptoJS.HmacSHA256(text, secret);\n return CryptoJS.enc.Base64.stringify(hash)\n}\n\nfunction auth(apiKey, method, url, data) {\n if (hasAnyFieldEmpty(apiKey)) {\n console.warn('The API key-related information is not configured; only the public channel API is accessible.')\n return {'User-Agent': `Kucoin-Universal-Postman-SDK/v1.0.0`}\n }\n\n const timestamp = Date.now();\n const text = timestamp + method.toUpperCase() + url + data;\n const signature = sign(text, apiKey.secret);\n return {\n 'KC-API-KEY': apiKey.key,\n 'KC-API-SIGN': signature,\n 'KC-API-TIMESTAMP': timestamp.toString(),\n 'KC-API-PASSPHRASE': sign(apiKey.passphrase || '', apiKey.secret),\n 'Content-Type': 'application/json',\n 'User-Agent': `Kucoin-Universal-Postman-SDK/v1.0.0`,\n 'KC-API-KEY-VERSION': 2,\n };\n}\n\nlet key = pm.environment.get('API_KEY')\nlet secret = pm.environment.get('API_SECRET')\nlet passphrase = pm.environment.get('API_PASSPHRASE')\n\nlet url = pm.request.url.getPathWithQuery()\nlet method = pm.request.method\nlet body = pm.request.body ? pm.request.body.toString() : ''\n\nfor (const index in pm.request.url.path) {\n path = pm.request.url.path[index]\n pathVar = extractPathVariable(path)\n if (pathVar != null) {\n let collectionVariable = pm.collectionVariables.get(pathVar);\n if (collectionVariable != null) {\n url = url.replace(path, collectionVariable)\n } else {\n console.warn('no path variable set: ' + path)\n }\n }\n}\n\nheader = auth({ key: key, passphrase: passphrase, secret: secret }, method, url, body)\n\nfor (const [headerName, headerValue] of Object.entries(header)) {\n pm.request.headers.add({ key: headerName, value: headerValue })\n}" ] } }, diff --git a/sdk/python/kucoin_universal_sdk/generate/account/account/model_get_apikey_info_resp.py b/sdk/python/kucoin_universal_sdk/generate/account/account/model_get_apikey_info_resp.py index 5249b362..d26b63f2 100644 --- a/sdk/python/kucoin_universal_sdk/generate/account/account/model_get_apikey_info_resp.py +++ b/sdk/python/kucoin_universal_sdk/generate/account/account/model_get_apikey_info_resp.py @@ -20,7 +20,7 @@ class GetApikeyInfoResp(BaseModel, Response): remark (str): Remarks api_key (str): Apikey api_version (int): API Version - permission (str): [Permissions](doc://link/pages/338144), possible values: General, Spot, Margin, Futures, InnerTransfer, Transfer, Earn + permission (str): [Permissions](https://www.kucoin.com/docs-new/doc-338144), possible values: General, Spot, Margin, Futures, InnerTransfer, Transfer, Earn ip_whitelist (str): IP whitelist created_at (int): Apikey create time uid (int): Account UID @@ -40,7 +40,7 @@ class GetApikeyInfoResp(BaseModel, Response): permission: Optional[str] = Field( default=None, description= - "[Permissions](doc://link/pages/338144), possible values: General, Spot, Margin, Futures, InnerTransfer, Transfer, Earn" + "[Permissions](https://www.kucoin.com/docs-new/doc-338144), possible values: General, Spot, Margin, Futures, InnerTransfer, Transfer, Earn" ) ip_whitelist: Optional[str] = Field(default=None, description="IP whitelist ", diff --git a/sdk/python/kucoin_universal_sdk/generate/account/subaccount/model_add_sub_account_api_req.py b/sdk/python/kucoin_universal_sdk/generate/account/subaccount/model_add_sub_account_api_req.py index 8826b3cc..c1192439 100644 --- a/sdk/python/kucoin_universal_sdk/generate/account/subaccount/model_add_sub_account_api_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/account/subaccount/model_add_sub_account_api_req.py @@ -18,7 +18,7 @@ class AddSubAccountApiReq(BaseModel): Attributes: passphrase (str): Password(Must contain 7-32 characters. Cannot contain any spaces.) remark (str): Remarks(1~24 characters) - permission (str): [Permissions](doc://link/pages/338144)(Only Generalใ€Spotใ€Futuresใ€Marginใ€InnerTransfer(Flex Transfer) permissions can be set, such as \"General, Trade\". The default is \"General\") + permission (str): [Permissions](https://www.kucoin.com/docs-new/doc-338144)(Only Generalใ€Spotใ€Futuresใ€Marginใ€InnerTransfer(Flex Transfer) permissions can be set, such as \"General, Trade\". The default is \"General\") ip_whitelist (str): IP whitelist(You may add up to 20 IPs. Use a halfwidth comma to each IP) expire (ExpireEnum): API expiration time; Never expire(default)-1๏ผŒ30Day30๏ผŒ90Day90๏ผŒ180Day180๏ผŒ360Day360 sub_name (str): Sub-account name, create sub account name of API Key. @@ -48,7 +48,7 @@ class ExpireEnum(Enum): permission: Optional[str] = Field( default='General', description= - "[Permissions](doc://link/pages/338144)(Only Generalใ€Spotใ€Futuresใ€Marginใ€InnerTransfer(Flex Transfer) permissions can be set, such as \"General, Trade\". The default is \"General\")" + "[Permissions](https://www.kucoin.com/docs-new/doc-338144)(Only Generalใ€Spotใ€Futuresใ€Marginใ€InnerTransfer(Flex Transfer) permissions can be set, such as \"General, Trade\". The default is \"General\")" ) ip_whitelist: Optional[str] = Field( default=None, @@ -143,7 +143,7 @@ def set_remark(self, value: str) -> AddSubAccountApiReqBuilder: def set_permission(self, value: str) -> AddSubAccountApiReqBuilder: """ - [Permissions](doc://link/pages/338144)(Only Generalใ€Spotใ€Futuresใ€Marginใ€InnerTransfer(Flex Transfer) permissions can be set, such as \"General, Trade\". The default is \"General\") + [Permissions](https://www.kucoin.com/docs-new/doc-338144)(Only Generalใ€Spotใ€Futuresใ€Marginใ€InnerTransfer(Flex Transfer) permissions can be set, such as \"General, Trade\". The default is \"General\") """ self.obj['permission'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/account/subaccount/model_add_sub_account_api_resp.py b/sdk/python/kucoin_universal_sdk/generate/account/subaccount/model_add_sub_account_api_resp.py index c172ad28..fc5b20e7 100644 --- a/sdk/python/kucoin_universal_sdk/generate/account/subaccount/model_add_sub_account_api_resp.py +++ b/sdk/python/kucoin_universal_sdk/generate/account/subaccount/model_add_sub_account_api_resp.py @@ -23,7 +23,7 @@ class AddSubAccountApiResp(BaseModel, Response): api_secret (str): API Secret Key api_version (int): API Version passphrase (str): Password - permission (str): [Permissions](doc://link/pages/338144) + permission (str): [Permissions](https://www.kucoin.com/docs-new/doc-338144) ip_whitelist (str): IP whitelist created_at (int): Time of the event """ @@ -45,7 +45,9 @@ class AddSubAccountApiResp(BaseModel, Response): alias="apiVersion") passphrase: Optional[str] = Field(default=None, description="Password") permission: Optional[str] = Field( - default=None, description="[Permissions](doc://link/pages/338144)") + default=None, + description="[Permissions](https://www.kucoin.com/docs-new/doc-338144)" + ) ip_whitelist: Optional[str] = Field(default=None, description="IP whitelist", alias="ipWhitelist") diff --git a/sdk/python/kucoin_universal_sdk/generate/account/subaccount/model_get_sub_account_api_list_data.py b/sdk/python/kucoin_universal_sdk/generate/account/subaccount/model_get_sub_account_api_list_data.py index d374db37..c8a7a476 100644 --- a/sdk/python/kucoin_universal_sdk/generate/account/subaccount/model_get_sub_account_api_list_data.py +++ b/sdk/python/kucoin_universal_sdk/generate/account/subaccount/model_get_sub_account_api_list_data.py @@ -19,7 +19,7 @@ class GetSubAccountApiListData(BaseModel): remark (str): Remarks api_key (str): API Key api_version (int): API Version - permission (str): [Permissions](doc://link/pages/338144) + permission (str): [Permissions](https://www.kucoin.com/docs-new/doc-338144) ip_whitelist (str): IP whitelist created_at (int): Apikey create time uid (int): Sub-account UID @@ -37,7 +37,9 @@ class GetSubAccountApiListData(BaseModel): description="API Version", alias="apiVersion") permission: Optional[str] = Field( - default=None, description="[Permissions](doc://link/pages/338144)") + default=None, + description="[Permissions](https://www.kucoin.com/docs-new/doc-338144)" + ) ip_whitelist: Optional[str] = Field(default=None, description="IP whitelist", alias="ipWhitelist") diff --git a/sdk/python/kucoin_universal_sdk/generate/account/subaccount/model_modify_sub_account_api_req.py b/sdk/python/kucoin_universal_sdk/generate/account/subaccount/model_modify_sub_account_api_req.py index 98eef14b..4f4c43b5 100644 --- a/sdk/python/kucoin_universal_sdk/generate/account/subaccount/model_modify_sub_account_api_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/account/subaccount/model_modify_sub_account_api_req.py @@ -17,7 +17,7 @@ class ModifySubAccountApiReq(BaseModel): Attributes: passphrase (str): Password(Must contain 7-32 characters. Cannot contain any spaces.) - permission (str): [Permissions](doc://link/pages/338144)(Only Generalใ€Spotใ€Futuresใ€Marginใ€InnerTransfer(Flex Transfer) permissions can be set, such as \"General, Trade\". The default is \"General\") + permission (str): [Permissions](https://www.kucoin.com/docs-new/doc-338144)(Only Generalใ€Spotใ€Futuresใ€Marginใ€InnerTransfer(Flex Transfer) permissions can be set, such as \"General, Trade\". The default is \"General\") ip_whitelist (str): IP whitelist(You may add up to 20 IPs. Use a halfwidth comma to each IP) expire (ExpireEnum): API expiration time; Never expire(default)-1๏ผŒ30Day30๏ผŒ90Day90๏ผŒ180Day180๏ผŒ360Day360 sub_name (str): Sub-account name, create sub account name of API Key. @@ -46,7 +46,7 @@ class ExpireEnum(Enum): permission: Optional[str] = Field( default='General', description= - "[Permissions](doc://link/pages/338144)(Only Generalใ€Spotใ€Futuresใ€Marginใ€InnerTransfer(Flex Transfer) permissions can be set, such as \"General, Trade\". The default is \"General\")" + "[Permissions](https://www.kucoin.com/docs-new/doc-338144)(Only Generalใ€Spotใ€Futuresใ€Marginใ€InnerTransfer(Flex Transfer) permissions can be set, such as \"General, Trade\". The default is \"General\")" ) ip_whitelist: Optional[str] = Field( default=None, @@ -137,7 +137,7 @@ def set_passphrase(self, value: str) -> ModifySubAccountApiReqBuilder: def set_permission(self, value: str) -> ModifySubAccountApiReqBuilder: """ - [Permissions](doc://link/pages/338144)(Only Generalใ€Spotใ€Futuresใ€Marginใ€InnerTransfer(Flex Transfer) permissions can be set, such as \"General, Trade\". The default is \"General\") + [Permissions](https://www.kucoin.com/docs-new/doc-338144)(Only Generalใ€Spotใ€Futuresใ€Marginใ€InnerTransfer(Flex Transfer) permissions can be set, such as \"General, Trade\". The default is \"General\") """ self.obj['permission'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/account/subaccount/model_modify_sub_account_api_resp.py b/sdk/python/kucoin_universal_sdk/generate/account/subaccount/model_modify_sub_account_api_resp.py index 8c458fd8..9a0a9663 100644 --- a/sdk/python/kucoin_universal_sdk/generate/account/subaccount/model_modify_sub_account_api_resp.py +++ b/sdk/python/kucoin_universal_sdk/generate/account/subaccount/model_modify_sub_account_api_resp.py @@ -19,7 +19,7 @@ class ModifySubAccountApiResp(BaseModel, Response): Attributes: sub_name (str): Sub-account name api_key (str): API Key - permission (str): [Permissions](doc://link/pages/338144) + permission (str): [Permissions](https://www.kucoin.com/docs-new/doc-338144) ip_whitelist (str): IP whitelist """ @@ -32,7 +32,9 @@ class ModifySubAccountApiResp(BaseModel, Response): description="API Key", alias="apiKey") permission: Optional[str] = Field( - default=None, description="[Permissions](doc://link/pages/338144)") + default=None, + description="[Permissions](https://www.kucoin.com/docs-new/doc-338144)" + ) ip_whitelist: Optional[str] = Field(default=None, description="IP whitelist", alias="ipWhitelist") diff --git a/sdk/python/kucoin_universal_sdk/generate/broker/ndbroker/model_add_sub_account_api_resp.py b/sdk/python/kucoin_universal_sdk/generate/broker/ndbroker/model_add_sub_account_api_resp.py index 61f00472..e57e877b 100644 --- a/sdk/python/kucoin_universal_sdk/generate/broker/ndbroker/model_add_sub_account_api_resp.py +++ b/sdk/python/kucoin_universal_sdk/generate/broker/ndbroker/model_add_sub_account_api_resp.py @@ -22,7 +22,7 @@ class AddSubAccountApiResp(BaseModel, Response): api_key (str): apiKey secret_key (str): secretKey api_version (int): apiVersion - permissions (list[str]): [Permissions](doc://link/pages/338144) group list + permissions (list[str]): [Permissions](https://www.kucoin.com/docs-new/doc-338144) group list ip_whitelist (list[str]): IP whitelist list created_at (int): Creation time, unix timestamp (milliseconds) """ @@ -42,7 +42,8 @@ class AddSubAccountApiResp(BaseModel, Response): alias="apiVersion") permissions: Optional[List[str]] = Field( default=None, - description="[Permissions](doc://link/pages/338144) group list") + description= + "[Permissions](https://www.kucoin.com/docs-new/doc-338144) group list") ip_whitelist: Optional[List[str]] = Field(default=None, description="IP whitelist list", alias="ipWhitelist") diff --git a/sdk/python/kucoin_universal_sdk/generate/broker/ndbroker/model_get_sub_account_api_data.py b/sdk/python/kucoin_universal_sdk/generate/broker/ndbroker/model_get_sub_account_api_data.py index eecf7e1f..537848a7 100644 --- a/sdk/python/kucoin_universal_sdk/generate/broker/ndbroker/model_get_sub_account_api_data.py +++ b/sdk/python/kucoin_universal_sdk/generate/broker/ndbroker/model_get_sub_account_api_data.py @@ -20,7 +20,7 @@ class GetSubAccountApiData(BaseModel): label (str): apikey remarks api_key (str): apiKey api_version (int): apiVersion - permissions (list[PermissionsEnum]): [Permissions](doc://link/pages/338144) group list + permissions (list[PermissionsEnum]): [Permissions](https://www.kucoin.com/docs-new/doc-338144) group list ip_whitelist (list[str]): IP whitelist list created_at (int): Creation time, unix timestamp (milliseconds) """ @@ -46,7 +46,8 @@ class PermissionsEnum(Enum): alias="apiVersion") permissions: Optional[List[PermissionsEnum]] = Field( default=None, - description="[Permissions](doc://link/pages/338144) group list") + description= + "[Permissions](https://www.kucoin.com/docs-new/doc-338144) group list") ip_whitelist: Optional[List[str]] = Field(default=None, description="IP whitelist list", alias="ipWhitelist") diff --git a/sdk/python/kucoin_universal_sdk/generate/broker/ndbroker/model_modify_sub_account_api_req.py b/sdk/python/kucoin_universal_sdk/generate/broker/ndbroker/model_modify_sub_account_api_req.py index ee96576d..8a1d705b 100644 --- a/sdk/python/kucoin_universal_sdk/generate/broker/ndbroker/model_modify_sub_account_api_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/broker/ndbroker/model_modify_sub_account_api_req.py @@ -18,7 +18,7 @@ class ModifySubAccountApiReq(BaseModel): Attributes: uid (str): Subaccount UID ip_whitelist (list[str]): IP whitelist list, supports up to 20 IPs - permissions (list[PermissionsEnum]): [Permissions](doc://link/pages/338144) group list(Only Generalใ€Spotใ€Futures permissions can be set, such as \"General, Trade\". ) + permissions (list[PermissionsEnum]): [Permissions](https://www.kucoin.com/docs-new/doc-338144) group list(Only Generalใ€Spotใ€Futures permissions can be set, such as \"General, Trade\". ) label (str): apikey remarks (length 4~32) api_key (str): Subaccount apiKey """ @@ -42,7 +42,7 @@ class PermissionsEnum(Enum): permissions: Optional[List[PermissionsEnum]] = Field( default=None, description= - "[Permissions](doc://link/pages/338144) group list(Only Generalใ€Spotใ€Futures permissions can be set, such as \"General, Trade\". ) " + "[Permissions](https://www.kucoin.com/docs-new/doc-338144) group list(Only Generalใ€Spotใ€Futures permissions can be set, such as \"General, Trade\". ) " ) label: Optional[str] = Field(default=None, description="apikey remarks (length 4~32) ") @@ -121,7 +121,7 @@ def set_permissions( self, value: list[ModifySubAccountApiReq.PermissionsEnum] ) -> ModifySubAccountApiReqBuilder: """ - [Permissions](doc://link/pages/338144) group list(Only Generalใ€Spotใ€Futures permissions can be set, such as \"General, Trade\". ) + [Permissions](https://www.kucoin.com/docs-new/doc-338144) group list(Only Generalใ€Spotใ€Futures permissions can be set, such as \"General, Trade\". ) """ self.obj['permissions'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/broker/ndbroker/model_modify_sub_account_api_resp.py b/sdk/python/kucoin_universal_sdk/generate/broker/ndbroker/model_modify_sub_account_api_resp.py index 40e88956..1f06f911 100644 --- a/sdk/python/kucoin_universal_sdk/generate/broker/ndbroker/model_modify_sub_account_api_resp.py +++ b/sdk/python/kucoin_universal_sdk/generate/broker/ndbroker/model_modify_sub_account_api_resp.py @@ -21,7 +21,7 @@ class ModifySubAccountApiResp(BaseModel, Response): label (str): apikey remarks api_key (str): apiKey api_version (int): apiVersion - permissions (list[str]): [Permissions](doc://link/pages/338144) group list + permissions (list[str]): [Permissions](https://www.kucoin.com/docs-new/doc-338144) group list ip_whitelist (list[str]): IP whitelist list created_at (int): Creation time, unix timestamp (milliseconds) """ @@ -38,7 +38,8 @@ class ModifySubAccountApiResp(BaseModel, Response): alias="apiVersion") permissions: Optional[List[str]] = Field( default=None, - description="[Permissions](doc://link/pages/338144) group list") + description= + "[Permissions](https://www.kucoin.com/docs-new/doc-338144) group list") ip_whitelist: Optional[List[str]] = Field(default=None, description="IP whitelist list", alias="ipWhitelist") diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/fundingfees/model_get_current_funding_rate_req.py b/sdk/python/kucoin_universal_sdk/generate/futures/fundingfees/model_get_current_funding_rate_req.py index 09fcb845..7521ecf0 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/fundingfees/model_get_current_funding_rate_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/fundingfees/model_get_current_funding_rate_req.py @@ -15,14 +15,14 @@ class GetCurrentFundingRateReq(BaseModel): GetCurrentFundingRateReq Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ symbol: Optional[str] = Field( default=None, path_variable="True", description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) __properties: ClassVar[List[str]] = ["symbol"] @@ -72,7 +72,7 @@ def __init__(self): def set_symbol(self, value: str) -> GetCurrentFundingRateReqBuilder: """ - Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ self.obj['symbol'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/fundingfees/model_get_private_funding_history_data_list.py b/sdk/python/kucoin_universal_sdk/generate/futures/fundingfees/model_get_private_funding_history_data_list.py index f60df1ec..1a6d5827 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/fundingfees/model_get_private_funding_history_data_list.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/fundingfees/model_get_private_funding_history_data_list.py @@ -17,7 +17,7 @@ class GetPrivateFundingHistoryDataList(BaseModel): Attributes: id (int): id - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) time_point (int): Time point (milisecond) funding_rate (float): Funding rate mark_price (float): Mark price @@ -42,7 +42,7 @@ class MarginModeEnum(Enum): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) time_point: Optional[int] = Field(default=None, description="Time point (milisecond) ", diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/fundingfees/model_get_private_funding_history_req.py b/sdk/python/kucoin_universal_sdk/generate/futures/fundingfees/model_get_private_funding_history_req.py index ffe2f770..3f9be0a0 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/fundingfees/model_get_private_funding_history_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/fundingfees/model_get_private_funding_history_req.py @@ -15,7 +15,7 @@ class GetPrivateFundingHistoryReq(BaseModel): GetPrivateFundingHistoryReq Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) from_ (int): Begin time (milisecond) to (int): End time (milisecond) reverse (bool): This parameter functions to judge whether the lookup is forward or not. True means โ€œyesโ€ and False means โ€œnoโ€. This parameter is set as true by default @@ -27,7 +27,7 @@ class GetPrivateFundingHistoryReq(BaseModel): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) from_: Optional[int] = Field(default=None, description="Begin time (milisecond) ", @@ -111,7 +111,7 @@ def __init__(self): def set_symbol(self, value: str) -> GetPrivateFundingHistoryReqBuilder: """ - Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ self.obj['symbol'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/fundingfees/model_get_public_funding_history_data.py b/sdk/python/kucoin_universal_sdk/generate/futures/fundingfees/model_get_public_funding_history_data.py index 5b64ee2c..95251762 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/fundingfees/model_get_public_funding_history_data.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/fundingfees/model_get_public_funding_history_data.py @@ -15,7 +15,7 @@ class GetPublicFundingHistoryData(BaseModel): GetPublicFundingHistoryData Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) funding_rate (float): Funding rate timepoint (int): Time point (milisecond) """ @@ -23,7 +23,7 @@ class GetPublicFundingHistoryData(BaseModel): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) funding_rate: Optional[float] = Field(default=None, description="Funding rate", diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/fundingfees/model_get_public_funding_history_req.py b/sdk/python/kucoin_universal_sdk/generate/futures/fundingfees/model_get_public_funding_history_req.py index 54dad4ed..5485a60f 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/fundingfees/model_get_public_funding_history_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/fundingfees/model_get_public_funding_history_req.py @@ -15,7 +15,7 @@ class GetPublicFundingHistoryReq(BaseModel): GetPublicFundingHistoryReq Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) from_ (int): Begin time (milisecond) to (int): End time (milisecond) """ @@ -23,7 +23,7 @@ class GetPublicFundingHistoryReq(BaseModel): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) from_: Optional[int] = Field(default=None, description="Begin time (milisecond) ", @@ -82,7 +82,7 @@ def __init__(self): def set_symbol(self, value: str) -> GetPublicFundingHistoryReqBuilder: """ - Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ self.obj['symbol'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/futures_private/model_all_order_event.py b/sdk/python/kucoin_universal_sdk/generate/futures/futures_private/model_all_order_event.py index 630ac2df..7217b326 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/futures_private/model_all_order_event.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/futures_private/model_all_order_event.py @@ -18,7 +18,7 @@ class AllOrderEvent(BaseModel): AllOrderEvent Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/221752070) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-221752070) order_type (OrderTypeEnum): User-specified order type side (SideEnum): buy or sell canceled_size (str): Cumulative number of cancellations @@ -32,7 +32,7 @@ class AllOrderEvent(BaseModel): remain_size (str): Remain size status (StatusEnum): Order Status ts (int): Push time(Nanosecond) - liquidity (LiquidityEnum): Actual transaction order type, If the counterparty order is an [Hidden/Iceberg Order](doc://link/pages/338146), even if it is a maker order, this param will be displayed as taker. For actual trading fee, please refer to the **feeType** + liquidity (LiquidityEnum): Actual transaction order type, If the counterparty order is an [Hidden/Iceberg Order](https://www.kucoin.com/docs-new/doc-338146), even if it is a maker order, this param will be displayed as taker. For actual trading fee, please refer to the **feeType** fee_type (FeeTypeEnum): Actual Fee Type match_price (str): Match Price(when the type is \"match\") match_size (str): Match Size (when the type is \"match\") @@ -127,7 +127,7 @@ class TradeTypeEnum(Enum): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/221752070) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-221752070) " ) order_type: Optional[OrderTypeEnum] = Field( default=None, @@ -166,7 +166,7 @@ class TradeTypeEnum(Enum): liquidity: Optional[LiquidityEnum] = Field( default=None, description= - "Actual transaction order type, If the counterparty order is an [Hidden/Iceberg Order](doc://link/pages/338146), even if it is a maker order, this param will be displayed as taker. For actual trading fee, please refer to the **feeType** " + "Actual transaction order type, If the counterparty order is an [Hidden/Iceberg Order](https://www.kucoin.com/docs-new/doc-338146), even if it is a maker order, this param will be displayed as taker. For actual trading fee, please refer to the **feeType** " ) fee_type: Optional[FeeTypeEnum] = Field(default=None, description="Actual Fee Type", diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/futures_private/model_all_position_event.py b/sdk/python/kucoin_universal_sdk/generate/futures/futures_private/model_all_position_event.py index 5b8e6e20..c8512f20 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/futures_private/model_all_position_event.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/futures_private/model_all_position_event.py @@ -18,7 +18,7 @@ class AllPositionEvent(BaseModel): AllPositionEvent Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/221752070) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-221752070) cross_mode (bool): Whether it is cross margin. delev_percentage (float): ADL ranking percentile opening_timestamp (int): Open time @@ -87,7 +87,7 @@ class PositionSideEnum(Enum): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/221752070) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-221752070) " ) cross_mode: Optional[bool] = Field( default=None, diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/futures_private/model_order_event.py b/sdk/python/kucoin_universal_sdk/generate/futures/futures_private/model_order_event.py index a480638f..1cf32177 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/futures_private/model_order_event.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/futures_private/model_order_event.py @@ -18,7 +18,7 @@ class OrderEvent(BaseModel): OrderEvent Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/221752070) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-221752070) order_type (OrderTypeEnum): User-specified order type side (SideEnum): buy or sell canceled_size (str): Cumulative number of cancellations @@ -32,7 +32,7 @@ class OrderEvent(BaseModel): remain_size (str): Remain size status (StatusEnum): Order Status ts (int): Push time(Nanosecond) - liquidity (LiquidityEnum): Actual transaction order type, If the counterparty order is an [Hidden/Iceberg Order](doc://link/pages/338146), even if it is a maker order, this param will be displayed as taker. For actual trading fee, please refer to the **feeType** + liquidity (LiquidityEnum): Actual transaction order type, If the counterparty order is an [Hidden/Iceberg Order](https://www.kucoin.com/docs-new/doc-338146), even if it is a maker order, this param will be displayed as taker. For actual trading fee, please refer to the **feeType** fee_type (FeeTypeEnum): Actual Fee Type match_price (str): Match Price(when the type is \"match\") match_size (str): Match Size (when the type is \"match\") @@ -127,7 +127,7 @@ class TradeTypeEnum(Enum): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/221752070) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-221752070) " ) order_type: Optional[OrderTypeEnum] = Field( default=None, @@ -166,7 +166,7 @@ class TradeTypeEnum(Enum): liquidity: Optional[LiquidityEnum] = Field( default=None, description= - "Actual transaction order type, If the counterparty order is an [Hidden/Iceberg Order](doc://link/pages/338146), even if it is a maker order, this param will be displayed as taker. For actual trading fee, please refer to the **feeType** " + "Actual transaction order type, If the counterparty order is an [Hidden/Iceberg Order](https://www.kucoin.com/docs-new/doc-338146), even if it is a maker order, this param will be displayed as taker. For actual trading fee, please refer to the **feeType** " ) fee_type: Optional[FeeTypeEnum] = Field(default=None, description="Actual Fee Type", diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/futures_private/model_position_event.py b/sdk/python/kucoin_universal_sdk/generate/futures/futures_private/model_position_event.py index 2998565c..ee2cd6cd 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/futures_private/model_position_event.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/futures_private/model_position_event.py @@ -18,7 +18,7 @@ class PositionEvent(BaseModel): PositionEvent Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/221752070) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-221752070) cross_mode (bool): Whether it is cross margin. delev_percentage (float): ADL ranking percentile opening_timestamp (int): Open time @@ -87,7 +87,7 @@ class PositionSideEnum(Enum): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/221752070) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-221752070) " ) cross_mode: Optional[bool] = Field( default=None, diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/futures_private/model_stop_orders_event.py b/sdk/python/kucoin_universal_sdk/generate/futures/futures_private/model_stop_orders_event.py index 9aafb55a..f0b4cc4b 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/futures_private/model_stop_orders_event.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/futures_private/model_stop_orders_event.py @@ -28,7 +28,7 @@ class StopOrdersEvent(BaseModel): stop (StopEnum): Either 'down' or 'up' stop_price (str): Stop Price stop_price_type (str): - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/221752070) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-221752070) ts (int): type (TypeEnum): Order Type """ @@ -107,7 +107,7 @@ class TypeEnum(Enum): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/221752070) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-221752070) " ) ts: Optional[int] = None type: Optional[TypeEnum] = Field(default=None, description="Order Type") diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/futures_public/model_klines_event.py b/sdk/python/kucoin_universal_sdk/generate/futures/futures_public/model_klines_event.py index 66782a2f..51d7d928 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/futures_public/model_klines_event.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/futures_public/model_klines_event.py @@ -17,7 +17,7 @@ class KlinesEvent(BaseModel): KlinesEvent Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) candles (list[str]): Start time, open price, close price, high price, low price, Transaction volume(This value is incorrect, please do not use it, we will fix it in subsequent versions), Transaction amount time (int): timestamp(ms) """ @@ -27,7 +27,7 @@ class KlinesEvent(BaseModel): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) candles: Optional[List[str]] = Field( default=None, diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_full_order_book_req.py b/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_full_order_book_req.py index 48d257b9..2a367851 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_full_order_book_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_full_order_book_req.py @@ -15,13 +15,13 @@ class GetFullOrderBookReq(BaseModel): GetFullOrderBookReq Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) __properties: ClassVar[List[str]] = ["symbol"] @@ -70,7 +70,7 @@ def __init__(self): def set_symbol(self, value: str) -> GetFullOrderBookReqBuilder: """ - Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ self.obj['symbol'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_full_order_book_resp.py b/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_full_order_book_resp.py index 96a22b99..5aeadc83 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_full_order_book_resp.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_full_order_book_resp.py @@ -18,7 +18,7 @@ class GetFullOrderBookResp(BaseModel, Response): Attributes: sequence (int): Sequence number - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) bids (list[list[float]]): bids, from high to low asks (list[list[float]]): asks, from low to high ts (int): Timestamp(nanosecond) @@ -31,7 +31,7 @@ class GetFullOrderBookResp(BaseModel, Response): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) bids: Optional[List[List[float]]] = Field( default=None, description="bids, from high to low") diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_interest_rate_index_data_list.py b/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_interest_rate_index_data_list.py index 1abcb8eb..d401ef6c 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_interest_rate_index_data_list.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_interest_rate_index_data_list.py @@ -15,7 +15,7 @@ class GetInterestRateIndexDataList(BaseModel): GetInterestRateIndexDataList Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: fundingBaseSymbol, fundingQuoteSymbol, fundingBaseSymbol1M, fundingQuoteSymbol1M](doc://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: fundingBaseSymbol, fundingQuoteSymbol, fundingBaseSymbol1M, fundingQuoteSymbol1M](https://www.kucoin.com/docs-new/api-3470220) granularity (int): Granularity (milisecond) time_point (int): Timestamp(milisecond) value (float): Interest rate value @@ -24,7 +24,7 @@ class GetInterestRateIndexDataList(BaseModel): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: fundingBaseSymbol, fundingQuoteSymbol, fundingBaseSymbol1M, fundingQuoteSymbol1M](doc://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: fundingBaseSymbol, fundingQuoteSymbol, fundingBaseSymbol1M, fundingQuoteSymbol1M](https://www.kucoin.com/docs-new/api-3470220) " ) granularity: Optional[int] = Field(default=None, description="Granularity (milisecond)") diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_interest_rate_index_req.py b/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_interest_rate_index_req.py index 7a062b44..3cd1b9f3 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_interest_rate_index_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_interest_rate_index_req.py @@ -16,7 +16,7 @@ class GetInterestRateIndexReq(BaseModel): GetInterestRateIndexReq Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: fundingBaseSymbol, fundingQuoteSymbol, fundingBaseSymbol1M, fundingQuoteSymbol1M](apidog://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: fundingBaseSymbol, fundingQuoteSymbol, fundingBaseSymbol1M, fundingQuoteSymbol1M](https://www.kucoin.com/docs-new/api-3470220) start_at (int): Start time (milisecond) end_at (int): End time (milisecond) reverse (bool): This parameter functions to judge whether the lookup is reverse. True means โ€œyesโ€. False means no. This parameter is set as True by default. @@ -28,7 +28,7 @@ class GetInterestRateIndexReq(BaseModel): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: fundingBaseSymbol, fundingQuoteSymbol, fundingBaseSymbol1M, fundingQuoteSymbol1M](apidog://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: fundingBaseSymbol, fundingQuoteSymbol, fundingBaseSymbol1M, fundingQuoteSymbol1M](https://www.kucoin.com/docs-new/api-3470220) " ) start_at: Optional[int] = Field(default=None, description="Start time (milisecond)", @@ -122,7 +122,7 @@ def __init__(self): def set_symbol(self, value: str) -> GetInterestRateIndexReqBuilder: """ - Symbol of the contract, Please refer to [Get Symbol endpoint: fundingBaseSymbol, fundingQuoteSymbol, fundingBaseSymbol1M, fundingQuoteSymbol1M](apidog://link/endpoint/3470220) + Symbol of the contract, Please refer to [Get Symbol endpoint: fundingBaseSymbol, fundingQuoteSymbol, fundingBaseSymbol1M, fundingQuoteSymbol1M](https://www.kucoin.com/docs-new/api-3470220) """ self.obj['symbol'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_klines_req.py b/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_klines_req.py index d6a9575d..eb87ab4a 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_klines_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_klines_req.py @@ -16,7 +16,7 @@ class GetKlinesReq(BaseModel): GetKlinesReq Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol, indexSymbol, premiumsSymbol1M, premiumsSymbol8H](apidog://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol, indexSymbol, premiumsSymbol1M, premiumsSymbol8H](https://www.kucoin.com/docs-new/api-3470220) granularity (GranularityEnum): Type of candlestick patterns(minute) from_ (int): Start time (milisecond) to (int): End time (milisecond) @@ -52,7 +52,7 @@ class GranularityEnum(Enum): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol, indexSymbol, premiumsSymbol1M, premiumsSymbol8H](apidog://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol, indexSymbol, premiumsSymbol1M, premiumsSymbol8H](https://www.kucoin.com/docs-new/api-3470220) " ) granularity: Optional[GranularityEnum] = Field( default=None, description="Type of candlestick patterns(minute)") @@ -112,7 +112,7 @@ def __init__(self): def set_symbol(self, value: str) -> GetKlinesReqBuilder: """ - Symbol of the contract, Please refer to [Get Symbol endpoint: symbol, indexSymbol, premiumsSymbol1M, premiumsSymbol8H](apidog://link/endpoint/3470220) + Symbol of the contract, Please refer to [Get Symbol endpoint: symbol, indexSymbol, premiumsSymbol1M, premiumsSymbol8H](https://www.kucoin.com/docs-new/api-3470220) """ self.obj['symbol'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_mark_price_req.py b/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_mark_price_req.py index c8ad5b0c..daabfd53 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_mark_price_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_mark_price_req.py @@ -15,14 +15,14 @@ class GetMarkPriceReq(BaseModel): GetMarkPriceReq Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ symbol: Optional[str] = Field( default=None, path_variable="True", description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) __properties: ClassVar[List[str]] = ["symbol"] @@ -70,7 +70,7 @@ def __init__(self): def set_symbol(self, value: str) -> GetMarkPriceReqBuilder: """ - Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ self.obj['symbol'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_mark_price_resp.py b/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_mark_price_resp.py index 7cc09913..ba053e21 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_mark_price_resp.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_mark_price_resp.py @@ -17,7 +17,7 @@ class GetMarkPriceResp(BaseModel, Response): GetMarkPriceResp Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) granularity (int): Granularity (milisecond) time_point (int): Time point (milisecond) value (float): Mark price @@ -29,7 +29,7 @@ class GetMarkPriceResp(BaseModel, Response): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) granularity: Optional[int] = Field(default=None, description="Granularity (milisecond)") diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_part_order_book_req.py b/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_part_order_book_req.py index 4ce2ed13..0b3aaf2b 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_part_order_book_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_part_order_book_req.py @@ -15,14 +15,14 @@ class GetPartOrderBookReq(BaseModel): GetPartOrderBookReq Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) size (str): Get the depth layer, optional value: 20, 100 """ symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) size: Optional[str] = Field( default=None, @@ -78,7 +78,7 @@ def __init__(self): def set_symbol(self, value: str) -> GetPartOrderBookReqBuilder: """ - Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ self.obj['symbol'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_part_order_book_resp.py b/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_part_order_book_resp.py index 6c80a9f2..722a07fe 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_part_order_book_resp.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_part_order_book_resp.py @@ -18,7 +18,7 @@ class GetPartOrderBookResp(BaseModel, Response): Attributes: sequence (int): Sequence number - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) bids (list[list[float]]): bids, from high to low asks (list[list[float]]): asks, from low to high ts (int): Timestamp(nanosecond) @@ -31,7 +31,7 @@ class GetPartOrderBookResp(BaseModel, Response): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) bids: Optional[List[List[float]]] = Field( default=None, description="bids, from high to low") diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_premium_index_data_list.py b/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_premium_index_data_list.py index 9c697f7d..ca2236dc 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_premium_index_data_list.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_premium_index_data_list.py @@ -15,7 +15,7 @@ class GetPremiumIndexDataList(BaseModel): GetPremiumIndexDataList Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: premiumsSymbol1M, premiumsSymbol8H](doc://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: premiumsSymbol1M, premiumsSymbol8H](https://www.kucoin.com/docs-new/api-3470220) granularity (int): Granularity(milisecond) time_point (int): Timestamp(milisecond) value (float): Premium index @@ -24,7 +24,7 @@ class GetPremiumIndexDataList(BaseModel): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: premiumsSymbol1M, premiumsSymbol8H](doc://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: premiumsSymbol1M, premiumsSymbol8H](https://www.kucoin.com/docs-new/api-3470220) " ) granularity: Optional[int] = Field(default=None, description="Granularity(milisecond)") diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_premium_index_req.py b/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_premium_index_req.py index b634f429..7d552521 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_premium_index_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_premium_index_req.py @@ -16,7 +16,7 @@ class GetPremiumIndexReq(BaseModel): GetPremiumIndexReq Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: premiumsSymbol1M, premiumsSymbol8H](apidog://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: premiumsSymbol1M, premiumsSymbol8H](https://www.kucoin.com/docs-new/api-3470220) start_at (int): Start time (milisecond) end_at (int): End time (milisecond) reverse (bool): This parameter functions to judge whether the lookup is reverse. True means โ€œyesโ€. False means no. This parameter is set as True by default. @@ -28,7 +28,7 @@ class GetPremiumIndexReq(BaseModel): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: premiumsSymbol1M, premiumsSymbol8H](apidog://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: premiumsSymbol1M, premiumsSymbol8H](https://www.kucoin.com/docs-new/api-3470220) " ) start_at: Optional[int] = Field(default=None, description="Start time (milisecond)", @@ -121,7 +121,7 @@ def __init__(self): def set_symbol(self, value: str) -> GetPremiumIndexReqBuilder: """ - Symbol of the contract, Please refer to [Get Symbol endpoint: premiumsSymbol1M, premiumsSymbol8H](apidog://link/endpoint/3470220) + Symbol of the contract, Please refer to [Get Symbol endpoint: premiumsSymbol1M, premiumsSymbol8H](https://www.kucoin.com/docs-new/api-3470220) """ self.obj['symbol'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_spot_index_price_data_list.py b/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_spot_index_price_data_list.py index ae4166e7..e3475f00 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_spot_index_price_data_list.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_spot_index_price_data_list.py @@ -16,7 +16,7 @@ class GetSpotIndexPriceDataList(BaseModel): GetSpotIndexPriceDataList Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: indexSymbol](doc://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: indexSymbol](https://www.kucoin.com/docs-new/api-3470220) granularity (int): Granularity (milisecond) time_point (int): Timestamp (milisecond) value (float): Index Value @@ -26,7 +26,7 @@ class GetSpotIndexPriceDataList(BaseModel): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: indexSymbol](doc://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: indexSymbol](https://www.kucoin.com/docs-new/api-3470220) " ) granularity: Optional[int] = Field(default=None, description="Granularity (milisecond)") diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_spot_index_price_req.py b/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_spot_index_price_req.py index 827316f6..3d75c83c 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_spot_index_price_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_spot_index_price_req.py @@ -16,7 +16,7 @@ class GetSpotIndexPriceReq(BaseModel): GetSpotIndexPriceReq Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: indexSymbol](apidog://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: indexSymbol](https://www.kucoin.com/docs-new/api-3470220) start_at (int): Start time (milisecond) end_at (int): End time (milisecond) reverse (bool): This parameter functions to judge whether the lookup is reverse. True means โ€œyesโ€. False means no. This parameter is set as True by default. @@ -28,7 +28,7 @@ class GetSpotIndexPriceReq(BaseModel): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: indexSymbol](apidog://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: indexSymbol](https://www.kucoin.com/docs-new/api-3470220) " ) start_at: Optional[int] = Field(default=None, description="Start time (milisecond)", @@ -121,7 +121,7 @@ def __init__(self): def set_symbol(self, value: str) -> GetSpotIndexPriceReqBuilder: """ - Symbol of the contract, Please refer to [Get Symbol endpoint: indexSymbol](apidog://link/endpoint/3470220) + Symbol of the contract, Please refer to [Get Symbol endpoint: indexSymbol](https://www.kucoin.com/docs-new/api-3470220) """ self.obj['symbol'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_ticker_req.py b/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_ticker_req.py index 7ee81509..79a14269 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_ticker_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_ticker_req.py @@ -15,13 +15,13 @@ class GetTickerReq(BaseModel): GetTickerReq Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) __properties: ClassVar[List[str]] = ["symbol"] @@ -69,7 +69,7 @@ def __init__(self): def set_symbol(self, value: str) -> GetTickerReqBuilder: """ - Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ self.obj['symbol'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_ticker_resp.py b/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_ticker_resp.py index 69dae6f5..0647bffb 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_ticker_resp.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_ticker_resp.py @@ -19,7 +19,7 @@ class GetTickerResp(BaseModel, Response): Attributes: sequence (int): Sequence number, used to judge whether the messages pushed by Websocket is continuous. - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) side (SideEnum): Filled side, The trade side indicates the taker order side. A taker order is the order that was matched with orders opened on the order book. size (int): Filled quantity trade_id (str): Transaction ID @@ -50,7 +50,7 @@ class SideEnum(Enum): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) side: Optional[SideEnum] = Field( default=None, diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_trade_history_req.py b/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_trade_history_req.py index d9a4a702..5ee5853f 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_trade_history_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/market/model_get_trade_history_req.py @@ -15,13 +15,13 @@ class GetTradeHistoryReq(BaseModel): GetTradeHistoryReq Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) __properties: ClassVar[List[str]] = ["symbol"] @@ -70,7 +70,7 @@ def __init__(self): def set_symbol(self, value: str) -> GetTradeHistoryReqBuilder: """ - Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ self.obj['symbol'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_add_order_req.py b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_add_order_req.py index 506f9676..30eec5d0 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_add_order_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_add_order_req.py @@ -18,7 +18,7 @@ class AddOrderReq(BaseModel): Attributes: client_oid (str): Unique order id created by users to identify their orders, the maximum length cannot exceed 40, e.g. UUID, Only allows numbers, characters, underline(_), and separator(-) side (SideEnum): specify if the order is to 'buy' or 'sell' - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) leverage (int): Used to calculate the margin to be frozen for the order. If you are to close the position, this parameter is not required. type (TypeEnum): specify if the order is an 'limit' order or 'market' order remark (str): remark for the order, length cannot exceed 100 utf8 characters @@ -28,11 +28,11 @@ class AddOrderReq(BaseModel): reduce_only (bool): A mark to reduce the position size only. Set to false by default. Need to set the position size when reduceOnly is true. If set to true, only the orders reducing the position size will be executed. If the reduce-only order size exceeds the position size, the extra size will be canceled. close_order (bool): A mark to close the position. Set to false by default. If closeOrder is set to true, the system will close the position and the position size will become 0. Side, Size and Leverage fields can be left empty and the system will determine the side and size automatically. force_hold (bool): A mark to forcely hold the funds for an order, even though it's an order to reduce the position size. This helps the order stay on the order book and not get canceled when the position size changes. Set to false by default. The system will forcely freeze certain amount of funds for this order, including orders whose direction is opposite to the current positions. This feature is to ensure that the order wonโ€™t be canceled by the matching engine in such a circumstance that not enough funds are frozen for the order. - stp (StpEnum): [Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. + stp (StpEnum): [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. margin_mode (MarginModeEnum): Margin mode: ISOLATED, CROSS, default: ISOLATED price (str): Required for type is 'limit' order, indicating the operating price size (int): **Choose one of size, qty, valueQty**, Order size (Lot), must be a positive integer. The quantity unit of coin-swap contracts is size(lot), and other units are not supported. - time_in_force (TimeInForceEnum): Optional for type is 'limit' order, [Time in force](doc://link/pages/338146) is a special strategy used during trading, default is GTC + time_in_force (TimeInForceEnum): Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading, default is GTC post_only (bool): Optional for type is 'limit' order, post only flag, invalid when timeInForce is IOC. When postOnly is true, not allowed choose hidden or iceberg. The post-only flag ensures that the trader always pays the maker fee and provides liquidity to the order book. If any part of the order is going to pay taker fee, the order will be fully rejected. hidden (bool): Optional for type is 'limit' order, orders not displaying in order book. When hidden chose, not allowed choose postOnly. iceberg (bool): Optional for type is 'limit' order, Only visible portion of the order is displayed in the order book. When iceberg chose, not allowed choose postOnly. @@ -118,7 +118,7 @@ class TimeInForceEnum(Enum): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) leverage: Optional[int] = Field( default=None, @@ -165,7 +165,7 @@ class TimeInForceEnum(Enum): stp: Optional[StpEnum] = Field( default=None, description= - "[Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment." + "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment." ) margin_mode: Optional[MarginModeEnum] = Field( default=MarginModeEnum.ISOLATED, @@ -183,7 +183,7 @@ class TimeInForceEnum(Enum): time_in_force: Optional[TimeInForceEnum] = Field( default=TimeInForceEnum.GOOD_TILL_CANCELED, description= - "Optional for type is 'limit' order, [Time in force](doc://link/pages/338146) is a special strategy used during trading, default is GTC", + "Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading, default is GTC", alias="timeInForce") post_only: Optional[bool] = Field( default=False, @@ -332,7 +332,7 @@ def set_side(self, value: AddOrderReq.SideEnum) -> AddOrderReqBuilder: def set_symbol(self, value: str) -> AddOrderReqBuilder: """ - Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ self.obj['symbol'] = value return self @@ -403,7 +403,7 @@ def set_force_hold(self, value: bool) -> AddOrderReqBuilder: def set_stp(self, value: AddOrderReq.StpEnum) -> AddOrderReqBuilder: """ - [Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. + [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. """ self.obj['stp'] = value return self @@ -433,7 +433,7 @@ def set_size(self, value: int) -> AddOrderReqBuilder: def set_time_in_force( self, value: AddOrderReq.TimeInForceEnum) -> AddOrderReqBuilder: """ - Optional for type is 'limit' order, [Time in force](doc://link/pages/338146) is a special strategy used during trading, default is GTC + Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading, default is GTC """ self.obj['timeInForce'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_add_order_test_req.py b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_add_order_test_req.py index eb99480b..01b921fb 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_add_order_test_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_add_order_test_req.py @@ -18,7 +18,7 @@ class AddOrderTestReq(BaseModel): Attributes: client_oid (str): Unique order id created by users to identify their orders, the maximum length cannot exceed 40, e.g. UUID, Only allows numbers, characters, underline(_), and separator(-) side (SideEnum): specify if the order is to 'buy' or 'sell' - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) leverage (int): Used to calculate the margin to be frozen for the order. If you are to close the position, this parameter is not required. type (TypeEnum): specify if the order is an 'limit' order or 'market' order remark (str): remark for the order, length cannot exceed 100 utf8 characters @@ -28,11 +28,11 @@ class AddOrderTestReq(BaseModel): reduce_only (bool): A mark to reduce the position size only. Set to false by default. Need to set the position size when reduceOnly is true. If set to true, only the orders reducing the position size will be executed. If the reduce-only order size exceeds the position size, the extra size will be canceled. close_order (bool): A mark to close the position. Set to false by default. If closeOrder is set to true, the system will close the position and the position size will become 0. Side, Size and Leverage fields can be left empty and the system will determine the side and size automatically. force_hold (bool): A mark to forcely hold the funds for an order, even though it's an order to reduce the position size. This helps the order stay on the order book and not get canceled when the position size changes. Set to false by default. The system will forcely freeze certain amount of funds for this order, including orders whose direction is opposite to the current positions. This feature is to ensure that the order wonโ€™t be canceled by the matching engine in such a circumstance that not enough funds are frozen for the order. - stp (StpEnum): [Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. + stp (StpEnum): [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. margin_mode (MarginModeEnum): Margin mode: ISOLATED, CROSS, default: ISOLATED price (str): Required for type is 'limit' order, indicating the operating price size (int): **Choose one of size, qty, valueQty**, Order size (Lot), must be a positive integer. The quantity unit of coin-swap contracts is size(lot), and other units are not supported. - time_in_force (TimeInForceEnum): Optional for type is 'limit' order, [Time in force](doc://link/pages/338146) is a special strategy used during trading, default is GTC + time_in_force (TimeInForceEnum): Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading, default is GTC post_only (bool): Optional for type is 'limit' order, post only flag, invalid when timeInForce is IOC. When postOnly is true, not allowed choose hidden or iceberg. The post-only flag ensures that the trader always pays the maker fee and provides liquidity to the order book. If any part of the order is going to pay taker fee, the order will be fully rejected. hidden (bool): Optional for type is 'limit' order, orders not displaying in order book. When hidden chose, not allowed choose postOnly. iceberg (bool): Optional for type is 'limit' order, Only visible portion of the order is displayed in the order book. When iceberg chose, not allowed choose postOnly. @@ -118,7 +118,7 @@ class TimeInForceEnum(Enum): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) leverage: Optional[int] = Field( default=None, @@ -165,7 +165,7 @@ class TimeInForceEnum(Enum): stp: Optional[StpEnum] = Field( default=None, description= - "[Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment." + "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment." ) margin_mode: Optional[MarginModeEnum] = Field( default=MarginModeEnum.ISOLATED, @@ -183,7 +183,7 @@ class TimeInForceEnum(Enum): time_in_force: Optional[TimeInForceEnum] = Field( default=TimeInForceEnum.GOOD_TILL_CANCELED, description= - "Optional for type is 'limit' order, [Time in force](doc://link/pages/338146) is a special strategy used during trading, default is GTC", + "Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading, default is GTC", alias="timeInForce") post_only: Optional[bool] = Field( default=False, @@ -334,7 +334,7 @@ def set_side(self, def set_symbol(self, value: str) -> AddOrderTestReqBuilder: """ - Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ self.obj['symbol'] = value return self @@ -409,7 +409,7 @@ def set_force_hold(self, value: bool) -> AddOrderTestReqBuilder: def set_stp(self, value: AddOrderTestReq.StpEnum) -> AddOrderTestReqBuilder: """ - [Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. + [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. """ self.obj['stp'] = value return self @@ -441,7 +441,7 @@ def set_time_in_force( self, value: AddOrderTestReq.TimeInForceEnum) -> AddOrderTestReqBuilder: """ - Optional for type is 'limit' order, [Time in force](doc://link/pages/338146) is a special strategy used during trading, default is GTC + Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading, default is GTC """ self.obj['timeInForce'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_add_tpsl_order_req.py b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_add_tpsl_order_req.py index e06425b7..db07ae8c 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_add_tpsl_order_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_add_tpsl_order_req.py @@ -18,7 +18,7 @@ class AddTpslOrderReq(BaseModel): Attributes: client_oid (str): Unique order id created by users to identify their orders, the maximum length cannot exceed 40, e.g. UUID, Only allows numbers, characters, underline(_), and separator(-) side (SideEnum): specify if the order is to 'buy' or 'sell' - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) leverage (int): Used to calculate the margin to be frozen for the order. If you are to close the position, this parameter is not required. type (TypeEnum): specify if the order is an 'limit' order or 'market' order remark (str): remark for the order, length cannot exceed 100 utf8 characters @@ -26,11 +26,11 @@ class AddTpslOrderReq(BaseModel): reduce_only (bool): A mark to reduce the position size only. Set to false by default. Need to set the position size when reduceOnly is true. If set to true, only the orders reducing the position size will be executed. If the reduce-only order size exceeds the position size, the extra size will be canceled. close_order (bool): A mark to close the position. Set to false by default. If closeOrder is set to true, the system will close the position and the position size will become 0. Side, Size and Leverage fields can be left empty and the system will determine the side and size automatically. force_hold (bool): A mark to forcely hold the funds for an order, even though it's an order to reduce the position size. This helps the order stay on the order book and not get canceled when the position size changes. Set to false by default. The system will forcely freeze certain amount of funds for this order, including orders whose direction is opposite to the current positions. This feature is to ensure that the order wonโ€™t be canceled by the matching engine in such a circumstance that not enough funds are frozen for the order. - stp (StpEnum): [Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. + stp (StpEnum): [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. margin_mode (MarginModeEnum): Margin mode: ISOLATED, CROSS, default: ISOLATED price (str): Required for type is 'limit' order, indicating the operating price size (int): **Choose one of size, qty, valueQty**, Order size (Lot), must be a positive integer. The quantity unit of coin-swap contracts is size(lot), and other units are not supported. - time_in_force (TimeInForceEnum): Optional for type is 'limit' order, [Time in force](doc://link/pages/338146) is a special strategy used during trading, default is GTC + time_in_force (TimeInForceEnum): Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading, default is GTC post_only (bool): Optional for type is 'limit' order, post only flag, invalid when timeInForce is IOC. When postOnly is true, not allowed choose hidden or iceberg. The post-only flag ensures that the trader always pays the maker fee and provides liquidity to the order book. If any part of the order is going to pay taker fee, the order will be fully rejected. hidden (bool): Optional for type is 'limit' order, orders not displaying in order book. When hidden chose, not allowed choose postOnly. iceberg (bool): Optional for type is 'limit' order, Only visible portion of the order is displayed in the order book. When iceberg chose, not allowed choose postOnly. @@ -109,7 +109,7 @@ class TimeInForceEnum(Enum): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) leverage: Optional[int] = Field( default=None, @@ -146,7 +146,7 @@ class TimeInForceEnum(Enum): stp: Optional[StpEnum] = Field( default=None, description= - "[Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment." + "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment." ) margin_mode: Optional[MarginModeEnum] = Field( default=MarginModeEnum.ISOLATED, @@ -164,7 +164,7 @@ class TimeInForceEnum(Enum): time_in_force: Optional[TimeInForceEnum] = Field( default=TimeInForceEnum.GOOD_TILL_CANCELED, description= - "Optional for type is 'limit' order, [Time in force](doc://link/pages/338146) is a special strategy used during trading, default is GTC", + "Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading, default is GTC", alias="timeInForce") post_only: Optional[bool] = Field( default=False, @@ -324,7 +324,7 @@ def set_side(self, def set_symbol(self, value: str) -> AddTpslOrderReqBuilder: """ - Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ self.obj['symbol'] = value return self @@ -384,7 +384,7 @@ def set_force_hold(self, value: bool) -> AddTpslOrderReqBuilder: def set_stp(self, value: AddTpslOrderReq.StpEnum) -> AddTpslOrderReqBuilder: """ - [Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. + [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. """ self.obj['stp'] = value return self @@ -416,7 +416,7 @@ def set_time_in_force( self, value: AddTpslOrderReq.TimeInForceEnum) -> AddTpslOrderReqBuilder: """ - Optional for type is 'limit' order, [Time in force](doc://link/pages/338146) is a special strategy used during trading, default is GTC + Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading, default is GTC """ self.obj['timeInForce'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_batch_add_orders_data.py b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_batch_add_orders_data.py index dd192318..89bd252f 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_batch_add_orders_data.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_batch_add_orders_data.py @@ -17,7 +17,7 @@ class BatchAddOrdersData(BaseModel): Attributes: order_id (str): The unique order id generated by the trading system,which can be used later for further actions such as canceling the order. client_oid (str): Unique order id created by users to identify their orders, the maximum length cannot exceed 40, e.g. UUID, Only allows numbers, characters, underline(_), and separator(-) - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) code (str): msg (str): """ @@ -35,7 +35,7 @@ class BatchAddOrdersData(BaseModel): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) code: Optional[str] = None msg: Optional[str] = None diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_batch_add_orders_item.py b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_batch_add_orders_item.py index fb0e10c6..099c24f1 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_batch_add_orders_item.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_batch_add_orders_item.py @@ -18,7 +18,7 @@ class BatchAddOrdersItem(BaseModel): Attributes: client_oid (str): Unique order id created by users to identify their orders, the maximum length cannot exceed 40, e.g. UUID, Only allows numbers, characters, underline(_), and separator(-) side (SideEnum): specify if the order is to 'buy' or 'sell' - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/221752070) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-221752070) leverage (int): Used to calculate the margin to be frozen for the order. If you are to close the position, this parameter is not required. type (TypeEnum): specify if the order is an 'limit' order or 'market' order remark (str): remark for the order, length cannot exceed 100 utf8 characters @@ -28,11 +28,11 @@ class BatchAddOrdersItem(BaseModel): reduce_only (bool): A mark to reduce the position size only. Set to false by default. Need to set the position size when reduceOnly is true. If set to true, only the orders reducing the position size will be executed. If the reduce-only order size exceeds the position size, the extra size will be canceled. close_order (bool): A mark to close the position. Set to false by default. If closeOrder is set to true, the system will close the position and the position size will become 0. Side, Size and Leverage fields can be left empty and the system will determine the side and size automatically. force_hold (bool): A mark to forcely hold the funds for an order, even though it's an order to reduce the position size. This helps the order stay on the order book and not get canceled when the position size changes. Set to false by default. The system will forcely freeze certain amount of funds for this order, including orders whose direction is opposite to the current positions. This feature is to ensure that the order wonโ€™t be canceled by the matching engine in such a circumstance that not enough funds are frozen for the order. - stp (StpEnum): [Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. + stp (StpEnum): [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. margin_mode (MarginModeEnum): Margin mode: ISOLATED, CROSS, default: ISOLATED price (str): Required for type is 'limit' order, indicating the operating price size (int): **Choose one of size, qty, valueQty**, Order size (Lot), must be a positive integer. The quantity unit of coin-swap contracts is size(lot), and other units are not supported. - time_in_force (TimeInForceEnum): Optional for type is 'limit' order, [Time in force](doc://link/pages/338146) is a special strategy used during trading, default is GTC + time_in_force (TimeInForceEnum): Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading, default is GTC post_only (bool): Optional for type is 'limit' order, post only flag, invalid when timeInForce is IOC. When postOnly is true, not allowed choose hidden or iceberg. The post-only flag ensures that the trader always pays the maker fee and provides liquidity to the order book. If any part of the order is going to pay taker fee, the order will be fully rejected. hidden (bool): Optional for type is 'limit' order, orders not displaying in order book. When hidden chose, not allowed choose postOnly. iceberg (bool): Optional for type is 'limit' order, Only visible portion of the order is displayed in the order book. When iceberg chose, not allowed choose postOnly. @@ -118,7 +118,7 @@ class TimeInForceEnum(Enum): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/221752070) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-221752070) " ) leverage: Optional[int] = Field( default=None, @@ -165,7 +165,7 @@ class TimeInForceEnum(Enum): stp: Optional[StpEnum] = Field( default=None, description= - "[Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment." + "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment." ) margin_mode: Optional[MarginModeEnum] = Field( default=MarginModeEnum.ISOLATED, @@ -183,7 +183,7 @@ class TimeInForceEnum(Enum): time_in_force: Optional[TimeInForceEnum] = Field( default=TimeInForceEnum.GOOD_TILL_CANCELED, description= - "Optional for type is 'limit' order, [Time in force](doc://link/pages/338146) is a special strategy used during trading, default is GTC", + "Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading, default is GTC", alias="timeInForce") post_only: Optional[bool] = Field( default=False, @@ -336,7 +336,7 @@ def set_side( def set_symbol(self, value: str) -> BatchAddOrdersItemBuilder: """ - Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/221752070) + Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-221752070) """ self.obj['symbol'] = value return self @@ -414,7 +414,7 @@ def set_stp( self, value: BatchAddOrdersItem.StpEnum) -> BatchAddOrdersItemBuilder: """ - [Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. + [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. """ self.obj['stp'] = value return self @@ -446,7 +446,7 @@ def set_time_in_force( self, value: BatchAddOrdersItem.TimeInForceEnum ) -> BatchAddOrdersItemBuilder: """ - Optional for type is 'limit' order, [Time in force](doc://link/pages/338146) is a special strategy used during trading, default is GTC + Optional for type is 'limit' order, [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading, default is GTC """ self.obj['timeInForce'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_batch_cancel_orders_client_oids_list.py b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_batch_cancel_orders_client_oids_list.py index 66840042..edcaca1b 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_batch_cancel_orders_client_oids_list.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_batch_cancel_orders_client_oids_list.py @@ -15,14 +15,14 @@ class BatchCancelOrdersClientOidsList(BaseModel): BatchCancelOrdersClientOidsList Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) client_oid (str): """ symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) client_oid: Optional[str] = Field(default=None, alias="clientOid") @@ -76,7 +76,7 @@ def __init__(self): def set_symbol(self, value: str) -> BatchCancelOrdersClientOidsListBuilder: """ - Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ self.obj['symbol'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_cancel_all_orders_v1_req.py b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_cancel_all_orders_v1_req.py index dc98bc6c..121ab052 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_cancel_all_orders_v1_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_cancel_all_orders_v1_req.py @@ -15,13 +15,13 @@ class CancelAllOrdersV1Req(BaseModel): CancelAllOrdersV1Req Attributes: - symbol (str): Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + symbol (str): Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ symbol: Optional[str] = Field( default=None, description= - "Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) " + "Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) __properties: ClassVar[List[str]] = ["symbol"] @@ -70,7 +70,7 @@ def __init__(self): def set_symbol(self, value: str) -> CancelAllOrdersV1ReqBuilder: """ - Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ self.obj['symbol'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_cancel_all_orders_v3_req.py b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_cancel_all_orders_v3_req.py index 630343cb..1ab329f0 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_cancel_all_orders_v3_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_cancel_all_orders_v3_req.py @@ -15,13 +15,13 @@ class CancelAllOrdersV3Req(BaseModel): CancelAllOrdersV3Req Attributes: - symbol (str): Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + symbol (str): Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ symbol: Optional[str] = Field( default=None, description= - "Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) " + "Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) __properties: ClassVar[List[str]] = ["symbol"] @@ -70,7 +70,7 @@ def __init__(self): def set_symbol(self, value: str) -> CancelAllOrdersV3ReqBuilder: """ - Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ self.obj['symbol'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_cancel_all_stop_orders_req.py b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_cancel_all_stop_orders_req.py index 80b384f9..9c7a0093 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_cancel_all_stop_orders_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_cancel_all_stop_orders_req.py @@ -15,13 +15,13 @@ class CancelAllStopOrdersReq(BaseModel): CancelAllStopOrdersReq Attributes: - symbol (str): Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + symbol (str): Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ symbol: Optional[str] = Field( default=None, description= - "Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) " + "Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) __properties: ClassVar[List[str]] = ["symbol"] @@ -70,7 +70,7 @@ def __init__(self): def set_symbol(self, value: str) -> CancelAllStopOrdersReqBuilder: """ - Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ self.obj['symbol'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_cancel_order_by_client_oid_req.py b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_cancel_order_by_client_oid_req.py index 0b7a35d9..3cb9b878 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_cancel_order_by_client_oid_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_cancel_order_by_client_oid_req.py @@ -15,14 +15,14 @@ class CancelOrderByClientOidReq(BaseModel): CancelOrderByClientOidReq Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) client_oid (str): client order id """ symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) client_oid: Optional[str] = Field(default=None, path_variable="True", @@ -79,7 +79,7 @@ def __init__(self): def set_symbol(self, value: str) -> CancelOrderByClientOidReqBuilder: """ - Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ self.obj['symbol'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_open_order_value_req.py b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_open_order_value_req.py index 2bec65ad..ec721ef7 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_open_order_value_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_open_order_value_req.py @@ -15,13 +15,13 @@ class GetOpenOrderValueReq(BaseModel): GetOpenOrderValueReq Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) __properties: ClassVar[List[str]] = ["symbol"] @@ -70,7 +70,7 @@ def __init__(self): def set_symbol(self, value: str) -> GetOpenOrderValueReqBuilder: """ - Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ self.obj['symbol'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_order_by_client_oid_resp.py b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_order_by_client_oid_resp.py index a09a967d..04fd844e 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_order_by_client_oid_resp.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_order_by_client_oid_resp.py @@ -19,7 +19,7 @@ class GetOrderByClientOidResp(BaseModel, Response): Attributes: id (str): Order ID - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) type (TypeEnum): Order type, market order or limit order side (SideEnum): Transaction side price (str): Order price @@ -27,7 +27,7 @@ class GetOrderByClientOidResp(BaseModel, Response): value (str): Order value deal_value (str): Executed size of funds deal_size (int): Executed quantity - stp (StpEnum): [Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. + stp (StpEnum): [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. stop (str): Stop order type (stop limit or stop market) stop_price_type (StopPriceTypeEnum): Trigger price type of stop orders stop_triggered (bool): Mark to show whether the stop order is triggered @@ -126,7 +126,7 @@ class StatusEnum(Enum): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) type: Optional[TypeEnum] = Field( default=None, description="Order type, market order or limit order") @@ -144,7 +144,7 @@ class StatusEnum(Enum): stp: Optional[StpEnum] = Field( default=None, description= - "[Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment." + "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment." ) stop: Optional[str] = Field( default=None, diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_order_by_order_id_resp.py b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_order_by_order_id_resp.py index a5d7c469..24e79a9d 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_order_by_order_id_resp.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_order_by_order_id_resp.py @@ -19,7 +19,7 @@ class GetOrderByOrderIdResp(BaseModel, Response): Attributes: id (str): Order ID - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) type (TypeEnum): Order type, market order or limit order side (SideEnum): Transaction side price (str): Order price @@ -27,7 +27,7 @@ class GetOrderByOrderIdResp(BaseModel, Response): value (str): Order value deal_value (str): Executed size of funds deal_size (int): Executed quantity - stp (StpEnum): [Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. + stp (StpEnum): [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment. stop (str): Stop order type (stop limit or stop market) stop_price_type (StopPriceTypeEnum): Trigger price type of stop orders stop_triggered (bool): Mark to show whether the stop order is triggered @@ -126,7 +126,7 @@ class StatusEnum(Enum): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) type: Optional[TypeEnum] = Field( default=None, description="Order type, market order or limit order") @@ -144,7 +144,7 @@ class StatusEnum(Enum): stp: Optional[StpEnum] = Field( default=None, description= - "[Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment." + "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB. Not supported DC at the moment." ) stop: Optional[str] = Field( default=None, diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_order_list_items.py b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_order_list_items.py index 7c475df7..e1cde1fc 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_order_list_items.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_order_list_items.py @@ -16,7 +16,7 @@ class GetOrderListItems(BaseModel): Attributes: id (str): Order ID - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) type (str): Order type, market order or limit order side (str): Transaction side price (str): Order price @@ -59,7 +59,7 @@ class GetOrderListItems(BaseModel): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) type: Optional[str] = Field( default=None, description="Order type, market order or limit order ") diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_order_list_req.py b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_order_list_req.py index 8932711a..9844b3d5 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_order_list_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_order_list_req.py @@ -17,7 +17,7 @@ class GetOrderListReq(BaseModel): Attributes: status (StatusEnum): active or done, done as default. Only list orders for a specific status - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) side (SideEnum): buy or sell type (TypeEnum): limit, market, limit_stop or market_stop start_at (int): Start time (milisecond) @@ -61,7 +61,7 @@ class TypeEnum(Enum): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) side: Optional[SideEnum] = Field(default=None, description="buy or sell") type: Optional[TypeEnum] = Field( @@ -147,7 +147,7 @@ def set_status( def set_symbol(self, value: str) -> GetOrderListReqBuilder: """ - Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ self.obj['symbol'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_recent_closed_orders_data.py b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_recent_closed_orders_data.py index 12515304..07e2b50d 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_recent_closed_orders_data.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_recent_closed_orders_data.py @@ -16,7 +16,7 @@ class GetRecentClosedOrdersData(BaseModel): Attributes: id (str): Order ID - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) type (str): Order type, market order or limit order side (str): Transaction side price (str): Order price @@ -59,7 +59,7 @@ class GetRecentClosedOrdersData(BaseModel): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) type: Optional[str] = Field( default=None, description="Order type, market order or limit order") diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_recent_closed_orders_req.py b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_recent_closed_orders_req.py index 672a6e8d..80436647 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_recent_closed_orders_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_recent_closed_orders_req.py @@ -15,13 +15,13 @@ class GetRecentClosedOrdersReq(BaseModel): GetRecentClosedOrdersReq Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) __properties: ClassVar[List[str]] = ["symbol"] @@ -71,7 +71,7 @@ def __init__(self): def set_symbol(self, value: str) -> GetRecentClosedOrdersReqBuilder: """ - Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ self.obj['symbol'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_recent_trade_history_data.py b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_recent_trade_history_data.py index fc4cc966..568b1369 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_recent_trade_history_data.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_recent_trade_history_data.py @@ -16,7 +16,7 @@ class GetRecentTradeHistoryData(BaseModel): GetRecentTradeHistoryData Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) trade_id (str): Trade ID order_id (str): Order ID side (SideEnum): Transaction side @@ -109,7 +109,7 @@ class TradeTypeEnum(Enum): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) trade_id: Optional[str] = Field(default=None, description="Trade ID ", diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_recent_trade_history_req.py b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_recent_trade_history_req.py index a85532fd..0d2ef711 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_recent_trade_history_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_recent_trade_history_req.py @@ -15,13 +15,13 @@ class GetRecentTradeHistoryReq(BaseModel): GetRecentTradeHistoryReq Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) __properties: ClassVar[List[str]] = ["symbol"] @@ -71,7 +71,7 @@ def __init__(self): def set_symbol(self, value: str) -> GetRecentTradeHistoryReqBuilder: """ - Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ self.obj['symbol'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_stop_order_list_items.py b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_stop_order_list_items.py index b7020b5b..583eeac6 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_stop_order_list_items.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_stop_order_list_items.py @@ -16,7 +16,7 @@ class GetStopOrderListItems(BaseModel): Attributes: id (str): Order ID - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) type (str): Order type, market order or limit order side (str): Transaction side price (str): Order price @@ -59,7 +59,7 @@ class GetStopOrderListItems(BaseModel): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) type: Optional[str] = Field( default=None, description="Order type, market order or limit order ") diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_stop_order_list_req.py b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_stop_order_list_req.py index f60ad44d..46391750 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_stop_order_list_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_stop_order_list_req.py @@ -17,7 +17,7 @@ class GetStopOrderListReq(BaseModel): GetStopOrderListReq Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) side (SideEnum): buy or sell type (TypeEnum): limit, market start_at (int): Start time (milisecond) @@ -47,7 +47,7 @@ class TypeEnum(Enum): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) side: Optional[SideEnum] = Field(default=None, description="buy or sell") type: Optional[TypeEnum] = Field(default=None, description="limit, market") @@ -130,7 +130,7 @@ def __init__(self): def set_symbol(self, value: str) -> GetStopOrderListReqBuilder: """ - Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ self.obj['symbol'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_trade_history_items.py b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_trade_history_items.py index 11341b1c..01bc072f 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_trade_history_items.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_trade_history_items.py @@ -16,7 +16,7 @@ class GetTradeHistoryItems(BaseModel): GetTradeHistoryItems Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) trade_id (str): Trade ID order_id (str): Order ID side (SideEnum): Transaction side @@ -107,7 +107,7 @@ class TradeTypeEnum(Enum): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) trade_id: Optional[str] = Field(default=None, description="Trade ID ", diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_trade_history_req.py b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_trade_history_req.py index ec547716..aef3038e 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_trade_history_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/order/model_get_trade_history_req.py @@ -18,7 +18,7 @@ class GetTradeHistoryReq(BaseModel): Attributes: order_id (str): List fills for a specific order only (If you specify orderId, other parameters can be ignored) - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) side (SideEnum): Order side type (TypeEnum): Order Type trade_types (str): Transaction type: trade, adl, liquid, settlement. Supports querying multiple types at the same time, separated by commas. Query all type when empty @@ -58,7 +58,7 @@ class TypeEnum(Enum): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) side: Optional[SideEnum] = Field(default=None, description="Order side") type: Optional[TypeEnum] = Field(default=None, description="Order Type") @@ -159,7 +159,7 @@ def set_order_id(self, value: str) -> GetTradeHistoryReqBuilder: def set_symbol(self, value: str) -> GetTradeHistoryReqBuilder: """ - Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ self.obj['symbol'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_add_isolated_margin_req.py b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_add_isolated_margin_req.py index 4708a6c5..91bac857 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_add_isolated_margin_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_add_isolated_margin_req.py @@ -15,7 +15,7 @@ class AddIsolatedMarginReq(BaseModel): AddIsolatedMarginReq Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) margin (float): Margin amount (min. margin amountโ‰ฅ0.00001667XBT๏ผ‰ biz_no (str): A unique ID generated by the user, to ensure the operation is processed by the system only once, The maximum length cannot exceed 36 """ @@ -23,7 +23,7 @@ class AddIsolatedMarginReq(BaseModel): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) margin: Optional[float] = Field( default=None, @@ -84,7 +84,7 @@ def __init__(self): def set_symbol(self, value: str) -> AddIsolatedMarginReqBuilder: """ - Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ self.obj['symbol'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_add_isolated_margin_resp.py b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_add_isolated_margin_resp.py index d3905bf9..54ea9a91 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_add_isolated_margin_resp.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_add_isolated_margin_resp.py @@ -18,7 +18,7 @@ class AddIsolatedMarginResp(BaseModel, Response): Attributes: id (str): Position ID - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) auto_deposit (bool): Auto deposit margin or not maint_margin_req (float): Maintenance margin requirement risk_limit (int): Risk limit @@ -62,7 +62,7 @@ class AddIsolatedMarginResp(BaseModel, Response): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) auto_deposit: Optional[bool] = Field( default=None, diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_cross_margin_leverage_req.py b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_cross_margin_leverage_req.py index 152df189..2eeb2d2f 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_cross_margin_leverage_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_cross_margin_leverage_req.py @@ -15,13 +15,13 @@ class GetCrossMarginLeverageReq(BaseModel): GetCrossMarginLeverageReq Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) __properties: ClassVar[List[str]] = ["symbol"] @@ -71,7 +71,7 @@ def __init__(self): def set_symbol(self, value: str) -> GetCrossMarginLeverageReqBuilder: """ - Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ self.obj['symbol'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_cross_margin_leverage_resp.py b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_cross_margin_leverage_resp.py index 20e27cb1..ec90c5fe 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_cross_margin_leverage_resp.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_cross_margin_leverage_resp.py @@ -17,7 +17,7 @@ class GetCrossMarginLeverageResp(BaseModel, Response): GetCrossMarginLeverageResp Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) leverage (str): Leverage multiple """ @@ -26,7 +26,7 @@ class GetCrossMarginLeverageResp(BaseModel, Response): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) leverage: Optional[str] = Field(default=None, description="Leverage multiple") diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_isolated_margin_risk_limit_data.py b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_isolated_margin_risk_limit_data.py index e9e5eba6..889a64dd 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_isolated_margin_risk_limit_data.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_isolated_margin_risk_limit_data.py @@ -15,7 +15,7 @@ class GetIsolatedMarginRiskLimitData(BaseModel): GetIsolatedMarginRiskLimitData Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) level (int): level max_risk_limit (int): Upper limit USDT(includes) min_risk_limit (int): Lower limit USDT @@ -27,7 +27,7 @@ class GetIsolatedMarginRiskLimitData(BaseModel): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) level: Optional[int] = Field(default=None, description="level ") max_risk_limit: Optional[int] = Field( diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_isolated_margin_risk_limit_req.py b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_isolated_margin_risk_limit_req.py index 0ee409f2..227b10ed 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_isolated_margin_risk_limit_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_isolated_margin_risk_limit_req.py @@ -15,14 +15,14 @@ class GetIsolatedMarginRiskLimitReq(BaseModel): GetIsolatedMarginRiskLimitReq Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ symbol: Optional[str] = Field( default=None, path_variable="True", description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) __properties: ClassVar[List[str]] = ["symbol"] @@ -73,7 +73,7 @@ def __init__(self): def set_symbol(self, value: str) -> GetIsolatedMarginRiskLimitReqBuilder: """ - Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ self.obj['symbol'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_margin_mode_req.py b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_margin_mode_req.py index 599293ab..c1a101fc 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_margin_mode_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_margin_mode_req.py @@ -15,13 +15,13 @@ class GetMarginModeReq(BaseModel): GetMarginModeReq Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) __properties: ClassVar[List[str]] = ["symbol"] @@ -69,7 +69,7 @@ def __init__(self): def set_symbol(self, value: str) -> GetMarginModeReqBuilder: """ - Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ self.obj['symbol'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_margin_mode_resp.py b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_margin_mode_resp.py index 47fa9988..21f0013f 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_margin_mode_resp.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_margin_mode_resp.py @@ -18,7 +18,7 @@ class GetMarginModeResp(BaseModel, Response): GetMarginModeResp Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) margin_mode (MarginModeEnum): Margin mode: ISOLATED (isolated), CROSS (cross margin). """ @@ -36,7 +36,7 @@ class MarginModeEnum(Enum): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) margin_mode: Optional[MarginModeEnum] = Field( default=None, diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_max_open_size_req.py b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_max_open_size_req.py index 97d8fe38..54838ed4 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_max_open_size_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_max_open_size_req.py @@ -15,7 +15,7 @@ class GetMaxOpenSizeReq(BaseModel): GetMaxOpenSizeReq Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) price (str): Order price leverage (int): Leverage """ @@ -23,7 +23,7 @@ class GetMaxOpenSizeReq(BaseModel): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) price: Optional[str] = Field(default=None, description="Order price ") leverage: Optional[int] = Field(default=None, description="Leverage ") @@ -77,7 +77,7 @@ def __init__(self): def set_symbol(self, value: str) -> GetMaxOpenSizeReqBuilder: """ - Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ self.obj['symbol'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_max_open_size_resp.py b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_max_open_size_resp.py index 53d5064b..41e34a3a 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_max_open_size_resp.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_max_open_size_resp.py @@ -17,7 +17,7 @@ class GetMaxOpenSizeResp(BaseModel, Response): GetMaxOpenSizeResp Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) max_buy_open_size (int): Maximum buy size max_sell_open_size (int): Maximum buy size """ @@ -27,7 +27,7 @@ class GetMaxOpenSizeResp(BaseModel, Response): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) max_buy_open_size: Optional[int] = Field(default=None, description="Maximum buy size ", diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_max_withdraw_margin_req.py b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_max_withdraw_margin_req.py index 09def63a..9621fcd7 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_max_withdraw_margin_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_max_withdraw_margin_req.py @@ -15,13 +15,13 @@ class GetMaxWithdrawMarginReq(BaseModel): GetMaxWithdrawMarginReq Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) __properties: ClassVar[List[str]] = ["symbol"] @@ -71,7 +71,7 @@ def __init__(self): def set_symbol(self, value: str) -> GetMaxWithdrawMarginReqBuilder: """ - Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ self.obj['symbol'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_position_details_req.py b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_position_details_req.py index cbd15602..c3d845f8 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_position_details_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_position_details_req.py @@ -15,13 +15,13 @@ class GetPositionDetailsReq(BaseModel): GetPositionDetailsReq Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) __properties: ClassVar[List[str]] = ["symbol"] @@ -70,7 +70,7 @@ def __init__(self): def set_symbol(self, value: str) -> GetPositionDetailsReqBuilder: """ - Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ self.obj['symbol'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_position_details_resp.py b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_position_details_resp.py index 92427c18..4bc19b46 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_position_details_resp.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_position_details_resp.py @@ -19,7 +19,7 @@ class GetPositionDetailsResp(BaseModel, Response): Attributes: id (str): Position ID - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) cross_mode (bool): Whether it is cross margin. delev_percentage (float): ADL ranking percentile opening_timestamp (int): Open time @@ -86,7 +86,7 @@ class PositionSideEnum(Enum): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) cross_mode: Optional[bool] = Field( default=None, diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_position_list_data.py b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_position_list_data.py index 60b49857..dcc1d5a3 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_position_list_data.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_position_list_data.py @@ -17,7 +17,7 @@ class GetPositionListData(BaseModel): Attributes: id (str): Position ID - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) cross_mode (bool): Whether it is cross margin. delev_percentage (float): ADL ranking percentile opening_timestamp (int): Open time @@ -82,7 +82,7 @@ class PositionSideEnum(Enum): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) cross_mode: Optional[bool] = Field( default=None, diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_position_list_req.py b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_position_list_req.py index 16289535..3e7ce1a6 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_position_list_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_position_list_req.py @@ -15,13 +15,13 @@ class GetPositionListReq(BaseModel): GetPositionListReq Attributes: - currency (str): Currency code, Please refer to [rootSymbol](apidog://link/endpoint/221752070) , such as USDT,XBT. Query all positions when empty + currency (str): Currency code, Please refer to [rootSymbol](https://www.kucoin.com/docs-new/api-221752070) , such as USDT,XBT. Query all positions when empty """ currency: Optional[str] = Field( default=None, description= - "Currency code, Please refer to [rootSymbol](apidog://link/endpoint/221752070) , such as USDT,XBT. Query all positions when empty" + "Currency code, Please refer to [rootSymbol](https://www.kucoin.com/docs-new/api-221752070) , such as USDT,XBT. Query all positions when empty" ) __properties: ClassVar[List[str]] = ["currency"] @@ -70,7 +70,7 @@ def __init__(self): def set_currency(self, value: str) -> GetPositionListReqBuilder: """ - Currency code, Please refer to [rootSymbol](apidog://link/endpoint/221752070) , such as USDT,XBT. Query all positions when empty + Currency code, Please refer to [rootSymbol](https://www.kucoin.com/docs-new/api-221752070) , such as USDT,XBT. Query all positions when empty """ self.obj['currency'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_positions_history_items.py b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_positions_history_items.py index c6f87342..d594be15 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_positions_history_items.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_positions_history_items.py @@ -18,7 +18,7 @@ class GetPositionsHistoryItems(BaseModel): Attributes: close_id (str): Close ID user_id (str): User ID - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) settle_currency (str): Currency used to settle trades leverage (str): Leverage applied to the order type (str): Type of closure @@ -52,7 +52,7 @@ class MarginModeEnum(Enum): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) settle_currency: Optional[str] = Field( default=None, diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_positions_history_req.py b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_positions_history_req.py index 615735a1..80fee9e5 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_positions_history_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_get_positions_history_req.py @@ -16,7 +16,7 @@ class GetPositionsHistoryReq(BaseModel): GetPositionsHistoryReq Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) from_ (int): Closing start time(ms) to (int): Closing end time(ms) limit (int): Number of requests per page, max 200, default 10 @@ -26,7 +26,7 @@ class GetPositionsHistoryReq(BaseModel): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) from_: Optional[int] = Field(default=None, description="Closing start time(ms) ", @@ -100,7 +100,7 @@ def __init__(self): def set_symbol(self, value: str) -> GetPositionsHistoryReqBuilder: """ - Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) + Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ self.obj['symbol'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_modify_isolated_margin_risk_limt_req.py b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_modify_isolated_margin_risk_limt_req.py index 32e6f020..81608975 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_modify_isolated_margin_risk_limt_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_modify_isolated_margin_risk_limt_req.py @@ -15,14 +15,14 @@ class ModifyIsolatedMarginRiskLimtReq(BaseModel): ModifyIsolatedMarginRiskLimtReq Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) level (int): level """ symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) level: Optional[int] = Field(default=None, description="level") @@ -76,7 +76,7 @@ def __init__(self): def set_symbol(self, value: str) -> ModifyIsolatedMarginRiskLimtReqBuilder: """ - Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ self.obj['symbol'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_modify_margin_leverage_req.py b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_modify_margin_leverage_req.py index f99a05a9..b6aa3a6d 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_modify_margin_leverage_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_modify_margin_leverage_req.py @@ -15,14 +15,14 @@ class ModifyMarginLeverageReq(BaseModel): ModifyMarginLeverageReq Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) leverage (str): Leverage multiple """ symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) leverage: Optional[str] = Field(default=None, description="Leverage multiple") @@ -77,7 +77,7 @@ def __init__(self): def set_symbol(self, value: str) -> ModifyMarginLeverageReqBuilder: """ - Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ self.obj['symbol'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_remove_isolated_margin_req.py b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_remove_isolated_margin_req.py index 92a9adb4..f6d5edd1 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_remove_isolated_margin_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_remove_isolated_margin_req.py @@ -15,14 +15,14 @@ class RemoveIsolatedMarginReq(BaseModel): RemoveIsolatedMarginReq Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) withdraw_amount (str): The size of the position that can be deposited. If it is USDT-margin, it represents the amount of USDT. If it is coin-margin, this value represents the number of coins """ symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) withdraw_amount: Optional[str] = Field( default=None, @@ -80,7 +80,7 @@ def __init__(self): def set_symbol(self, value: str) -> RemoveIsolatedMarginReqBuilder: """ - Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ self.obj['symbol'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_switch_margin_mode_req.py b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_switch_margin_mode_req.py index 86d3a93b..3cef8335 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_switch_margin_mode_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_switch_margin_mode_req.py @@ -16,7 +16,7 @@ class SwitchMarginModeReq(BaseModel): SwitchMarginModeReq Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) margin_mode (MarginModeEnum): Modified margin model: ISOLATED (isolated), CROSS (cross margin). """ @@ -32,7 +32,7 @@ class MarginModeEnum(Enum): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) margin_mode: Optional[MarginModeEnum] = Field( default=None, @@ -89,7 +89,7 @@ def __init__(self): def set_symbol(self, value: str) -> SwitchMarginModeReqBuilder: """ - Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) """ self.obj['symbol'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_switch_margin_mode_resp.py b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_switch_margin_mode_resp.py index 8fb8a445..773ec827 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_switch_margin_mode_resp.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/positions/model_switch_margin_mode_resp.py @@ -18,7 +18,7 @@ class SwitchMarginModeResp(BaseModel, Response): SwitchMarginModeResp Attributes: - symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) + symbol (str): Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) margin_mode (MarginModeEnum): Margin mode: ISOLATED (isolated), CROSS (cross margin). """ @@ -36,7 +36,7 @@ class MarginModeEnum(Enum): symbol: Optional[str] = Field( default=None, description= - "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](doc://link/endpoint/3470220) " + "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) " ) margin_mode: Optional[MarginModeEnum] = Field( default=None, diff --git a/sdk/python/kucoin_universal_sdk/generate/margin/order/model_add_order_req.py b/sdk/python/kucoin_universal_sdk/generate/margin/order/model_add_order_req.py index fdef573b..152b8adb 100644 --- a/sdk/python/kucoin_universal_sdk/generate/margin/order/model_add_order_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/margin/order/model_add_order_req.py @@ -20,13 +20,13 @@ class AddOrderReq(BaseModel): side (SideEnum): specify if the order is to 'buy' or 'sell' symbol (str): symbol type (TypeEnum): specify if the order is an 'limit' order or 'market' order. The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine. When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels. Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. - stp (StpEnum): [Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB , and DC + stp (StpEnum): [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC price (str): Specify price for order When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. size (str): Specify quantity for order When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize. When **type** is market, select one out of two: size or funds - time_in_force (TimeInForceEnum): [Time in force](doc://link/pages/5176570) is a special strategy used during trading + time_in_force (TimeInForceEnum): [Time in force](https://www.kucoin.com/docs-new/api-5176570) is a special strategy used during trading post_only (bool): passive order labels, this is disabled when the order timing strategy is IOC or FOK - hidden (bool): [Hidden order](doc://link/pages/338146) or not (not shown in order book) - iceberg (bool): Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146) + hidden (bool): [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) + iceberg (bool): Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) visible_size (str): Maximum visible quantity in iceberg orders cancel_after (int): Cancel after n seconds๏ผŒthe order timing strategy is GTT funds (str): When **type** is market, select one out of two: size or funds @@ -95,7 +95,7 @@ class TimeInForceEnum(Enum): stp: Optional[StpEnum] = Field( default=None, description= - "[Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB , and DC" + "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC" ) price: Optional[str] = Field( default=None, @@ -110,7 +110,7 @@ class TimeInForceEnum(Enum): time_in_force: Optional[TimeInForceEnum] = Field( default=TimeInForceEnum.GTC, description= - "[Time in force](doc://link/pages/5176570) is a special strategy used during trading", + "[Time in force](https://www.kucoin.com/docs-new/api-5176570) is a special strategy used during trading", alias="timeInForce") post_only: Optional[bool] = Field( default=False, @@ -120,12 +120,12 @@ class TimeInForceEnum(Enum): hidden: Optional[bool] = Field( default=False, description= - "[Hidden order](doc://link/pages/338146) or not (not shown in order book)" + "[Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book)" ) iceberg: Optional[bool] = Field( default=False, description= - "Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146)" + "Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146)" ) visible_size: Optional[str] = Field( default=None, @@ -270,7 +270,7 @@ def set_type(self, value: AddOrderReq.TypeEnum) -> AddOrderReqBuilder: def set_stp(self, value: AddOrderReq.StpEnum) -> AddOrderReqBuilder: """ - [Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB , and DC + [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC """ self.obj['stp'] = value return self @@ -292,7 +292,7 @@ def set_size(self, value: str) -> AddOrderReqBuilder: def set_time_in_force( self, value: AddOrderReq.TimeInForceEnum) -> AddOrderReqBuilder: """ - [Time in force](doc://link/pages/5176570) is a special strategy used during trading + [Time in force](https://www.kucoin.com/docs-new/api-5176570) is a special strategy used during trading """ self.obj['timeInForce'] = value return self @@ -306,14 +306,14 @@ def set_post_only(self, value: bool) -> AddOrderReqBuilder: def set_hidden(self, value: bool) -> AddOrderReqBuilder: """ - [Hidden order](doc://link/pages/338146) or not (not shown in order book) + [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) """ self.obj['hidden'] = value return self def set_iceberg(self, value: bool) -> AddOrderReqBuilder: """ - Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146) + Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) """ self.obj['iceberg'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/margin/order/model_add_order_test_req.py b/sdk/python/kucoin_universal_sdk/generate/margin/order/model_add_order_test_req.py index 2f531aa6..039e5bc7 100644 --- a/sdk/python/kucoin_universal_sdk/generate/margin/order/model_add_order_test_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/margin/order/model_add_order_test_req.py @@ -20,13 +20,13 @@ class AddOrderTestReq(BaseModel): side (SideEnum): specify if the order is to 'buy' or 'sell' symbol (str): symbol type (TypeEnum): specify if the order is an 'limit' order or 'market' order. The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine. When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels. Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. - stp (StpEnum): [Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB , and DC + stp (StpEnum): [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC price (str): Specify price for order When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. size (str): Specify quantity for order When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize. When **type** is market, select one out of two: size or funds - time_in_force (TimeInForceEnum): [Time in force](doc://link/pages/5176570) is a special strategy used during trading + time_in_force (TimeInForceEnum): [Time in force](https://www.kucoin.com/docs-new/api-5176570) is a special strategy used during trading post_only (bool): passive order labels, this is disabled when the order timing strategy is IOC or FOK - hidden (bool): [Hidden order](doc://link/pages/338146) or not (not shown in order book) - iceberg (bool): Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146) + hidden (bool): [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) + iceberg (bool): Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) visible_size (str): Maximum visible quantity in iceberg orders cancel_after (int): Cancel after n seconds๏ผŒthe order timing strategy is GTT funds (str): When **type** is market, select one out of two: size or funds @@ -95,7 +95,7 @@ class TimeInForceEnum(Enum): stp: Optional[StpEnum] = Field( default=None, description= - "[Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB , and DC" + "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC" ) price: Optional[str] = Field( default=None, @@ -110,7 +110,7 @@ class TimeInForceEnum(Enum): time_in_force: Optional[TimeInForceEnum] = Field( default=TimeInForceEnum.GTC, description= - "[Time in force](doc://link/pages/5176570) is a special strategy used during trading", + "[Time in force](https://www.kucoin.com/docs-new/api-5176570) is a special strategy used during trading", alias="timeInForce") post_only: Optional[bool] = Field( default=False, @@ -120,12 +120,12 @@ class TimeInForceEnum(Enum): hidden: Optional[bool] = Field( default=False, description= - "[Hidden order](doc://link/pages/338146) or not (not shown in order book)" + "[Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book)" ) iceberg: Optional[bool] = Field( default=False, description= - "Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146)" + "Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146)" ) visible_size: Optional[str] = Field( default=None, @@ -274,7 +274,7 @@ def set_type(self, def set_stp(self, value: AddOrderTestReq.StpEnum) -> AddOrderTestReqBuilder: """ - [Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB , and DC + [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC """ self.obj['stp'] = value return self @@ -297,7 +297,7 @@ def set_time_in_force( self, value: AddOrderTestReq.TimeInForceEnum) -> AddOrderTestReqBuilder: """ - [Time in force](doc://link/pages/5176570) is a special strategy used during trading + [Time in force](https://www.kucoin.com/docs-new/api-5176570) is a special strategy used during trading """ self.obj['timeInForce'] = value return self @@ -311,14 +311,14 @@ def set_post_only(self, value: bool) -> AddOrderTestReqBuilder: def set_hidden(self, value: bool) -> AddOrderTestReqBuilder: """ - [Hidden order](doc://link/pages/338146) or not (not shown in order book) + [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) """ self.obj['hidden'] = value return self def set_iceberg(self, value: bool) -> AddOrderTestReqBuilder: """ - Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146) + Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) """ self.obj['iceberg'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/margin/order/model_add_order_test_v1_req.py b/sdk/python/kucoin_universal_sdk/generate/margin/order/model_add_order_test_v1_req.py index e1f523b8..803451f8 100644 --- a/sdk/python/kucoin_universal_sdk/generate/margin/order/model_add_order_test_v1_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/margin/order/model_add_order_test_v1_req.py @@ -20,10 +20,10 @@ class AddOrderTestV1Req(BaseModel): side (SideEnum): specify if the order is to 'buy' or 'sell' symbol (str): symbol type (TypeEnum): specify if the order is an 'limit' order or 'market' order. The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine. When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels. Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. - stp (StpEnum): [Self Trade Prevention](doc://link/pages/5176570) is divided into four strategies: CN, CO, CB , and DC + stp (StpEnum): [Self Trade Prevention](https://www.kucoin.com/docs-new/api-5176570) is divided into four strategies: CN, CO, CB , and DC price (str): Specify price for order When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. size (str): Specify quantity for order When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize. When **type** is market, select one out of two: size or funds - time_in_force (TimeInForceEnum): [Time in force](doc://link/pages/5176570) is a special strategy used during trading + time_in_force (TimeInForceEnum): [Time in force](https://www.kucoin.com/docs-new/api-5176570) is a special strategy used during trading post_only (bool): passive order labels, this is disabled when the order timing strategy is IOC or FOK hidden (bool): Hidden or not (not shown in order book) iceberg (bool): Whether or not only visible portions of orders are shown in iceberg orders @@ -104,7 +104,7 @@ class MarginModelEnum(Enum): stp: Optional[StpEnum] = Field( default=None, description= - "[Self Trade Prevention](doc://link/pages/5176570) is divided into four strategies: CN, CO, CB , and DC" + "[Self Trade Prevention](https://www.kucoin.com/docs-new/api-5176570) is divided into four strategies: CN, CO, CB , and DC" ) price: Optional[str] = Field( default=None, @@ -119,7 +119,7 @@ class MarginModelEnum(Enum): time_in_force: Optional[TimeInForceEnum] = Field( default=TimeInForceEnum.GTC, description= - "[Time in force](doc://link/pages/5176570) is a special strategy used during trading", + "[Time in force](https://www.kucoin.com/docs-new/api-5176570) is a special strategy used during trading", alias="timeInForce") post_only: Optional[bool] = Field( default=False, @@ -283,7 +283,7 @@ def set_type( def set_stp(self, value: AddOrderTestV1Req.StpEnum) -> AddOrderTestV1ReqBuilder: """ - [Self Trade Prevention](doc://link/pages/5176570) is divided into four strategies: CN, CO, CB , and DC + [Self Trade Prevention](https://www.kucoin.com/docs-new/api-5176570) is divided into four strategies: CN, CO, CB , and DC """ self.obj['stp'] = value return self @@ -306,7 +306,7 @@ def set_time_in_force( self, value: AddOrderTestV1Req.TimeInForceEnum ) -> AddOrderTestV1ReqBuilder: """ - [Time in force](doc://link/pages/5176570) is a special strategy used during trading + [Time in force](https://www.kucoin.com/docs-new/api-5176570) is a special strategy used during trading """ self.obj['timeInForce'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/margin/order/model_add_order_v1_req.py b/sdk/python/kucoin_universal_sdk/generate/margin/order/model_add_order_v1_req.py index b9eeb0eb..fbff0a01 100644 --- a/sdk/python/kucoin_universal_sdk/generate/margin/order/model_add_order_v1_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/margin/order/model_add_order_v1_req.py @@ -20,10 +20,10 @@ class AddOrderV1Req(BaseModel): side (SideEnum): specify if the order is to 'buy' or 'sell' symbol (str): symbol type (TypeEnum): specify if the order is an 'limit' order or 'market' order. The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine. When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels. Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. - stp (StpEnum): [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC + stp (StpEnum): [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC price (str): Specify price for order When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. size (str): Specify quantity for order When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize. When **type** is market, select one out of two: size or funds - time_in_force (TimeInForceEnum): [Time in force](doc://link/pages/338146) is a special strategy used during trading + time_in_force (TimeInForceEnum): [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading post_only (bool): passive order labels, this is disabled when the order timing strategy is IOC or FOK hidden (bool): Hidden or not (not shown in order book) iceberg (bool): Whether or not only visible portions of orders are shown in iceberg orders @@ -104,7 +104,7 @@ class MarginModelEnum(Enum): stp: Optional[StpEnum] = Field( default=None, description= - "[Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC" + "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC" ) price: Optional[str] = Field( default=None, @@ -119,7 +119,7 @@ class MarginModelEnum(Enum): time_in_force: Optional[TimeInForceEnum] = Field( default=TimeInForceEnum.GTC, description= - "[Time in force](doc://link/pages/338146) is a special strategy used during trading", + "[Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading", alias="timeInForce") post_only: Optional[bool] = Field( default=False, @@ -278,7 +278,7 @@ def set_type(self, value: AddOrderV1Req.TypeEnum) -> AddOrderV1ReqBuilder: def set_stp(self, value: AddOrderV1Req.StpEnum) -> AddOrderV1ReqBuilder: """ - [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC + [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC """ self.obj['stp'] = value return self @@ -301,7 +301,7 @@ def set_time_in_force( self, value: AddOrderV1Req.TimeInForceEnum) -> AddOrderV1ReqBuilder: """ - [Time in force](doc://link/pages/338146) is a special strategy used during trading + [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading """ self.obj['timeInForce'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/margin/order/model_get_closed_orders_items.py b/sdk/python/kucoin_universal_sdk/generate/margin/order/model_get_closed_orders_items.py index b8e43a4e..f5e2ab45 100644 --- a/sdk/python/kucoin_universal_sdk/generate/margin/order/model_get_closed_orders_items.py +++ b/sdk/python/kucoin_universal_sdk/generate/margin/order/model_get_closed_orders_items.py @@ -26,9 +26,9 @@ class GetClosedOrdersItems(BaseModel): funds (str): Order Funds deal_size (str): Number of filled transactions deal_funds (str): Funds of filled transactions - fee (str): [Handling fees](doc://link/pages/5327739) + fee (str): [Handling fees](https://www.kucoin.com/docs-new/api-5327739) fee_currency (str): currency used to calculate trading fee - stp (StpEnum): [Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB , and DC + stp (StpEnum): [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC stop (str): stop_triggered (bool): stop_price (str): @@ -112,7 +112,9 @@ class TimeInForceEnum(Enum): description="Funds of filled transactions", alias="dealFunds") fee: Optional[str] = Field( - default=None, description="[Handling fees](doc://link/pages/5327739)") + default=None, + description= + "[Handling fees](https://www.kucoin.com/docs-new/api-5327739)") fee_currency: Optional[str] = Field( default=None, description="currency used to calculate trading fee", @@ -120,7 +122,7 @@ class TimeInForceEnum(Enum): stp: Optional[StpEnum] = Field( default=None, description= - "[Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB , and DC" + "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC" ) stop: Optional[str] = None stop_triggered: Optional[bool] = Field(default=None, alias="stopTriggered") diff --git a/sdk/python/kucoin_universal_sdk/generate/margin/order/model_get_open_orders_data.py b/sdk/python/kucoin_universal_sdk/generate/margin/order/model_get_open_orders_data.py index 133cc1e8..114198e7 100644 --- a/sdk/python/kucoin_universal_sdk/generate/margin/order/model_get_open_orders_data.py +++ b/sdk/python/kucoin_universal_sdk/generate/margin/order/model_get_open_orders_data.py @@ -28,7 +28,7 @@ class GetOpenOrdersData(BaseModel): deal_funds (str): Funds of filled transactions fee (str): trading fee fee_currency (str): currency used to calculate trading fee - stp (StpEnum): [Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB , and DC + stp (StpEnum): [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC stop (str): stop_triggered (bool): stop_price (str): @@ -128,7 +128,7 @@ class TimeInForceEnum(Enum): stp: Optional[StpEnum] = Field( default=None, description= - "[Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB , and DC" + "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC" ) stop: Optional[str] = None stop_triggered: Optional[bool] = Field(default=None, alias="stopTriggered") diff --git a/sdk/python/kucoin_universal_sdk/generate/margin/order/model_get_order_by_client_oid_resp.py b/sdk/python/kucoin_universal_sdk/generate/margin/order/model_get_order_by_client_oid_resp.py index 37b0a367..e5ed5221 100644 --- a/sdk/python/kucoin_universal_sdk/generate/margin/order/model_get_order_by_client_oid_resp.py +++ b/sdk/python/kucoin_universal_sdk/generate/margin/order/model_get_order_by_client_oid_resp.py @@ -28,9 +28,9 @@ class GetOrderByClientOidResp(BaseModel, Response): funds (str): Order Funds deal_size (str): Number of filled transactions deal_funds (str): Funds of filled transactions - fee (str): [Handling fees](doc://link/pages/5327739) + fee (str): [Handling fees](https://www.kucoin.com/docs-new/api-5327739) fee_currency (str): currency used to calculate trading fee - stp (StpEnum): [Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB , and DC + stp (StpEnum): [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC stop (str): stop_triggered (bool): stop_price (str): @@ -125,7 +125,9 @@ class TimeInForceEnum(Enum): description="Funds of filled transactions", alias="dealFunds") fee: Optional[str] = Field( - default=None, description="[Handling fees](doc://link/pages/5327739)") + default=None, + description= + "[Handling fees](https://www.kucoin.com/docs-new/api-5327739)") fee_currency: Optional[str] = Field( default=None, description="currency used to calculate trading fee", @@ -133,7 +135,7 @@ class TimeInForceEnum(Enum): stp: Optional[StpEnum] = Field( default=None, description= - "[Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB , and DC" + "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC" ) stop: Optional[str] = None stop_triggered: Optional[bool] = Field(default=None, alias="stopTriggered") diff --git a/sdk/python/kucoin_universal_sdk/generate/margin/order/model_get_order_by_order_id_resp.py b/sdk/python/kucoin_universal_sdk/generate/margin/order/model_get_order_by_order_id_resp.py index b60d8afb..48e4679a 100644 --- a/sdk/python/kucoin_universal_sdk/generate/margin/order/model_get_order_by_order_id_resp.py +++ b/sdk/python/kucoin_universal_sdk/generate/margin/order/model_get_order_by_order_id_resp.py @@ -28,9 +28,9 @@ class GetOrderByOrderIdResp(BaseModel, Response): funds (str): Order Funds deal_size (str): Number of filled transactions deal_funds (str): Funds of filled transactions - fee (str): [Handling fees](doc://link/pages/5327739) + fee (str): [Handling fees](https://www.kucoin.com/docs-new/api-5327739) fee_currency (str): currency used to calculate trading fee - stp (StpEnum): [Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB , and DC + stp (StpEnum): [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC stop (str): stop_triggered (bool): stop_price (str): @@ -125,7 +125,9 @@ class TimeInForceEnum(Enum): description="Funds of filled transactions", alias="dealFunds") fee: Optional[str] = Field( - default=None, description="[Handling fees](doc://link/pages/5327739)") + default=None, + description= + "[Handling fees](https://www.kucoin.com/docs-new/api-5327739)") fee_currency: Optional[str] = Field( default=None, description="currency used to calculate trading fee", @@ -133,7 +135,7 @@ class TimeInForceEnum(Enum): stp: Optional[StpEnum] = Field( default=None, description= - "[Self Trade Prevention](doc://link/pages/338146) is divided into these strategies: CN, CO, CB , and DC" + "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into these strategies: CN, CO, CB , and DC" ) stop: Optional[str] = None stop_triggered: Optional[bool] = Field(default=None, alias="stopTriggered") diff --git a/sdk/python/kucoin_universal_sdk/generate/margin/order/model_get_trade_history_items.py b/sdk/python/kucoin_universal_sdk/generate/margin/order/model_get_trade_history_items.py index 55b81cdf..7fee4539 100644 --- a/sdk/python/kucoin_universal_sdk/generate/margin/order/model_get_trade_history_items.py +++ b/sdk/python/kucoin_universal_sdk/generate/margin/order/model_get_trade_history_items.py @@ -27,7 +27,7 @@ class GetTradeHistoryItems(BaseModel): price (str): Order price size (str): Order size funds (str): Order Funds - fee (str): [Handling fees](doc://link/pages/5327739) + fee (str): [Handling fees](https://www.kucoin.com/docs-new/api-5327739) fee_rate (str): Fee rate fee_currency (str): currency used to calculate trading fee stop (str): Take Profit and Stop Loss type, currently HFT does not support the Take Profit and Stop Loss type, so it is empty @@ -88,7 +88,9 @@ class TypeEnum(Enum): size: Optional[str] = Field(default=None, description="Order size") funds: Optional[str] = Field(default=None, description="Order Funds") fee: Optional[str] = Field( - default=None, description="[Handling fees](doc://link/pages/5327739)") + default=None, + description= + "[Handling fees](https://www.kucoin.com/docs-new/api-5327739)") fee_rate: Optional[str] = Field(default=None, description="Fee rate ", alias="feeRate") diff --git a/sdk/python/kucoin_universal_sdk/generate/spot/market/model_get_all_symbols_req.py b/sdk/python/kucoin_universal_sdk/generate/spot/market/model_get_all_symbols_req.py index 52c64d18..7fc2140c 100644 --- a/sdk/python/kucoin_universal_sdk/generate/spot/market/model_get_all_symbols_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/spot/market/model_get_all_symbols_req.py @@ -15,12 +15,13 @@ class GetAllSymbolsReq(BaseModel): GetAllSymbolsReq Attributes: - market (str): [The trading market](apidog://link/endpoint/222921786) + market (str): [The trading market](https://www.kucoin.com/docs-new/api-222921786) """ market: Optional[str] = Field( default=None, - description="[The trading market](apidog://link/endpoint/222921786)") + description= + "[The trading market](https://www.kucoin.com/docs-new/api-222921786)") __properties: ClassVar[List[str]] = ["market"] @@ -67,7 +68,7 @@ def __init__(self): def set_market(self, value: str) -> GetAllSymbolsReqBuilder: """ - [The trading market](apidog://link/endpoint/222921786) + [The trading market](https://www.kucoin.com/docs-new/api-222921786) """ self.obj['market'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/spot/order/model_add_order_old_req.py b/sdk/python/kucoin_universal_sdk/generate/spot/order/model_add_order_old_req.py index 0b13d9a6..a5dea8db 100644 --- a/sdk/python/kucoin_universal_sdk/generate/spot/order/model_add_order_old_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/spot/order/model_add_order_old_req.py @@ -21,10 +21,10 @@ class AddOrderOldReq(BaseModel): symbol (str): symbol type (TypeEnum): specify if the order is an 'limit' order or 'market' order. The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine. When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels. Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. remark (str): Order placement remarks, length cannot exceed 20 characters (ASCII) - stp (StpEnum): [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC + stp (StpEnum): [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC price (str): Specify price for order When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. size (str): Specify quantity for order When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize. When **type** is market, select one out of two: size or funds - time_in_force (TimeInForceEnum): [Time in force](doc://link/pages/338146) is a special strategy used during trading + time_in_force (TimeInForceEnum): [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading post_only (bool): passive order labels, this is disabled when the order timing strategy is IOC or FOK hidden (bool): Hidden or not (not shown in order book) iceberg (bool): Whether or not only visible portions of orders are shown in iceberg orders @@ -107,7 +107,7 @@ class TradeTypeEnum(Enum): stp: Optional[StpEnum] = Field( default=None, description= - "[Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC" + "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC" ) price: Optional[str] = Field( default=None, @@ -122,7 +122,7 @@ class TradeTypeEnum(Enum): time_in_force: Optional[TimeInForceEnum] = Field( default=TimeInForceEnum.GTC, description= - "[Time in force](doc://link/pages/338146) is a special strategy used during trading", + "[Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading", alias="timeInForce") post_only: Optional[bool] = Field( default=False, @@ -276,7 +276,7 @@ def set_remark(self, value: str) -> AddOrderOldReqBuilder: def set_stp(self, value: AddOrderOldReq.StpEnum) -> AddOrderOldReqBuilder: """ - [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC + [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC """ self.obj['stp'] = value return self @@ -299,7 +299,7 @@ def set_time_in_force( self, value: AddOrderOldReq.TimeInForceEnum) -> AddOrderOldReqBuilder: """ - [Time in force](doc://link/pages/338146) is a special strategy used during trading + [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading """ self.obj['timeInForce'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/spot/order/model_add_order_req.py b/sdk/python/kucoin_universal_sdk/generate/spot/order/model_add_order_req.py index 53b88376..85a6d2b1 100644 --- a/sdk/python/kucoin_universal_sdk/generate/spot/order/model_add_order_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/spot/order/model_add_order_req.py @@ -21,13 +21,13 @@ class AddOrderReq(BaseModel): symbol (str): symbol type (TypeEnum): specify if the order is an 'limit' order or 'market' order. The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine. When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels. Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. remark (str): Order placement remarks, length cannot exceed 20 characters (ASCII) - stp (StpEnum): [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC + stp (StpEnum): [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC price (str): Specify price for order When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. size (str): Specify quantity for order When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize. When **type** is market, select one out of two: size or funds - time_in_force (TimeInForceEnum): [Time in force](doc://link/pages/338146) is a special strategy used during trading + time_in_force (TimeInForceEnum): [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading post_only (bool): passive order labels, this is disabled when the order timing strategy is IOC or FOK - hidden (bool): [Hidden order](doc://link/pages/338146) or not (not shown in order book) - iceberg (bool): Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146) + hidden (bool): [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) + iceberg (bool): Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) visible_size (str): Maximum visible quantity in iceberg orders tags (str): Order tag, length cannot exceed 20 characters (ASCII) cancel_after (int): Cancel after n seconds๏ผŒthe order timing strategy is GTT @@ -98,7 +98,7 @@ class TimeInForceEnum(Enum): stp: Optional[StpEnum] = Field( default=None, description= - "[Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC" + "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC" ) price: Optional[str] = Field( default=None, @@ -113,7 +113,7 @@ class TimeInForceEnum(Enum): time_in_force: Optional[TimeInForceEnum] = Field( default=TimeInForceEnum.GTC, description= - "[Time in force](doc://link/pages/338146) is a special strategy used during trading", + "[Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading", alias="timeInForce") post_only: Optional[bool] = Field( default=False, @@ -123,12 +123,12 @@ class TimeInForceEnum(Enum): hidden: Optional[bool] = Field( default=False, description= - "[Hidden order](doc://link/pages/338146) or not (not shown in order book)" + "[Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book)" ) iceberg: Optional[bool] = Field( default=False, description= - "Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146)" + "Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146)" ) visible_size: Optional[str] = Field( default=None, @@ -263,7 +263,7 @@ def set_remark(self, value: str) -> AddOrderReqBuilder: def set_stp(self, value: AddOrderReq.StpEnum) -> AddOrderReqBuilder: """ - [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC + [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC """ self.obj['stp'] = value return self @@ -285,7 +285,7 @@ def set_size(self, value: str) -> AddOrderReqBuilder: def set_time_in_force( self, value: AddOrderReq.TimeInForceEnum) -> AddOrderReqBuilder: """ - [Time in force](doc://link/pages/338146) is a special strategy used during trading + [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading """ self.obj['timeInForce'] = value return self @@ -299,14 +299,14 @@ def set_post_only(self, value: bool) -> AddOrderReqBuilder: def set_hidden(self, value: bool) -> AddOrderReqBuilder: """ - [Hidden order](doc://link/pages/338146) or not (not shown in order book) + [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) """ self.obj['hidden'] = value return self def set_iceberg(self, value: bool) -> AddOrderReqBuilder: """ - Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146) + Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) """ self.obj['iceberg'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/spot/order/model_add_order_sync_req.py b/sdk/python/kucoin_universal_sdk/generate/spot/order/model_add_order_sync_req.py index 75cf94b1..0f6d28c0 100644 --- a/sdk/python/kucoin_universal_sdk/generate/spot/order/model_add_order_sync_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/spot/order/model_add_order_sync_req.py @@ -21,13 +21,13 @@ class AddOrderSyncReq(BaseModel): symbol (str): symbol type (TypeEnum): specify if the order is an 'limit' order or 'market' order. The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine. When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels. Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. remark (str): Order placement remarks, length cannot exceed 20 characters (ASCII) - stp (StpEnum): [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC + stp (StpEnum): [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC price (str): Specify price for order When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. size (str): Specify quantity for order When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize. When **type** is market, select one out of two: size or funds - time_in_force (TimeInForceEnum): [Time in force](doc://link/pages/338146) is a special strategy used during trading + time_in_force (TimeInForceEnum): [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading post_only (bool): passive order labels, this is disabled when the order timing strategy is IOC or FOK - hidden (bool): [Hidden order](doc://link/pages/338146) or not (not shown in order book) - iceberg (bool): Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146) + hidden (bool): [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) + iceberg (bool): Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) visible_size (str): Maximum visible quantity in iceberg orders tags (str): Order tag, length cannot exceed 20 characters (ASCII) cancel_after (int): Cancel after n seconds๏ผŒthe order timing strategy is GTT @@ -98,7 +98,7 @@ class TimeInForceEnum(Enum): stp: Optional[StpEnum] = Field( default=None, description= - "[Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC" + "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC" ) price: Optional[str] = Field( default=None, @@ -113,7 +113,7 @@ class TimeInForceEnum(Enum): time_in_force: Optional[TimeInForceEnum] = Field( default=TimeInForceEnum.GTC, description= - "[Time in force](doc://link/pages/338146) is a special strategy used during trading", + "[Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading", alias="timeInForce") post_only: Optional[bool] = Field( default=False, @@ -123,12 +123,12 @@ class TimeInForceEnum(Enum): hidden: Optional[bool] = Field( default=False, description= - "[Hidden order](doc://link/pages/338146) or not (not shown in order book)" + "[Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book)" ) iceberg: Optional[bool] = Field( default=False, description= - "Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146)" + "Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146)" ) visible_size: Optional[str] = Field( default=None, @@ -267,7 +267,7 @@ def set_remark(self, value: str) -> AddOrderSyncReqBuilder: def set_stp(self, value: AddOrderSyncReq.StpEnum) -> AddOrderSyncReqBuilder: """ - [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC + [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC """ self.obj['stp'] = value return self @@ -290,7 +290,7 @@ def set_time_in_force( self, value: AddOrderSyncReq.TimeInForceEnum) -> AddOrderSyncReqBuilder: """ - [Time in force](doc://link/pages/338146) is a special strategy used during trading + [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading """ self.obj['timeInForce'] = value return self @@ -304,14 +304,14 @@ def set_post_only(self, value: bool) -> AddOrderSyncReqBuilder: def set_hidden(self, value: bool) -> AddOrderSyncReqBuilder: """ - [Hidden order](doc://link/pages/338146) or not (not shown in order book) + [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) """ self.obj['hidden'] = value return self def set_iceberg(self, value: bool) -> AddOrderSyncReqBuilder: """ - Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146) + Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) """ self.obj['iceberg'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/spot/order/model_add_order_test_old_req.py b/sdk/python/kucoin_universal_sdk/generate/spot/order/model_add_order_test_old_req.py index 69b31ea4..54f13d99 100644 --- a/sdk/python/kucoin_universal_sdk/generate/spot/order/model_add_order_test_old_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/spot/order/model_add_order_test_old_req.py @@ -21,10 +21,10 @@ class AddOrderTestOldReq(BaseModel): symbol (str): symbol type (TypeEnum): specify if the order is an 'limit' order or 'market' order. The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine. When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels. Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. remark (str): Order placement remarks, length cannot exceed 20 characters (ASCII) - stp (StpEnum): [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC + stp (StpEnum): [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC price (str): Specify price for order When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. size (str): Specify quantity for order When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize. When **type** is market, select one out of two: size or funds - time_in_force (TimeInForceEnum): [Time in force](doc://link/pages/338146) is a special strategy used during trading + time_in_force (TimeInForceEnum): [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading post_only (bool): passive order labels, this is disabled when the order timing strategy is IOC or FOK hidden (bool): Hidden or not (not shown in order book) iceberg (bool): Whether or not only visible portions of orders are shown in iceberg orders @@ -107,7 +107,7 @@ class TradeTypeEnum(Enum): stp: Optional[StpEnum] = Field( default=None, description= - "[Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC" + "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC" ) price: Optional[str] = Field( default=None, @@ -122,7 +122,7 @@ class TradeTypeEnum(Enum): time_in_force: Optional[TimeInForceEnum] = Field( default=TimeInForceEnum.GTC, description= - "[Time in force](doc://link/pages/338146) is a special strategy used during trading", + "[Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading", alias="timeInForce") post_only: Optional[bool] = Field( default=False, @@ -281,7 +281,7 @@ def set_stp( self, value: AddOrderTestOldReq.StpEnum) -> AddOrderTestOldReqBuilder: """ - [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC + [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC """ self.obj['stp'] = value return self @@ -304,7 +304,7 @@ def set_time_in_force( self, value: AddOrderTestOldReq.TimeInForceEnum ) -> AddOrderTestOldReqBuilder: """ - [Time in force](doc://link/pages/338146) is a special strategy used during trading + [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading """ self.obj['timeInForce'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/spot/order/model_add_order_test_req.py b/sdk/python/kucoin_universal_sdk/generate/spot/order/model_add_order_test_req.py index 8136cc99..c3c08570 100644 --- a/sdk/python/kucoin_universal_sdk/generate/spot/order/model_add_order_test_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/spot/order/model_add_order_test_req.py @@ -21,13 +21,13 @@ class AddOrderTestReq(BaseModel): symbol (str): symbol type (TypeEnum): specify if the order is an 'limit' order or 'market' order. The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine. When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels. Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. remark (str): Order placement remarks, length cannot exceed 20 characters (ASCII) - stp (StpEnum): [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC + stp (StpEnum): [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC price (str): Specify price for order When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. size (str): Specify quantity for order When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize. When **type** is market, select one out of two: size or funds - time_in_force (TimeInForceEnum): [Time in force](doc://link/pages/338146) is a special strategy used during trading + time_in_force (TimeInForceEnum): [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading post_only (bool): passive order labels, this is disabled when the order timing strategy is IOC or FOK - hidden (bool): [Hidden order](doc://link/pages/338146) or not (not shown in order book) - iceberg (bool): Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146) + hidden (bool): [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) + iceberg (bool): Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) visible_size (str): Maximum visible quantity in iceberg orders tags (str): Order tag, length cannot exceed 20 characters (ASCII) cancel_after (int): Cancel after n seconds๏ผŒthe order timing strategy is GTT @@ -98,7 +98,7 @@ class TimeInForceEnum(Enum): stp: Optional[StpEnum] = Field( default=None, description= - "[Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC" + "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC" ) price: Optional[str] = Field( default=None, @@ -113,7 +113,7 @@ class TimeInForceEnum(Enum): time_in_force: Optional[TimeInForceEnum] = Field( default=TimeInForceEnum.GTC, description= - "[Time in force](doc://link/pages/338146) is a special strategy used during trading", + "[Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading", alias="timeInForce") post_only: Optional[bool] = Field( default=False, @@ -123,12 +123,12 @@ class TimeInForceEnum(Enum): hidden: Optional[bool] = Field( default=False, description= - "[Hidden order](doc://link/pages/338146) or not (not shown in order book)" + "[Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book)" ) iceberg: Optional[bool] = Field( default=False, description= - "Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146)" + "Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146)" ) visible_size: Optional[str] = Field( default=None, @@ -267,7 +267,7 @@ def set_remark(self, value: str) -> AddOrderTestReqBuilder: def set_stp(self, value: AddOrderTestReq.StpEnum) -> AddOrderTestReqBuilder: """ - [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC + [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC """ self.obj['stp'] = value return self @@ -290,7 +290,7 @@ def set_time_in_force( self, value: AddOrderTestReq.TimeInForceEnum) -> AddOrderTestReqBuilder: """ - [Time in force](doc://link/pages/338146) is a special strategy used during trading + [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading """ self.obj['timeInForce'] = value return self @@ -304,14 +304,14 @@ def set_post_only(self, value: bool) -> AddOrderTestReqBuilder: def set_hidden(self, value: bool) -> AddOrderTestReqBuilder: """ - [Hidden order](doc://link/pages/338146) or not (not shown in order book) + [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) """ self.obj['hidden'] = value return self def set_iceberg(self, value: bool) -> AddOrderTestReqBuilder: """ - Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146) + Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) """ self.obj['iceberg'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/spot/order/model_add_stop_order_req.py b/sdk/python/kucoin_universal_sdk/generate/spot/order/model_add_stop_order_req.py index e2b0a2f4..273eb262 100644 --- a/sdk/python/kucoin_universal_sdk/generate/spot/order/model_add_stop_order_req.py +++ b/sdk/python/kucoin_universal_sdk/generate/spot/order/model_add_stop_order_req.py @@ -21,13 +21,13 @@ class AddStopOrderReq(BaseModel): symbol (str): symbol type (TypeEnum): specify if the order is an 'limit' order or 'market' order. The type of order you specify when you place your order determines whether or not you need to request other parameters and also affects the execution of the matching engine. When placing a limit order, you must specify a price and size. The system will try to match the order according to market price or a price better than market price. If the order cannot be immediately matched, it will stay in the order book until it is matched or the user cancels. Unlike limit orders, the price for market orders fluctuates with market prices. When placing a market order, you do not need to specify a price, you only need to specify a quantity. Market orders are filled immediately and will not enter the order book. All market orders are takers and a taker fee will be charged. remark (str): Order placement remarks, length cannot exceed 20 characters (ASCII) - stp (StpEnum): [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC + stp (StpEnum): [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC price (str): Specify price for order, not need for market order. When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. size (str): Specify quantity for order When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize. When **type** is market, select one out of two: size or funds - time_in_force (TimeInForceEnum): [Time in force](doc://link/pages/338146) is a special strategy used during trading. Required for limit orders. + time_in_force (TimeInForceEnum): [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading. Required for limit orders. post_only (bool): passive order labels, this is disabled when the order timing strategy is IOC or FOK if **type** is limit. - hidden (bool): [Hidden order](doc://link/pages/338146) or not (not shown in order book) - iceberg (bool): Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146) + hidden (bool): [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) + iceberg (bool): Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) visible_size (str): When **type** is limit, this is Maximum visible quantity in iceberg orders. cancel_after (int): Cancel after n seconds๏ผŒthe order timing strategy is GTT when **type** is limit. funds (str): When **type** is market, select one out of two: size or funds @@ -99,7 +99,7 @@ class TimeInForceEnum(Enum): stp: Optional[StpEnum] = Field( default=None, description= - "[Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC" + "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC" ) price: Optional[str] = Field( default=None, @@ -114,7 +114,7 @@ class TimeInForceEnum(Enum): time_in_force: Optional[TimeInForceEnum] = Field( default=TimeInForceEnum.GTC, description= - "[Time in force](doc://link/pages/338146) is a special strategy used during trading. Required for limit orders.", + "[Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading. Required for limit orders.", alias="timeInForce") post_only: Optional[bool] = Field( default=False, @@ -124,12 +124,12 @@ class TimeInForceEnum(Enum): hidden: Optional[bool] = Field( default=False, description= - "[Hidden order](doc://link/pages/338146) or not (not shown in order book)" + "[Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book)" ) iceberg: Optional[bool] = Field( default=False, description= - "Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146)" + "Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146)" ) visible_size: Optional[str] = Field( default=None, @@ -277,7 +277,7 @@ def set_remark(self, value: str) -> AddStopOrderReqBuilder: def set_stp(self, value: AddStopOrderReq.StpEnum) -> AddStopOrderReqBuilder: """ - [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC + [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC """ self.obj['stp'] = value return self @@ -300,7 +300,7 @@ def set_time_in_force( self, value: AddStopOrderReq.TimeInForceEnum) -> AddStopOrderReqBuilder: """ - [Time in force](doc://link/pages/338146) is a special strategy used during trading. Required for limit orders. + [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading. Required for limit orders. """ self.obj['timeInForce'] = value return self @@ -314,14 +314,14 @@ def set_post_only(self, value: bool) -> AddStopOrderReqBuilder: def set_hidden(self, value: bool) -> AddStopOrderReqBuilder: """ - [Hidden order](doc://link/pages/338146) or not (not shown in order book) + [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) """ self.obj['hidden'] = value return self def set_iceberg(self, value: bool) -> AddStopOrderReqBuilder: """ - Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146) + Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) """ self.obj['iceberg'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/spot/order/model_batch_add_orders_old_order_list.py b/sdk/python/kucoin_universal_sdk/generate/spot/order/model_batch_add_orders_old_order_list.py index 324da809..aff128c8 100644 --- a/sdk/python/kucoin_universal_sdk/generate/spot/order/model_batch_add_orders_old_order_list.py +++ b/sdk/python/kucoin_universal_sdk/generate/spot/order/model_batch_add_orders_old_order_list.py @@ -21,10 +21,10 @@ class BatchAddOrdersOldOrderList(BaseModel): symbol (str): symbol type (TypeEnum): only limit (default is limit) remark (str): Order placement remarks, length cannot exceed 20 characters (ASCII) - stp (StpEnum): [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC + stp (StpEnum): [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC price (str): Specify price for order When placing a limit order, the price must be based on priceIncrement for the trading pair. The price increment (priceIncrement) is the price precision for the trading pair. For example, for the BTC-USDT trading pair, the priceIncrement is 0.00001000. So the price for your orders cannot be less than 0.00001000 and must be a multiple of priceIncrement. Otherwise, the order will return an invalid priceIncrement error. size (str): Specify quantity for order When **type** is limit, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize. When **type** is market, select one out of two: size or funds - time_in_force (TimeInForceEnum): [Time in force](doc://link/pages/338146) is a special strategy used during trading + time_in_force (TimeInForceEnum): [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading post_only (bool): passive order labels, this is disabled when the order timing strategy is IOC or FOK hidden (bool): Hidden or not (not shown in order book) iceberg (bool): Whether or not only visible portions of orders are shown in iceberg orders @@ -110,7 +110,7 @@ class StopEnum(Enum): stp: Optional[StpEnum] = Field( default=None, description= - "[Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC" + "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC" ) price: Optional[str] = Field( default=None, @@ -125,7 +125,7 @@ class StopEnum(Enum): time_in_force: Optional[TimeInForceEnum] = Field( default=TimeInForceEnum.GTC, description= - "[Time in force](doc://link/pages/338146) is a special strategy used during trading", + "[Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading", alias="timeInForce") post_only: Optional[bool] = Field( default=False, @@ -289,7 +289,7 @@ def set_stp( self, value: BatchAddOrdersOldOrderList.StpEnum ) -> BatchAddOrdersOldOrderListBuilder: """ - [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC + [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC """ self.obj['stp'] = value return self @@ -312,7 +312,7 @@ def set_time_in_force( self, value: BatchAddOrdersOldOrderList.TimeInForceEnum ) -> BatchAddOrdersOldOrderListBuilder: """ - [Time in force](doc://link/pages/338146) is a special strategy used during trading + [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading """ self.obj['timeInForce'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/spot/order/model_batch_add_orders_order_list.py b/sdk/python/kucoin_universal_sdk/generate/spot/order/model_batch_add_orders_order_list.py index c0c0b298..370eb4a0 100644 --- a/sdk/python/kucoin_universal_sdk/generate/spot/order/model_batch_add_orders_order_list.py +++ b/sdk/python/kucoin_universal_sdk/generate/spot/order/model_batch_add_orders_order_list.py @@ -19,15 +19,15 @@ class BatchAddOrdersOrderList(BaseModel): client_oid (str): Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters. symbol (str): symbol type (TypeEnum): Specify if the order is an 'limit' order or 'market' order. - time_in_force (TimeInForceEnum): [Time in force](doc://link/pages/338146) is a special strategy used during trading + time_in_force (TimeInForceEnum): [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading side (SideEnum): Specify if the order is to 'buy' or 'sell' price (str): Specify price for order size (str): Specify quantity for order When **type** is limit, select one out of two: size or funds, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize. When **type** is market, select one out of two: size or funds - stp (StpEnum): [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC + stp (StpEnum): [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC cancel_after (int): Cancel after n seconds๏ผŒthe order timing strategy is GTT post_only (bool): passive order labels, this is disabled when the order timing strategy is IOC or FOK - hidden (bool): [Hidden order](doc://link/pages/338146) or not (not shown in order book) - iceberg (bool): Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146) + hidden (bool): [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) + iceberg (bool): Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) visible_size (str): Maximum visible quantity in iceberg orders tags (str): Order tag, length cannot exceed 20 characters (ASCII) remark (str): Order placement remarks, length cannot exceed 20 characters (ASCII) @@ -89,7 +89,7 @@ class StpEnum(Enum): time_in_force: Optional[TimeInForceEnum] = Field( default=TimeInForceEnum.GTC, description= - "[Time in force](doc://link/pages/338146) is a special strategy used during trading", + "[Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading", alias="timeInForce") side: Optional[SideEnum] = Field( default=None, description="Specify if the order is to 'buy' or 'sell'") @@ -103,7 +103,7 @@ class StpEnum(Enum): stp: Optional[StpEnum] = Field( default=None, description= - "[Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC" + "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC" ) cancel_after: Optional[int] = Field( default=None, @@ -117,12 +117,12 @@ class StpEnum(Enum): hidden: Optional[bool] = Field( default=False, description= - "[Hidden order](doc://link/pages/338146) or not (not shown in order book)" + "[Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book)" ) iceberg: Optional[bool] = Field( default=False, description= - "Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146)" + "Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146)" ) visible_size: Optional[str] = Field( default=None, @@ -250,7 +250,7 @@ def set_time_in_force( self, value: BatchAddOrdersOrderList.TimeInForceEnum ) -> BatchAddOrdersOrderListBuilder: """ - [Time in force](doc://link/pages/338146) is a special strategy used during trading + [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading """ self.obj['timeInForce'] = value return self @@ -282,7 +282,7 @@ def set_stp( self, value: BatchAddOrdersOrderList.StpEnum ) -> BatchAddOrdersOrderListBuilder: """ - [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC + [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC """ self.obj['stp'] = value return self @@ -303,14 +303,14 @@ def set_post_only(self, value: bool) -> BatchAddOrdersOrderListBuilder: def set_hidden(self, value: bool) -> BatchAddOrdersOrderListBuilder: """ - [Hidden order](doc://link/pages/338146) or not (not shown in order book) + [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) """ self.obj['hidden'] = value return self def set_iceberg(self, value: bool) -> BatchAddOrdersOrderListBuilder: """ - Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146) + Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) """ self.obj['iceberg'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/spot/order/model_batch_add_orders_sync_order_list.py b/sdk/python/kucoin_universal_sdk/generate/spot/order/model_batch_add_orders_sync_order_list.py index bfcc0be3..a89b2657 100644 --- a/sdk/python/kucoin_universal_sdk/generate/spot/order/model_batch_add_orders_sync_order_list.py +++ b/sdk/python/kucoin_universal_sdk/generate/spot/order/model_batch_add_orders_sync_order_list.py @@ -19,15 +19,15 @@ class BatchAddOrdersSyncOrderList(BaseModel): client_oid (str): Client Order Id๏ผŒThe ClientOid field is a unique ID created by the user๏ผˆwe recommend using a UUID๏ผ‰, and can only contain numbers, letters, underscores ๏ผˆ_๏ผ‰, and hyphens ๏ผˆ-๏ผ‰. This field is returned when order information is obtained. You can use clientOid to tag your orders. ClientOid is different from the order ID created by the service provider. Please do not initiate requests using the same clientOid. The maximum length for the ClientOid is 40 characters. symbol (str): symbol type (TypeEnum): Specify if the order is an 'limit' order or 'market' order. - time_in_force (TimeInForceEnum): [Time in force](doc://link/pages/338146) is a special strategy used during trading + time_in_force (TimeInForceEnum): [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading side (SideEnum): Specify if the order is to 'buy' or 'sell' price (str): Specify price for order size (str): Specify quantity for order When **type** is limit, select one out of two: size or funds, size refers to the amount of trading targets (the asset name written in front) for the trading pair. Teh Size must be based on the baseIncrement of the trading pair. The baseIncrement represents the precision for the trading pair. The size of an order must be a positive-integer multiple of baseIncrement and must be between baseMinSize and baseMaxSize. When **type** is market, select one out of two: size or funds - stp (StpEnum): [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC + stp (StpEnum): [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC cancel_after (int): Cancel after n seconds๏ผŒthe order timing strategy is GTT post_only (bool): passive order labels, this is disabled when the order timing strategy is IOC or FOK - hidden (bool): [Hidden order](doc://link/pages/338146) or not (not shown in order book) - iceberg (bool): Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146) + hidden (bool): [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) + iceberg (bool): Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) visible_size (str): Maximum visible quantity in iceberg orders tags (str): Order tag, length cannot exceed 20 characters (ASCII) remark (str): Order placement remarks, length cannot exceed 20 characters (ASCII) @@ -89,7 +89,7 @@ class StpEnum(Enum): time_in_force: Optional[TimeInForceEnum] = Field( default=TimeInForceEnum.GTC, description= - "[Time in force](doc://link/pages/338146) is a special strategy used during trading", + "[Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading", alias="timeInForce") side: Optional[SideEnum] = Field( default=None, description="Specify if the order is to 'buy' or 'sell'") @@ -103,7 +103,7 @@ class StpEnum(Enum): stp: Optional[StpEnum] = Field( default=None, description= - "[Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC" + "[Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC" ) cancel_after: Optional[int] = Field( default=None, @@ -117,12 +117,12 @@ class StpEnum(Enum): hidden: Optional[bool] = Field( default=False, description= - "[Hidden order](doc://link/pages/338146) or not (not shown in order book)" + "[Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book)" ) iceberg: Optional[bool] = Field( default=False, description= - "Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146)" + "Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146)" ) visible_size: Optional[str] = Field( default=None, @@ -250,7 +250,7 @@ def set_time_in_force( self, value: BatchAddOrdersSyncOrderList.TimeInForceEnum ) -> BatchAddOrdersSyncOrderListBuilder: """ - [Time in force](doc://link/pages/338146) is a special strategy used during trading + [Time in force](https://www.kucoin.com/docs-new/doc-338146) is a special strategy used during trading """ self.obj['timeInForce'] = value return self @@ -282,7 +282,7 @@ def set_stp( self, value: BatchAddOrdersSyncOrderList.StpEnum ) -> BatchAddOrdersSyncOrderListBuilder: """ - [Self Trade Prevention](doc://link/pages/338146) is divided into four strategies: CN, CO, CB , and DC + [Self Trade Prevention](https://www.kucoin.com/docs-new/doc-338146) is divided into four strategies: CN, CO, CB , and DC """ self.obj['stp'] = value return self @@ -304,14 +304,14 @@ def set_post_only(self, value: bool) -> BatchAddOrdersSyncOrderListBuilder: def set_hidden(self, value: bool) -> BatchAddOrdersSyncOrderListBuilder: """ - [Hidden order](doc://link/pages/338146) or not (not shown in order book) + [Hidden order](https://www.kucoin.com/docs-new/doc-338146) or not (not shown in order book) """ self.obj['hidden'] = value return self def set_iceberg(self, value: bool) -> BatchAddOrdersSyncOrderListBuilder: """ - Whether or not only visible portions of orders are shown in [Iceberg orders](doc://link/pages/338146) + Whether or not only visible portions of orders are shown in [Iceberg orders](https://www.kucoin.com/docs-new/doc-338146) """ self.obj['iceberg'] = value return self diff --git a/sdk/python/kucoin_universal_sdk/generate/spot/order/model_get_closed_orders_items.py b/sdk/python/kucoin_universal_sdk/generate/spot/order/model_get_closed_orders_items.py index be2eecdb..2e862ca0 100644 --- a/sdk/python/kucoin_universal_sdk/generate/spot/order/model_get_closed_orders_items.py +++ b/sdk/python/kucoin_universal_sdk/generate/spot/order/model_get_closed_orders_items.py @@ -26,9 +26,9 @@ class GetClosedOrdersItems(BaseModel): funds (str): Order Funds deal_size (str): Number of filled transactions deal_funds (str): Funds of filled transactions - fee (str): [Handling fees](doc://link/pages/5327739) + fee (str): [Handling fees](https://www.kucoin.com/docs-new/api-5327739) fee_currency (str): currency used to calculate trading fee - stp (StpEnum): [Self Trade Prevention](doc://link/pages/5176570) + stp (StpEnum): [Self Trade Prevention](https://www.kucoin.com/docs-new/api-5176570) time_in_force (TimeInForceEnum): Time in force post_only (bool): Whether its a postOnly order. hidden (bool): Whether its a hidden order. @@ -118,14 +118,17 @@ class TimeInForceEnum(Enum): description="Funds of filled transactions", alias="dealFunds") fee: Optional[str] = Field( - default=None, description="[Handling fees](doc://link/pages/5327739)") + default=None, + description= + "[Handling fees](https://www.kucoin.com/docs-new/api-5327739)") fee_currency: Optional[str] = Field( default=None, description="currency used to calculate trading fee", alias="feeCurrency") stp: Optional[StpEnum] = Field( default=None, - description="[Self Trade Prevention](doc://link/pages/5176570)") + description= + "[Self Trade Prevention](https://www.kucoin.com/docs-new/api-5176570)") time_in_force: Optional[TimeInForceEnum] = Field( default=None, description="Time in force", alias="timeInForce") post_only: Optional[bool] = Field( diff --git a/sdk/python/kucoin_universal_sdk/generate/spot/order/model_get_open_orders_data.py b/sdk/python/kucoin_universal_sdk/generate/spot/order/model_get_open_orders_data.py index 3a6331fd..ce89672b 100644 --- a/sdk/python/kucoin_universal_sdk/generate/spot/order/model_get_open_orders_data.py +++ b/sdk/python/kucoin_universal_sdk/generate/spot/order/model_get_open_orders_data.py @@ -26,9 +26,9 @@ class GetOpenOrdersData(BaseModel): funds (str): Order Funds deal_size (str): Number of filled transactions deal_funds (str): Funds of filled transactions - fee (str): [Handling fees](doc://link/pages/5327739) + fee (str): [Handling fees](https://www.kucoin.com/docs-new/api-5327739) fee_currency (str): currency used to calculate trading fee - stp (StpEnum): [Self Trade Prevention](doc://link/pages/5176570) + stp (StpEnum): [Self Trade Prevention](https://www.kucoin.com/docs-new/api-5176570) time_in_force (TimeInForceEnum): Time in force post_only (bool): Whether its a postOnly order. hidden (bool): Whether its a hidden order. @@ -118,14 +118,17 @@ class TimeInForceEnum(Enum): description="Funds of filled transactions", alias="dealFunds") fee: Optional[str] = Field( - default=None, description="[Handling fees](doc://link/pages/5327739)") + default=None, + description= + "[Handling fees](https://www.kucoin.com/docs-new/api-5327739)") fee_currency: Optional[str] = Field( default=None, description="currency used to calculate trading fee", alias="feeCurrency") stp: Optional[StpEnum] = Field( default=None, - description="[Self Trade Prevention](doc://link/pages/5176570)") + description= + "[Self Trade Prevention](https://www.kucoin.com/docs-new/api-5176570)") time_in_force: Optional[TimeInForceEnum] = Field( default=None, description="Time in force", alias="timeInForce") post_only: Optional[bool] = Field( diff --git a/sdk/python/kucoin_universal_sdk/generate/spot/order/model_get_order_by_client_oid_resp.py b/sdk/python/kucoin_universal_sdk/generate/spot/order/model_get_order_by_client_oid_resp.py index 1fb2cf36..374eeda9 100644 --- a/sdk/python/kucoin_universal_sdk/generate/spot/order/model_get_order_by_client_oid_resp.py +++ b/sdk/python/kucoin_universal_sdk/generate/spot/order/model_get_order_by_client_oid_resp.py @@ -28,9 +28,9 @@ class GetOrderByClientOidResp(BaseModel, Response): funds (str): Order Funds deal_size (str): Number of filled transactions deal_funds (str): Funds of filled transactions - fee (str): [Handling fees](doc://link/pages/5327739) + fee (str): [Handling fees](https://www.kucoin.com/docs-new/api-5327739) fee_currency (str): currency used to calculate trading fee - stp (StpEnum): [Self Trade Prevention](doc://link/pages/5176570) + stp (StpEnum): [Self Trade Prevention](https://www.kucoin.com/docs-new/api-5176570) time_in_force (TimeInForceEnum): Time in force post_only (bool): Whether its a postOnly order. hidden (bool): Whether its a hidden order. @@ -122,14 +122,17 @@ class TimeInForceEnum(Enum): description="Funds of filled transactions", alias="dealFunds") fee: Optional[str] = Field( - default=None, description="[Handling fees](doc://link/pages/5327739)") + default=None, + description= + "[Handling fees](https://www.kucoin.com/docs-new/api-5327739)") fee_currency: Optional[str] = Field( default=None, description="currency used to calculate trading fee", alias="feeCurrency") stp: Optional[StpEnum] = Field( default=None, - description="[Self Trade Prevention](doc://link/pages/5176570)") + description= + "[Self Trade Prevention](https://www.kucoin.com/docs-new/api-5176570)") time_in_force: Optional[TimeInForceEnum] = Field( default=None, description="Time in force", alias="timeInForce") post_only: Optional[bool] = Field( diff --git a/sdk/python/kucoin_universal_sdk/generate/spot/order/model_get_order_by_order_id_resp.py b/sdk/python/kucoin_universal_sdk/generate/spot/order/model_get_order_by_order_id_resp.py index 87a8a324..61e03c1f 100644 --- a/sdk/python/kucoin_universal_sdk/generate/spot/order/model_get_order_by_order_id_resp.py +++ b/sdk/python/kucoin_universal_sdk/generate/spot/order/model_get_order_by_order_id_resp.py @@ -28,9 +28,9 @@ class GetOrderByOrderIdResp(BaseModel, Response): funds (str): Order Funds deal_size (str): Number of filled transactions deal_funds (str): Funds of filled transactions - fee (str): [Handling fees](doc://link/pages/5327739) + fee (str): [Handling fees](https://www.kucoin.com/docs-new/api-5327739) fee_currency (str): currency used to calculate trading fee - stp (StpEnum): [Self Trade Prevention](doc://link/pages/5176570) + stp (StpEnum): [Self Trade Prevention](https://www.kucoin.com/docs-new/api-5176570) time_in_force (TimeInForceEnum): Time in force post_only (bool): Whether its a postOnly order. hidden (bool): Whether its a hidden order. @@ -122,14 +122,17 @@ class TimeInForceEnum(Enum): description="Funds of filled transactions", alias="dealFunds") fee: Optional[str] = Field( - default=None, description="[Handling fees](doc://link/pages/5327739)") + default=None, + description= + "[Handling fees](https://www.kucoin.com/docs-new/api-5327739)") fee_currency: Optional[str] = Field( default=None, description="currency used to calculate trading fee", alias="feeCurrency") stp: Optional[StpEnum] = Field( default=None, - description="[Self Trade Prevention](doc://link/pages/5176570)") + description= + "[Self Trade Prevention](https://www.kucoin.com/docs-new/api-5176570)") time_in_force: Optional[TimeInForceEnum] = Field( default=None, description="Time in force", alias="timeInForce") post_only: Optional[bool] = Field( diff --git a/sdk/python/kucoin_universal_sdk/generate/spot/order/model_get_trade_history_items.py b/sdk/python/kucoin_universal_sdk/generate/spot/order/model_get_trade_history_items.py index 7f656ecd..627ba175 100644 --- a/sdk/python/kucoin_universal_sdk/generate/spot/order/model_get_trade_history_items.py +++ b/sdk/python/kucoin_universal_sdk/generate/spot/order/model_get_trade_history_items.py @@ -27,7 +27,7 @@ class GetTradeHistoryItems(BaseModel): price (str): Order price size (str): Order size funds (str): Order Funds - fee (str): [Handling fees](doc://link/pages/5327739) + fee (str): [Handling fees](https://www.kucoin.com/docs-new/api-5327739) fee_rate (str): Fee rate fee_currency (str): currency used to calculate trading fee stop (str): Take Profit and Stop Loss type, currently HFT does not support the Take Profit and Stop Loss type, so it is empty @@ -88,7 +88,9 @@ class TypeEnum(Enum): size: Optional[str] = Field(default=None, description="Order size") funds: Optional[str] = Field(default=None, description="Order Funds") fee: Optional[str] = Field( - default=None, description="[Handling fees](doc://link/pages/5327739)") + default=None, + description= + "[Handling fees](https://www.kucoin.com/docs-new/api-5327739)") fee_rate: Optional[str] = Field(default=None, description="Fee rate ", alias="feeRate") diff --git a/sdk/python/kucoin_universal_sdk/generate/spot/order/model_get_trade_history_old_items.py b/sdk/python/kucoin_universal_sdk/generate/spot/order/model_get_trade_history_old_items.py index 0e15b153..e68b2031 100644 --- a/sdk/python/kucoin_universal_sdk/generate/spot/order/model_get_trade_history_old_items.py +++ b/sdk/python/kucoin_universal_sdk/generate/spot/order/model_get_trade_history_old_items.py @@ -25,7 +25,7 @@ class GetTradeHistoryOldItems(BaseModel): price (str): Order price size (str): Order size funds (str): Order Funds - fee (str): [Handling fees](doc://link/pages/5327739) + fee (str): [Handling fees](https://www.kucoin.com/docs-new/api-5327739) fee_rate (str): Fee rate fee_currency (str): currency used to calculate trading fee stop (str): Take Profit and Stop Loss type, currently HFT does not support the Take Profit and Stop Loss type, so it is empty @@ -52,7 +52,9 @@ class GetTradeHistoryOldItems(BaseModel): size: Optional[str] = Field(default=None, description="Order size") funds: Optional[str] = Field(default=None, description="Order Funds") fee: Optional[str] = Field( - default=None, description="[Handling fees](doc://link/pages/5327739)") + default=None, + description= + "[Handling fees](https://www.kucoin.com/docs-new/api-5327739)") fee_rate: Optional[str] = Field(default=None, description="Fee rate ", alias="feeRate") diff --git a/sdk/python/kucoin_universal_sdk/generate/spot/spot_private/model_order_v1_event.py b/sdk/python/kucoin_universal_sdk/generate/spot/spot_private/model_order_v1_event.py index 61e84306..e32906f3 100644 --- a/sdk/python/kucoin_universal_sdk/generate/spot/spot_private/model_order_v1_event.py +++ b/sdk/python/kucoin_universal_sdk/generate/spot/spot_private/model_order_v1_event.py @@ -36,7 +36,7 @@ class OrderV1Event(BaseModel): type (TypeEnum): Order Type old_size (str): The size before order update fee_type (FeeTypeEnum): Actual Fee Type - liquidity (LiquidityEnum): Actual transaction order type, If the counterparty order is an [Hidden/Iceberg Order](doc://link/pages/338146), even if it is a maker order, this param will be displayed as taker. For actual trading fee, please refer to the **feeType** + liquidity (LiquidityEnum): Actual transaction order type, If the counterparty order is an [Hidden/Iceberg Order](https://www.kucoin.com/docs-new/doc-338146), even if it is a maker order, this param will be displayed as taker. For actual trading fee, please refer to the **feeType** match_price (str): Match Price (when the type is \"match\") match_size (str): Match Size (when the type is \"match\") trade_id (str): Trade id, it is generated by Matching engine. @@ -161,7 +161,7 @@ class LiquidityEnum(Enum): liquidity: Optional[LiquidityEnum] = Field( default=None, description= - "Actual transaction order type, If the counterparty order is an [Hidden/Iceberg Order](doc://link/pages/338146), even if it is a maker order, this param will be displayed as taker. For actual trading fee, please refer to the **feeType** " + "Actual transaction order type, If the counterparty order is an [Hidden/Iceberg Order](https://www.kucoin.com/docs-new/doc-338146), even if it is a maker order, this param will be displayed as taker. For actual trading fee, please refer to the **feeType** " ) match_price: Optional[str] = Field( default=None, diff --git a/sdk/python/kucoin_universal_sdk/generate/spot/spot_private/model_order_v2_event.py b/sdk/python/kucoin_universal_sdk/generate/spot/spot_private/model_order_v2_event.py index e32b1345..19e3d7c3 100644 --- a/sdk/python/kucoin_universal_sdk/generate/spot/spot_private/model_order_v2_event.py +++ b/sdk/python/kucoin_universal_sdk/generate/spot/spot_private/model_order_v2_event.py @@ -36,7 +36,7 @@ class OrderV2Event(BaseModel): type (TypeEnum): Order Type old_size (str): The size before order update fee_type (FeeTypeEnum): Actual Fee Type - liquidity (LiquidityEnum): Actual transaction order type, If the counterparty order is an [Hidden/Iceberg Order](doc://link/pages/338146), even if it is a maker order, this param will be displayed as taker. For actual trading fee, please refer to the **feeType** + liquidity (LiquidityEnum): Actual transaction order type, If the counterparty order is an [Hidden/Iceberg Order](https://www.kucoin.com/docs-new/doc-338146), even if it is a maker order, this param will be displayed as taker. For actual trading fee, please refer to the **feeType** match_price (str): Match Price (when the type is \"match\") match_size (str): Match Size (when the type is \"match\") trade_id (str): Trade id, it is generated by Matching engine. @@ -162,7 +162,7 @@ class LiquidityEnum(Enum): liquidity: Optional[LiquidityEnum] = Field( default=None, description= - "Actual transaction order type, If the counterparty order is an [Hidden/Iceberg Order](doc://link/pages/338146), even if it is a maker order, this param will be displayed as taker. For actual trading fee, please refer to the **feeType** " + "Actual transaction order type, If the counterparty order is an [Hidden/Iceberg Order](https://www.kucoin.com/docs-new/doc-338146), even if it is a maker order, this param will be displayed as taker. For actual trading fee, please refer to the **feeType** " ) match_price: Optional[str] = Field( default=None, diff --git a/spec/rest/api/openapi-futures-fundingfees.json b/spec/rest/api/openapi-futures-fundingfees.json index 3106051e..83d40a27 100644 --- a/spec/rest/api/openapi-futures-fundingfees.json +++ b/spec/rest/api/openapi-futures-fundingfees.json @@ -17,7 +17,7 @@ { "name": "symbol", "in": "path", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": true, "schema": { "type": "string" @@ -112,7 +112,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": true, "schema": { "type": "string" @@ -210,7 +210,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": true, "schema": { "type": "string" diff --git a/spec/rest/api/openapi-futures-market.json b/spec/rest/api/openapi-futures-market.json index 1d916795..6672f832 100644 --- a/spec/rest/api/openapi-futures-market.json +++ b/spec/rest/api/openapi-futures-market.json @@ -934,7 +934,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) \n\n", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) \n\n", "required": true, "schema": { "type": "string", @@ -1197,7 +1197,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) \n", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) \n", "required": false, "schema": { "type": "string" @@ -1298,7 +1298,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": true, "schema": { "type": "string" @@ -1407,7 +1407,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: fundingBaseSymbol, fundingQuoteSymbol, fundingBaseSymbol1M, fundingQuoteSymbol1M](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: fundingBaseSymbol, fundingQuoteSymbol, fundingBaseSymbol1M, fundingQuoteSymbol1M](https://www.kucoin.com/docs-new/api-3470220) ", "required": true, "schema": { "type": "string", @@ -1571,7 +1571,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: premiumsSymbol1M, premiumsSymbol8H](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: premiumsSymbol1M, premiumsSymbol8H](https://www.kucoin.com/docs-new/api-3470220) ", "required": true, "schema": { "type": "string", @@ -1911,7 +1911,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: indexSymbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: indexSymbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": true, "schema": { "type": "string", @@ -2100,7 +2100,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": true, "schema": { "type": "string" @@ -2225,7 +2225,7 @@ { "name": "symbol", "in": "path", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": true, "schema": { "type": "string" @@ -2310,7 +2310,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol, indexSymbol, premiumsSymbol1M, premiumsSymbol8H](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol, indexSymbol, premiumsSymbol1M, premiumsSymbol8H](https://www.kucoin.com/docs-new/api-3470220) ", "required": true, "schema": { "type": "string", diff --git a/spec/rest/api/openapi-futures-order.json b/spec/rest/api/openapi-futures-order.json index 5ad30185..68f605a4 100644 --- a/spec/rest/api/openapi-futures-order.json +++ b/spec/rest/api/openapi-futures-order.json @@ -360,7 +360,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": false, "schema": { "type": "string" @@ -728,7 +728,7 @@ { "name": "symbol", "in": "query", - "description": "Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": false, "schema": { "type": "string" @@ -804,7 +804,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": false, "schema": { "type": "string" @@ -1590,7 +1590,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": false, "schema": { "type": "string" @@ -2205,7 +2205,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": true, "schema": { "type": "string" @@ -2677,7 +2677,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": true, "schema": { "type": "string" @@ -2861,7 +2861,7 @@ { "name": "symbol", "in": "query", - "description": "Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": true, "schema": { "type": "string" @@ -2928,7 +2928,7 @@ { "name": "symbol", "in": "query", - "description": "Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": false, "schema": { "type": "string" @@ -2993,7 +2993,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": false, "schema": { "type": "string" @@ -4110,7 +4110,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": false, "schema": { "type": "string" diff --git a/spec/rest/api/openapi-futures-positions.json b/spec/rest/api/openapi-futures-positions.json index 0a6aeb1f..ba66d50a 100644 --- a/spec/rest/api/openapi-futures-positions.json +++ b/spec/rest/api/openapi-futures-positions.json @@ -17,7 +17,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": true, "schema": { "type": "string", @@ -114,7 +114,7 @@ { "name": "symbol", "in": "path", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": true, "schema": { "type": "string" @@ -211,7 +211,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": true, "schema": { "type": "string" @@ -580,7 +580,7 @@ { "name": "currency", "in": "query", - "description": "Currency code, Please refer to [rootSymbol](apidog://link/endpoint/221752070) , such as USDT,XBT. Query all positions when empty", + "description": "Currency code, Please refer to [rootSymbol](https://www.kucoin.com/docs-new/api-221752070) , such as USDT,XBT. Query all positions when empty", "required": false, "schema": { "type": "string", @@ -887,7 +887,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": false, "schema": { "type": "string" @@ -1451,7 +1451,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": true, "schema": { "type": "string" @@ -1507,7 +1507,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": true, "schema": { "type": "string" @@ -1592,7 +1592,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": true, "schema": { "type": "string" diff --git a/spec/rest/api/openapi-spot-market.json b/spec/rest/api/openapi-spot-market.json index 4aa0744c..6e40dbaa 100644 --- a/spec/rest/api/openapi-spot-market.json +++ b/spec/rest/api/openapi-spot-market.json @@ -3863,7 +3863,7 @@ { "name": "market", "in": "query", - "description": "[The trading market](apidog://link/endpoint/222921786)", + "description": "[The trading market](https://www.kucoin.com/docs-new/api-222921786)", "required": false, "schema": { "type": "string", diff --git a/spec/rest/entry/openapi-futures.json b/spec/rest/entry/openapi-futures.json index d543d7c1..85e4bbc9 100644 --- a/spec/rest/entry/openapi-futures.json +++ b/spec/rest/entry/openapi-futures.json @@ -934,7 +934,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) \n\n", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) \n\n", "required": true, "schema": { "type": "string", @@ -1197,7 +1197,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) \n", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) \n", "required": false, "schema": { "type": "string" @@ -1298,7 +1298,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": true, "schema": { "type": "string" @@ -1407,7 +1407,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: fundingBaseSymbol, fundingQuoteSymbol, fundingBaseSymbol1M, fundingQuoteSymbol1M](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: fundingBaseSymbol, fundingQuoteSymbol, fundingBaseSymbol1M, fundingQuoteSymbol1M](https://www.kucoin.com/docs-new/api-3470220) ", "required": true, "schema": { "type": "string", @@ -1571,7 +1571,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: premiumsSymbol1M, premiumsSymbol8H](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: premiumsSymbol1M, premiumsSymbol8H](https://www.kucoin.com/docs-new/api-3470220) ", "required": true, "schema": { "type": "string", @@ -1911,7 +1911,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: indexSymbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: indexSymbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": true, "schema": { "type": "string", @@ -2100,7 +2100,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": true, "schema": { "type": "string" @@ -2225,7 +2225,7 @@ { "name": "symbol", "in": "path", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": true, "schema": { "type": "string" @@ -2310,7 +2310,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol, indexSymbol, premiumsSymbol1M, premiumsSymbol8H](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol, indexSymbol, premiumsSymbol1M, premiumsSymbol8H](https://www.kucoin.com/docs-new/api-3470220) ", "required": true, "schema": { "type": "string", @@ -2821,7 +2821,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": false, "schema": { "type": "string" @@ -3189,7 +3189,7 @@ { "name": "symbol", "in": "query", - "description": "Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": false, "schema": { "type": "string" @@ -3265,7 +3265,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": false, "schema": { "type": "string" @@ -4051,7 +4051,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": false, "schema": { "type": "string" @@ -4666,7 +4666,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": true, "schema": { "type": "string" @@ -5138,7 +5138,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": true, "schema": { "type": "string" @@ -5322,7 +5322,7 @@ { "name": "symbol", "in": "query", - "description": "Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": true, "schema": { "type": "string" @@ -5389,7 +5389,7 @@ { "name": "symbol", "in": "query", - "description": "Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Cancel all limit orders for a specific contract only, If not specified, all the limit orders will be deleted, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": false, "schema": { "type": "string" @@ -5454,7 +5454,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": false, "schema": { "type": "string" @@ -6571,7 +6571,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": false, "schema": { "type": "string" @@ -6827,7 +6827,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": true, "schema": { "type": "string", @@ -6924,7 +6924,7 @@ { "name": "symbol", "in": "path", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": true, "schema": { "type": "string" @@ -7021,7 +7021,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": true, "schema": { "type": "string" @@ -7390,7 +7390,7 @@ { "name": "currency", "in": "query", - "description": "Currency code, Please refer to [rootSymbol](apidog://link/endpoint/221752070) , such as USDT,XBT. Query all positions when empty", + "description": "Currency code, Please refer to [rootSymbol](https://www.kucoin.com/docs-new/api-221752070) , such as USDT,XBT. Query all positions when empty", "required": false, "schema": { "type": "string", @@ -7697,7 +7697,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": false, "schema": { "type": "string" @@ -8261,7 +8261,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": true, "schema": { "type": "string" @@ -8317,7 +8317,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": true, "schema": { "type": "string" @@ -8402,7 +8402,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": true, "schema": { "type": "string" @@ -8672,7 +8672,7 @@ { "name": "symbol", "in": "path", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": true, "schema": { "type": "string" @@ -8767,7 +8767,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": true, "schema": { "type": "string" @@ -8865,7 +8865,7 @@ { "name": "symbol", "in": "query", - "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](apidog://link/endpoint/3470220) ", + "description": "Symbol of the contract, Please refer to [Get Symbol endpoint: symbol](https://www.kucoin.com/docs-new/api-3470220) ", "required": true, "schema": { "type": "string" diff --git a/spec/rest/entry/openapi-spot.json b/spec/rest/entry/openapi-spot.json index 52f241bd..2efeba1c 100644 --- a/spec/rest/entry/openapi-spot.json +++ b/spec/rest/entry/openapi-spot.json @@ -3863,7 +3863,7 @@ { "name": "market", "in": "query", - "description": "[The trading market](apidog://link/endpoint/222921786)", + "description": "[The trading market](https://www.kucoin.com/docs-new/api-222921786)", "required": false, "schema": { "type": "string", From 101f6b53543851bd36a0777f3af9e46d04e3aa71 Mon Sep 17 00:00:00 2001 From: "Isaac.Tang" Date: Mon, 30 Dec 2024 14:44:17 +0800 Subject: [PATCH 15/16] feat(doc): add docs url --- generator/preprocessor/api_meta.py | 5 +- spec/rest/api/openapi-account-account.json | 15 +++++ spec/rest/api/openapi-account-deposit.json | 7 ++ spec/rest/api/openapi-account-fee.json | 3 + spec/rest/api/openapi-account-subaccount.json | 13 ++++ spec/rest/api/openapi-account-transfer.json | 7 ++ spec/rest/api/openapi-account-withdrawal.json | 6 ++ .../rest/api/openapi-affiliate-affiliate.json | 1 + spec/rest/api/openapi-broker-apibroker.json | 1 + spec/rest/api/openapi-broker-ndbroker.json | 13 ++++ spec/rest/api/openapi-earn-earn.json | 9 +++ .../rest/api/openapi-futures-fundingfees.json | 3 + spec/rest/api/openapi-futures-market.json | 17 +++++ spec/rest/api/openapi-futures-order.json | 18 +++++ spec/rest/api/openapi-futures-positions.json | 14 ++++ spec/rest/api/openapi-margin-credit.json | 7 ++ spec/rest/api/openapi-margin-debit.json | 6 ++ spec/rest/api/openapi-margin-market.json | 6 ++ spec/rest/api/openapi-margin-order.json | 13 ++++ spec/rest/api/openapi-margin-risklimit.json | 1 + spec/rest/api/openapi-spot-market.json | 18 +++++ spec/rest/api/openapi-spot-order.json | 48 ++++++++++++++ .../api/openapi-viplending-viplending.json | 2 + spec/rest/entry/openapi-account.json | 51 ++++++++++++++ spec/rest/entry/openapi-affiliate.json | 1 + spec/rest/entry/openapi-broker.json | 14 ++++ spec/rest/entry/openapi-earn.json | 9 +++ spec/rest/entry/openapi-futures.json | 52 +++++++++++++++ spec/rest/entry/openapi-margin.json | 33 ++++++++++ spec/rest/entry/openapi-spot.json | 66 +++++++++++++++++++ spec/rest/entry/openapi-viplending.json | 2 + 31 files changed, 460 insertions(+), 1 deletion(-) diff --git a/generator/preprocessor/api_meta.py b/generator/preprocessor/api_meta.py index 2c7721aa..b3b0763f 100644 --- a/generator/preprocessor/api_meta.py +++ b/generator/preprocessor/api_meta.py @@ -34,6 +34,7 @@ def group_api(api_collection, entry) -> dict: api_name = api['name'] api_data = api['api'] + api_doc = ApiMetaUtil.gen_doc_api_url(api_data['id'], False) if 'customApiFields' not in api_data: raise Exception("customApiFields not found in meta json") @@ -41,7 +42,9 @@ def group_api(api_collection, entry) -> dict: if len(api_fields) == 0: raise Exception("illegal customApiFields" + api_name) - x_fields = {} + x_fields = { + 'x-api-doc' : api_doc, + } for k in api_fields: x_fields[f'x-{k}'] = api_fields[k] diff --git a/spec/rest/api/openapi-account-account.json b/spec/rest/api/openapi-account-account.json index 75cbc330..7f5ab322 100644 --- a/spec/rest/api/openapi-account-account.json +++ b/spec/rest/api/openapi-account-account.json @@ -102,6 +102,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470119", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -147,6 +148,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470120", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -351,6 +353,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470121", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -575,6 +578,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470122", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -755,6 +759,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470123", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -936,6 +941,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470124", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -1069,6 +1075,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470125", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -1148,6 +1155,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470126", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -1368,6 +1376,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470127", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -1665,6 +1674,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470128", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -1779,6 +1789,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470129", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -1872,6 +1883,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470130", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -1967,6 +1979,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470311", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -2215,6 +2228,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470314", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -2419,6 +2433,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470315", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", diff --git a/spec/rest/api/openapi-account-deposit.json b/spec/rest/api/openapi-account-deposit.json index 096c1418..8e6c3e6e 100644 --- a/spec/rest/api/openapi-account-deposit.json +++ b/spec/rest/api/openapi-account-deposit.json @@ -134,6 +134,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470140", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -386,6 +387,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470141", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -486,6 +488,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470142", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -688,6 +691,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470300", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -842,6 +846,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470305", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -962,6 +967,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470309", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -1192,6 +1198,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470306", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", diff --git a/spec/rest/api/openapi-account-fee.json b/spec/rest/api/openapi-account-fee.json index 247ac1e5..ea46adbb 100644 --- a/spec/rest/api/openapi-account-fee.json +++ b/spec/rest/api/openapi-account-fee.json @@ -82,6 +82,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470149", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -163,6 +164,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470150", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -240,6 +242,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470151", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", diff --git a/spec/rest/api/openapi-account-subaccount.json b/spec/rest/api/openapi-account-subaccount.json index b50934af..e6aa903a 100644 --- a/spec/rest/api/openapi-account-subaccount.json +++ b/spec/rest/api/openapi-account-subaccount.json @@ -200,6 +200,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470131", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -409,6 +410,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470132", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -655,6 +657,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470133", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -818,6 +821,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470134", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -887,6 +891,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470135", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -988,6 +993,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470331", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -1053,6 +1059,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470332", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -1179,6 +1186,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470136", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -1264,6 +1272,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470137", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -1356,6 +1365,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470138", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -1508,6 +1518,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470139", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -1669,6 +1680,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470298", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -1861,6 +1873,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470299", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", diff --git a/spec/rest/api/openapi-account-transfer.json b/spec/rest/api/openapi-account-transfer.json index bd5af587..954df246 100644 --- a/spec/rest/api/openapi-account-transfer.json +++ b/spec/rest/api/openapi-account-transfer.json @@ -47,6 +47,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470147", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -380,6 +381,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470148", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -434,6 +436,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470301", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -615,6 +618,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470302", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -892,6 +896,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470303", "x-abandon": "abandon", "x-domain": "Futures", "x-api-channel": "Private", @@ -989,6 +994,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470304", "x-abandon": "abandon", "x-domain": "Futures", "x-api-channel": "Private", @@ -1288,6 +1294,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470307", "x-abandon": "abandon", "x-domain": "Futures", "x-api-channel": "Private", diff --git a/spec/rest/api/openapi-account-withdrawal.json b/spec/rest/api/openapi-account-withdrawal.json index 450cd0a4..59dfd01c 100644 --- a/spec/rest/api/openapi-account-withdrawal.json +++ b/spec/rest/api/openapi-account-withdrawal.json @@ -166,6 +166,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470143", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -221,6 +222,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470144", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -486,6 +488,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470145", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -538,6 +541,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470310", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -661,6 +665,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470146", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -985,6 +990,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470308", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", diff --git a/spec/rest/api/openapi-affiliate-affiliate.json b/spec/rest/api/openapi-affiliate-affiliate.json index 00f40e16..9241aa9b 100644 --- a/spec/rest/api/openapi-affiliate-affiliate.json +++ b/spec/rest/api/openapi-affiliate-affiliate.json @@ -150,6 +150,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470279", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", diff --git a/spec/rest/api/openapi-broker-apibroker.json b/spec/rest/api/openapi-broker-apibroker.json index 408b0cc8..04b15637 100644 --- a/spec/rest/api/openapi-broker-apibroker.json +++ b/spec/rest/api/openapi-broker-apibroker.json @@ -91,6 +91,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470280", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", diff --git a/spec/rest/api/openapi-broker-ndbroker.json b/spec/rest/api/openapi-broker-ndbroker.json index 6be0ed4f..78e25f34 100644 --- a/spec/rest/api/openapi-broker-ndbroker.json +++ b/spec/rest/api/openapi-broker-ndbroker.json @@ -91,6 +91,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470281", "x-abandon": "normal", "x-domain": "Broker", "x-api-channel": "Private", @@ -199,6 +200,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470282", "x-abandon": "normal", "x-domain": "Broker", "x-api-channel": "Private", @@ -332,6 +334,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470283", "x-abandon": "normal", "x-domain": "Broker", "x-api-channel": "Private", @@ -400,6 +403,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470290", "x-abandon": "normal", "x-domain": "Broker", "x-api-channel": "Private", @@ -554,6 +558,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470284", "x-abandon": "normal", "x-domain": "Broker", "x-api-channel": "Private", @@ -616,6 +621,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470289", "x-abandon": "normal", "x-domain": "Broker", "x-api-channel": "Private", @@ -710,6 +716,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470291", "x-abandon": "normal", "x-domain": "Broker", "x-api-channel": "Private", @@ -996,6 +1003,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470285", "x-abandon": "normal", "x-domain": "Broker", "x-api-channel": "Private", @@ -1216,6 +1224,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470286", "x-abandon": "normal", "x-domain": "Broker", "x-api-channel": "Private", @@ -1381,6 +1390,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470287", "x-abandon": "normal", "x-domain": "Broker", "x-api-channel": "Private", @@ -1543,6 +1553,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470288", "x-abandon": "normal", "x-domain": "Broker", "x-api-channel": "Private", @@ -1634,6 +1645,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470292", "x-abandon": "normal", "x-domain": "Broker", "x-api-channel": "Private", @@ -1756,6 +1768,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470293", "x-abandon": "normal", "x-domain": "Broker", "x-api-channel": "Private", diff --git a/spec/rest/api/openapi-earn-earn.json b/spec/rest/api/openapi-earn-earn.json index 0af1f59c..2619ec5f 100644 --- a/spec/rest/api/openapi-earn-earn.json +++ b/spec/rest/api/openapi-earn-earn.json @@ -52,6 +52,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470268", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -237,6 +238,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470270", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -362,6 +364,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470269", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -683,6 +686,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470271", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -1004,6 +1008,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470272", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -1292,6 +1297,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470273", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -1613,6 +1619,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470274", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -1932,6 +1939,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470275", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -2243,6 +2251,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470276", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", diff --git a/spec/rest/api/openapi-futures-fundingfees.json b/spec/rest/api/openapi-futures-fundingfees.json index 83d40a27..f8091bd6 100644 --- a/spec/rest/api/openapi-futures-fundingfees.json +++ b/spec/rest/api/openapi-futures-fundingfees.json @@ -88,6 +88,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470265", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -186,6 +187,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470266", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -390,6 +392,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470267", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", diff --git a/spec/rest/api/openapi-futures-market.json b/spec/rest/api/openapi-futures-market.json index 6672f832..b0438028 100644 --- a/spec/rest/api/openapi-futures-market.json +++ b/spec/rest/api/openapi-futures-market.json @@ -448,6 +448,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470220", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Public", @@ -910,6 +911,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470221", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Public", @@ -1048,6 +1050,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470222", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Public", @@ -1174,6 +1177,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470223", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Public", @@ -1274,6 +1278,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470224", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Public", @@ -1383,6 +1388,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470225", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Public", @@ -1547,6 +1553,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470226", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Public", @@ -1709,6 +1716,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470227", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Public", @@ -1763,6 +1771,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470228", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Public", @@ -1809,6 +1818,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470229", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Public", @@ -1888,6 +1898,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470230", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Public", @@ -2076,6 +2087,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470231", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Public", @@ -2201,6 +2213,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470232", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Public", @@ -2286,6 +2299,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470233", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Public", @@ -2454,6 +2468,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470234", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Public", @@ -2554,6 +2569,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470296", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -2653,6 +2669,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470297", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Public", diff --git a/spec/rest/api/openapi-futures-order.json b/spec/rest/api/openapi-futures-order.json index 68f605a4..091b3ecf 100644 --- a/spec/rest/api/openapi-futures-order.json +++ b/spec/rest/api/openapi-futures-order.json @@ -52,6 +52,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470235", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -706,6 +707,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470244", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -771,6 +773,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470362", "x-abandon": "abandon", "x-domain": "Futures", "x-api-channel": "Private", @@ -1226,6 +1229,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470248", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -1301,6 +1305,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470236", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -1876,6 +1881,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470249", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -1935,6 +1941,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470237", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -2265,6 +2272,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470250", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -2324,6 +2332,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470238", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -2653,6 +2662,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470239", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -2725,6 +2735,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470240", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -2793,6 +2804,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470241", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -2904,6 +2916,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470242", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -2971,6 +2984,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470243", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -3341,6 +3355,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470247", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -3713,6 +3728,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470245", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -4086,6 +4102,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470352", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -4342,6 +4359,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470246", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", diff --git a/spec/rest/api/openapi-futures-positions.json b/spec/rest/api/openapi-futures-positions.json index ba66d50a..c76a190e 100644 --- a/spec/rest/api/openapi-futures-positions.json +++ b/spec/rest/api/openapi-futures-positions.json @@ -90,6 +90,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470251", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -187,6 +188,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470263", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -486,6 +488,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470252", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -532,6 +535,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470264", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -863,6 +867,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470253", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -1092,6 +1097,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470254", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -1138,6 +1144,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470256", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -1398,6 +1405,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470257", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -1483,6 +1491,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470258", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -1568,6 +1577,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470259", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -1637,6 +1647,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470260", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -1694,6 +1705,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470261", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -1793,6 +1805,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470262", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -1883,6 +1896,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470255", "x-abandon": "abandon", "x-domain": "Futures", "x-api-channel": "Private", diff --git a/spec/rest/api/openapi-margin-credit.json b/spec/rest/api/openapi-margin-credit.json index 09dee955..53b51a44 100644 --- a/spec/rest/api/openapi-margin-credit.json +++ b/spec/rest/api/openapi-margin-credit.json @@ -103,6 +103,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470212", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -316,6 +317,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470213", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -507,6 +509,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470214", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -584,6 +587,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470215", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -638,6 +642,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470216", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -717,6 +722,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470217", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -805,6 +811,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470218", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", diff --git a/spec/rest/api/openapi-margin-debit.json b/spec/rest/api/openapi-margin-debit.json index b033e760..20ebe1f3 100644 --- a/spec/rest/api/openapi-margin-debit.json +++ b/spec/rest/api/openapi-margin-debit.json @@ -52,6 +52,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470206", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -357,6 +358,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470207", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -595,6 +597,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470208", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -657,6 +660,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470210", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -892,6 +896,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470209", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -937,6 +942,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470211", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", diff --git a/spec/rest/api/openapi-margin-market.json b/spec/rest/api/openapi-margin-market.json index 54de054c..ce43f522 100644 --- a/spec/rest/api/openapi-margin-market.json +++ b/spec/rest/api/openapi-margin-market.json @@ -153,6 +153,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470189", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -225,6 +226,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470190", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -316,6 +318,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470191", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -384,6 +387,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470192", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -458,6 +462,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470193", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -571,6 +576,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470194", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", diff --git a/spec/rest/api/openapi-margin-order.json b/spec/rest/api/openapi-margin-order.json index 6bec3b75..23e5ad69 100644 --- a/spec/rest/api/openapi-margin-order.json +++ b/spec/rest/api/openapi-margin-order.json @@ -71,6 +71,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470195", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -412,6 +413,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470202", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -500,6 +502,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470196", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -585,6 +588,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470197", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -946,6 +950,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470198", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -1397,6 +1402,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470199", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -1758,6 +1764,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470200", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -1836,6 +1843,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470201", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -2176,6 +2184,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470203", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -2245,6 +2254,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470204", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -2507,6 +2517,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470205", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -2769,6 +2780,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470312", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -3047,6 +3059,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470313", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", diff --git a/spec/rest/api/openapi-margin-risklimit.json b/spec/rest/api/openapi-margin-risklimit.json index 349bac17..9bc6489a 100644 --- a/spec/rest/api/openapi-margin-risklimit.json +++ b/spec/rest/api/openapi-margin-risklimit.json @@ -197,6 +197,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470219", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", diff --git a/spec/rest/api/openapi-spot-market.json b/spec/rest/api/openapi-spot-market.json index 6e40dbaa..45c0d626 100644 --- a/spec/rest/api/openapi-spot-market.json +++ b/spec/rest/api/openapi-spot-market.json @@ -183,6 +183,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470152", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -3839,6 +3840,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470153", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -4046,6 +4048,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470154", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -4252,6 +4255,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470155", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -4299,6 +4303,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470156", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -4672,6 +4677,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470157", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -4753,6 +4759,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470158", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -4950,6 +4957,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470159", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -5050,6 +5058,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470160", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -5190,6 +5199,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470161", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -5294,6 +5304,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470162", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -5475,6 +5486,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470163", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -5569,6 +5581,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470164", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -5672,6 +5685,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470165", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -5720,6 +5734,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470166", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -5907,6 +5922,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470167", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -6006,6 +6022,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470294", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -6105,6 +6122,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470295", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", diff --git a/spec/rest/api/openapi-spot-order.json b/spec/rest/api/openapi-spot-order.json index 2db1fc47..e7019568 100644 --- a/spec/rest/api/openapi-spot-order.json +++ b/spec/rest/api/openapi-spot-order.json @@ -62,6 +62,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470168", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -361,6 +362,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470169", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -657,6 +659,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470170", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -904,6 +907,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470171", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -1012,6 +1016,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470172", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -1071,6 +1076,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470173", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -1175,6 +1181,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470174", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -1504,6 +1511,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470181", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -1571,6 +1579,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470335", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -1755,6 +1764,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470339", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -1815,6 +1825,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470175", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -1872,6 +1883,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470188", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -2140,6 +2152,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470176", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -2206,6 +2219,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470354", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -2317,6 +2331,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470357", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -2374,6 +2389,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470177", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -2698,6 +2714,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470178", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -2894,6 +2911,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470338", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -3070,6 +3088,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470334", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -3694,6 +3713,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470179", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -3892,6 +3912,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470340", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -3977,6 +3998,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470337", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -4053,6 +4075,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470356", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -4247,6 +4270,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470360", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -4583,6 +4607,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470180", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -4707,6 +4732,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470359", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -4792,6 +4818,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470358", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -4857,6 +4884,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470355", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -5188,6 +5216,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470182", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -5264,6 +5293,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470184", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -5356,6 +5386,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470183", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -5439,6 +5470,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470336", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -5558,6 +5590,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470185", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -5677,6 +5710,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470186", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -5736,6 +5770,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470187", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -5978,6 +6013,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470353", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -6152,6 +6188,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470343", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -6330,6 +6367,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470348", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -6704,6 +6742,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470346", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -6805,6 +6844,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470345", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -6857,6 +6897,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470333", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -7256,6 +7297,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470347", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -7436,6 +7478,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470349", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -7520,6 +7563,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470344", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -7827,6 +7871,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470350", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -7954,6 +7999,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470351", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -8098,6 +8144,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470342", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -8379,6 +8426,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470341", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", diff --git a/spec/rest/api/openapi-viplending-viplending.json b/spec/rest/api/openapi-viplending-viplending.json index 8f8d7856..1ef345f0 100644 --- a/spec/rest/api/openapi-viplending-viplending.json +++ b/spec/rest/api/openapi-viplending-viplending.json @@ -149,6 +149,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470277", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -230,6 +231,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470278", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", diff --git a/spec/rest/entry/openapi-account.json b/spec/rest/entry/openapi-account.json index 0154ad92..0a1596d6 100644 --- a/spec/rest/entry/openapi-account.json +++ b/spec/rest/entry/openapi-account.json @@ -102,6 +102,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470119", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -147,6 +148,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470120", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -351,6 +353,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470121", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -575,6 +578,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470122", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -755,6 +759,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470123", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -936,6 +941,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470124", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -1069,6 +1075,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470125", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -1148,6 +1155,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470126", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -1368,6 +1376,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470127", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -1665,6 +1674,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470128", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -1779,6 +1789,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470129", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -1872,6 +1883,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470130", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -2078,6 +2090,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470131", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -2287,6 +2300,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470132", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -2533,6 +2547,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470133", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -2696,6 +2711,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470134", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -2765,6 +2781,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470135", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -2866,6 +2883,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470331", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -2931,6 +2949,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470332", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -3057,6 +3076,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470136", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -3142,6 +3162,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470137", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -3234,6 +3255,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470138", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -3386,6 +3408,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470139", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -3611,6 +3634,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470140", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -3863,6 +3887,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470141", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -3963,6 +3988,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470142", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -4202,6 +4228,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470143", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -4257,6 +4284,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470144", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -4522,6 +4550,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470145", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -4574,6 +4603,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470310", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -4697,6 +4727,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470146", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -4859,6 +4890,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470147", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -5192,6 +5224,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470148", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -5281,6 +5314,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470149", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -5362,6 +5396,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470150", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -5439,6 +5474,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470151", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -5517,6 +5553,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470298", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -5709,6 +5746,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470299", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -5844,6 +5882,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470300", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -5898,6 +5937,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470301", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -6079,6 +6119,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470302", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -6356,6 +6397,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470303", "x-abandon": "abandon", "x-domain": "Futures", "x-api-channel": "Private", @@ -6453,6 +6495,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470304", "x-abandon": "abandon", "x-domain": "Futures", "x-api-channel": "Private", @@ -6658,6 +6701,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470305", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -6778,6 +6822,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470309", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -7008,6 +7053,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470306", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -7256,6 +7302,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470307", "x-abandon": "abandon", "x-domain": "Futures", "x-api-channel": "Private", @@ -7472,6 +7519,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470308", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -7568,6 +7616,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470311", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -7816,6 +7865,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470314", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -8020,6 +8070,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470315", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", diff --git a/spec/rest/entry/openapi-affiliate.json b/spec/rest/entry/openapi-affiliate.json index 95f8369d..552d6ce4 100644 --- a/spec/rest/entry/openapi-affiliate.json +++ b/spec/rest/entry/openapi-affiliate.json @@ -150,6 +150,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470279", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", diff --git a/spec/rest/entry/openapi-broker.json b/spec/rest/entry/openapi-broker.json index edf2d186..706c42f2 100644 --- a/spec/rest/entry/openapi-broker.json +++ b/spec/rest/entry/openapi-broker.json @@ -91,6 +91,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470280", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -189,6 +190,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470281", "x-abandon": "normal", "x-domain": "Broker", "x-api-channel": "Private", @@ -297,6 +299,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470282", "x-abandon": "normal", "x-domain": "Broker", "x-api-channel": "Private", @@ -430,6 +433,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470283", "x-abandon": "normal", "x-domain": "Broker", "x-api-channel": "Private", @@ -498,6 +502,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470290", "x-abandon": "normal", "x-domain": "Broker", "x-api-channel": "Private", @@ -652,6 +657,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470284", "x-abandon": "normal", "x-domain": "Broker", "x-api-channel": "Private", @@ -714,6 +720,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470289", "x-abandon": "normal", "x-domain": "Broker", "x-api-channel": "Private", @@ -808,6 +815,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470291", "x-abandon": "normal", "x-domain": "Broker", "x-api-channel": "Private", @@ -1094,6 +1102,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470285", "x-abandon": "normal", "x-domain": "Broker", "x-api-channel": "Private", @@ -1314,6 +1323,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470286", "x-abandon": "normal", "x-domain": "Broker", "x-api-channel": "Private", @@ -1479,6 +1489,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470287", "x-abandon": "normal", "x-domain": "Broker", "x-api-channel": "Private", @@ -1641,6 +1652,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470288", "x-abandon": "normal", "x-domain": "Broker", "x-api-channel": "Private", @@ -1732,6 +1744,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470292", "x-abandon": "normal", "x-domain": "Broker", "x-api-channel": "Private", @@ -1854,6 +1867,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470293", "x-abandon": "normal", "x-domain": "Broker", "x-api-channel": "Private", diff --git a/spec/rest/entry/openapi-earn.json b/spec/rest/entry/openapi-earn.json index b921dc58..f445a1de 100644 --- a/spec/rest/entry/openapi-earn.json +++ b/spec/rest/entry/openapi-earn.json @@ -52,6 +52,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470268", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -237,6 +238,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470270", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -362,6 +364,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470269", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -683,6 +686,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470271", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -1004,6 +1008,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470272", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -1292,6 +1297,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470273", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -1613,6 +1619,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470274", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -1932,6 +1939,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470275", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -2243,6 +2251,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470276", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", diff --git a/spec/rest/entry/openapi-futures.json b/spec/rest/entry/openapi-futures.json index 85e4bbc9..bc486a48 100644 --- a/spec/rest/entry/openapi-futures.json +++ b/spec/rest/entry/openapi-futures.json @@ -448,6 +448,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470220", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Public", @@ -910,6 +911,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470221", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Public", @@ -1048,6 +1050,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470222", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Public", @@ -1174,6 +1177,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470223", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Public", @@ -1274,6 +1278,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470224", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Public", @@ -1383,6 +1388,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470225", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Public", @@ -1547,6 +1553,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470226", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Public", @@ -1709,6 +1716,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470227", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Public", @@ -1763,6 +1771,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470228", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Public", @@ -1809,6 +1818,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470229", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Public", @@ -1888,6 +1898,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470230", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Public", @@ -2076,6 +2087,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470231", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Public", @@ -2201,6 +2213,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470232", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Public", @@ -2286,6 +2299,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470233", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Public", @@ -2454,6 +2468,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470234", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Public", @@ -2513,6 +2528,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470235", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -3167,6 +3183,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470244", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -3232,6 +3249,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470362", "x-abandon": "abandon", "x-domain": "Futures", "x-api-channel": "Private", @@ -3687,6 +3705,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470248", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -3762,6 +3781,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470236", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -4337,6 +4357,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470249", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -4396,6 +4417,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470237", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -4726,6 +4748,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470250", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -4785,6 +4808,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470238", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -5114,6 +5138,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470239", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -5186,6 +5211,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470240", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -5254,6 +5280,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470241", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -5365,6 +5392,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470242", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -5432,6 +5460,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470243", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -5802,6 +5831,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470247", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -6174,6 +6204,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470245", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -6547,6 +6578,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470352", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -6803,6 +6835,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470246", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -6900,6 +6933,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470251", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -6997,6 +7031,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470263", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -7296,6 +7331,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470252", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -7342,6 +7378,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470264", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -7673,6 +7710,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470253", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -7902,6 +7940,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470254", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -7948,6 +7987,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470256", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -8208,6 +8248,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470257", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -8293,6 +8334,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470258", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -8378,6 +8420,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470259", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -8447,6 +8490,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470260", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -8504,6 +8548,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470261", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -8603,6 +8648,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470262", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -8743,6 +8789,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470265", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -8841,6 +8888,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470266", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -9045,6 +9093,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470267", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -9145,6 +9194,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470296", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Private", @@ -9244,6 +9294,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470297", "x-abandon": "normal", "x-domain": "Futures", "x-api-channel": "Public", @@ -9288,6 +9339,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470255", "x-abandon": "abandon", "x-domain": "Futures", "x-api-channel": "Private", diff --git a/spec/rest/entry/openapi-margin.json b/spec/rest/entry/openapi-margin.json index 33d7db7c..aeba004d 100644 --- a/spec/rest/entry/openapi-margin.json +++ b/spec/rest/entry/openapi-margin.json @@ -153,6 +153,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470189", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -225,6 +226,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470190", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -316,6 +318,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470191", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -384,6 +387,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470192", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -458,6 +462,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470193", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -571,6 +576,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470194", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -648,6 +654,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470195", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -989,6 +996,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470202", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -1077,6 +1085,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470196", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -1162,6 +1171,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470197", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -1523,6 +1533,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470198", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -1974,6 +1985,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470199", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -2335,6 +2347,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470200", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -2413,6 +2426,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470201", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -2753,6 +2767,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470203", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -2822,6 +2837,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470204", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -3084,6 +3100,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470205", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -3336,6 +3353,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470206", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -3641,6 +3659,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470207", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -3879,6 +3898,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470208", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -3941,6 +3961,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470210", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -4176,6 +4197,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470209", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -4221,6 +4243,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470211", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -4364,6 +4387,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470212", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -4577,6 +4601,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470213", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -4768,6 +4793,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470214", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -4845,6 +4871,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470215", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -4899,6 +4926,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470216", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -4978,6 +5006,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470217", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -5066,6 +5095,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470218", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -5304,6 +5334,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470219", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -5373,6 +5404,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470312", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -5651,6 +5683,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470313", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", diff --git a/spec/rest/entry/openapi-spot.json b/spec/rest/entry/openapi-spot.json index 2efeba1c..f2163119 100644 --- a/spec/rest/entry/openapi-spot.json +++ b/spec/rest/entry/openapi-spot.json @@ -183,6 +183,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470152", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -3839,6 +3840,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470153", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -4046,6 +4048,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470154", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -4252,6 +4255,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470155", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -4299,6 +4303,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470156", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -4672,6 +4677,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470157", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -4753,6 +4759,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470158", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -4950,6 +4957,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470159", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -5050,6 +5058,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470160", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -5190,6 +5199,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470161", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -5294,6 +5304,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470162", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -5475,6 +5486,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470163", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -5569,6 +5581,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470164", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -5672,6 +5685,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470165", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -5720,6 +5734,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470166", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -5907,6 +5922,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470167", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -5975,6 +5991,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470168", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -6274,6 +6291,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470169", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -6570,6 +6588,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470170", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -6817,6 +6836,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470171", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -6925,6 +6945,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470172", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -6984,6 +7005,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470173", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -7088,6 +7110,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470174", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -7417,6 +7440,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470181", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -7484,6 +7508,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470335", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -7668,6 +7693,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470339", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -7728,6 +7754,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470175", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -7785,6 +7812,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470188", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -8053,6 +8081,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470176", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -8119,6 +8148,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470354", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -8230,6 +8260,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470357", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -8287,6 +8318,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470177", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -8611,6 +8643,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470178", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -8807,6 +8840,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470338", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -8983,6 +9017,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470334", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -9607,6 +9642,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470179", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -9805,6 +9841,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470340", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -9890,6 +9927,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470337", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -9966,6 +10004,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470356", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -10160,6 +10199,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470360", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -10496,6 +10536,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470180", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -10620,6 +10661,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470359", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -10705,6 +10747,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470358", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -10770,6 +10813,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470355", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -11101,6 +11145,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470182", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -11177,6 +11222,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470184", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -11269,6 +11315,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470183", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -11352,6 +11399,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470336", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -11471,6 +11519,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470185", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -11590,6 +11639,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470186", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -11649,6 +11699,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470187", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -11891,6 +11942,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470353", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -12085,6 +12137,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470294", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Public", @@ -12184,6 +12237,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470295", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -12263,6 +12317,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470343", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -12441,6 +12496,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470348", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -12815,6 +12871,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470346", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -12916,6 +12973,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470345", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -12968,6 +13026,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470333", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -13367,6 +13426,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470347", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -13547,6 +13607,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470349", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -13631,6 +13692,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470344", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -13938,6 +14000,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470350", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -14065,6 +14128,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470351", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -14209,6 +14273,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470342", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", @@ -14490,6 +14555,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470341", "x-abandon": "abandon", "x-domain": "Spot", "x-api-channel": "Private", diff --git a/spec/rest/entry/openapi-viplending.json b/spec/rest/entry/openapi-viplending.json index 252a2e00..1be20aa7 100644 --- a/spec/rest/entry/openapi-viplending.json +++ b/spec/rest/entry/openapi-viplending.json @@ -149,6 +149,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470277", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", @@ -230,6 +231,7 @@ } } }, + "x-api-doc": "https://www.kucoin.com/docs-new/api-3470278", "x-abandon": "normal", "x-domain": "Spot", "x-api-channel": "Private", From e9a463987839bfa552f8cdc1d35229a8c565f3cb Mon Sep 17 00:00:00 2001 From: "Isaac.Tang" Date: Mon, 30 Dec 2024 19:47:07 +0800 Subject: [PATCH 16/16] feat(sdk): add document api --- .../main/resources/golang-sdk/api.mustache | 1 + .../main/resources/python-sdk/api.mustache | 1 + .../sdk/plugin/SdkGeneratorTest.java | 2 +- generator/postman/collection.py | 2 +- .../generate/account/account/api_account.go | 15 ++++++ .../generate/account/deposit/api_deposit.go | 7 +++ .../pkg/generate/account/fee/api_fee.go | 3 ++ .../account/subaccount/api_sub_account.go | 13 +++++ .../generate/account/transfer/api_transfer.go | 7 +++ .../account/withdrawal/api_withdrawal.go | 6 +++ .../affiliate/affiliate/api_affiliate.go | 1 + .../broker/apibroker/api_api_broker.go | 1 + .../generate/broker/ndbroker/api_nd_broker.go | 13 +++++ sdk/golang/pkg/generate/earn/earn/api_earn.go | 9 ++++ .../futures/fundingfees/api_funding_fees.go | 3 ++ .../pkg/generate/futures/market/api_market.go | 17 +++++++ .../pkg/generate/futures/order/api_order.go | 18 +++++++ .../futures/positions/api_positions.go | 14 ++++++ .../pkg/generate/margin/credit/api_credit.go | 7 +++ .../pkg/generate/margin/debit/api_debit.go | 6 +++ .../pkg/generate/margin/market/api_market.go | 6 +++ .../pkg/generate/margin/order/api_order.go | 13 +++++ .../margin/risklimit/api_risk_limit.go | 1 + .../pkg/generate/spot/market/api_market.go | 18 +++++++ .../pkg/generate/spot/order/api_order.go | 48 +++++++++++++++++++ .../viplending/viplending/api_vip_lending.go | 2 + .../collection-Abandoned Endpoints.json | 2 +- sdk/postman/collection-REST.json | 22 ++++----- .../generate/account/account/api_account.py | 15 ++++++ .../generate/account/deposit/api_deposit.py | 7 +++ .../generate/account/fee/api_fee.py | 3 ++ .../account/subaccount/api_sub_account.py | 13 +++++ .../generate/account/transfer/api_transfer.py | 7 +++ .../account/withdrawal/api_withdrawal.py | 6 +++ .../affiliate/affiliate/api_affiliate.py | 1 + .../broker/apibroker/api_api_broker.py | 1 + .../generate/broker/ndbroker/api_nd_broker.py | 13 +++++ .../generate/earn/earn/api_earn.py | 9 ++++ .../futures/fundingfees/api_funding_fees.py | 3 ++ .../generate/futures/market/api_market.py | 17 +++++++ .../generate/futures/order/api_order.py | 18 +++++++ .../futures/positions/api_positions.py | 14 ++++++ .../generate/margin/credit/api_credit.py | 7 +++ .../generate/margin/debit/api_debit.py | 6 +++ .../generate/margin/market/api_market.py | 6 +++ .../generate/margin/order/api_order.py | 13 +++++ .../margin/risklimit/api_risk_limit.py | 1 + .../generate/spot/market/api_market.py | 18 +++++++ .../generate/spot/order/api_order.py | 48 +++++++++++++++++++ .../viplending/viplending/api_vip_lending.py | 2 + 50 files changed, 472 insertions(+), 14 deletions(-) diff --git a/generator/plugin/src/main/resources/golang-sdk/api.mustache b/generator/plugin/src/main/resources/golang-sdk/api.mustache index b6563a84..e8aebfd2 100644 --- a/generator/plugin/src/main/resources/golang-sdk/api.mustache +++ b/generator/plugin/src/main/resources/golang-sdk/api.mustache @@ -13,6 +13,7 @@ type {{classname}} interface { // {{vendorExtensions.x-meta.method}} {{summary}} // Description: {{notes}} + // Documentation: {{vendorExtensions.x-api-doc}} {{#vendorExtensions.x-extra-comment}} // {{.}} {{/vendorExtensions.x-extra-comment}}{{#isDeprecated}} // Deprecated diff --git a/generator/plugin/src/main/resources/python-sdk/api.mustache b/generator/plugin/src/main/resources/python-sdk/api.mustache index 783b000e..5e7a09d0 100644 --- a/generator/plugin/src/main/resources/python-sdk/api.mustache +++ b/generator/plugin/src/main/resources/python-sdk/api.mustache @@ -16,6 +16,7 @@ class {{classname}}(ABC): """ summary: {{summary}} description: {{notes}} + documentation: {{vendorExtensions.x-api-doc}} {{#vendorExtensions.x-extra-comment}} {{.}} {{/vendorExtensions.x-extra-comment}} diff --git a/generator/plugin/src/test/java/com/kucoin/universal/sdk/plugin/SdkGeneratorTest.java b/generator/plugin/src/test/java/com/kucoin/universal/sdk/plugin/SdkGeneratorTest.java index c1a8853f..c71eafe8 100644 --- a/generator/plugin/src/test/java/com/kucoin/universal/sdk/plugin/SdkGeneratorTest.java +++ b/generator/plugin/src/test/java/com/kucoin/universal/sdk/plugin/SdkGeneratorTest.java @@ -7,7 +7,7 @@ public class SdkGeneratorTest { - private static final String SDK_NAME = "golang-sdk"; + private static final String SDK_NAME = "python-sdk"; private static final String SPEC_NAME = "../../spec/rest/api/openapi-account-fee.json"; private static final String SPEC_ENTRY_NAME = "../../spec/rest/entry/openapi-account.json"; private static final String WS_SPEC_NAME = "../../spec/ws/openapi-futures-private.json"; diff --git a/generator/postman/collection.py b/generator/postman/collection.py index 491b727c..11fcd19c 100644 --- a/generator/postman/collection.py +++ b/generator/postman/collection.py @@ -362,7 +362,7 @@ def gen_data(self, meta_data): def gen_postman(self, postman_data): variables = [] - for var in self.path_var: + for var in sorted(self.path_var): variables.append({ "key": var, "value": "", diff --git a/sdk/golang/pkg/generate/account/account/api_account.go b/sdk/golang/pkg/generate/account/account/api_account.go index 323d2aff..168071ec 100644 --- a/sdk/golang/pkg/generate/account/account/api_account.go +++ b/sdk/golang/pkg/generate/account/account/api_account.go @@ -11,6 +11,7 @@ type AccountAPI interface { // GetFuturesAccount Get Account - Futures // Description: Request via this endpoint to get the info of the futures account. + // Documentation: https://www.kucoin.com/docs-new/api-3470129 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -24,6 +25,7 @@ type AccountAPI interface { // GetSpotAccountDetail Get Account Detail - Spot // Description: get Information for a single spot account. Use this endpoint when you know the accountId. + // Documentation: https://www.kucoin.com/docs-new/api-3470126 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ @@ -37,6 +39,7 @@ type AccountAPI interface { // GetSpotAccountList Get Account List - Spot // Description: Get a list of accounts. Please Deposit to the main account firstly, then transfer the funds to the trade account via Inner Transfer before transaction. + // Documentation: https://www.kucoin.com/docs-new/api-3470125 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ @@ -50,6 +53,7 @@ type AccountAPI interface { // GetSpotLedger Get Account Ledgers - Spot/Margin // Description: This interface is for transaction records from all types of your accounts, supporting inquiry of various currencies. Items are paginated and sorted to show the latest first. See the Pagination section for retrieving additional entries after the first page. + // Documentation: https://www.kucoin.com/docs-new/api-3470121 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ @@ -63,6 +67,7 @@ type AccountAPI interface { // GetSpotHFLedger Get Account Ledgers - Trade_hf // Description: This API endpoint returns all transfer (in and out) records in high-frequency trading account and supports multi-coin queries. The query results are sorted in descending order by createdAt and id. + // Documentation: https://www.kucoin.com/docs-new/api-3470122 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -76,6 +81,7 @@ type AccountAPI interface { // GetSpotAccountType Get Account Type - Spot // Description: This interface determines whether the current user is a spot high-frequency user or a spot low-frequency user. + // Documentation: https://www.kucoin.com/docs-new/api-3470120 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -89,6 +95,7 @@ type AccountAPI interface { // GetIsolatedMarginAccountDetailV1 Get Account Detail - Isolated Margin - V1 // Description: Request via this endpoint to get the info of the isolated margin account. + // Documentation: https://www.kucoin.com/docs-new/api-3470315 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -103,6 +110,7 @@ type AccountAPI interface { // GetIsolatedMarginAccountListV1 Get Account List - Isolated Margin - V1 // Description: Request via this endpoint to get the info list of the isolated margin account. + // Documentation: https://www.kucoin.com/docs-new/api-3470314 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -117,6 +125,7 @@ type AccountAPI interface { // GetMarginAccountDetail Get Account Detail - Margin // Description: Request via this endpoint to get the info of the margin account. + // Documentation: https://www.kucoin.com/docs-new/api-3470311 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -131,6 +140,7 @@ type AccountAPI interface { // GetFuturesLedger Get Account Ledgers - Futures // Description: This interface can query the ledger records of the futures business line + // Documentation: https://www.kucoin.com/docs-new/api-3470124 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -144,6 +154,7 @@ type AccountAPI interface { // GetApikeyInfo Get Apikey Info // Description: Get the information of the api key. Use the api key pending to be checked to call the endpoint. Both master and sub user's api key are applicable. + // Documentation: https://www.kucoin.com/docs-new/api-3470130 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ @@ -157,6 +168,7 @@ type AccountAPI interface { // GetAccountInfo Get Account Summary Info // Description: This endpoint can be used to obtain account summary information. + // Documentation: https://www.kucoin.com/docs-new/api-3470119 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ @@ -170,6 +182,7 @@ type AccountAPI interface { // GetMarginHFLedger Get Account Ledgers - Margin_hf // Description: This API endpoint returns all transfer (in and out) records in high-frequency margin trading account and supports multi-coin queries. The query results are sorted in descending order by createdAt and id. + // Documentation: https://www.kucoin.com/docs-new/api-3470123 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -183,6 +196,7 @@ type AccountAPI interface { // GetIsolatedMarginAccount Get Account - Isolated Margin // Description: Request via this endpoint to get the info of the isolated margin account. + // Documentation: https://www.kucoin.com/docs-new/api-3470128 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -196,6 +210,7 @@ type AccountAPI interface { // GetCrossMarginAccount Get Account - Cross Margin // Description: Request via this endpoint to get the info of the cross margin account. + // Documentation: https://www.kucoin.com/docs-new/api-3470127 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ diff --git a/sdk/golang/pkg/generate/account/deposit/api_deposit.go b/sdk/golang/pkg/generate/account/deposit/api_deposit.go index abea4985..e530f699 100644 --- a/sdk/golang/pkg/generate/account/deposit/api_deposit.go +++ b/sdk/golang/pkg/generate/account/deposit/api_deposit.go @@ -11,6 +11,7 @@ type DepositAPI interface { // GetDepositAddressV1 Get Deposit Addresses - V1 // Description: Get all deposit addresses for the currency you intend to deposit. If the returned data is empty, you may need to Add Deposit Address first. + // Documentation: https://www.kucoin.com/docs-new/api-3470305 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ @@ -25,6 +26,7 @@ type DepositAPI interface { // AddDepositAddressV1 Add Deposit Address - V1 // Description: Request via this endpoint to create a deposit address for a currency you intend to deposit. + // Documentation: https://www.kucoin.com/docs-new/api-3470309 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ @@ -39,6 +41,7 @@ type DepositAPI interface { // GetDepositHistory Get Deposit History // Description: Request via this endpoint to get deposit list Items are paginated and sorted to show the latest first. See the Pagination section for retrieving additional entries after the first page. + // Documentation: https://www.kucoin.com/docs-new/api-3470141 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ @@ -52,6 +55,7 @@ type DepositAPI interface { // GetDepositHistoryOld Get Deposit History - Old // Description: Request via this endpoint to get the V1 historical deposits list on KuCoin. The return value is the data after Pagination, sorted in descending order according to time. + // Documentation: https://www.kucoin.com/docs-new/api-3470306 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ @@ -66,6 +70,7 @@ type DepositAPI interface { // GetDepositAddressV2 Get Deposit Addresses(V2) // Description: Get all deposit addresses for the currency you intend to deposit. If the returned data is empty, you may need to Add Deposit Address first. + // Documentation: https://www.kucoin.com/docs-new/api-3470300 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ @@ -80,6 +85,7 @@ type DepositAPI interface { // AddDepositAddressV3 Add Deposit Address(V3) // Description: Request via this endpoint to create a deposit address for a currency you intend to deposit. + // Documentation: https://www.kucoin.com/docs-new/api-3470142 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ @@ -93,6 +99,7 @@ type DepositAPI interface { // GetDepositAddressV3 Get Deposit Address(V3) // Description: Get all deposit addresses for the currency you intend to deposit. If the returned data is empty, you may need to Add Deposit Address first. + // Documentation: https://www.kucoin.com/docs-new/api-3470140 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ diff --git a/sdk/golang/pkg/generate/account/fee/api_fee.go b/sdk/golang/pkg/generate/account/fee/api_fee.go index 1c8d81f9..cc6e58c2 100644 --- a/sdk/golang/pkg/generate/account/fee/api_fee.go +++ b/sdk/golang/pkg/generate/account/fee/api_fee.go @@ -11,6 +11,7 @@ type FeeAPI interface { // GetBasicFee Get Basic Fee - Spot/Margin // Description: This interface is for the spot/margin basic fee rate of users + // Documentation: https://www.kucoin.com/docs-new/api-3470149 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -24,6 +25,7 @@ type FeeAPI interface { // GetSpotActualFee Get Actual Fee - Spot/Margin // Description: This interface is for the actual fee rate of the trading pair. You can inquire about fee rates of 10 trading pairs each time at most. The fee rate of your sub-account is the same as that of the master account. + // Documentation: https://www.kucoin.com/docs-new/api-3470150 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -37,6 +39,7 @@ type FeeAPI interface { // GetFuturesActualFee Get Actual Fee - Futures // Description: This interface is for the actual futures fee rate of the trading pair. The fee rate of your sub-account is the same as that of the master account. + // Documentation: https://www.kucoin.com/docs-new/api-3470151 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ diff --git a/sdk/golang/pkg/generate/account/subaccount/api_sub_account.go b/sdk/golang/pkg/generate/account/subaccount/api_sub_account.go index f3bbaae5..7ebfca01 100644 --- a/sdk/golang/pkg/generate/account/subaccount/api_sub_account.go +++ b/sdk/golang/pkg/generate/account/subaccount/api_sub_account.go @@ -11,6 +11,7 @@ type SubAccountAPI interface { // GetFuturesSubAccountListV2 Get SubAccount List - Futures Balance(V2) // Description: This endpoint can be used to get Futures sub-account information. + // Documentation: https://www.kucoin.com/docs-new/api-3470134 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -24,6 +25,7 @@ type SubAccountAPI interface { // GetSpotSubAccountListV1 Get SubAccount List - Spot Balance(V1) // Description: This endpoint returns the account info of all sub-users. + // Documentation: https://www.kucoin.com/docs-new/api-3470299 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ @@ -38,6 +40,7 @@ type SubAccountAPI interface { // GetSpotSubAccountDetail Get SubAccount Detail - Balance // Description: This endpoint returns the account info of a sub-user specified by the subUserId. + // Documentation: https://www.kucoin.com/docs-new/api-3470132 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ @@ -51,6 +54,7 @@ type SubAccountAPI interface { // DeleteSubAccountApi Delete SubAccount API // Description: This endpoint can be used to delete sub-account APIs. + // Documentation: https://www.kucoin.com/docs-new/api-3470137 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ @@ -64,6 +68,7 @@ type SubAccountAPI interface { // GetSubAccountApiList Get SubAccount API List // Description: This endpoint can be used to obtain a list of APIs pertaining to a sub-account.(Not contain ND Broker Sub Account) + // Documentation: https://www.kucoin.com/docs-new/api-3470136 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ @@ -77,6 +82,7 @@ type SubAccountAPI interface { // AddSubAccountApi Add SubAccount API // Description: This endpoint can be used to create APIs for sub-accounts. + // Documentation: https://www.kucoin.com/docs-new/api-3470138 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ @@ -90,6 +96,7 @@ type SubAccountAPI interface { // ModifySubAccountApi Modify SubAccount API // Description: This endpoint can be used to modify sub-account APIs. + // Documentation: https://www.kucoin.com/docs-new/api-3470139 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ @@ -103,6 +110,7 @@ type SubAccountAPI interface { // GetSpotSubAccountsSummaryV1 Get SubAccount List - Summary Info(V1) // Description: You can get the user info of all sub-account via this interface It is recommended to use the GET /api/v2/sub/user interface for paging query + // Documentation: https://www.kucoin.com/docs-new/api-3470298 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ @@ -117,6 +125,7 @@ type SubAccountAPI interface { // GetSpotSubAccountListV2 Get SubAccount List - Spot Balance(V2) // Description: This endpoint can be used to get paginated Spot sub-account information. Pagination is required. + // Documentation: https://www.kucoin.com/docs-new/api-3470133 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ @@ -130,6 +139,7 @@ type SubAccountAPI interface { // AddSubAccount Add SubAccount // Description: This endpoint can be used to create sub-accounts. + // Documentation: https://www.kucoin.com/docs-new/api-3470135 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ @@ -143,6 +153,7 @@ type SubAccountAPI interface { // GetSpotSubAccountsSummaryV2 Get SubAccount List - Summary Info // Description: This endpoint can be used to get a paginated list of sub-accounts. Pagination is required. + // Documentation: https://www.kucoin.com/docs-new/api-3470131 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ @@ -156,6 +167,7 @@ type SubAccountAPI interface { // AddSubAccountFuturesPermission Add SubAccount Futures Permission // Description: This endpoint can be used to add sub-accounts Futures permission. Before using this endpoints, you need to ensure that the master account apikey has Futures permissions and the Futures function has been activated. + // Documentation: https://www.kucoin.com/docs-new/api-3470332 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ @@ -169,6 +181,7 @@ type SubAccountAPI interface { // AddSubAccountMarginPermission Add SubAccount Margin Permission // Description: This endpoint can be used to add sub-accounts Margin permission. Before using this endpoints, you need to ensure that the master account apikey has Margin permissions and the Margin function has been activated. + // Documentation: https://www.kucoin.com/docs-new/api-3470331 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ diff --git a/sdk/golang/pkg/generate/account/transfer/api_transfer.go b/sdk/golang/pkg/generate/account/transfer/api_transfer.go index cde06999..bde4a401 100644 --- a/sdk/golang/pkg/generate/account/transfer/api_transfer.go +++ b/sdk/golang/pkg/generate/account/transfer/api_transfer.go @@ -11,6 +11,7 @@ type TransferAPI interface { // GetTransferQuotas Get Transfer Quotas // Description: This endpoint returns the transferable balance of a specified account. + // Documentation: https://www.kucoin.com/docs-new/api-3470148 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ @@ -24,6 +25,7 @@ type TransferAPI interface { // FuturesAccountTransferIn Futures Account Transfer In // Description: The amount to be transferred will be deducted from the payAccount. Please ensure that you have sufficient funds in your payAccount Account, or the transfer will fail. + // Documentation: https://www.kucoin.com/docs-new/api-3470304 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ @@ -38,6 +40,7 @@ type TransferAPI interface { // GetFuturesAccountTransferOutLedger Get Futures Account Transfer Out Ledger // Description: This endpoint can get futures account transfer out ledger + // Documentation: https://www.kucoin.com/docs-new/api-3470307 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ @@ -52,6 +55,7 @@ type TransferAPI interface { // InnerTransfer Inner Transfer // Description: This API endpoint can be used to transfer funds between accounts internally. Users can transfer funds between their account free of charge. + // Documentation: https://www.kucoin.com/docs-new/api-3470302 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ @@ -66,6 +70,7 @@ type TransferAPI interface { // SubAccountTransfer SubAccount Transfer // Description: Funds in the main account, trading account and margin account of a Master Account can be transferred to the main account, trading account, futures account and margin account of its Sub-Account. The futures account of both the Master Account and Sub-Account can only accept funds transferred in from the main account, trading account and margin account and cannot transfer out to these accounts. + // Documentation: https://www.kucoin.com/docs-new/api-3470301 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ @@ -80,6 +85,7 @@ type TransferAPI interface { // FlexTransfer Flex Transfer // Description: This interface can be used for transfers between master and sub accounts and inner transfers + // Documentation: https://www.kucoin.com/docs-new/api-3470147 // +---------------------+---------------+ // | Extra API Info | Value | // +---------------------+---------------+ @@ -93,6 +99,7 @@ type TransferAPI interface { // FuturesAccountTransferOut Futures Account Transfer Out // Description: The amount to be transferred will be deducted from the KuCoin Futures Account. Please ensure that you have sufficient funds in your KuCoin Futures Account, or the transfer will fail. + // Documentation: https://www.kucoin.com/docs-new/api-3470303 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ diff --git a/sdk/golang/pkg/generate/account/withdrawal/api_withdrawal.go b/sdk/golang/pkg/generate/account/withdrawal/api_withdrawal.go index b07c53c0..39b3b565 100644 --- a/sdk/golang/pkg/generate/account/withdrawal/api_withdrawal.go +++ b/sdk/golang/pkg/generate/account/withdrawal/api_withdrawal.go @@ -11,6 +11,7 @@ type WithdrawalAPI interface { // GetWithdrawalHistoryOld Get Withdrawal History - Old // Description: Request via this endpoint to get deposit list Items are paginated and sorted to show the latest first. See the Pagination section for retrieving additional entries after the first page. + // Documentation: https://www.kucoin.com/docs-new/api-3470308 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ @@ -25,6 +26,7 @@ type WithdrawalAPI interface { // GetWithdrawalHistory Get Withdrawal History // Description: Request via this endpoint to get deposit list Items are paginated and sorted to show the latest first. See the Pagination section for retrieving additional entries after the first page. + // Documentation: https://www.kucoin.com/docs-new/api-3470145 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ @@ -38,6 +40,7 @@ type WithdrawalAPI interface { // WithdrawalV1 Withdraw - V1 // Description: Use this interface to withdraw the specified currency + // Documentation: https://www.kucoin.com/docs-new/api-3470310 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ @@ -52,6 +55,7 @@ type WithdrawalAPI interface { // GetWithdrawalQuotas Get Withdrawal Quotas // Description: This interface can obtain the withdrawal quotas information of this currency. + // Documentation: https://www.kucoin.com/docs-new/api-3470143 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ @@ -65,6 +69,7 @@ type WithdrawalAPI interface { // CancelWithdrawal Cancel Withdrawal // Description: This interface can cancel the withdrawal, Only withdrawals requests of PROCESSING status could be canceled. + // Documentation: https://www.kucoin.com/docs-new/api-3470144 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ @@ -78,6 +83,7 @@ type WithdrawalAPI interface { // WithdrawalV3 Withdraw(V3) // Description: Use this interface to withdraw the specified currency + // Documentation: https://www.kucoin.com/docs-new/api-3470146 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ diff --git a/sdk/golang/pkg/generate/affiliate/affiliate/api_affiliate.go b/sdk/golang/pkg/generate/affiliate/affiliate/api_affiliate.go index 35df1242..dd28a6bf 100644 --- a/sdk/golang/pkg/generate/affiliate/affiliate/api_affiliate.go +++ b/sdk/golang/pkg/generate/affiliate/affiliate/api_affiliate.go @@ -11,6 +11,7 @@ type AffiliateAPI interface { // GetAccount Get Account // Description: This endpoint allows getting affiliate user rebate information. + // Documentation: https://www.kucoin.com/docs-new/api-3470279 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ diff --git a/sdk/golang/pkg/generate/broker/apibroker/api_api_broker.go b/sdk/golang/pkg/generate/broker/apibroker/api_api_broker.go index 21da0c34..c03e81df 100644 --- a/sdk/golang/pkg/generate/broker/apibroker/api_api_broker.go +++ b/sdk/golang/pkg/generate/broker/apibroker/api_api_broker.go @@ -11,6 +11,7 @@ type APIBrokerAPI interface { // GetRebase Get Broker Rebate // Description: This interface supports downloading Broker rebate orders + // Documentation: https://www.kucoin.com/docs-new/api-3470280 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ diff --git a/sdk/golang/pkg/generate/broker/ndbroker/api_nd_broker.go b/sdk/golang/pkg/generate/broker/ndbroker/api_nd_broker.go index c3f82fb9..0c6f2a9a 100644 --- a/sdk/golang/pkg/generate/broker/ndbroker/api_nd_broker.go +++ b/sdk/golang/pkg/generate/broker/ndbroker/api_nd_broker.go @@ -11,6 +11,7 @@ type NDBrokerAPI interface { // GetDepositList Get Deposit List // Description: This endpoint can obtain the deposit records of each sub-account under the ND Broker. + // Documentation: https://www.kucoin.com/docs-new/api-3470285 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -24,6 +25,7 @@ type NDBrokerAPI interface { // DeleteSubAccountAPI Delete SubAccount API // Description: This interface supports deleting Brokerโ€™s sub-account APIKEY + // Documentation: https://www.kucoin.com/docs-new/api-3470289 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -37,6 +39,7 @@ type NDBrokerAPI interface { // GetSubAccountAPI Get SubAccount API // Description: This interface supports querying the Brokerโ€™s sub-account APIKEY + // Documentation: https://www.kucoin.com/docs-new/api-3470284 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -50,6 +53,7 @@ type NDBrokerAPI interface { // AddSubAccountApi Add SubAccount API // Description: This interface supports the creation of Broker sub-account APIKEY + // Documentation: https://www.kucoin.com/docs-new/api-3470291 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -63,6 +67,7 @@ type NDBrokerAPI interface { // GetSubAccount Get SubAccount // Description: This interface supports querying sub-accounts created by Broker + // Documentation: https://www.kucoin.com/docs-new/api-3470283 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -76,6 +81,7 @@ type NDBrokerAPI interface { // AddSubAccount Add SubAccount // Description: This endpoint supports Broker users to create sub-accounts + // Documentation: https://www.kucoin.com/docs-new/api-3470290 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -89,6 +95,7 @@ type NDBrokerAPI interface { // ModifySubAccountApi Modify SubAccount API // Description: This interface supports modify the Brokerโ€™s sub-account APIKEY + // Documentation: https://www.kucoin.com/docs-new/api-3470292 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -102,6 +109,7 @@ type NDBrokerAPI interface { // GetBrokerInfo Get Broker Info // Description: This endpoint supports querying the basic information of the current Broker + // Documentation: https://www.kucoin.com/docs-new/api-3470282 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -115,6 +123,7 @@ type NDBrokerAPI interface { // GetRebase Get Broker Rebate // Description: This interface supports downloading Broker rebate orders + // Documentation: https://www.kucoin.com/docs-new/api-3470281 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -128,6 +137,7 @@ type NDBrokerAPI interface { // Transfer Transfer // Description: This endpoint supports fund transfer between Broker account and Broker sub-accounts. Please be aware that withdrawal from sub-account is not directly supported. Broker has to transfer funds from broker sub-account to broker account to initiate the withdrawals. + // Documentation: https://www.kucoin.com/docs-new/api-3470293 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -141,6 +151,7 @@ type NDBrokerAPI interface { // GetDepositDetail Get Deposit Detail // Description: This endpoint supports querying the deposit record of sub-accounts created by a Broker (excluding main account of nd broker) + // Documentation: https://www.kucoin.com/docs-new/api-3470288 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -154,6 +165,7 @@ type NDBrokerAPI interface { // GetTransferHistory Get Transfer History // Description: This endpoint supports querying transfer records of the broker itself and its created sub-accounts. + // Documentation: https://www.kucoin.com/docs-new/api-3470286 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -167,6 +179,7 @@ type NDBrokerAPI interface { // GetWithdrawDetail Get Withdraw Detail // Description: This endpoint supports querying the withdrawal records of sub-accounts created by a Broker (excluding main account of nd broker). + // Documentation: https://www.kucoin.com/docs-new/api-3470287 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ diff --git a/sdk/golang/pkg/generate/earn/earn/api_earn.go b/sdk/golang/pkg/generate/earn/earn/api_earn.go index 7e1ac293..fc23f4e7 100644 --- a/sdk/golang/pkg/generate/earn/earn/api_earn.go +++ b/sdk/golang/pkg/generate/earn/earn/api_earn.go @@ -11,6 +11,7 @@ type EarnAPI interface { // GetETHStakingProducts Get ETH Staking Products // Description: This endpoint can get available ETH staking products. If no products are available, an empty list is returned. + // Documentation: https://www.kucoin.com/docs-new/api-3470276 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -24,6 +25,7 @@ type EarnAPI interface { // GetAccountHolding Get Account Holding // Description: This endpoint can get current holding assets information. If no current holding assets are available, an empty list is returned. + // Documentation: https://www.kucoin.com/docs-new/api-3470273 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -37,6 +39,7 @@ type EarnAPI interface { // GetKcsStakingProducts Get KCS Staking Products // Description: This endpoint can get available KCS staking products. If no products are available, an empty list is returned. + // Documentation: https://www.kucoin.com/docs-new/api-3470275 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -50,6 +53,7 @@ type EarnAPI interface { // Redeem Redeem // Description: This endpoint allows initiating redemption by holding ID. If the current holding is fully redeemed or in the process of being redeemed, it indicates that the holding does not exist. + // Documentation: https://www.kucoin.com/docs-new/api-3470270 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -63,6 +67,7 @@ type EarnAPI interface { // Purchase purchase // Description: This endpoint allows subscribing earn product + // Documentation: https://www.kucoin.com/docs-new/api-3470268 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -76,6 +81,7 @@ type EarnAPI interface { // GetPromotionProducts Get Promotion Products // Description: This endpoint can get available limited-time promotion products. If no products are available, an empty list is returned. + // Documentation: https://www.kucoin.com/docs-new/api-3470272 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -89,6 +95,7 @@ type EarnAPI interface { // GetRedeemPreview Get Redeem Preview // Description: This endpoint allows subscribing earn products + // Documentation: https://www.kucoin.com/docs-new/api-3470269 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -102,6 +109,7 @@ type EarnAPI interface { // GetSavingsProducts Get Savings Products // Description: This endpoint can get available savings products. If no products are available, an empty list is returned. + // Documentation: https://www.kucoin.com/docs-new/api-3470271 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -115,6 +123,7 @@ type EarnAPI interface { // GetStakingProducts Get Staking Products // Description: This endpoint can get available staking products. If no products are available, an empty list is returned. + // Documentation: https://www.kucoin.com/docs-new/api-3470274 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ diff --git a/sdk/golang/pkg/generate/futures/fundingfees/api_funding_fees.go b/sdk/golang/pkg/generate/futures/fundingfees/api_funding_fees.go index 4e1714b3..8da151d2 100644 --- a/sdk/golang/pkg/generate/futures/fundingfees/api_funding_fees.go +++ b/sdk/golang/pkg/generate/futures/fundingfees/api_funding_fees.go @@ -11,6 +11,7 @@ type FundingFeesAPI interface { // GetPublicFundingHistory Get Public Funding History // Description: Query the funding rate at each settlement time point within a certain time range of the corresponding contract + // Documentation: https://www.kucoin.com/docs-new/api-3470266 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -24,6 +25,7 @@ type FundingFeesAPI interface { // GetPrivateFundingHistory Get Private Funding History // Description: Submit request to get the funding history. + // Documentation: https://www.kucoin.com/docs-new/api-3470267 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -37,6 +39,7 @@ type FundingFeesAPI interface { // GetCurrentFundingRate Get Current Funding Rate // Description: get Current Funding Rate + // Documentation: https://www.kucoin.com/docs-new/api-3470265 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ diff --git a/sdk/golang/pkg/generate/futures/market/api_market.go b/sdk/golang/pkg/generate/futures/market/api_market.go index 27d65a68..c635ff2c 100644 --- a/sdk/golang/pkg/generate/futures/market/api_market.go +++ b/sdk/golang/pkg/generate/futures/market/api_market.go @@ -11,6 +11,7 @@ type MarketAPI interface { // GetAllTickers Get All Tickers // Description: This endpoint returns \"last traded price/size\"ใ€\"best bid/ask price/size\" etc. of a single symbol. These messages can also be obtained through Websocket. + // Documentation: https://www.kucoin.com/docs-new/api-3470223 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -24,6 +25,7 @@ type MarketAPI interface { // GetPrivateToken Get Private Token - Futures // Description: This interface can obtain the token required for websocket to establish a Futures private connection. If you need use private channels(e.g. account balance notice), please make request as follows to obtain the server list and private token + // Documentation: https://www.kucoin.com/docs-new/api-3470296 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -37,6 +39,7 @@ type MarketAPI interface { // GetPublicToken Get Public Token - Futures // Description: This interface can obtain the token required for websocket to establish a Futures connection. If you need use public channels (e.g. all public market data), please make request as follows to obtain the server list and public token + // Documentation: https://www.kucoin.com/docs-new/api-3470297 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -50,6 +53,7 @@ type MarketAPI interface { // GetAllSymbols Get All Symbols // Description: Get detailed information of all contracts that can be traded. This API will return a list of tradable contracts, including some key parameters of the contract such as the symbol name, tick size, mark price,etc. + // Documentation: https://www.kucoin.com/docs-new/api-3470220 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -63,6 +67,7 @@ type MarketAPI interface { // GetSymbol Get Symbol // Description: Get information of specified contracts that can be traded. This API will return a list of tradable contracts, including some key parameters of the contract such as the symbol name, tick size, mark price,etc. + // Documentation: https://www.kucoin.com/docs-new/api-3470221 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -76,6 +81,7 @@ type MarketAPI interface { // GetSpotIndexPrice Get Spot Index Price // Description: Get Spot Index Price + // Documentation: https://www.kucoin.com/docs-new/api-3470231 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -89,6 +95,7 @@ type MarketAPI interface { // GetInterestRateIndex Get Interest Rate Index // Description: Get interest rate Index. + // Documentation: https://www.kucoin.com/docs-new/api-3470226 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -102,6 +109,7 @@ type MarketAPI interface { // GetKlines Get Klines // Description: Get the Kline of the symbol. Data are returned in grouped buckets based on requested type. For each query, the system would return at most 500 pieces of data. To obtain more data, please page the data by time. + // Documentation: https://www.kucoin.com/docs-new/api-3470234 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -115,6 +123,7 @@ type MarketAPI interface { // GetPartOrderBook Get Part OrderBook // Description: Query for part orderbook depth data. (aggregated by price) You are recommended to request via this endpoint as the system reponse would be faster and cosume less traffic. + // Documentation: https://www.kucoin.com/docs-new/api-3470225 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -128,6 +137,7 @@ type MarketAPI interface { // GetFullOrderBook Get Full OrderBook // Description: Query for Full orderbook depth data. (aggregated by price) It is generally used by professional traders because it uses more server resources and traffic, and we have strict access rate limit control. To maintain up-to-date Order Book, please use Websocket incremental feed after retrieving the OrderBook. + // Documentation: https://www.kucoin.com/docs-new/api-3470224 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -141,6 +151,7 @@ type MarketAPI interface { // GetMarkPrice Get Mark Price // Description: Get current mark price + // Documentation: https://www.kucoin.com/docs-new/api-3470233 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -154,6 +165,7 @@ type MarketAPI interface { // GetPremiumIndex Get Premium Index // Description: Submit request to get premium index. + // Documentation: https://www.kucoin.com/docs-new/api-3470227 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -167,6 +179,7 @@ type MarketAPI interface { // GetServiceStatus Get Service Status // Description: Get the service status. + // Documentation: https://www.kucoin.com/docs-new/api-3470230 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -180,6 +193,7 @@ type MarketAPI interface { // GetTicker Get Ticker // Description: This endpoint returns \"last traded price/size\"ใ€\"best bid/ask price/size\" etc. of a single symbol. These messages can also be obtained through Websocket. + // Documentation: https://www.kucoin.com/docs-new/api-3470222 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -193,6 +207,7 @@ type MarketAPI interface { // GetServerTime Get Server Time // Description: Get the API server time. This is the Unix timestamp. + // Documentation: https://www.kucoin.com/docs-new/api-3470229 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -206,6 +221,7 @@ type MarketAPI interface { // GetTradeHistory Get Trade History // Description: Request via this endpoint to get the trade history of the specified symbol, the returned quantity is the last 100 transaction records. + // Documentation: https://www.kucoin.com/docs-new/api-3470232 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -219,6 +235,7 @@ type MarketAPI interface { // Get24hrStats Get 24hr Stats // Description: Get the statistics of the platform futures trading volume in the last 24 hours. + // Documentation: https://www.kucoin.com/docs-new/api-3470228 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ diff --git a/sdk/golang/pkg/generate/futures/order/api_order.go b/sdk/golang/pkg/generate/futures/order/api_order.go index ff30f23b..f13d7801 100644 --- a/sdk/golang/pkg/generate/futures/order/api_order.go +++ b/sdk/golang/pkg/generate/futures/order/api_order.go @@ -11,6 +11,7 @@ type OrderAPI interface { // GetTradeHistory Get Trade History // Description: Get a list of recent fills. If you need to get your recent trade history with low latency, please query endpoint Get List of Orders Completed in 24h. The requested data is not real-time. + // Documentation: https://www.kucoin.com/docs-new/api-3470248 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -24,6 +25,7 @@ type OrderAPI interface { // GetOpenOrderValue Get Open Order Value // Description: You can query this endpoint to get the the total number and value of the all your active orders. + // Documentation: https://www.kucoin.com/docs-new/api-3470250 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -37,6 +39,7 @@ type OrderAPI interface { // GetOrderByClientOid Get Order By ClientOid // Description: Get a single order by client order id (including a stop order). + // Documentation: https://www.kucoin.com/docs-new/api-3470352 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -50,6 +53,7 @@ type OrderAPI interface { // CancelOrderByClientOid Cancel Order By ClientOid // Description: Cancel order by client defined orderId. + // Documentation: https://www.kucoin.com/docs-new/api-3470240 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -63,6 +67,7 @@ type OrderAPI interface { // CancelAllOrdersV1 Cancel All Orders - V1 // Description: Cancel all open orders (excluding stop orders). The response is a list of orderIDs of the canceled orders. + // Documentation: https://www.kucoin.com/docs-new/api-3470362 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -77,6 +82,7 @@ type OrderAPI interface { // GetOrderList Get Order List // Description: List your current orders. + // Documentation: https://www.kucoin.com/docs-new/api-3470244 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -90,6 +96,7 @@ type OrderAPI interface { // BatchCancelOrders Batch Cancel Orders // Description: Cancel a bach of orders by client defined orderId or system generated orderId + // Documentation: https://www.kucoin.com/docs-new/api-3470241 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -103,6 +110,7 @@ type OrderAPI interface { // BatchAddOrders Batch Add Orders // Description: Place multiple order to the futures trading system, you can place two major types of orders: limit and market. Orders can only be placed if your account has sufficient funds. Once an order is placed, your funds will be put on hold for the duration of the order. The amount of funds on hold depends on the order type and parameters specified. You can place up to 20 orders at one time, including limit orders, market orders, and stop orders Please be noted that the system would hold the fees from the orders entered the orderbook in advance. + // Documentation: https://www.kucoin.com/docs-new/api-3470236 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -116,6 +124,7 @@ type OrderAPI interface { // CancelOrderById Cancel Order By OrderId // Description: Cancel order by system generated orderId. + // Documentation: https://www.kucoin.com/docs-new/api-3470239 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -129,6 +138,7 @@ type OrderAPI interface { // GetOrderByOrderId Get Order By OrderId // Description: Get a single order by order id (including a stop order). + // Documentation: https://www.kucoin.com/docs-new/api-3470245 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -142,6 +152,7 @@ type OrderAPI interface { // AddOrder Add Order // Description: Place order to the futures trading system, you can place two major types of orders: limit and market. Orders can only be placed if your account has sufficient funds. Once an order is placed, your funds will be put on hold for the duration of the order. The amount of funds on hold depends on the order type and parameters specified. + // Documentation: https://www.kucoin.com/docs-new/api-3470235 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -155,6 +166,7 @@ type OrderAPI interface { // AddOrderTest Add Order Test // Description: Place order to the futures trading system just for validation + // Documentation: https://www.kucoin.com/docs-new/api-3470238 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -168,6 +180,7 @@ type OrderAPI interface { // GetRecentClosedOrders Get Recent Closed Orders // Description: Get a list of recent 1000 closed orders in the last 24 hours. If you need to get your recent traded order history with low latency, you may query this endpoint. + // Documentation: https://www.kucoin.com/docs-new/api-3470246 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -181,6 +194,7 @@ type OrderAPI interface { // GetRecentTradeHistory Get Recent Trade History // Description: Get a list of recent 1000 fills in the last 24 hours. If you need to get your recent traded order history with low latency, you may query this endpoint. + // Documentation: https://www.kucoin.com/docs-new/api-3470249 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -194,6 +208,7 @@ type OrderAPI interface { // AddTPSLOrder Add Take Profit And Stop Loss Order // Description: Place take profit and stop loss order supports both take-profit and stop-loss functions, and other functions are exactly the same as the place order interface. + // Documentation: https://www.kucoin.com/docs-new/api-3470237 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -207,6 +222,7 @@ type OrderAPI interface { // CancelAllStopOrders Cancel All Stop orders // Description: Cancel all untriggered stop orders. The response is a list of orderIDs of the canceled stop orders. To cancel triggered stop orders, please use 'Cancel Multiple Futures Limit orders'. + // Documentation: https://www.kucoin.com/docs-new/api-3470243 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -220,6 +236,7 @@ type OrderAPI interface { // GetStopOrderList Get Stop Order List // Description: Get the un-triggered stop orders list. Stop orders that have been triggered can be queried through the general order interface + // Documentation: https://www.kucoin.com/docs-new/api-3470247 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -233,6 +250,7 @@ type OrderAPI interface { // CancelAllOrdersV3 Cancel All Orders // Description: Cancel all open orders (excluding stop orders). The response is a list of orderIDs of the canceled orders. + // Documentation: https://www.kucoin.com/docs-new/api-3470242 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ diff --git a/sdk/golang/pkg/generate/futures/positions/api_positions.go b/sdk/golang/pkg/generate/futures/positions/api_positions.go index 8bf38d51..ec741b89 100644 --- a/sdk/golang/pkg/generate/futures/positions/api_positions.go +++ b/sdk/golang/pkg/generate/futures/positions/api_positions.go @@ -11,6 +11,7 @@ type PositionsAPI interface { // GetIsolatedMarginRiskLimit Get Isolated Margin Risk Limit // Description: This interface can be used to obtain information about risk limit level of a specific contract(Only valid for isolated Margin). + // Documentation: https://www.kucoin.com/docs-new/api-3470263 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -24,6 +25,7 @@ type PositionsAPI interface { // GetPositionsHistory Get Positions History // Description: This interface can query position history information records. + // Documentation: https://www.kucoin.com/docs-new/api-3470254 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -37,6 +39,7 @@ type PositionsAPI interface { // GetMaxWithdrawMargin Get Max Withdraw Margin // Description: This interface can query the maximum amount of margin that the current position supports withdrawal. + // Documentation: https://www.kucoin.com/docs-new/api-3470258 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -50,6 +53,7 @@ type PositionsAPI interface { // RemoveIsolatedMargin Remove Isolated Margin // Description: Remove Isolated Margin Manually. + // Documentation: https://www.kucoin.com/docs-new/api-3470256 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -63,6 +67,7 @@ type PositionsAPI interface { // GetPositionDetails Get Position Details // Description: Get the position details of a specified position. + // Documentation: https://www.kucoin.com/docs-new/api-3470252 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -76,6 +81,7 @@ type PositionsAPI interface { // ModifyAutoDepositStatus Modify Isolated Margin Auto-Deposit Status // Description: This endpoint is only applicable to isolated margin and is no longer recommended. It is recommended to use cross margin instead. + // Documentation: https://www.kucoin.com/docs-new/api-3470255 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -90,6 +96,7 @@ type PositionsAPI interface { // AddIsolatedMargin Add Isolated Margin // Description: Add Isolated Margin Manually. + // Documentation: https://www.kucoin.com/docs-new/api-3470257 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -103,6 +110,7 @@ type PositionsAPI interface { // ModifyIsolatedMarginRiskLimt Modify Isolated Margin Risk Limit // Description: This interface can be used to obtain information about risk limit level of a specific contract(Only valid for isolated Margin). + // Documentation: https://www.kucoin.com/docs-new/api-3470264 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -116,6 +124,7 @@ type PositionsAPI interface { // GetPositionList Get Position List // Description: Get the position details of a specified position. + // Documentation: https://www.kucoin.com/docs-new/api-3470253 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -129,6 +138,7 @@ type PositionsAPI interface { // ModifyMarginLeverage Modify Cross Margin Leverage // Description: This interface can modify the current symbolโ€™s cross-margin leverage multiple. + // Documentation: https://www.kucoin.com/docs-new/api-3470261 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -142,6 +152,7 @@ type PositionsAPI interface { // GetCrossMarginLeverage Get Cross Margin Leverage // Description: This interface can query the current symbolโ€™s cross-margin leverage multiple. + // Documentation: https://www.kucoin.com/docs-new/api-3470260 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -155,6 +166,7 @@ type PositionsAPI interface { // GetMaxOpenSize Get Max Open Size // Description: Get Maximum Open Position Size. + // Documentation: https://www.kucoin.com/docs-new/api-3470251 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -168,6 +180,7 @@ type PositionsAPI interface { // SwitchMarginMode Switch Margin Mode // Description: This interface can modify the margin mode of the current symbol. + // Documentation: https://www.kucoin.com/docs-new/api-3470262 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -181,6 +194,7 @@ type PositionsAPI interface { // GetMarginMode Get Margin Mode // Description: This interface can query the margin mode of the current symbol. + // Documentation: https://www.kucoin.com/docs-new/api-3470259 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ diff --git a/sdk/golang/pkg/generate/margin/credit/api_credit.go b/sdk/golang/pkg/generate/margin/credit/api_credit.go index e67bf177..b3192b1a 100644 --- a/sdk/golang/pkg/generate/margin/credit/api_credit.go +++ b/sdk/golang/pkg/generate/margin/credit/api_credit.go @@ -11,6 +11,7 @@ type CreditAPI interface { // ModifyPurchase Modify Purchase // Description: This API endpoint is used to update the interest rates of subscription orders, which will take effect at the beginning of the next hour.,Please ensure that the funds are in the main(funding) account + // Documentation: https://www.kucoin.com/docs-new/api-3470217 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -24,6 +25,7 @@ type CreditAPI interface { // GetLoanMarket Get Loan Market // Description: This API endpoint is used to get the information about the currencies available for lending. + // Documentation: https://www.kucoin.com/docs-new/api-3470212 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -37,6 +39,7 @@ type CreditAPI interface { // GetLoanMarketInterestRate Get Loan Market Interest Rate // Description: This API endpoint is used to get the interest rates of the margin lending market over the past 7 days. + // Documentation: https://www.kucoin.com/docs-new/api-3470215 // +---------------------+--------+ // | Extra API Info | Value | // +---------------------+--------+ @@ -50,6 +53,7 @@ type CreditAPI interface { // GetPurchaseOrders Get Purchase Orders // Description: This API endpoint provides pagination query for the purchase orders. + // Documentation: https://www.kucoin.com/docs-new/api-3470213 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -63,6 +67,7 @@ type CreditAPI interface { // Purchase Purchase // Description: Invest credit in the market and earn interest + // Documentation: https://www.kucoin.com/docs-new/api-3470216 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -76,6 +81,7 @@ type CreditAPI interface { // GetRedeemOrders Get Redeem Orders // Description: This API endpoint provides pagination query for the redeem orders. + // Documentation: https://www.kucoin.com/docs-new/api-3470214 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -89,6 +95,7 @@ type CreditAPI interface { // Redeem Redeem // Description: Redeem your loan order + // Documentation: https://www.kucoin.com/docs-new/api-3470218 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ diff --git a/sdk/golang/pkg/generate/margin/debit/api_debit.go b/sdk/golang/pkg/generate/margin/debit/api_debit.go index 1d95e733..e2ea02ac 100644 --- a/sdk/golang/pkg/generate/margin/debit/api_debit.go +++ b/sdk/golang/pkg/generate/margin/debit/api_debit.go @@ -11,6 +11,7 @@ type DebitAPI interface { // GetBorrowHistory Get Borrow History // Description: This API endpoint is used to get the borrowing orders for cross and isolated margin accounts + // Documentation: https://www.kucoin.com/docs-new/api-3470207 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -24,6 +25,7 @@ type DebitAPI interface { // Borrow Borrow // Description: This API endpoint is used to initiate an application for cross or isolated margin borrowing. + // Documentation: https://www.kucoin.com/docs-new/api-3470206 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -37,6 +39,7 @@ type DebitAPI interface { // GetInterestHistory Get Interest History // Description: Request via this endpoint to get the interest records of the cross/isolated margin lending. + // Documentation: https://www.kucoin.com/docs-new/api-3470209 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -50,6 +53,7 @@ type DebitAPI interface { // GetRepayHistory Get Repay History // Description: This API endpoint is used to get the borrowing orders for cross and isolated margin accounts + // Documentation: https://www.kucoin.com/docs-new/api-3470208 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -63,6 +67,7 @@ type DebitAPI interface { // Repay Repay // Description: This API endpoint is used to initiate an application for cross or isolated margin repayment. + // Documentation: https://www.kucoin.com/docs-new/api-3470210 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -76,6 +81,7 @@ type DebitAPI interface { // ModifyLeverage Modify Leverage // Description: This endpoint allows modifying the leverage multiplier for cross margin or isolated margin. + // Documentation: https://www.kucoin.com/docs-new/api-3470211 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ diff --git a/sdk/golang/pkg/generate/margin/market/api_market.go b/sdk/golang/pkg/generate/margin/market/api_market.go index 43e58009..ae29f7d9 100644 --- a/sdk/golang/pkg/generate/margin/market/api_market.go +++ b/sdk/golang/pkg/generate/margin/market/api_market.go @@ -11,6 +11,7 @@ type MarketAPI interface { // GetIsolatedMarginSymbols Get Symbols - Isolated Margin // Description: This endpoint allows querying the configuration of isolated margin symbol. + // Documentation: https://www.kucoin.com/docs-new/api-3470194 // +---------------------+--------+ // | Extra API Info | Value | // +---------------------+--------+ @@ -24,6 +25,7 @@ type MarketAPI interface { // GetMarginConfig Get Margin Config // Description: Request via this endpoint to get the configure info of the cross margin. + // Documentation: https://www.kucoin.com/docs-new/api-3470190 // +---------------------+--------+ // | Extra API Info | Value | // +---------------------+--------+ @@ -37,6 +39,7 @@ type MarketAPI interface { // GetMarkPriceDetail Get Mark Price Detail // Description: This endpoint returns the current Mark price for specified margin trading pairs. + // Documentation: https://www.kucoin.com/docs-new/api-3470193 // +---------------------+--------+ // | Extra API Info | Value | // +---------------------+--------+ @@ -50,6 +53,7 @@ type MarketAPI interface { // GetETFInfo Get ETF Info // Description: This interface returns leveraged token information + // Documentation: https://www.kucoin.com/docs-new/api-3470191 // +---------------------+--------+ // | Extra API Info | Value | // +---------------------+--------+ @@ -63,6 +67,7 @@ type MarketAPI interface { // GetCrossMarginSymbols Get Symbols - Cross Margin // Description: This endpoint allows querying the configuration of cross margin symbol. + // Documentation: https://www.kucoin.com/docs-new/api-3470189 // +---------------------+--------+ // | Extra API Info | Value | // +---------------------+--------+ @@ -76,6 +81,7 @@ type MarketAPI interface { // GetMarkPriceList Get Mark Price List // Description: This endpoint returns the current Mark price for all margin trading pairs. + // Documentation: https://www.kucoin.com/docs-new/api-3470192 // +---------------------+--------+ // | Extra API Info | Value | // +---------------------+--------+ diff --git a/sdk/golang/pkg/generate/margin/order/api_order.go b/sdk/golang/pkg/generate/margin/order/api_order.go index 434fc65e..3176b361 100644 --- a/sdk/golang/pkg/generate/margin/order/api_order.go +++ b/sdk/golang/pkg/generate/margin/order/api_order.go @@ -11,6 +11,7 @@ type OrderAPI interface { // AddOrderV1 Add Order - V1 // Description: Place order to the Cross-margin or Isolated-margin trading system, you can place two major types of orders: limit and market. Orders can only be placed if your account has sufficient funds. Once an order is placed, your funds will be put on hold for the duration of the order. The amount of funds on hold depends on the order type and parameters specified. + // Documentation: https://www.kucoin.com/docs-new/api-3470312 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -25,6 +26,7 @@ type OrderAPI interface { // AddOrderTestV1 Add Order Test - V1 // Description: Order test endpoint, the request parameters and return parameters of this endpoint are exactly the same as the order endpoint, and can be used to verify whether the signature is correct and other operations. After placing an order, the order will not enter the matching system, and the order cannot be queried. + // Documentation: https://www.kucoin.com/docs-new/api-3470313 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -39,6 +41,7 @@ type OrderAPI interface { // GetTradeHistory Get Trade History // Description: This endpoint can be used to obtain a list of the latest Margin transaction details. The returned data is sorted in descending order according to the latest update time of the order. + // Documentation: https://www.kucoin.com/docs-new/api-3470200 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -52,6 +55,7 @@ type OrderAPI interface { // GetSymbolsWithOpenOrder Get Symbols With Open Order // Description: This interface can query all Margin symbol that has active orders + // Documentation: https://www.kucoin.com/docs-new/api-3470196 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -65,6 +69,7 @@ type OrderAPI interface { // AddOrder Add Order // Description: Place order to the Cross-margin or Isolated-margin trading system, you can place two major types of orders: limit and market. Orders can only be placed if your account has sufficient funds. Once an order is placed, your funds will be put on hold for the duration of the order. The amount of funds on hold depends on the order type and parameters specified. + // Documentation: https://www.kucoin.com/docs-new/api-3470204 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -78,6 +83,7 @@ type OrderAPI interface { // AddOrderTest Add Order Test // Description: Order test endpoint, the request parameters and return parameters of this endpoint are exactly the same as the order endpoint, and can be used to verify whether the signature is correct and other operations. After placing an order, the order will not enter the matching system, and the order cannot be queried. + // Documentation: https://www.kucoin.com/docs-new/api-3470205 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -91,6 +97,7 @@ type OrderAPI interface { // GetOpenOrders Get Open Orders // Description: This interface is to obtain all Margin active order lists, and the return value of the active order interface is the paged data of all uncompleted order lists. The returned data is sorted in descending order according to the latest update time of the order. After the user successfully places an order, the order is in Active state, and the user can use inOrderBook to determine whether the order has entered the order. Canceled or fully filled orders are marked as completed Done status. + // Documentation: https://www.kucoin.com/docs-new/api-3470198 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -104,6 +111,7 @@ type OrderAPI interface { // CancelOrderByClientOid Cancel Order By ClientOid // Description: This endpoint can be used to cancel a margin order by clientOid. This endpoint only sends cancellation requests. The results of the requests must be obtained by checking the order status or subscribing to websocket. + // Documentation: https://www.kucoin.com/docs-new/api-3470201 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -117,6 +125,7 @@ type OrderAPI interface { // GetOrderByClientOid Get Order By ClientOid // Description: This endpoint can be used to obtain information for a single Margin order using the client order id. After the user successfully places an order, the order is in Active state, and the user can use inOrderBook to determine whether the order has entered the order. Canceled or fully filled orders are marked as completed Done status. + // Documentation: https://www.kucoin.com/docs-new/api-3470203 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -130,6 +139,7 @@ type OrderAPI interface { // CancelAllOrdersBySymbol Cancel All Orders By Symbol // Description: This interface can cancel all open Margin orders by symbol This endpoint only sends cancellation requests. The results of the requests must be obtained by checking the order status or subscribing to websocket. + // Documentation: https://www.kucoin.com/docs-new/api-3470197 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -143,6 +153,7 @@ type OrderAPI interface { // GetClosedOrders Get Closed Orders // Description: This interface is to obtain all Margin closed order lists, and the return value of the active order interface is the paged data of all uncompleted order lists. The returned data is sorted in descending order according to the latest update time of the order. After the user successfully places an order, the order is in Active state, and the user can use inOrderBook to determine whether the order has entered the order. Canceled or fully filled orders are marked as completed Done status. + // Documentation: https://www.kucoin.com/docs-new/api-3470199 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -156,6 +167,7 @@ type OrderAPI interface { // CancelOrderByOrderId Cancel Order By OrderId // Description: This endpoint can be used to cancel a margin order by orderId. This endpoint only sends cancellation requests. The results of the requests must be obtained by checking the order status or subscribing to websocket. + // Documentation: https://www.kucoin.com/docs-new/api-3470195 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -169,6 +181,7 @@ type OrderAPI interface { // GetOrderByOrderId Get Order By OrderId // Description: This endpoint can be used to obtain information for a single Margin order using the order id. After the user successfully places an order, the order is in Active state, and the user can use inOrderBook to determine whether the order has entered the order. Canceled or fully filled orders are marked as completed Done status. + // Documentation: https://www.kucoin.com/docs-new/api-3470202 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ diff --git a/sdk/golang/pkg/generate/margin/risklimit/api_risk_limit.go b/sdk/golang/pkg/generate/margin/risklimit/api_risk_limit.go index 601aa826..ad024618 100644 --- a/sdk/golang/pkg/generate/margin/risklimit/api_risk_limit.go +++ b/sdk/golang/pkg/generate/margin/risklimit/api_risk_limit.go @@ -11,6 +11,7 @@ type RiskLimitAPI interface { // GetMarginRiskLimit Get Margin Risk Limit // Description: Request via this endpoint to get the Configure and Risk limit info of the margin. + // Documentation: https://www.kucoin.com/docs-new/api-3470219 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ diff --git a/sdk/golang/pkg/generate/spot/market/api_market.go b/sdk/golang/pkg/generate/spot/market/api_market.go index 80607cd8..49e95970 100644 --- a/sdk/golang/pkg/generate/spot/market/api_market.go +++ b/sdk/golang/pkg/generate/spot/market/api_market.go @@ -11,6 +11,7 @@ type MarketAPI interface { // GetPrivateToken Get Private Token - Spot/Margin // Description: This interface can obtain the token required for websocket to establish a Spot/Margin private connection. If you need use private channels(e.g. account balance notice), please make request as follows to obtain the server list and private token + // Documentation: https://www.kucoin.com/docs-new/api-3470295 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -24,6 +25,7 @@ type MarketAPI interface { // GetPublicToken Get Public Token - Spot/Margin // Description: This interface can obtain the token required for websocket to establish a Spot/Margin connection. If you need use public channels (e.g. all public market data), please make request as follows to obtain the server list and public token + // Documentation: https://www.kucoin.com/docs-new/api-3470294 // +---------------------+--------+ // | Extra API Info | Value | // +---------------------+--------+ @@ -37,6 +39,7 @@ type MarketAPI interface { // GetAllTickers Get All Tickers // Description: Request market tickers for all the trading pairs in the market (including 24h volume), takes a snapshot every 2 seconds. On the rare occasion that we will change the currency name, if you still want the changed symbol name, you can use the symbolName field instead of the symbol field via โ€œGet all tickersโ€ endpoint. + // Documentation: https://www.kucoin.com/docs-new/api-3470167 // +---------------------+--------+ // | Extra API Info | Value | // +---------------------+--------+ @@ -50,6 +53,7 @@ type MarketAPI interface { // GetKlines Get Klines // Description: Get the Kline of the symbol. Data are returned in grouped buckets based on requested type. For each query, the system would return at most 1500 pieces of data. To obtain more data, please page the data by time. + // Documentation: https://www.kucoin.com/docs-new/api-3470163 // +---------------------+--------+ // | Extra API Info | Value | // +---------------------+--------+ @@ -63,6 +67,7 @@ type MarketAPI interface { // GetTradeHistory Get Trade History // Description: Request via this endpoint to get the trade history of the specified symbol, the returned quantity is the last 100 transaction records. + // Documentation: https://www.kucoin.com/docs-new/api-3470162 // +---------------------+--------+ // | Extra API Info | Value | // +---------------------+--------+ @@ -76,6 +81,7 @@ type MarketAPI interface { // GetTicker Get Ticker // Description: Request via this endpoint to get Level 1 Market Data. The returned value includes the best bid price and size, the best ask price and size as well as the last traded price and the last traded size. + // Documentation: https://www.kucoin.com/docs-new/api-3470160 // +---------------------+--------+ // | Extra API Info | Value | // +---------------------+--------+ @@ -89,6 +95,7 @@ type MarketAPI interface { // GetPartOrderBook Get Part OrderBook // Description: Query for part orderbook depth data. (aggregated by price) You are recommended to request via this endpoint as the system reponse would be faster and cosume less traffic. + // Documentation: https://www.kucoin.com/docs-new/api-3470165 // +---------------------+--------+ // | Extra API Info | Value | // +---------------------+--------+ @@ -102,6 +109,7 @@ type MarketAPI interface { // Get24hrStats Get 24hr Stats // Description: Request via this endpoint to get the statistics of the specified ticker in the last 24 hours. + // Documentation: https://www.kucoin.com/docs-new/api-3470161 // +---------------------+--------+ // | Extra API Info | Value | // +---------------------+--------+ @@ -115,6 +123,7 @@ type MarketAPI interface { // GetMarketList Get Market List // Description: Request via this endpoint to get the transaction currency for the entire trading market. + // Documentation: https://www.kucoin.com/docs-new/api-3470166 // +---------------------+--------+ // | Extra API Info | Value | // +---------------------+--------+ @@ -128,6 +137,7 @@ type MarketAPI interface { // GetFiatPrice Get Fiat Price // Description: Request via this endpoint to get the fiat price of the currencies for the available trading pairs. + // Documentation: https://www.kucoin.com/docs-new/api-3470153 // +---------------------+--------+ // | Extra API Info | Value | // +---------------------+--------+ @@ -141,6 +151,7 @@ type MarketAPI interface { // GetServiceStatus Get Service Status // Description: Get the service status + // Documentation: https://www.kucoin.com/docs-new/api-3470158 // +---------------------+--------+ // | Extra API Info | Value | // +---------------------+--------+ @@ -154,6 +165,7 @@ type MarketAPI interface { // GetServerTime Get Server Time // Description: Get the server time. + // Documentation: https://www.kucoin.com/docs-new/api-3470156 // +---------------------+--------+ // | Extra API Info | Value | // +---------------------+--------+ @@ -167,6 +179,7 @@ type MarketAPI interface { // GetAllSymbols Get All Symbols // Description: Request via this endpoint to get a list of available currency pairs for trading. If you want to get the market information of the trading symbol, please use Get All Tickers. + // Documentation: https://www.kucoin.com/docs-new/api-3470154 // +---------------------+--------+ // | Extra API Info | Value | // +---------------------+--------+ @@ -180,6 +193,7 @@ type MarketAPI interface { // GetSymbol Get Symbol // Description: Request via this endpoint to get detail currency pairs for trading. If you want to get the market information of the trading symbol, please use Get All Tickers. + // Documentation: https://www.kucoin.com/docs-new/api-3470159 // +---------------------+--------+ // | Extra API Info | Value | // +---------------------+--------+ @@ -193,6 +207,7 @@ type MarketAPI interface { // GetAnnouncements Get Announcements // Description: This interface can obtain the latest news announcements, and the default page search is for announcements within a month. + // Documentation: https://www.kucoin.com/docs-new/api-3470157 // +---------------------+--------+ // | Extra API Info | Value | // +---------------------+--------+ @@ -206,6 +221,7 @@ type MarketAPI interface { // GetCurrency Get Currency // Description: Request via this endpoint to get the currency details of a specified currency + // Documentation: https://www.kucoin.com/docs-new/api-3470155 // +---------------------+--------+ // | Extra API Info | Value | // +---------------------+--------+ @@ -219,6 +235,7 @@ type MarketAPI interface { // GetAllCurrencies Get All Currencies // Description: Request via this endpoint to get the currency list.Not all currencies currently can be used for trading. + // Documentation: https://www.kucoin.com/docs-new/api-3470152 // +---------------------+--------+ // | Extra API Info | Value | // +---------------------+--------+ @@ -232,6 +249,7 @@ type MarketAPI interface { // GetFullOrderBook Get Full OrderBook // Description: Query for Full orderbook depth data. (aggregated by price) It is generally used by professional traders because it uses more server resources and traffic, and we have strict access rate limit control. To maintain up-to-date Order Book, please use Websocket incremental feed after retrieving the OrderBook. + // Documentation: https://www.kucoin.com/docs-new/api-3470164 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ diff --git a/sdk/golang/pkg/generate/spot/order/api_order.go b/sdk/golang/pkg/generate/spot/order/api_order.go index d3f6423e..24413d26 100644 --- a/sdk/golang/pkg/generate/spot/order/api_order.go +++ b/sdk/golang/pkg/generate/spot/order/api_order.go @@ -11,6 +11,7 @@ type OrderAPI interface { // GetTradeHistoryOld Get Trade History - Old // Description: Request via this endpoint to get the recent fills. The return value is the data after Pagination, sorted in descending order according to time. + // Documentation: https://www.kucoin.com/docs-new/api-3470350 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -25,6 +26,7 @@ type OrderAPI interface { // GetTradeHistory Get Trade History // Description: This endpoint can be used to obtain a list of the latest Spot transaction details. The returned data is sorted in descending order according to the latest update time of the order. + // Documentation: https://www.kucoin.com/docs-new/api-3470180 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -38,6 +40,7 @@ type OrderAPI interface { // GetOpenOrders Get Open Orders // Description: This interface is to obtain all Spot active order lists, and the return value of the active order interface is the paged data of all uncompleted order lists. The returned data is sorted in descending order according to the latest update time of the order. After the user successfully places an order, the order is in Active state, and the user can use inOrderBook to determine whether the order has entered the order. Canceled or fully filled orders are marked as completed Done status. + // Documentation: https://www.kucoin.com/docs-new/api-3470178 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -51,6 +54,7 @@ type OrderAPI interface { // GetSymbolsWithOpenOrder Get Symbols With Open Order // Description: This interface can query all spot symbol that has active orders + // Documentation: https://www.kucoin.com/docs-new/api-3470177 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -64,6 +68,7 @@ type OrderAPI interface { // ModifyOrder Modify Order // Description: This interface can modify the price and quantity of the order according to orderId or clientOid. The implementation of this interface is: cancel the order and place a new order on the same trading pair, and return the modification result to the client synchronously When the quantity of the new order updated by the user is less than the filled quantity of this order, the order will be considered as completed, and the order will be cancelled, and no new order will be placed + // Documentation: https://www.kucoin.com/docs-new/api-3470171 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -77,6 +82,7 @@ type OrderAPI interface { // CancelAllOrders Cancel All Orders // Description: This endpoint can cancel all spot orders for all symbol. This endpoint only sends cancellation requests. The results of the requests must be obtained by checking the order status or subscribing to websocket. + // Documentation: https://www.kucoin.com/docs-new/api-3470176 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -90,6 +96,7 @@ type OrderAPI interface { // CancelPartialOrder Cancel Partial Order // Description: This interface can cancel the specified quantity of the order according to the orderId. The order execution order is: price first, time first, this interface will not change the queue order + // Documentation: https://www.kucoin.com/docs-new/api-3470183 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -103,6 +110,7 @@ type OrderAPI interface { // CancelOrderByClientOid Cancel Order By ClientOid // Description: This endpoint can be used to cancel a spot order by clientOid. This endpoint only sends cancellation requests. The results of the requests must be obtained by checking the order status or subscribing to websocket. + // Documentation: https://www.kucoin.com/docs-new/api-3470184 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -116,6 +124,7 @@ type OrderAPI interface { // GetOrderByClientOid Get Order By ClientOid // Description: This endpoint can be used to obtain information for a single Spot order using the client order id. After the user successfully places an order, the order is in Active state, and the user can use inOrderBook to determine whether the order has entered the order. Canceled or fully filled orders are marked as completed Done status. + // Documentation: https://www.kucoin.com/docs-new/api-3470182 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -129,6 +138,7 @@ type OrderAPI interface { // SetDCP Set DCP // Description: Set Disconnection Protect(Deadman Swich)Through this interface, Call this interface to automatically cancel all orders of the set trading pair after the specified time. If this interface is not called again for renewal or cancellation before the set time, the system will help the user to cancel the order of the corresponding trading pair. Otherwise it will not. + // Documentation: https://www.kucoin.com/docs-new/api-3470173 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -142,6 +152,7 @@ type OrderAPI interface { // GetDCP Get DCP // Description: Get Disconnection Protect(Deadman Swich)Through this interface, you can query the settings of automatic order cancellation + // Documentation: https://www.kucoin.com/docs-new/api-3470172 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -155,6 +166,7 @@ type OrderAPI interface { // CancelAllOrdersBySymbol Cancel All Orders By Symbol // Description: This endpoint can cancel all spot orders for specific symbol. This endpoint only sends cancellation requests. The results of the requests must be obtained by checking the order status or subscribing to websocket. + // Documentation: https://www.kucoin.com/docs-new/api-3470175 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -168,6 +180,7 @@ type OrderAPI interface { // GetClosedOrders Get Closed Orders // Description: This interface is to obtain all Spot closed order lists, and the return value of the active order interface is the paged data of all uncompleted order lists. The returned data is sorted in descending order according to the latest update time of the order. After the user successfully places an order, the order is in Active state, and the user can use inOrderBook to determine whether the order has entered the order. Canceled or fully filled orders are marked as completed Done status. + // Documentation: https://www.kucoin.com/docs-new/api-3470179 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -181,6 +194,7 @@ type OrderAPI interface { // BatchAddOrders Batch Add Orders // Description: This endpoint supports sequential batch order placement from a single endpoint. A maximum of 5orders can be placed simultaneously. The order types must be limit orders of the same trading pair + // Documentation: https://www.kucoin.com/docs-new/api-3470168 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -194,6 +208,7 @@ type OrderAPI interface { // BatchAddOrdersSync Batch Add Orders Sync // Description: This endpoint supports sequential batch order placement from a single endpoint. A maximum of 5orders can be placed simultaneously. The order types must be limit orders of the same trading pair + // Documentation: https://www.kucoin.com/docs-new/api-3470169 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -207,6 +222,7 @@ type OrderAPI interface { // CancelOrderByOrderId Cancel Order By OrderId // Description: This endpoint can be used to cancel a spot order by orderId. This endpoint only sends cancellation requests. The results of the requests must be obtained by checking the order status or subscribing to websocket. + // Documentation: https://www.kucoin.com/docs-new/api-3470174 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -220,6 +236,7 @@ type OrderAPI interface { // GetOrderByOrderId Get Order By OrderId // Description: This endpoint can be used to obtain information for a single Spot order using the order id. After the user successfully places an order, the order is in Active state, and the user can use inOrderBook to determine whether the order has entered the order. Canceled or fully filled orders are marked as completed Done status. + // Documentation: https://www.kucoin.com/docs-new/api-3470181 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -233,6 +250,7 @@ type OrderAPI interface { // AddOrder Add Order // Description: Place order to the Spot trading system, you can place two major types of orders: limit and market. Orders can only be placed if your account has sufficient funds. Once an order is placed, your funds will be put on hold for the duration of the order. The amount of funds on hold depends on the order type and parameters specified. + // Documentation: https://www.kucoin.com/docs-new/api-3470188 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -246,6 +264,7 @@ type OrderAPI interface { // CancelOrderByClientOidSync Cancel Order By ClientOid Sync // Description: This endpoint can be used to cancel a spot order by orderId. + // Documentation: https://www.kucoin.com/docs-new/api-3470186 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -259,6 +278,7 @@ type OrderAPI interface { // CancelOrderByOrderIdSync Cancel Order By OrderId Sync // Description: This endpoint can be used to cancel a spot order by orderId. + // Documentation: https://www.kucoin.com/docs-new/api-3470185 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -272,6 +292,7 @@ type OrderAPI interface { // AddOrderSync Add Order Sync // Description: Place order to the spot trading system The difference between this interface and \"Add order\" is that this interface will synchronously return the order information after the order matching is completed. For higher latency requirements, please select the \"Add order\" interface. If there is a requirement for returning data integrity, please select this interface + // Documentation: https://www.kucoin.com/docs-new/api-3470170 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -285,6 +306,7 @@ type OrderAPI interface { // AddOrderTest Add Order Test // Description: Order test endpoint, the request parameters and return parameters of this endpoint are exactly the same as the order endpoint, and can be used to verify whether the signature is correct and other operations. After placing an order, the order will not enter the matching system, and the order cannot be queried. + // Documentation: https://www.kucoin.com/docs-new/api-3470187 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -298,6 +320,7 @@ type OrderAPI interface { // GetRecentTradeHistoryOld Get Recent Trade History - Old // Description: Request via this endpoint to get a list of 1000 fills in the last 24 hours. The return value is the data after Pagination, sorted in descending order according to time. + // Documentation: https://www.kucoin.com/docs-new/api-3470351 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -312,6 +335,7 @@ type OrderAPI interface { // GetRecentOrdersListOld Get Recent Orders List - Old // Description: Request via this endpoint to get your current order list. The return value is the data after Pagination, sorted in descending order according to time. + // Documentation: https://www.kucoin.com/docs-new/api-3470347 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -326,6 +350,7 @@ type OrderAPI interface { // CancelOrderByClientOidOld Cancel Order By ClientOid - Old // Description: This endpoint can be used to cancel a spot order by clientOid. This endpoint only sends cancellation requests. The results of the requests must be obtained by checking the order status or subscribing to websocket. + // Documentation: https://www.kucoin.com/docs-new/api-3470344 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -339,6 +364,7 @@ type OrderAPI interface { // GetOrderByClientOidOld Get Order By ClientOid - Old // Description: Request via this interface to check the information of a single active order via clientOid. The system will prompt that the order does not exists if the order does not exist or has been settled. + // Documentation: https://www.kucoin.com/docs-new/api-3470349 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -353,6 +379,7 @@ type OrderAPI interface { // BatchCancelOrderOld Batch Cancel Order - Old // Description: Request via this endpoint to cancel all open orders. The response is a list of ids of the canceled orders. + // Documentation: https://www.kucoin.com/docs-new/api-3470345 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -367,6 +394,7 @@ type OrderAPI interface { // GetOrdersListOld Get Orders List - Old // Description: Request via this endpoint to get your current order list. The return value is the data after Pagination, sorted in descending order according to time. + // Documentation: https://www.kucoin.com/docs-new/api-3470346 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -381,6 +409,7 @@ type OrderAPI interface { // BatchAddOrdersOld Batch Add Orders - Old // Description: Request via this endpoint to place 5 orders at the same time. The order type must be a limit order of the same symbol. + // Documentation: https://www.kucoin.com/docs-new/api-3470342 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -395,6 +424,7 @@ type OrderAPI interface { // CancelOrderByOrderIdOld Cancel Order By OrderId - Old // Description: This endpoint can be used to cancel a spot order by orderId. This endpoint only sends cancellation requests. The results of the requests must be obtained by checking the order status or subscribing to websocket. + // Documentation: https://www.kucoin.com/docs-new/api-3470343 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -409,6 +439,7 @@ type OrderAPI interface { // GetOrderByOrderIdOld Get Order By OrderId - Old // Description: Request via this endpoint to get a single order info by order ID. + // Documentation: https://www.kucoin.com/docs-new/api-3470348 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -423,6 +454,7 @@ type OrderAPI interface { // AddOrderOld Add Order - Old // Description: Place order to the Spot trading system, you can place two major types of orders: limit and market. Orders can only be placed if your account has sufficient funds. Once an order is placed, your funds will be put on hold for the duration of the order. The amount of funds on hold depends on the order type and parameters specified. + // Documentation: https://www.kucoin.com/docs-new/api-3470333 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -437,6 +469,7 @@ type OrderAPI interface { // AddOrderTestOld Add Order Test - Old // Description: Order test endpoint, the request parameters and return parameters of this endpoint are exactly the same as the order endpoint, and can be used to verify whether the signature is correct and other operations. After placing an order, the order will not enter the matching system, and the order cannot be queried. + // Documentation: https://www.kucoin.com/docs-new/api-3470341 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -451,6 +484,7 @@ type OrderAPI interface { // BatchCancelStopOrder Batch Cancel Stop Orders // Description: This endpoint can be used to cancel a spot stop orders by batch. + // Documentation: https://www.kucoin.com/docs-new/api-3470337 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -464,6 +498,7 @@ type OrderAPI interface { // CancelStopOrderByClientOid Cancel Stop Order By ClientOid // Description: This endpoint can be used to cancel a spot stop order by clientOid. + // Documentation: https://www.kucoin.com/docs-new/api-3470336 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -478,6 +513,7 @@ type OrderAPI interface { // GetStopOrdersList Get Stop Orders List // Description: This interface is to obtain all Spot active stop order lists + // Documentation: https://www.kucoin.com/docs-new/api-3470338 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -491,6 +527,7 @@ type OrderAPI interface { // CancelStopOrderByOrderId Cancel Stop Order By OrderId // Description: This endpoint can be used to cancel a spot stop order by orderId. + // Documentation: https://www.kucoin.com/docs-new/api-3470335 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -505,6 +542,7 @@ type OrderAPI interface { // GetStopOrderByOrderId Get Stop Order By OrderId // Description: This interface is to obtain Spot stop order details by orderId + // Documentation: https://www.kucoin.com/docs-new/api-3470339 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -518,6 +556,7 @@ type OrderAPI interface { // AddStopOrder Add Stop Order // Description: Place stop order to the Spot trading system, you can place two major types of orders: limit and market. Orders can only be placed if your account has sufficient funds. Once an order is placed, your funds will be put on hold for the duration of the order. The amount of funds on hold depends on the order type and parameters specified. + // Documentation: https://www.kucoin.com/docs-new/api-3470334 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -532,6 +571,7 @@ type OrderAPI interface { // GetStopOrderByClientOid Get Stop Order By ClientOid // Description: This interface is to obtain Spot stop order details by orderId + // Documentation: https://www.kucoin.com/docs-new/api-3470340 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -545,6 +585,7 @@ type OrderAPI interface { // CancelOcoOrderByClientOid Cancel OCO Order By ClientOid // Description: Request via this interface to cancel a stop order via the clientOid. You will receive cancelledOrderIds field once the system has received the cancellation request. The cancellation request will be processed by the matching engine in sequence. To know if the request is processed (successfully or not), you may check the order status or the update message from the pushes. + // Documentation: https://www.kucoin.com/docs-new/api-3470355 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -559,6 +600,7 @@ type OrderAPI interface { // GetOcoOrderByClientOid Get OCO Order By ClientOid // Description: Request via this interface to get a oco order information via the client order ID. + // Documentation: https://www.kucoin.com/docs-new/api-3470358 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -573,6 +615,7 @@ type OrderAPI interface { // GetOcoOrderDetailByOrderId Get OCO Order Detail By OrderId // Description: Request via this interface to get a oco order detail via the order ID. + // Documentation: https://www.kucoin.com/docs-new/api-3470359 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -587,6 +630,7 @@ type OrderAPI interface { // CancelOcoOrderByOrderId Cancel OCO Order By OrderId // Description: This endpoint can be used to cancel a spot order by orderId. This endpoint only sends cancellation requests. The results of the requests must be obtained by checking the order status or subscribing to websocket. + // Documentation: https://www.kucoin.com/docs-new/api-3470354 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -601,6 +645,7 @@ type OrderAPI interface { // GetOcoOrderByOrderId Get OCO Order By OrderId // Description: Request via this interface to get a oco order information via the order ID. + // Documentation: https://www.kucoin.com/docs-new/api-3470357 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -615,6 +660,7 @@ type OrderAPI interface { // AddOcoOrder Add OCO Order // Description: Place OCO order to the Spot trading system + // Documentation: https://www.kucoin.com/docs-new/api-3470353 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -629,6 +675,7 @@ type OrderAPI interface { // BatchCancelOcoOrders Batch Cancel OCO Order // Description: This interface can batch cancel OCO orders through orderIds. You will receive cancelledOrderIds field once the system has received the cancellation request. The cancellation request will be processed by the matching engine in sequence. To know if the request is processed (successfully or not), you may check the order status or the update message from the pushes. + // Documentation: https://www.kucoin.com/docs-new/api-3470356 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ @@ -643,6 +690,7 @@ type OrderAPI interface { // GetOcoOrderList Get OCO Order List // Description: Request via this endpoint to get your current OCO order list. Items are paginated and sorted to show the latest first. See the Pagination section for retrieving additional entries after the first page. + // Documentation: https://www.kucoin.com/docs-new/api-3470360 // +---------------------+---------+ // | Extra API Info | Value | // +---------------------+---------+ diff --git a/sdk/golang/pkg/generate/viplending/viplending/api_vip_lending.go b/sdk/golang/pkg/generate/viplending/viplending/api_vip_lending.go index 6b3300a6..2b76162a 100644 --- a/sdk/golang/pkg/generate/viplending/viplending/api_vip_lending.go +++ b/sdk/golang/pkg/generate/viplending/viplending/api_vip_lending.go @@ -11,6 +11,7 @@ type VIPLendingAPI interface { // GetAccounts Get Accounts // Description: Accounts participating in OTC lending, This interface is only for querying accounts currently running OTC lending. + // Documentation: https://www.kucoin.com/docs-new/api-3470278 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ @@ -24,6 +25,7 @@ type VIPLendingAPI interface { // GetAccountDetail Get Account Detail // Description: The following information is only applicable to loans. Get information on off-exchange funding and loans, This endpoint is only for querying accounts that are currently involved in loans. + // Documentation: https://www.kucoin.com/docs-new/api-3470277 // +---------------------+------------+ // | Extra API Info | Value | // +---------------------+------------+ diff --git a/sdk/postman/collection-Abandoned Endpoints.json b/sdk/postman/collection-Abandoned Endpoints.json index 03710a8e..014c9d08 100644 --- a/sdk/postman/collection-Abandoned Endpoints.json +++ b/sdk/postman/collection-Abandoned Endpoints.json @@ -3106,7 +3106,7 @@ "type": "text/javascript", "packages": {}, "exec": [ - "function extractPathVariable(str) {\n const regex = /^\\{\\{(.+?)\\}\\}$/;\n const match = str.match(regex);\n if (match) {\n return match[1];\n }\n return null;\n}\n\nfunction hasAnyFieldEmpty(obj) {\n for (const key in obj) {\n if (obj[key] === \"\" || obj[key] === null || obj[key] === undefined) {\n return true;\n }\n }\n return false;\n}\n\nfunction sign(text, secret) {\n const hash = CryptoJS.HmacSHA256(text, secret);\n return CryptoJS.enc.Base64.stringify(hash)\n}\n\nfunction auth(apiKey, method, url, data) {\n if (hasAnyFieldEmpty(apiKey)) {\n console.warn('The API key-related information is not configured; only the public channel API is accessible.')\n return {'User-Agent': `Kucoin-Universal-Postman-SDK/v1.0.0`}\n }\n\n const timestamp = Date.now();\n const text = timestamp + method.toUpperCase() + url + data;\n const signature = sign(text, apiKey.secret);\n return {\n 'KC-API-KEY': apiKey.key,\n 'KC-API-SIGN': signature,\n 'KC-API-TIMESTAMP': timestamp.toString(),\n 'KC-API-PASSPHRASE': sign(apiKey.passphrase || '', apiKey.secret),\n 'Content-Type': 'application/json',\n 'User-Agent': `Kucoin-Universal-Postman-SDK/v1.0.0`,\n 'KC-API-KEY-VERSION': 2,\n };\n}\n\nlet key = pm.environment.get('API_KEY')\nlet secret = pm.environment.get('API_SECRET')\nlet passphrase = pm.environment.get('API_PASSPHRASE')\n\nlet url = pm.request.url.getPathWithQuery()\nlet method = pm.request.method\nlet body = pm.request.body ? pm.request.body.toString() : ''\n\nfor (const index in pm.request.url.path) {\n path = pm.request.url.path[index]\n pathVar = extractPathVariable(path)\n if (pathVar != null) {\n let collectionVariable = pm.collectionVariables.get(pathVar);\n if (collectionVariable != null) {\n url = url.replace(path, collectionVariable)\n } else {\n console.warn('no path variable set: ' + path)\n }\n }\n}\n\nheader = auth({ key: key, passphrase: passphrase, secret: secret }, method, url, body)\n\nfor (const [headerName, headerValue] of Object.entries(header)) {\n pm.request.headers.add({ key: headerName, value: headerValue })\n}" + "function extractPathVariable(str) {\n const regex = /^\\{\\{(.+?)\\}\\}$/;\n const match = str.match(regex);\n if (match) {\n return match[1];\n }\n return null;\n}\n\nfunction hasAnyFieldEmpty(obj) {\n for (const key in obj) {\n if (obj[key] === \"\" || obj[key] === null || obj[key] === undefined) {\n return true;\n }\n }\n return false;\n}\n\nfunction sign(text, secret) {\n const hash = CryptoJS.HmacSHA256(text, secret);\n return CryptoJS.enc.Base64.stringify(hash)\n}\n\nfunction auth(apiKey, method, url, data) {\n if (hasAnyFieldEmpty(apiKey)) {\n console.warn('The API key-related information is not configured; only the public channel API is accessible.')\n return {'User-Agent': `Kucoin-Universal-Postman-SDK/`}\n }\n\n const timestamp = Date.now();\n const text = timestamp + method.toUpperCase() + url + data;\n const signature = sign(text, apiKey.secret);\n return {\n 'KC-API-KEY': apiKey.key,\n 'KC-API-SIGN': signature,\n 'KC-API-TIMESTAMP': timestamp.toString(),\n 'KC-API-PASSPHRASE': sign(apiKey.passphrase || '', apiKey.secret),\n 'Content-Type': 'application/json',\n 'User-Agent': `Kucoin-Universal-Postman-SDK/`,\n 'KC-API-KEY-VERSION': 2,\n };\n}\n\nlet key = pm.environment.get('API_KEY')\nlet secret = pm.environment.get('API_SECRET')\nlet passphrase = pm.environment.get('API_PASSPHRASE')\n\nlet url = pm.request.url.getPathWithQuery()\nlet method = pm.request.method\nlet body = pm.request.body ? pm.request.body.toString() : ''\n\nfor (const index in pm.request.url.path) {\n path = pm.request.url.path[index]\n pathVar = extractPathVariable(path)\n if (pathVar != null) {\n let collectionVariable = pm.collectionVariables.get(pathVar);\n if (collectionVariable != null) {\n url = url.replace(path, collectionVariable)\n } else {\n console.warn('no path variable set: ' + path)\n }\n }\n}\n\nheader = auth({ key: key, passphrase: passphrase, secret: secret }, method, url, body)\n\nfor (const [headerName, headerValue] of Object.entries(header)) {\n pm.request.headers.add({ key: headerName, value: headerValue })\n}" ] } }, diff --git a/sdk/postman/collection-REST.json b/sdk/postman/collection-REST.json index b0d12d39..9baf32ca 100644 --- a/sdk/postman/collection-REST.json +++ b/sdk/postman/collection-REST.json @@ -18841,7 +18841,7 @@ "type": "text/javascript", "packages": {}, "exec": [ - "\nfunction extractPathVariable(str) {\n const regex = /^\\{\\{(.+?)\\}\\}$/;\n const match = str.match(regex);\n if (match) {\n return match[1];\n }\n return null;\n}\n\nfunction hasAnyFieldEmpty(obj) {\n for (const key in obj) {\n if (obj[key] === \"\" || obj[key] === null || obj[key] === undefined) {\n return true;\n }\n }\n return false;\n}\n\nfunction sign(text, secret) {\n const hash = CryptoJS.HmacSHA256(text, secret);\n return CryptoJS.enc.Base64.stringify(hash)\n}\n\nfunction auth(apiKey, method, url, data) {\n if (hasAnyFieldEmpty(apiKey)) {\n console.warn('The API key-related (or broker-related) information is not configured. Please check the fields in the environment variables.')\n return {'User-Agent': `Kucoin-Universal-Postman-SDK/v1.0.0`}\n }\n\n\n const timestamp = Date.now();\n const text = timestamp + method.toUpperCase() + url + data;\n const signature = sign(text, apiKey.secret);\n const brokerText = timestamp + apiKey.partner + apiKey.key;\n const brokerSignature = sign(brokerText, apiKey.brokerKey);\n return {\n 'KC-API-KEY': apiKey.key,\n 'KC-API-SIGN': signature,\n 'KC-API-TIMESTAMP': timestamp.toString(),\n 'KC-API-PASSPHRASE': sign(apiKey.passphrase || '', apiKey.secret),\n 'Content-Type': 'application/json',\n 'User-Agent': `Kucoin-Universal-Postman-SDK/v1.0.0`,\n 'KC-API-KEY-VERSION': 2,\n 'KC-API-PARTNER': apiKey.partner,\n 'KC-BROKER-NAME': apiKey.brokerName,\n 'KC-API-PARTNER-VERIFY': 'true',\n 'KC-API-PARTNER-SIGN': brokerSignature,\n };\n}\n\nlet key = pm.environment.get('API_KEY')\nlet secret = pm.environment.get('API_SECRET')\nlet passphrase = pm.environment.get('API_PASSPHRASE')\n\nlet brokerName = pm.environment.get('BROKER_NAME')\nlet partner = pm.environment.get('BROKER_PARTNER')\nlet brokerKey = pm.environment.get('BROKER_KEY')\n\nlet url = pm.request.url.getPathWithQuery()\nlet method = pm.request.method\nlet body = pm.request.body ? pm.request.body.toString() : ''\n\nfor (const index in pm.request.url.path) {\n path = pm.request.url.path[index]\n pathVar = extractPathVariable(path)\n if (pathVar != null) {\n let collectionVariable = pm.collectionVariables.get(pathVar);\n if (collectionVariable != null) {\n url = url.replace(path, collectionVariable)\n } else {\n console.warn('no path variable set: ' + path)\n }\n }\n}\n\nheader = auth({\n key: key, passphrase: passphrase, secret: secret, brokerName: brokerName, partner: partner, brokerKey: brokerKey\n}, method, url, body)\n\nfor (const [headerName, headerValue] of Object.entries(header)) {\n pm.request.headers.add({ key: headerName, value: headerValue })\n}" + "\nfunction extractPathVariable(str) {\n const regex = /^\\{\\{(.+?)\\}\\}$/;\n const match = str.match(regex);\n if (match) {\n return match[1];\n }\n return null;\n}\n\nfunction hasAnyFieldEmpty(obj) {\n for (const key in obj) {\n if (obj[key] === \"\" || obj[key] === null || obj[key] === undefined) {\n return true;\n }\n }\n return false;\n}\n\nfunction sign(text, secret) {\n const hash = CryptoJS.HmacSHA256(text, secret);\n return CryptoJS.enc.Base64.stringify(hash)\n}\n\nfunction auth(apiKey, method, url, data) {\n if (hasAnyFieldEmpty(apiKey)) {\n console.warn('The API key-related (or broker-related) information is not configured. Please check the fields in the environment variables.')\n return {'User-Agent': `Kucoin-Universal-Postman-SDK/`}\n }\n\n\n const timestamp = Date.now();\n const text = timestamp + method.toUpperCase() + url + data;\n const signature = sign(text, apiKey.secret);\n const brokerText = timestamp + apiKey.partner + apiKey.key;\n const brokerSignature = sign(brokerText, apiKey.brokerKey);\n return {\n 'KC-API-KEY': apiKey.key,\n 'KC-API-SIGN': signature,\n 'KC-API-TIMESTAMP': timestamp.toString(),\n 'KC-API-PASSPHRASE': sign(apiKey.passphrase || '', apiKey.secret),\n 'Content-Type': 'application/json',\n 'User-Agent': `Kucoin-Universal-Postman-SDK/`,\n 'KC-API-KEY-VERSION': 2,\n 'KC-API-PARTNER': apiKey.partner,\n 'KC-BROKER-NAME': apiKey.brokerName,\n 'KC-API-PARTNER-VERIFY': 'true',\n 'KC-API-PARTNER-SIGN': brokerSignature,\n };\n}\n\nlet key = pm.environment.get('API_KEY')\nlet secret = pm.environment.get('API_SECRET')\nlet passphrase = pm.environment.get('API_PASSPHRASE')\n\nlet brokerName = pm.environment.get('BROKER_NAME')\nlet partner = pm.environment.get('BROKER_PARTNER')\nlet brokerKey = pm.environment.get('BROKER_KEY')\n\nlet url = pm.request.url.getPathWithQuery()\nlet method = pm.request.method\nlet body = pm.request.body ? pm.request.body.toString() : ''\n\nfor (const index in pm.request.url.path) {\n path = pm.request.url.path[index]\n pathVar = extractPathVariable(path)\n if (pathVar != null) {\n let collectionVariable = pm.collectionVariables.get(pathVar);\n if (collectionVariable != null) {\n url = url.replace(path, collectionVariable)\n } else {\n console.warn('no path variable set: ' + path)\n }\n }\n}\n\nheader = auth({\n key: key, passphrase: passphrase, secret: secret, brokerName: brokerName, partner: partner, brokerKey: brokerKey\n}, method, url, body)\n\nfor (const [headerName, headerValue] of Object.entries(header)) {\n pm.request.headers.add({ key: headerName, value: headerValue })\n}" ] } }, @@ -18860,39 +18860,39 @@ ], "variable": [ { - "key": "clientOid", + "key": "accountId", "value": "" }, { - "key": "orderId", + "key": "clientOid", "value": "" }, { - "key": "symbol", + "key": "currency", "value": "" }, { - "key": "currency", + "key": "order-id", "value": "" }, { - "key": "withdrawalId", + "key": "orderId", "value": "" }, { - "key": "order-id", + "key": "size", "value": "" }, { - "key": "accountId", + "key": "subUserId", "value": "" }, { - "key": "size", + "key": "symbol", "value": "" }, { - "key": "subUserId", + "key": "withdrawalId", "value": "" } ], @@ -18903,7 +18903,7 @@ "type": "text/javascript", "packages": {}, "exec": [ - "function extractPathVariable(str) {\n const regex = /^\\{\\{(.+?)\\}\\}$/;\n const match = str.match(regex);\n if (match) {\n return match[1];\n }\n return null;\n}\n\nfunction hasAnyFieldEmpty(obj) {\n for (const key in obj) {\n if (obj[key] === \"\" || obj[key] === null || obj[key] === undefined) {\n return true;\n }\n }\n return false;\n}\n\nfunction sign(text, secret) {\n const hash = CryptoJS.HmacSHA256(text, secret);\n return CryptoJS.enc.Base64.stringify(hash)\n}\n\nfunction auth(apiKey, method, url, data) {\n if (hasAnyFieldEmpty(apiKey)) {\n console.warn('The API key-related information is not configured; only the public channel API is accessible.')\n return {'User-Agent': `Kucoin-Universal-Postman-SDK/v1.0.0`}\n }\n\n const timestamp = Date.now();\n const text = timestamp + method.toUpperCase() + url + data;\n const signature = sign(text, apiKey.secret);\n return {\n 'KC-API-KEY': apiKey.key,\n 'KC-API-SIGN': signature,\n 'KC-API-TIMESTAMP': timestamp.toString(),\n 'KC-API-PASSPHRASE': sign(apiKey.passphrase || '', apiKey.secret),\n 'Content-Type': 'application/json',\n 'User-Agent': `Kucoin-Universal-Postman-SDK/v1.0.0`,\n 'KC-API-KEY-VERSION': 2,\n };\n}\n\nlet key = pm.environment.get('API_KEY')\nlet secret = pm.environment.get('API_SECRET')\nlet passphrase = pm.environment.get('API_PASSPHRASE')\n\nlet url = pm.request.url.getPathWithQuery()\nlet method = pm.request.method\nlet body = pm.request.body ? pm.request.body.toString() : ''\n\nfor (const index in pm.request.url.path) {\n path = pm.request.url.path[index]\n pathVar = extractPathVariable(path)\n if (pathVar != null) {\n let collectionVariable = pm.collectionVariables.get(pathVar);\n if (collectionVariable != null) {\n url = url.replace(path, collectionVariable)\n } else {\n console.warn('no path variable set: ' + path)\n }\n }\n}\n\nheader = auth({ key: key, passphrase: passphrase, secret: secret }, method, url, body)\n\nfor (const [headerName, headerValue] of Object.entries(header)) {\n pm.request.headers.add({ key: headerName, value: headerValue })\n}" + "function extractPathVariable(str) {\n const regex = /^\\{\\{(.+?)\\}\\}$/;\n const match = str.match(regex);\n if (match) {\n return match[1];\n }\n return null;\n}\n\nfunction hasAnyFieldEmpty(obj) {\n for (const key in obj) {\n if (obj[key] === \"\" || obj[key] === null || obj[key] === undefined) {\n return true;\n }\n }\n return false;\n}\n\nfunction sign(text, secret) {\n const hash = CryptoJS.HmacSHA256(text, secret);\n return CryptoJS.enc.Base64.stringify(hash)\n}\n\nfunction auth(apiKey, method, url, data) {\n if (hasAnyFieldEmpty(apiKey)) {\n console.warn('The API key-related information is not configured; only the public channel API is accessible.')\n return {'User-Agent': `Kucoin-Universal-Postman-SDK/`}\n }\n\n const timestamp = Date.now();\n const text = timestamp + method.toUpperCase() + url + data;\n const signature = sign(text, apiKey.secret);\n return {\n 'KC-API-KEY': apiKey.key,\n 'KC-API-SIGN': signature,\n 'KC-API-TIMESTAMP': timestamp.toString(),\n 'KC-API-PASSPHRASE': sign(apiKey.passphrase || '', apiKey.secret),\n 'Content-Type': 'application/json',\n 'User-Agent': `Kucoin-Universal-Postman-SDK/`,\n 'KC-API-KEY-VERSION': 2,\n };\n}\n\nlet key = pm.environment.get('API_KEY')\nlet secret = pm.environment.get('API_SECRET')\nlet passphrase = pm.environment.get('API_PASSPHRASE')\n\nlet url = pm.request.url.getPathWithQuery()\nlet method = pm.request.method\nlet body = pm.request.body ? pm.request.body.toString() : ''\n\nfor (const index in pm.request.url.path) {\n path = pm.request.url.path[index]\n pathVar = extractPathVariable(path)\n if (pathVar != null) {\n let collectionVariable = pm.collectionVariables.get(pathVar);\n if (collectionVariable != null) {\n url = url.replace(path, collectionVariable)\n } else {\n console.warn('no path variable set: ' + path)\n }\n }\n}\n\nheader = auth({ key: key, passphrase: passphrase, secret: secret }, method, url, body)\n\nfor (const [headerName, headerValue] of Object.entries(header)) {\n pm.request.headers.add({ key: headerName, value: headerValue })\n}" ] } }, diff --git a/sdk/python/kucoin_universal_sdk/generate/account/account/api_account.py b/sdk/python/kucoin_universal_sdk/generate/account/account/api_account.py index c0aafc91..1bc8c964 100644 --- a/sdk/python/kucoin_universal_sdk/generate/account/account/api_account.py +++ b/sdk/python/kucoin_universal_sdk/generate/account/account/api_account.py @@ -40,6 +40,7 @@ def get_futures_account(self, req: GetFuturesAccountReq, """ summary: Get Account - Futures description: Request via this endpoint to get the info of the futures account. + documentation: https://www.kucoin.com/docs-new/api-3470129 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -58,6 +59,7 @@ def get_spot_account_detail(self, req: GetSpotAccountDetailReq, """ summary: Get Account Detail - Spot description: get Information for a single spot account. Use this endpoint when you know the accountId. + documentation: https://www.kucoin.com/docs-new/api-3470126 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+ @@ -76,6 +78,7 @@ def get_spot_account_list(self, req: GetSpotAccountListReq, """ summary: Get Account List - Spot description: Get a list of accounts. Please Deposit to the main account firstly, then transfer the funds to the trade account via Inner Transfer before transaction. + documentation: https://www.kucoin.com/docs-new/api-3470125 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+ @@ -94,6 +97,7 @@ def get_spot_ledger(self, req: GetSpotLedgerReq, """ summary: Get Account Ledgers - Spot/Margin description: This interface is for transaction records from all types of your accounts, supporting inquiry of various currencies. Items are paginated and sorted to show the latest first. See the Pagination section for retrieving additional entries after the first page. + documentation: https://www.kucoin.com/docs-new/api-3470121 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+ @@ -112,6 +116,7 @@ def get_spot_hf_ledger(self, req: GetSpotHfLedgerReq, """ summary: Get Account Ledgers - Trade_hf description: This API endpoint returns all transfer (in and out) records in high-frequency trading account and supports multi-coin queries. The query results are sorted in descending order by createdAt and id. + documentation: https://www.kucoin.com/docs-new/api-3470122 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -129,6 +134,7 @@ def get_spot_account_type(self, **kwargs: Any) -> GetSpotAccountTypeResp: """ summary: Get Account Type - Spot description: This interface determines whether the current user is a spot high-frequency user or a spot low-frequency user. + documentation: https://www.kucoin.com/docs-new/api-3470120 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -149,6 +155,7 @@ def get_isolated_margin_account_detail_v1( """ summary: Get Account Detail - Isolated Margin - V1 description: Request via this endpoint to get the info of the isolated margin account. + documentation: https://www.kucoin.com/docs-new/api-3470315 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -169,6 +176,7 @@ def get_isolated_margin_account_list_v1( """ summary: Get Account List - Isolated Margin - V1 description: Request via this endpoint to get the info list of the isolated margin account. + documentation: https://www.kucoin.com/docs-new/api-3470314 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -188,6 +196,7 @@ def get_margin_account_detail(self, """ summary: Get Account Detail - Margin description: Request via this endpoint to get the info of the margin account. + documentation: https://www.kucoin.com/docs-new/api-3470311 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -206,6 +215,7 @@ def get_futures_ledger(self, req: GetFuturesLedgerReq, """ summary: Get Account Ledgers - Futures description: This interface can query the ledger records of the futures business line + documentation: https://www.kucoin.com/docs-new/api-3470124 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -223,6 +233,7 @@ def get_apikey_info(self, **kwargs: Any) -> GetApikeyInfoResp: """ summary: Get Apikey Info description: Get the information of the api key. Use the api key pending to be checked to call the endpoint. Both master and sub user's api key are applicable. + documentation: https://www.kucoin.com/docs-new/api-3470130 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+ @@ -240,6 +251,7 @@ def get_account_info(self, **kwargs: Any) -> GetAccountInfoResp: """ summary: Get Account Summary Info description: This endpoint can be used to obtain account summary information. + documentation: https://www.kucoin.com/docs-new/api-3470119 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+ @@ -258,6 +270,7 @@ def get_margin_hf_ledger(self, req: GetMarginHfLedgerReq, """ summary: Get Account Ledgers - Margin_hf description: This API endpoint returns all transfer (in and out) records in high-frequency margin trading account and supports multi-coin queries. The query results are sorted in descending order by createdAt and id. + documentation: https://www.kucoin.com/docs-new/api-3470123 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -277,6 +290,7 @@ def get_isolated_margin_account( """ summary: Get Account - Isolated Margin description: Request via this endpoint to get the info of the isolated margin account. + documentation: https://www.kucoin.com/docs-new/api-3470128 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -295,6 +309,7 @@ def get_cross_margin_account(self, req: GetCrossMarginAccountReq, """ summary: Get Account - Cross Margin description: Request via this endpoint to get the info of the cross margin account. + documentation: https://www.kucoin.com/docs-new/api-3470127 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ diff --git a/sdk/python/kucoin_universal_sdk/generate/account/deposit/api_deposit.py b/sdk/python/kucoin_universal_sdk/generate/account/deposit/api_deposit.py index f1c95285..e100ba1f 100644 --- a/sdk/python/kucoin_universal_sdk/generate/account/deposit/api_deposit.py +++ b/sdk/python/kucoin_universal_sdk/generate/account/deposit/api_deposit.py @@ -29,6 +29,7 @@ def get_deposit_address_v1(self, req: GetDepositAddressV1Req, """ summary: Get Deposit Addresses - V1 description: Get all deposit addresses for the currency you intend to deposit. If the returned data is empty, you may need to Add Deposit Address first. + documentation: https://www.kucoin.com/docs-new/api-3470305 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+ @@ -48,6 +49,7 @@ def add_deposit_address_v1(self, req: AddDepositAddressV1Req, """ summary: Add Deposit Address - V1 description: Request via this endpoint to create a deposit address for a currency you intend to deposit. + documentation: https://www.kucoin.com/docs-new/api-3470309 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+ @@ -66,6 +68,7 @@ def get_deposit_history(self, req: GetDepositHistoryReq, """ summary: Get Deposit History description: Request via this endpoint to get deposit list Items are paginated and sorted to show the latest first. See the Pagination section for retrieving additional entries after the first page. + documentation: https://www.kucoin.com/docs-new/api-3470141 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+ @@ -85,6 +88,7 @@ def get_deposit_history_old(self, req: GetDepositHistoryOldReq, """ summary: Get Deposit History - Old description: Request via this endpoint to get the V1 historical deposits list on KuCoin. The return value is the data after Pagination, sorted in descending order according to time. + documentation: https://www.kucoin.com/docs-new/api-3470306 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+ @@ -104,6 +108,7 @@ def get_deposit_address_v2(self, req: GetDepositAddressV2Req, """ summary: Get Deposit Addresses(V2) description: Get all deposit addresses for the currency you intend to deposit. If the returned data is empty, you may need to Add Deposit Address first. + documentation: https://www.kucoin.com/docs-new/api-3470300 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+ @@ -122,6 +127,7 @@ def add_deposit_address_v3(self, req: AddDepositAddressV3Req, """ summary: Add Deposit Address(V3) description: Request via this endpoint to create a deposit address for a currency you intend to deposit. + documentation: https://www.kucoin.com/docs-new/api-3470142 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+ @@ -140,6 +146,7 @@ def get_deposit_address_v3(self, req: GetDepositAddressV3Req, """ summary: Get Deposit Address(V3) description: Get all deposit addresses for the currency you intend to deposit. If the returned data is empty, you may need to Add Deposit Address first. + documentation: https://www.kucoin.com/docs-new/api-3470140 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+ diff --git a/sdk/python/kucoin_universal_sdk/generate/account/fee/api_fee.py b/sdk/python/kucoin_universal_sdk/generate/account/fee/api_fee.py index 03fc6934..dd7d7716 100644 --- a/sdk/python/kucoin_universal_sdk/generate/account/fee/api_fee.py +++ b/sdk/python/kucoin_universal_sdk/generate/account/fee/api_fee.py @@ -19,6 +19,7 @@ def get_basic_fee(self, req: GetBasicFeeReq, """ summary: Get Basic Fee - Spot/Margin description: This interface is for the spot/margin basic fee rate of users + documentation: https://www.kucoin.com/docs-new/api-3470149 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -37,6 +38,7 @@ def get_spot_actual_fee(self, req: GetSpotActualFeeReq, """ summary: Get Actual Fee - Spot/Margin description: This interface is for the actual fee rate of the trading pair. You can inquire about fee rates of 10 trading pairs each time at most. The fee rate of your sub-account is the same as that of the master account. + documentation: https://www.kucoin.com/docs-new/api-3470150 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -55,6 +57,7 @@ def get_futures_actual_fee(self, req: GetFuturesActualFeeReq, """ summary: Get Actual Fee - Futures description: This interface is for the actual futures fee rate of the trading pair. The fee rate of your sub-account is the same as that of the master account. + documentation: https://www.kucoin.com/docs-new/api-3470151 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ diff --git a/sdk/python/kucoin_universal_sdk/generate/account/subaccount/api_sub_account.py b/sdk/python/kucoin_universal_sdk/generate/account/subaccount/api_sub_account.py index eaed240c..c793b53b 100644 --- a/sdk/python/kucoin_universal_sdk/generate/account/subaccount/api_sub_account.py +++ b/sdk/python/kucoin_universal_sdk/generate/account/subaccount/api_sub_account.py @@ -39,6 +39,7 @@ def get_futures_sub_account_list_v2( """ summary: Get SubAccount List - Futures Balance(V2) description: This endpoint can be used to get Futures sub-account information. + documentation: https://www.kucoin.com/docs-new/api-3470134 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -58,6 +59,7 @@ def get_spot_sub_account_list_v1( """ summary: Get SubAccount List - Spot Balance(V1) description: This endpoint returns the account info of all sub-users. + documentation: https://www.kucoin.com/docs-new/api-3470299 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+ @@ -77,6 +79,7 @@ def get_spot_sub_account_detail( """ summary: Get SubAccount Detail - Balance description: This endpoint returns the account info of a sub-user specified by the subUserId. + documentation: https://www.kucoin.com/docs-new/api-3470132 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+ @@ -95,6 +98,7 @@ def delete_sub_account_api(self, req: DeleteSubAccountApiReq, """ summary: Delete SubAccount API description: This endpoint can be used to delete sub-account APIs. + documentation: https://www.kucoin.com/docs-new/api-3470137 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+ @@ -113,6 +117,7 @@ def get_sub_account_api_list(self, req: GetSubAccountApiListReq, """ summary: Get SubAccount API List description: This endpoint can be used to obtain a list of APIs pertaining to a sub-account.(Not contain ND Broker Sub Account) + documentation: https://www.kucoin.com/docs-new/api-3470136 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+ @@ -131,6 +136,7 @@ def add_sub_account_api(self, req: AddSubAccountApiReq, """ summary: Add SubAccount API description: This endpoint can be used to create APIs for sub-accounts. + documentation: https://www.kucoin.com/docs-new/api-3470138 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+ @@ -149,6 +155,7 @@ def modify_sub_account_api(self, req: ModifySubAccountApiReq, """ summary: Modify SubAccount API description: This endpoint can be used to modify sub-account APIs. + documentation: https://www.kucoin.com/docs-new/api-3470139 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+ @@ -168,6 +175,7 @@ def get_spot_sub_accounts_summary_v1( """ summary: Get SubAccount List - Summary Info(V1) description: You can get the user info of all sub-account via this interface It is recommended to use the GET /api/v2/sub/user interface for paging query + documentation: https://www.kucoin.com/docs-new/api-3470298 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+ @@ -187,6 +195,7 @@ def get_spot_sub_account_list_v2( """ summary: Get SubAccount List - Spot Balance(V2) description: This endpoint can be used to get paginated Spot sub-account information. Pagination is required. + documentation: https://www.kucoin.com/docs-new/api-3470133 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+ @@ -205,6 +214,7 @@ def add_sub_account(self, req: AddSubAccountReq, """ summary: Add SubAccount description: This endpoint can be used to create sub-accounts. + documentation: https://www.kucoin.com/docs-new/api-3470135 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+ @@ -224,6 +234,7 @@ def get_spot_sub_accounts_summary_v2( """ summary: Get SubAccount List - Summary Info description: This endpoint can be used to get a paginated list of sub-accounts. Pagination is required. + documentation: https://www.kucoin.com/docs-new/api-3470131 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+ @@ -243,6 +254,7 @@ def add_sub_account_futures_permission( """ summary: Add SubAccount Futures Permission description: This endpoint can be used to add sub-accounts Futures permission. Before using this endpoints, you need to ensure that the master account apikey has Futures permissions and the Futures function has been activated. + documentation: https://www.kucoin.com/docs-new/api-3470332 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+ @@ -262,6 +274,7 @@ def add_sub_account_margin_permission( """ summary: Add SubAccount Margin Permission description: This endpoint can be used to add sub-accounts Margin permission. Before using this endpoints, you need to ensure that the master account apikey has Margin permissions and the Margin function has been activated. + documentation: https://www.kucoin.com/docs-new/api-3470331 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+ diff --git a/sdk/python/kucoin_universal_sdk/generate/account/transfer/api_transfer.py b/sdk/python/kucoin_universal_sdk/generate/account/transfer/api_transfer.py index 5708e7fc..7a565349 100644 --- a/sdk/python/kucoin_universal_sdk/generate/account/transfer/api_transfer.py +++ b/sdk/python/kucoin_universal_sdk/generate/account/transfer/api_transfer.py @@ -28,6 +28,7 @@ def get_transfer_quotas(self, req: GetTransferQuotasReq, """ summary: Get Transfer Quotas description: This endpoint returns the transferable balance of a specified account. + documentation: https://www.kucoin.com/docs-new/api-3470148 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+ @@ -48,6 +49,7 @@ def futures_account_transfer_in( """ summary: Futures Account Transfer In description: The amount to be transferred will be deducted from the payAccount. Please ensure that you have sufficient funds in your payAccount Account, or the transfer will fail. + documentation: https://www.kucoin.com/docs-new/api-3470304 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+ @@ -68,6 +70,7 @@ def get_futures_account_transfer_out_ledger( """ summary: Get Futures Account Transfer Out Ledger description: This endpoint can get futures account transfer out ledger + documentation: https://www.kucoin.com/docs-new/api-3470307 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+ @@ -87,6 +90,7 @@ def inner_transfer(self, req: InnerTransferReq, """ summary: Inner Transfer description: This API endpoint can be used to transfer funds between accounts internally. Users can transfer funds between their account free of charge. + documentation: https://www.kucoin.com/docs-new/api-3470302 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+ @@ -106,6 +110,7 @@ def sub_account_transfer(self, req: SubAccountTransferReq, """ summary: SubAccount Transfer description: Funds in the main account, trading account and margin account of a Master Account can be transferred to the main account, trading account, futures account and margin account of its Sub-Account. The futures account of both the Master Account and Sub-Account can only accept funds transferred in from the main account, trading account and margin account and cannot transfer out to these accounts. + documentation: https://www.kucoin.com/docs-new/api-3470301 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+ @@ -124,6 +129,7 @@ def flex_transfer(self, req: FlexTransferReq, """ summary: Flex Transfer description: This interface can be used for transfers between master and sub accounts and inner transfers + documentation: https://www.kucoin.com/docs-new/api-3470147 +---------------------+---------------+ | Extra API Info | Value | +---------------------+---------------+ @@ -144,6 +150,7 @@ def futures_account_transfer_out( """ summary: Futures Account Transfer Out description: The amount to be transferred will be deducted from the KuCoin Futures Account. Please ensure that you have sufficient funds in your KuCoin Futures Account, or the transfer will fail. + documentation: https://www.kucoin.com/docs-new/api-3470303 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+ diff --git a/sdk/python/kucoin_universal_sdk/generate/account/withdrawal/api_withdrawal.py b/sdk/python/kucoin_universal_sdk/generate/account/withdrawal/api_withdrawal.py index 0658df1e..fd0f1e75 100644 --- a/sdk/python/kucoin_universal_sdk/generate/account/withdrawal/api_withdrawal.py +++ b/sdk/python/kucoin_universal_sdk/generate/account/withdrawal/api_withdrawal.py @@ -28,6 +28,7 @@ def get_withdrawal_history_old( """ summary: Get Withdrawal History - Old description: Request via this endpoint to get deposit list Items are paginated and sorted to show the latest first. See the Pagination section for retrieving additional entries after the first page. + documentation: https://www.kucoin.com/docs-new/api-3470308 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+ @@ -46,6 +47,7 @@ def get_withdrawal_history(self, req: GetWithdrawalHistoryReq, """ summary: Get Withdrawal History description: Request via this endpoint to get deposit list Items are paginated and sorted to show the latest first. See the Pagination section for retrieving additional entries after the first page. + documentation: https://www.kucoin.com/docs-new/api-3470145 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+ @@ -65,6 +67,7 @@ def withdrawal_v1(self, req: WithdrawalV1Req, """ summary: Withdraw - V1 description: Use this interface to withdraw the specified currency + documentation: https://www.kucoin.com/docs-new/api-3470310 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+ @@ -83,6 +86,7 @@ def get_withdrawal_quotas(self, req: GetWithdrawalQuotasReq, """ summary: Get Withdrawal Quotas description: This interface can obtain the withdrawal quotas information of this currency. + documentation: https://www.kucoin.com/docs-new/api-3470143 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+ @@ -101,6 +105,7 @@ def cancel_withdrawal(self, req: CancelWithdrawalReq, """ summary: Cancel Withdrawal description: This interface can cancel the withdrawal, Only withdrawals requests of PROCESSING status could be canceled. + documentation: https://www.kucoin.com/docs-new/api-3470144 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+ @@ -119,6 +124,7 @@ def withdrawal_v3(self, req: WithdrawalV3Req, """ summary: Withdraw(V3) description: Use this interface to withdraw the specified currency + documentation: https://www.kucoin.com/docs-new/api-3470146 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+ diff --git a/sdk/python/kucoin_universal_sdk/generate/affiliate/affiliate/api_affiliate.py b/sdk/python/kucoin_universal_sdk/generate/affiliate/affiliate/api_affiliate.py index 13c7fcc2..920bb4ba 100644 --- a/sdk/python/kucoin_universal_sdk/generate/affiliate/affiliate/api_affiliate.py +++ b/sdk/python/kucoin_universal_sdk/generate/affiliate/affiliate/api_affiliate.py @@ -13,6 +13,7 @@ def get_account(self, **kwargs: Any) -> GetAccountResp: """ summary: Get Account description: This endpoint allows getting affiliate user rebate information. + documentation: https://www.kucoin.com/docs-new/api-3470279 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+ diff --git a/sdk/python/kucoin_universal_sdk/generate/broker/apibroker/api_api_broker.py b/sdk/python/kucoin_universal_sdk/generate/broker/apibroker/api_api_broker.py index 96a85e4e..d30bfa5c 100644 --- a/sdk/python/kucoin_universal_sdk/generate/broker/apibroker/api_api_broker.py +++ b/sdk/python/kucoin_universal_sdk/generate/broker/apibroker/api_api_broker.py @@ -14,6 +14,7 @@ def get_rebase(self, req: GetRebaseReq, **kwargs: Any) -> GetRebaseResp: """ summary: Get Broker Rebate description: This interface supports downloading Broker rebate orders + documentation: https://www.kucoin.com/docs-new/api-3470280 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+ diff --git a/sdk/python/kucoin_universal_sdk/generate/broker/ndbroker/api_nd_broker.py b/sdk/python/kucoin_universal_sdk/generate/broker/ndbroker/api_nd_broker.py index 62643bd8..809ea8c3 100644 --- a/sdk/python/kucoin_universal_sdk/generate/broker/ndbroker/api_nd_broker.py +++ b/sdk/python/kucoin_universal_sdk/generate/broker/ndbroker/api_nd_broker.py @@ -39,6 +39,7 @@ def get_deposit_list(self, req: GetDepositListReq, """ summary: Get Deposit List description: This endpoint can obtain the deposit records of each sub-account under the ND Broker. + documentation: https://www.kucoin.com/docs-new/api-3470285 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -57,6 +58,7 @@ def delete_sub_account_api(self, req: DeleteSubAccountApiReq, """ summary: Delete SubAccount API description: This interface supports deleting Brokerโ€™s sub-account APIKEY + documentation: https://www.kucoin.com/docs-new/api-3470289 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -75,6 +77,7 @@ def get_sub_account_api(self, req: GetSubAccountApiReq, """ summary: Get SubAccount API description: This interface supports querying the Brokerโ€™s sub-account APIKEY + documentation: https://www.kucoin.com/docs-new/api-3470284 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -93,6 +96,7 @@ def add_sub_account_api(self, req: AddSubAccountApiReq, """ summary: Add SubAccount API description: This interface supports the creation of Broker sub-account APIKEY + documentation: https://www.kucoin.com/docs-new/api-3470291 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -111,6 +115,7 @@ def get_sub_account(self, req: GetSubAccountReq, """ summary: Get SubAccount description: This interface supports querying sub-accounts created by Broker + documentation: https://www.kucoin.com/docs-new/api-3470283 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -129,6 +134,7 @@ def add_sub_account(self, req: AddSubAccountReq, """ summary: Add SubAccount description: This endpoint supports Broker users to create sub-accounts + documentation: https://www.kucoin.com/docs-new/api-3470290 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -147,6 +153,7 @@ def modify_sub_account_api(self, req: ModifySubAccountApiReq, """ summary: Modify SubAccount API description: This interface supports modify the Brokerโ€™s sub-account APIKEY + documentation: https://www.kucoin.com/docs-new/api-3470292 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -165,6 +172,7 @@ def get_broker_info(self, req: GetBrokerInfoReq, """ summary: Get Broker Info description: This endpoint supports querying the basic information of the current Broker + documentation: https://www.kucoin.com/docs-new/api-3470282 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -182,6 +190,7 @@ def get_rebase(self, req: GetRebaseReq, **kwargs: Any) -> GetRebaseResp: """ summary: Get Broker Rebate description: This interface supports downloading Broker rebate orders + documentation: https://www.kucoin.com/docs-new/api-3470281 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -199,6 +208,7 @@ def transfer(self, req: TransferReq, **kwargs: Any) -> TransferResp: """ summary: Transfer description: This endpoint supports fund transfer between Broker account and Broker sub-accounts. Please be aware that withdrawal from sub-account is not directly supported. Broker has to transfer funds from broker sub-account to broker account to initiate the withdrawals. + documentation: https://www.kucoin.com/docs-new/api-3470293 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -217,6 +227,7 @@ def get_deposit_detail(self, req: GetDepositDetailReq, """ summary: Get Deposit Detail description: This endpoint supports querying the deposit record of sub-accounts created by a Broker (excluding main account of nd broker) + documentation: https://www.kucoin.com/docs-new/api-3470288 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -235,6 +246,7 @@ def get_transfer_history(self, req: GetTransferHistoryReq, """ summary: Get Transfer History description: This endpoint supports querying transfer records of the broker itself and its created sub-accounts. + documentation: https://www.kucoin.com/docs-new/api-3470286 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -253,6 +265,7 @@ def get_withdraw_detail(self, req: GetWithdrawDetailReq, """ summary: Get Withdraw Detail description: This endpoint supports querying the withdrawal records of sub-accounts created by a Broker (excluding main account of nd broker). + documentation: https://www.kucoin.com/docs-new/api-3470287 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ diff --git a/sdk/python/kucoin_universal_sdk/generate/earn/earn/api_earn.py b/sdk/python/kucoin_universal_sdk/generate/earn/earn/api_earn.py index 84e80b73..fbc8579e 100644 --- a/sdk/python/kucoin_universal_sdk/generate/earn/earn/api_earn.py +++ b/sdk/python/kucoin_universal_sdk/generate/earn/earn/api_earn.py @@ -31,6 +31,7 @@ def get_eth_staking_products(self, req: GetEthStakingProductsReq, """ summary: Get ETH Staking Products description: This endpoint can get available ETH staking products. If no products are available, an empty list is returned. + documentation: https://www.kucoin.com/docs-new/api-3470276 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -49,6 +50,7 @@ def get_account_holding(self, req: GetAccountHoldingReq, """ summary: Get Account Holding description: This endpoint can get current holding assets information. If no current holding assets are available, an empty list is returned. + documentation: https://www.kucoin.com/docs-new/api-3470273 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -67,6 +69,7 @@ def get_kcs_staking_products(self, req: GetKcsStakingProductsReq, """ summary: Get KCS Staking Products description: This endpoint can get available KCS staking products. If no products are available, an empty list is returned. + documentation: https://www.kucoin.com/docs-new/api-3470275 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -84,6 +87,7 @@ def redeem(self, req: RedeemReq, **kwargs: Any) -> RedeemResp: """ summary: Redeem description: This endpoint allows initiating redemption by holding ID. If the current holding is fully redeemed or in the process of being redeemed, it indicates that the holding does not exist. + documentation: https://www.kucoin.com/docs-new/api-3470270 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -101,6 +105,7 @@ def purchase(self, req: PurchaseReq, **kwargs: Any) -> PurchaseResp: """ summary: purchase description: This endpoint allows subscribing earn product + documentation: https://www.kucoin.com/docs-new/api-3470268 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -119,6 +124,7 @@ def get_promotion_products(self, req: GetPromotionProductsReq, """ summary: Get Promotion Products description: This endpoint can get available limited-time promotion products. If no products are available, an empty list is returned. + documentation: https://www.kucoin.com/docs-new/api-3470272 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -137,6 +143,7 @@ def get_redeem_preview(self, req: GetRedeemPreviewReq, """ summary: Get Redeem Preview description: This endpoint allows subscribing earn products + documentation: https://www.kucoin.com/docs-new/api-3470269 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -155,6 +162,7 @@ def get_savings_products(self, req: GetSavingsProductsReq, """ summary: Get Savings Products description: This endpoint can get available savings products. If no products are available, an empty list is returned. + documentation: https://www.kucoin.com/docs-new/api-3470271 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -173,6 +181,7 @@ def get_staking_products(self, req: GetStakingProductsReq, """ summary: Get Staking Products description: This endpoint can get available staking products. If no products are available, an empty list is returned. + documentation: https://www.kucoin.com/docs-new/api-3470274 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/fundingfees/api_funding_fees.py b/sdk/python/kucoin_universal_sdk/generate/futures/fundingfees/api_funding_fees.py index e94bbb10..d3f16126 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/fundingfees/api_funding_fees.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/fundingfees/api_funding_fees.py @@ -20,6 +20,7 @@ def get_public_funding_history( """ summary: Get Public Funding History description: Query the funding rate at each settlement time point within a certain time range of the corresponding contract + documentation: https://www.kucoin.com/docs-new/api-3470266 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -39,6 +40,7 @@ def get_private_funding_history( """ summary: Get Private Funding History description: Submit request to get the funding history. + documentation: https://www.kucoin.com/docs-new/api-3470267 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -57,6 +59,7 @@ def get_current_funding_rate(self, req: GetCurrentFundingRateReq, """ summary: Get Current Funding Rate description: get Current Funding Rate + documentation: https://www.kucoin.com/docs-new/api-3470265 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/market/api_market.py b/sdk/python/kucoin_universal_sdk/generate/futures/market/api_market.py index 457f922d..0862a934 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/market/api_market.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/market/api_market.py @@ -39,6 +39,7 @@ def get_all_tickers(self, **kwargs: Any) -> GetAllTickersResp: """ summary: Get All Tickers description: This endpoint returns \"last traded price/size\"ใ€\"best bid/ask price/size\" etc. of a single symbol. These messages can also be obtained through Websocket. + documentation: https://www.kucoin.com/docs-new/api-3470223 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -56,6 +57,7 @@ def get_private_token(self, **kwargs: Any) -> GetPrivateTokenResp: """ summary: Get Private Token - Futures description: This interface can obtain the token required for websocket to establish a Futures private connection. If you need use private channels(e.g. account balance notice), please make request as follows to obtain the server list and private token + documentation: https://www.kucoin.com/docs-new/api-3470296 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -73,6 +75,7 @@ def get_public_token(self, **kwargs: Any) -> GetPublicTokenResp: """ summary: Get Public Token - Futures description: This interface can obtain the token required for websocket to establish a Futures connection. If you need use public channels (e.g. all public market data), please make request as follows to obtain the server list and public token + documentation: https://www.kucoin.com/docs-new/api-3470297 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -90,6 +93,7 @@ def get_all_symbols(self, **kwargs: Any) -> GetAllSymbolsResp: """ summary: Get All Symbols description: Get detailed information of all contracts that can be traded. This API will return a list of tradable contracts, including some key parameters of the contract such as the symbol name, tick size, mark price,etc. + documentation: https://www.kucoin.com/docs-new/api-3470220 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -107,6 +111,7 @@ def get_symbol(self, req: GetSymbolReq, **kwargs: Any) -> GetSymbolResp: """ summary: Get Symbol description: Get information of specified contracts that can be traded. This API will return a list of tradable contracts, including some key parameters of the contract such as the symbol name, tick size, mark price,etc. + documentation: https://www.kucoin.com/docs-new/api-3470221 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -125,6 +130,7 @@ def get_spot_index_price(self, req: GetSpotIndexPriceReq, """ summary: Get Spot Index Price description: Get Spot Index Price + documentation: https://www.kucoin.com/docs-new/api-3470231 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -143,6 +149,7 @@ def get_interest_rate_index(self, req: GetInterestRateIndexReq, """ summary: Get Interest Rate Index description: Get interest rate Index. + documentation: https://www.kucoin.com/docs-new/api-3470226 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -160,6 +167,7 @@ def get_klines(self, req: GetKlinesReq, **kwargs: Any) -> GetKlinesResp: """ summary: Get Klines description: Get the Kline of the symbol. Data are returned in grouped buckets based on requested type. For each query, the system would return at most 500 pieces of data. To obtain more data, please page the data by time. + documentation: https://www.kucoin.com/docs-new/api-3470234 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -178,6 +186,7 @@ def get_part_order_book(self, req: GetPartOrderBookReq, """ summary: Get Part OrderBook description: Query for part orderbook depth data. (aggregated by price) You are recommended to request via this endpoint as the system reponse would be faster and cosume less traffic. + documentation: https://www.kucoin.com/docs-new/api-3470225 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -196,6 +205,7 @@ def get_full_order_book(self, req: GetFullOrderBookReq, """ summary: Get Full OrderBook description: Query for Full orderbook depth data. (aggregated by price) It is generally used by professional traders because it uses more server resources and traffic, and we have strict access rate limit control. To maintain up-to-date Order Book, please use Websocket incremental feed after retrieving the OrderBook. + documentation: https://www.kucoin.com/docs-new/api-3470224 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -214,6 +224,7 @@ def get_mark_price(self, req: GetMarkPriceReq, """ summary: Get Mark Price description: Get current mark price + documentation: https://www.kucoin.com/docs-new/api-3470233 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -232,6 +243,7 @@ def get_premium_index(self, req: GetPremiumIndexReq, """ summary: Get Premium Index description: Submit request to get premium index. + documentation: https://www.kucoin.com/docs-new/api-3470227 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -249,6 +261,7 @@ def get_service_status(self, **kwargs: Any) -> GetServiceStatusResp: """ summary: Get Service Status description: Get the service status. + documentation: https://www.kucoin.com/docs-new/api-3470230 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -266,6 +279,7 @@ def get_ticker(self, req: GetTickerReq, **kwargs: Any) -> GetTickerResp: """ summary: Get Ticker description: This endpoint returns \"last traded price/size\"ใ€\"best bid/ask price/size\" etc. of a single symbol. These messages can also be obtained through Websocket. + documentation: https://www.kucoin.com/docs-new/api-3470222 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -283,6 +297,7 @@ def get_server_time(self, **kwargs: Any) -> GetServerTimeResp: """ summary: Get Server Time description: Get the API server time. This is the Unix timestamp. + documentation: https://www.kucoin.com/docs-new/api-3470229 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -301,6 +316,7 @@ def get_trade_history(self, req: GetTradeHistoryReq, """ summary: Get Trade History description: Request via this endpoint to get the trade history of the specified symbol, the returned quantity is the last 100 transaction records. + documentation: https://www.kucoin.com/docs-new/api-3470232 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -318,6 +334,7 @@ def get24hr_stats(self, **kwargs: Any) -> Get24hrStatsResp: """ summary: Get 24hr Stats description: Get the statistics of the platform futures trading volume in the last 24 hours. + documentation: https://www.kucoin.com/docs-new/api-3470228 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/order/api_order.py b/sdk/python/kucoin_universal_sdk/generate/futures/order/api_order.py index 70985eb4..ecf2acc2 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/order/api_order.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/order/api_order.py @@ -50,6 +50,7 @@ def get_trade_history(self, req: GetTradeHistoryReq, """ summary: Get Trade History description: Get a list of recent fills. If you need to get your recent trade history with low latency, please query endpoint Get List of Orders Completed in 24h. The requested data is not real-time. + documentation: https://www.kucoin.com/docs-new/api-3470248 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -68,6 +69,7 @@ def get_open_order_value(self, req: GetOpenOrderValueReq, """ summary: Get Open Order Value description: You can query this endpoint to get the the total number and value of the all your active orders. + documentation: https://www.kucoin.com/docs-new/api-3470250 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -86,6 +88,7 @@ def get_order_by_client_oid(self, req: GetOrderByClientOidReq, """ summary: Get Order By ClientOid description: Get a single order by client order id (including a stop order). + documentation: https://www.kucoin.com/docs-new/api-3470352 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -105,6 +108,7 @@ def cancel_order_by_client_oid( """ summary: Cancel Order By ClientOid description: Cancel order by client defined orderId. + documentation: https://www.kucoin.com/docs-new/api-3470240 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -124,6 +128,7 @@ def cancel_all_orders_v1(self, req: CancelAllOrdersV1Req, """ summary: Cancel All Orders - V1 description: Cancel all open orders (excluding stop orders). The response is a list of orderIDs of the canceled orders. + documentation: https://www.kucoin.com/docs-new/api-3470362 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -142,6 +147,7 @@ def get_order_list(self, req: GetOrderListReq, """ summary: Get Order List description: List your current orders. + documentation: https://www.kucoin.com/docs-new/api-3470244 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -160,6 +166,7 @@ def batch_cancel_orders(self, req: BatchCancelOrdersReq, """ summary: Batch Cancel Orders description: Cancel a bach of orders by client defined orderId or system generated orderId + documentation: https://www.kucoin.com/docs-new/api-3470241 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -178,6 +185,7 @@ def batch_add_orders(self, req: BatchAddOrdersReq, """ summary: Batch Add Orders description: Place multiple order to the futures trading system, you can place two major types of orders: limit and market. Orders can only be placed if your account has sufficient funds. Once an order is placed, your funds will be put on hold for the duration of the order. The amount of funds on hold depends on the order type and parameters specified. You can place up to 20 orders at one time, including limit orders, market orders, and stop orders Please be noted that the system would hold the fees from the orders entered the orderbook in advance. + documentation: https://www.kucoin.com/docs-new/api-3470236 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -196,6 +204,7 @@ def cancel_order_by_id(self, req: CancelOrderByIdReq, """ summary: Cancel Order By OrderId description: Cancel order by system generated orderId. + documentation: https://www.kucoin.com/docs-new/api-3470239 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -214,6 +223,7 @@ def get_order_by_order_id(self, req: GetOrderByOrderIdReq, """ summary: Get Order By OrderId description: Get a single order by order id (including a stop order). + documentation: https://www.kucoin.com/docs-new/api-3470245 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -231,6 +241,7 @@ def add_order(self, req: AddOrderReq, **kwargs: Any) -> AddOrderResp: """ summary: Add Order description: Place order to the futures trading system, you can place two major types of orders: limit and market. Orders can only be placed if your account has sufficient funds. Once an order is placed, your funds will be put on hold for the duration of the order. The amount of funds on hold depends on the order type and parameters specified. + documentation: https://www.kucoin.com/docs-new/api-3470235 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -249,6 +260,7 @@ def add_order_test(self, req: AddOrderTestReq, """ summary: Add Order Test description: Place order to the futures trading system just for validation + documentation: https://www.kucoin.com/docs-new/api-3470238 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -267,6 +279,7 @@ def get_recent_closed_orders(self, req: GetRecentClosedOrdersReq, """ summary: Get Recent Closed Orders description: Get a list of recent 1000 closed orders in the last 24 hours. If you need to get your recent traded order history with low latency, you may query this endpoint. + documentation: https://www.kucoin.com/docs-new/api-3470246 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -285,6 +298,7 @@ def get_recent_trade_history(self, req: GetRecentTradeHistoryReq, """ summary: Get Recent Trade History description: Get a list of recent 1000 fills in the last 24 hours. If you need to get your recent traded order history with low latency, you may query this endpoint. + documentation: https://www.kucoin.com/docs-new/api-3470249 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -303,6 +317,7 @@ def add_tpsl_order(self, req: AddTpslOrderReq, """ summary: Add Take Profit And Stop Loss Order description: Place take profit and stop loss order supports both take-profit and stop-loss functions, and other functions are exactly the same as the place order interface. + documentation: https://www.kucoin.com/docs-new/api-3470237 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -321,6 +336,7 @@ def cancel_all_stop_orders(self, req: CancelAllStopOrdersReq, """ summary: Cancel All Stop orders description: Cancel all untriggered stop orders. The response is a list of orderIDs of the canceled stop orders. To cancel triggered stop orders, please use 'Cancel Multiple Futures Limit orders'. + documentation: https://www.kucoin.com/docs-new/api-3470243 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -339,6 +355,7 @@ def get_stop_order_list(self, req: GetStopOrderListReq, """ summary: Get Stop Order List description: Get the un-triggered stop orders list. Stop orders that have been triggered can be queried through the general order interface + documentation: https://www.kucoin.com/docs-new/api-3470247 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -357,6 +374,7 @@ def cancel_all_orders_v3(self, req: CancelAllOrdersV3Req, """ summary: Cancel All Orders description: Cancel all open orders (excluding stop orders). The response is a list of orderIDs of the canceled orders. + documentation: https://www.kucoin.com/docs-new/api-3470242 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ diff --git a/sdk/python/kucoin_universal_sdk/generate/futures/positions/api_positions.py b/sdk/python/kucoin_universal_sdk/generate/futures/positions/api_positions.py index 369eed54..18883c74 100644 --- a/sdk/python/kucoin_universal_sdk/generate/futures/positions/api_positions.py +++ b/sdk/python/kucoin_universal_sdk/generate/futures/positions/api_positions.py @@ -43,6 +43,7 @@ def get_isolated_margin_risk_limit( """ summary: Get Isolated Margin Risk Limit description: This interface can be used to obtain information about risk limit level of a specific contract(Only valid for isolated Margin). + documentation: https://www.kucoin.com/docs-new/api-3470263 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -61,6 +62,7 @@ def get_positions_history(self, req: GetPositionsHistoryReq, """ summary: Get Positions History description: This interface can query position history information records. + documentation: https://www.kucoin.com/docs-new/api-3470254 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -79,6 +81,7 @@ def get_max_withdraw_margin(self, req: GetMaxWithdrawMarginReq, """ summary: Get Max Withdraw Margin description: This interface can query the maximum amount of margin that the current position supports withdrawal. + documentation: https://www.kucoin.com/docs-new/api-3470258 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -97,6 +100,7 @@ def remove_isolated_margin(self, req: RemoveIsolatedMarginReq, """ summary: Remove Isolated Margin description: Remove Isolated Margin Manually. + documentation: https://www.kucoin.com/docs-new/api-3470256 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -115,6 +119,7 @@ def get_position_details(self, req: GetPositionDetailsReq, """ summary: Get Position Details description: Get the position details of a specified position. + documentation: https://www.kucoin.com/docs-new/api-3470252 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -135,6 +140,7 @@ def modify_auto_deposit_status( """ summary: Modify Isolated Margin Auto-Deposit Status description: This endpoint is only applicable to isolated margin and is no longer recommended. It is recommended to use cross margin instead. + documentation: https://www.kucoin.com/docs-new/api-3470255 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -153,6 +159,7 @@ def add_isolated_margin(self, req: AddIsolatedMarginReq, """ summary: Add Isolated Margin description: Add Isolated Margin Manually. + documentation: https://www.kucoin.com/docs-new/api-3470257 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -172,6 +179,7 @@ def modify_isolated_margin_risk_limt( """ summary: Modify Isolated Margin Risk Limit description: This interface can be used to obtain information about risk limit level of a specific contract(Only valid for isolated Margin). + documentation: https://www.kucoin.com/docs-new/api-3470264 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -190,6 +198,7 @@ def get_position_list(self, req: GetPositionListReq, """ summary: Get Position List description: Get the position details of a specified position. + documentation: https://www.kucoin.com/docs-new/api-3470253 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -208,6 +217,7 @@ def modify_margin_leverage(self, req: ModifyMarginLeverageReq, """ summary: Modify Cross Margin Leverage description: This interface can modify the current symbolโ€™s cross-margin leverage multiple. + documentation: https://www.kucoin.com/docs-new/api-3470261 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -226,6 +236,7 @@ def get_cross_margin_leverage(self, req: GetCrossMarginLeverageReq, """ summary: Get Cross Margin Leverage description: This interface can query the current symbolโ€™s cross-margin leverage multiple. + documentation: https://www.kucoin.com/docs-new/api-3470260 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -244,6 +255,7 @@ def get_max_open_size(self, req: GetMaxOpenSizeReq, """ summary: Get Max Open Size description: Get Maximum Open Position Size. + documentation: https://www.kucoin.com/docs-new/api-3470251 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -262,6 +274,7 @@ def switch_margin_mode(self, req: SwitchMarginModeReq, """ summary: Switch Margin Mode description: This interface can modify the margin mode of the current symbol. + documentation: https://www.kucoin.com/docs-new/api-3470262 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -280,6 +293,7 @@ def get_margin_mode(self, req: GetMarginModeReq, """ summary: Get Margin Mode description: This interface can query the margin mode of the current symbol. + documentation: https://www.kucoin.com/docs-new/api-3470259 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ diff --git a/sdk/python/kucoin_universal_sdk/generate/margin/credit/api_credit.py b/sdk/python/kucoin_universal_sdk/generate/margin/credit/api_credit.py index 9ffb66b9..203878d4 100644 --- a/sdk/python/kucoin_universal_sdk/generate/margin/credit/api_credit.py +++ b/sdk/python/kucoin_universal_sdk/generate/margin/credit/api_credit.py @@ -27,6 +27,7 @@ def modify_purchase(self, req: ModifyPurchaseReq, """ summary: Modify Purchase description: This API endpoint is used to update the interest rates of subscription orders, which will take effect at the beginning of the next hour.,Please ensure that the funds are in the main(funding) account + documentation: https://www.kucoin.com/docs-new/api-3470217 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -45,6 +46,7 @@ def get_loan_market(self, req: GetLoanMarketReq, """ summary: Get Loan Market description: This API endpoint is used to get the information about the currencies available for lending. + documentation: https://www.kucoin.com/docs-new/api-3470212 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -64,6 +66,7 @@ def get_loan_market_interest_rate( """ summary: Get Loan Market Interest Rate description: This API endpoint is used to get the interest rates of the margin lending market over the past 7 days. + documentation: https://www.kucoin.com/docs-new/api-3470215 +---------------------+--------+ | Extra API Info | Value | +---------------------+--------+ @@ -82,6 +85,7 @@ def get_purchase_orders(self, req: GetPurchaseOrdersReq, """ summary: Get Purchase Orders description: This API endpoint provides pagination query for the purchase orders. + documentation: https://www.kucoin.com/docs-new/api-3470213 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -99,6 +103,7 @@ def purchase(self, req: PurchaseReq, **kwargs: Any) -> PurchaseResp: """ summary: Purchase description: Invest credit in the market and earn interest + documentation: https://www.kucoin.com/docs-new/api-3470216 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -117,6 +122,7 @@ def get_redeem_orders(self, req: GetRedeemOrdersReq, """ summary: Get Redeem Orders description: This API endpoint provides pagination query for the redeem orders. + documentation: https://www.kucoin.com/docs-new/api-3470214 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -134,6 +140,7 @@ def redeem(self, req: RedeemReq, **kwargs: Any) -> RedeemResp: """ summary: Redeem description: Redeem your loan order + documentation: https://www.kucoin.com/docs-new/api-3470218 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ diff --git a/sdk/python/kucoin_universal_sdk/generate/margin/debit/api_debit.py b/sdk/python/kucoin_universal_sdk/generate/margin/debit/api_debit.py index fe9b690b..3c3ba7d4 100644 --- a/sdk/python/kucoin_universal_sdk/generate/margin/debit/api_debit.py +++ b/sdk/python/kucoin_universal_sdk/generate/margin/debit/api_debit.py @@ -25,6 +25,7 @@ def get_borrow_history(self, req: GetBorrowHistoryReq, """ summary: Get Borrow History description: This API endpoint is used to get the borrowing orders for cross and isolated margin accounts + documentation: https://www.kucoin.com/docs-new/api-3470207 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -42,6 +43,7 @@ def borrow(self, req: BorrowReq, **kwargs: Any) -> BorrowResp: """ summary: Borrow description: This API endpoint is used to initiate an application for cross or isolated margin borrowing. + documentation: https://www.kucoin.com/docs-new/api-3470206 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -60,6 +62,7 @@ def get_interest_history(self, req: GetInterestHistoryReq, """ summary: Get Interest History description: Request via this endpoint to get the interest records of the cross/isolated margin lending. + documentation: https://www.kucoin.com/docs-new/api-3470209 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -78,6 +81,7 @@ def get_repay_history(self, req: GetRepayHistoryReq, """ summary: Get Repay History description: This API endpoint is used to get the borrowing orders for cross and isolated margin accounts + documentation: https://www.kucoin.com/docs-new/api-3470208 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -95,6 +99,7 @@ def repay(self, req: RepayReq, **kwargs: Any) -> RepayResp: """ summary: Repay description: This API endpoint is used to initiate an application for cross or isolated margin repayment. + documentation: https://www.kucoin.com/docs-new/api-3470210 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -113,6 +118,7 @@ def modify_leverage(self, req: ModifyLeverageReq, """ summary: Modify Leverage description: This endpoint allows modifying the leverage multiplier for cross margin or isolated margin. + documentation: https://www.kucoin.com/docs-new/api-3470211 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ diff --git a/sdk/python/kucoin_universal_sdk/generate/margin/market/api_market.py b/sdk/python/kucoin_universal_sdk/generate/margin/market/api_market.py index c00665d4..8720352e 100644 --- a/sdk/python/kucoin_universal_sdk/generate/margin/market/api_market.py +++ b/sdk/python/kucoin_universal_sdk/generate/margin/market/api_market.py @@ -22,6 +22,7 @@ def get_isolated_margin_symbols( """ summary: Get Symbols - Isolated Margin description: This endpoint allows querying the configuration of isolated margin symbol. + documentation: https://www.kucoin.com/docs-new/api-3470194 +---------------------+--------+ | Extra API Info | Value | +---------------------+--------+ @@ -39,6 +40,7 @@ def get_margin_config(self, **kwargs: Any) -> GetMarginConfigResp: """ summary: Get Margin Config description: Request via this endpoint to get the configure info of the cross margin. + documentation: https://www.kucoin.com/docs-new/api-3470190 +---------------------+--------+ | Extra API Info | Value | +---------------------+--------+ @@ -57,6 +59,7 @@ def get_mark_price_detail(self, req: GetMarkPriceDetailReq, """ summary: Get Mark Price Detail description: This endpoint returns the current Mark price for specified margin trading pairs. + documentation: https://www.kucoin.com/docs-new/api-3470193 +---------------------+--------+ | Extra API Info | Value | +---------------------+--------+ @@ -75,6 +78,7 @@ def get_etf_info(self, req: GetEtfInfoReq, """ summary: Get ETF Info description: This interface returns leveraged token information + documentation: https://www.kucoin.com/docs-new/api-3470191 +---------------------+--------+ | Extra API Info | Value | +---------------------+--------+ @@ -93,6 +97,7 @@ def get_cross_margin_symbols(self, req: GetCrossMarginSymbolsReq, """ summary: Get Symbols - Cross Margin description: This endpoint allows querying the configuration of cross margin symbol. + documentation: https://www.kucoin.com/docs-new/api-3470189 +---------------------+--------+ | Extra API Info | Value | +---------------------+--------+ @@ -110,6 +115,7 @@ def get_mark_price_list(self, **kwargs: Any) -> GetMarkPriceListResp: """ summary: Get Mark Price List description: This endpoint returns the current Mark price for all margin trading pairs. + documentation: https://www.kucoin.com/docs-new/api-3470192 +---------------------+--------+ | Extra API Info | Value | +---------------------+--------+ diff --git a/sdk/python/kucoin_universal_sdk/generate/margin/order/api_order.py b/sdk/python/kucoin_universal_sdk/generate/margin/order/api_order.py index 6edb3daf..9a46736f 100644 --- a/sdk/python/kucoin_universal_sdk/generate/margin/order/api_order.py +++ b/sdk/python/kucoin_universal_sdk/generate/margin/order/api_order.py @@ -41,6 +41,7 @@ def add_order_v1(self, req: AddOrderV1Req, """ summary: Add Order - V1 description: Place order to the Cross-margin or Isolated-margin trading system, you can place two major types of orders: limit and market. Orders can only be placed if your account has sufficient funds. Once an order is placed, your funds will be put on hold for the duration of the order. The amount of funds on hold depends on the order type and parameters specified. + documentation: https://www.kucoin.com/docs-new/api-3470312 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -60,6 +61,7 @@ def add_order_test_v1(self, req: AddOrderTestV1Req, """ summary: Add Order Test - V1 description: Order test endpoint, the request parameters and return parameters of this endpoint are exactly the same as the order endpoint, and can be used to verify whether the signature is correct and other operations. After placing an order, the order will not enter the matching system, and the order cannot be queried. + documentation: https://www.kucoin.com/docs-new/api-3470313 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -78,6 +80,7 @@ def get_trade_history(self, req: GetTradeHistoryReq, """ summary: Get Trade History description: This endpoint can be used to obtain a list of the latest Margin transaction details. The returned data is sorted in descending order according to the latest update time of the order. + documentation: https://www.kucoin.com/docs-new/api-3470200 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -97,6 +100,7 @@ def get_symbols_with_open_order( """ summary: Get Symbols With Open Order description: This interface can query all Margin symbol that has active orders + documentation: https://www.kucoin.com/docs-new/api-3470196 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -114,6 +118,7 @@ def add_order(self, req: AddOrderReq, **kwargs: Any) -> AddOrderResp: """ summary: Add Order description: Place order to the Cross-margin or Isolated-margin trading system, you can place two major types of orders: limit and market. Orders can only be placed if your account has sufficient funds. Once an order is placed, your funds will be put on hold for the duration of the order. The amount of funds on hold depends on the order type and parameters specified. + documentation: https://www.kucoin.com/docs-new/api-3470204 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -132,6 +137,7 @@ def add_order_test(self, req: AddOrderTestReq, """ summary: Add Order Test description: Order test endpoint, the request parameters and return parameters of this endpoint are exactly the same as the order endpoint, and can be used to verify whether the signature is correct and other operations. After placing an order, the order will not enter the matching system, and the order cannot be queried. + documentation: https://www.kucoin.com/docs-new/api-3470205 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -150,6 +156,7 @@ def get_open_orders(self, req: GetOpenOrdersReq, """ summary: Get Open Orders description: This interface is to obtain all Margin active order lists, and the return value of the active order interface is the paged data of all uncompleted order lists. The returned data is sorted in descending order according to the latest update time of the order. After the user successfully places an order, the order is in Active state, and the user can use inOrderBook to determine whether the order has entered the order. Canceled or fully filled orders are marked as completed Done status. + documentation: https://www.kucoin.com/docs-new/api-3470198 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -169,6 +176,7 @@ def cancel_order_by_client_oid( """ summary: Cancel Order By ClientOid description: This endpoint can be used to cancel a margin order by clientOid. This endpoint only sends cancellation requests. The results of the requests must be obtained by checking the order status or subscribing to websocket. + documentation: https://www.kucoin.com/docs-new/api-3470201 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -187,6 +195,7 @@ def get_order_by_client_oid(self, req: GetOrderByClientOidReq, """ summary: Get Order By ClientOid description: This endpoint can be used to obtain information for a single Margin order using the client order id. After the user successfully places an order, the order is in Active state, and the user can use inOrderBook to determine whether the order has entered the order. Canceled or fully filled orders are marked as completed Done status. + documentation: https://www.kucoin.com/docs-new/api-3470203 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -206,6 +215,7 @@ def cancel_all_orders_by_symbol( """ summary: Cancel All Orders By Symbol description: This interface can cancel all open Margin orders by symbol This endpoint only sends cancellation requests. The results of the requests must be obtained by checking the order status or subscribing to websocket. + documentation: https://www.kucoin.com/docs-new/api-3470197 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -224,6 +234,7 @@ def get_closed_orders(self, req: GetClosedOrdersReq, """ summary: Get Closed Orders description: This interface is to obtain all Margin closed order lists, and the return value of the active order interface is the paged data of all uncompleted order lists. The returned data is sorted in descending order according to the latest update time of the order. After the user successfully places an order, the order is in Active state, and the user can use inOrderBook to determine whether the order has entered the order. Canceled or fully filled orders are marked as completed Done status. + documentation: https://www.kucoin.com/docs-new/api-3470199 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -242,6 +253,7 @@ def cancel_order_by_order_id(self, req: CancelOrderByOrderIdReq, """ summary: Cancel Order By OrderId description: This endpoint can be used to cancel a margin order by orderId. This endpoint only sends cancellation requests. The results of the requests must be obtained by checking the order status or subscribing to websocket. + documentation: https://www.kucoin.com/docs-new/api-3470195 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -260,6 +272,7 @@ def get_order_by_order_id(self, req: GetOrderByOrderIdReq, """ summary: Get Order By OrderId description: This endpoint can be used to obtain information for a single Margin order using the order id. After the user successfully places an order, the order is in Active state, and the user can use inOrderBook to determine whether the order has entered the order. Canceled or fully filled orders are marked as completed Done status. + documentation: https://www.kucoin.com/docs-new/api-3470202 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ diff --git a/sdk/python/kucoin_universal_sdk/generate/margin/risklimit/api_risk_limit.py b/sdk/python/kucoin_universal_sdk/generate/margin/risklimit/api_risk_limit.py index f5787707..a59466b1 100644 --- a/sdk/python/kucoin_universal_sdk/generate/margin/risklimit/api_risk_limit.py +++ b/sdk/python/kucoin_universal_sdk/generate/margin/risklimit/api_risk_limit.py @@ -15,6 +15,7 @@ def get_margin_risk_limit(self, req: GetMarginRiskLimitReq, """ summary: Get Margin Risk Limit description: Request via this endpoint to get the Configure and Risk limit info of the margin. + documentation: https://www.kucoin.com/docs-new/api-3470219 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ diff --git a/sdk/python/kucoin_universal_sdk/generate/spot/market/api_market.py b/sdk/python/kucoin_universal_sdk/generate/spot/market/api_market.py index 8ee6fc2b..10b188f1 100644 --- a/sdk/python/kucoin_universal_sdk/generate/spot/market/api_market.py +++ b/sdk/python/kucoin_universal_sdk/generate/spot/market/api_market.py @@ -41,6 +41,7 @@ def get_private_token(self, **kwargs: Any) -> GetPrivateTokenResp: """ summary: Get Private Token - Spot/Margin description: This interface can obtain the token required for websocket to establish a Spot/Margin private connection. If you need use private channels(e.g. account balance notice), please make request as follows to obtain the server list and private token + documentation: https://www.kucoin.com/docs-new/api-3470295 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -58,6 +59,7 @@ def get_public_token(self, **kwargs: Any) -> GetPublicTokenResp: """ summary: Get Public Token - Spot/Margin description: This interface can obtain the token required for websocket to establish a Spot/Margin connection. If you need use public channels (e.g. all public market data), please make request as follows to obtain the server list and public token + documentation: https://www.kucoin.com/docs-new/api-3470294 +---------------------+--------+ | Extra API Info | Value | +---------------------+--------+ @@ -75,6 +77,7 @@ def get_all_tickers(self, **kwargs: Any) -> GetAllTickersResp: """ summary: Get All Tickers description: Request market tickers for all the trading pairs in the market (including 24h volume), takes a snapshot every 2 seconds. On the rare occasion that we will change the currency name, if you still want the changed symbol name, you can use the symbolName field instead of the symbol field via โ€œGet all tickersโ€ endpoint. + documentation: https://www.kucoin.com/docs-new/api-3470167 +---------------------+--------+ | Extra API Info | Value | +---------------------+--------+ @@ -92,6 +95,7 @@ def get_klines(self, req: GetKlinesReq, **kwargs: Any) -> GetKlinesResp: """ summary: Get Klines description: Get the Kline of the symbol. Data are returned in grouped buckets based on requested type. For each query, the system would return at most 1500 pieces of data. To obtain more data, please page the data by time. + documentation: https://www.kucoin.com/docs-new/api-3470163 +---------------------+--------+ | Extra API Info | Value | +---------------------+--------+ @@ -110,6 +114,7 @@ def get_trade_history(self, req: GetTradeHistoryReq, """ summary: Get Trade History description: Request via this endpoint to get the trade history of the specified symbol, the returned quantity is the last 100 transaction records. + documentation: https://www.kucoin.com/docs-new/api-3470162 +---------------------+--------+ | Extra API Info | Value | +---------------------+--------+ @@ -127,6 +132,7 @@ def get_ticker(self, req: GetTickerReq, **kwargs: Any) -> GetTickerResp: """ summary: Get Ticker description: Request via this endpoint to get Level 1 Market Data. The returned value includes the best bid price and size, the best ask price and size as well as the last traded price and the last traded size. + documentation: https://www.kucoin.com/docs-new/api-3470160 +---------------------+--------+ | Extra API Info | Value | +---------------------+--------+ @@ -145,6 +151,7 @@ def get_part_order_book(self, req: GetPartOrderBookReq, """ summary: Get Part OrderBook description: Query for part orderbook depth data. (aggregated by price) You are recommended to request via this endpoint as the system reponse would be faster and cosume less traffic. + documentation: https://www.kucoin.com/docs-new/api-3470165 +---------------------+--------+ | Extra API Info | Value | +---------------------+--------+ @@ -163,6 +170,7 @@ def get24hr_stats(self, req: Get24hrStatsReq, """ summary: Get 24hr Stats description: Request via this endpoint to get the statistics of the specified ticker in the last 24 hours. + documentation: https://www.kucoin.com/docs-new/api-3470161 +---------------------+--------+ | Extra API Info | Value | +---------------------+--------+ @@ -180,6 +188,7 @@ def get_market_list(self, **kwargs: Any) -> GetMarketListResp: """ summary: Get Market List description: Request via this endpoint to get the transaction currency for the entire trading market. + documentation: https://www.kucoin.com/docs-new/api-3470166 +---------------------+--------+ | Extra API Info | Value | +---------------------+--------+ @@ -198,6 +207,7 @@ def get_fiat_price(self, req: GetFiatPriceReq, """ summary: Get Fiat Price description: Request via this endpoint to get the fiat price of the currencies for the available trading pairs. + documentation: https://www.kucoin.com/docs-new/api-3470153 +---------------------+--------+ | Extra API Info | Value | +---------------------+--------+ @@ -215,6 +225,7 @@ def get_service_status(self, **kwargs: Any) -> GetServiceStatusResp: """ summary: Get Service Status description: Get the service status + documentation: https://www.kucoin.com/docs-new/api-3470158 +---------------------+--------+ | Extra API Info | Value | +---------------------+--------+ @@ -232,6 +243,7 @@ def get_server_time(self, **kwargs: Any) -> GetServerTimeResp: """ summary: Get Server Time description: Get the server time. + documentation: https://www.kucoin.com/docs-new/api-3470156 +---------------------+--------+ | Extra API Info | Value | +---------------------+--------+ @@ -250,6 +262,7 @@ def get_all_symbols(self, req: GetAllSymbolsReq, """ summary: Get All Symbols description: Request via this endpoint to get a list of available currency pairs for trading. If you want to get the market information of the trading symbol, please use Get All Tickers. + documentation: https://www.kucoin.com/docs-new/api-3470154 +---------------------+--------+ | Extra API Info | Value | +---------------------+--------+ @@ -267,6 +280,7 @@ def get_symbol(self, req: GetSymbolReq, **kwargs: Any) -> GetSymbolResp: """ summary: Get Symbol description: Request via this endpoint to get detail currency pairs for trading. If you want to get the market information of the trading symbol, please use Get All Tickers. + documentation: https://www.kucoin.com/docs-new/api-3470159 +---------------------+--------+ | Extra API Info | Value | +---------------------+--------+ @@ -285,6 +299,7 @@ def get_announcements(self, req: GetAnnouncementsReq, """ summary: Get Announcements description: This interface can obtain the latest news announcements, and the default page search is for announcements within a month. + documentation: https://www.kucoin.com/docs-new/api-3470157 +---------------------+--------+ | Extra API Info | Value | +---------------------+--------+ @@ -303,6 +318,7 @@ def get_currency(self, req: GetCurrencyReq, """ summary: Get Currency description: Request via this endpoint to get the currency details of a specified currency + documentation: https://www.kucoin.com/docs-new/api-3470155 +---------------------+--------+ | Extra API Info | Value | +---------------------+--------+ @@ -320,6 +336,7 @@ def get_all_currencies(self, **kwargs: Any) -> GetAllCurrenciesResp: """ summary: Get All Currencies description: Request via this endpoint to get the currency list.Not all currencies currently can be used for trading. + documentation: https://www.kucoin.com/docs-new/api-3470152 +---------------------+--------+ | Extra API Info | Value | +---------------------+--------+ @@ -338,6 +355,7 @@ def get_full_order_book(self, req: GetFullOrderBookReq, """ summary: Get Full OrderBook description: Query for Full orderbook depth data. (aggregated by price) It is generally used by professional traders because it uses more server resources and traffic, and we have strict access rate limit control. To maintain up-to-date Order Book, please use Websocket incremental feed after retrieving the OrderBook. + documentation: https://www.kucoin.com/docs-new/api-3470164 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ diff --git a/sdk/python/kucoin_universal_sdk/generate/spot/order/api_order.py b/sdk/python/kucoin_universal_sdk/generate/spot/order/api_order.py index 9c73db64..8f52688a 100644 --- a/sdk/python/kucoin_universal_sdk/generate/spot/order/api_order.py +++ b/sdk/python/kucoin_universal_sdk/generate/spot/order/api_order.py @@ -108,6 +108,7 @@ def get_trade_history_old(self, req: GetTradeHistoryOldReq, """ summary: Get Trade History - Old description: Request via this endpoint to get the recent fills. The return value is the data after Pagination, sorted in descending order according to time. + documentation: https://www.kucoin.com/docs-new/api-3470350 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -126,6 +127,7 @@ def get_trade_history(self, req: GetTradeHistoryReq, """ summary: Get Trade History description: This endpoint can be used to obtain a list of the latest Spot transaction details. The returned data is sorted in descending order according to the latest update time of the order. + documentation: https://www.kucoin.com/docs-new/api-3470180 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -144,6 +146,7 @@ def get_open_orders(self, req: GetOpenOrdersReq, """ summary: Get Open Orders description: This interface is to obtain all Spot active order lists, and the return value of the active order interface is the paged data of all uncompleted order lists. The returned data is sorted in descending order according to the latest update time of the order. After the user successfully places an order, the order is in Active state, and the user can use inOrderBook to determine whether the order has entered the order. Canceled or fully filled orders are marked as completed Done status. + documentation: https://www.kucoin.com/docs-new/api-3470178 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -162,6 +165,7 @@ def get_symbols_with_open_order( """ summary: Get Symbols With Open Order description: This interface can query all spot symbol that has active orders + documentation: https://www.kucoin.com/docs-new/api-3470177 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -180,6 +184,7 @@ def modify_order(self, req: ModifyOrderReq, """ summary: Modify Order description: This interface can modify the price and quantity of the order according to orderId or clientOid. The implementation of this interface is: cancel the order and place a new order on the same trading pair, and return the modification result to the client synchronously When the quantity of the new order updated by the user is less than the filled quantity of this order, the order will be considered as completed, and the order will be cancelled, and no new order will be placed + documentation: https://www.kucoin.com/docs-new/api-3470171 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -197,6 +202,7 @@ def cancel_all_orders(self, **kwargs: Any) -> CancelAllOrdersResp: """ summary: Cancel All Orders description: This endpoint can cancel all spot orders for all symbol. This endpoint only sends cancellation requests. The results of the requests must be obtained by checking the order status or subscribing to websocket. + documentation: https://www.kucoin.com/docs-new/api-3470176 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -215,6 +221,7 @@ def cancel_partial_order(self, req: CancelPartialOrderReq, """ summary: Cancel Partial Order description: This interface can cancel the specified quantity of the order according to the orderId. The order execution order is: price first, time first, this interface will not change the queue order + documentation: https://www.kucoin.com/docs-new/api-3470183 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -234,6 +241,7 @@ def cancel_order_by_client_oid( """ summary: Cancel Order By ClientOid description: This endpoint can be used to cancel a spot order by clientOid. This endpoint only sends cancellation requests. The results of the requests must be obtained by checking the order status or subscribing to websocket. + documentation: https://www.kucoin.com/docs-new/api-3470184 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -252,6 +260,7 @@ def get_order_by_client_oid(self, req: GetOrderByClientOidReq, """ summary: Get Order By ClientOid description: This endpoint can be used to obtain information for a single Spot order using the client order id. After the user successfully places an order, the order is in Active state, and the user can use inOrderBook to determine whether the order has entered the order. Canceled or fully filled orders are marked as completed Done status. + documentation: https://www.kucoin.com/docs-new/api-3470182 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -269,6 +278,7 @@ def set_dcp(self, req: SetDcpReq, **kwargs: Any) -> SetDcpResp: """ summary: Set DCP description: Set Disconnection Protect(Deadman Swich)Through this interface, Call this interface to automatically cancel all orders of the set trading pair after the specified time. If this interface is not called again for renewal or cancellation before the set time, the system will help the user to cancel the order of the corresponding trading pair. Otherwise it will not. + documentation: https://www.kucoin.com/docs-new/api-3470173 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -286,6 +296,7 @@ def get_dcp(self, **kwargs: Any) -> GetDcpResp: """ summary: Get DCP description: Get Disconnection Protect(Deadman Swich)Through this interface, you can query the settings of automatic order cancellation + documentation: https://www.kucoin.com/docs-new/api-3470172 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -305,6 +316,7 @@ def cancel_all_orders_by_symbol( """ summary: Cancel All Orders By Symbol description: This endpoint can cancel all spot orders for specific symbol. This endpoint only sends cancellation requests. The results of the requests must be obtained by checking the order status or subscribing to websocket. + documentation: https://www.kucoin.com/docs-new/api-3470175 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -323,6 +335,7 @@ def get_closed_orders(self, req: GetClosedOrdersReq, """ summary: Get Closed Orders description: This interface is to obtain all Spot closed order lists, and the return value of the active order interface is the paged data of all uncompleted order lists. The returned data is sorted in descending order according to the latest update time of the order. After the user successfully places an order, the order is in Active state, and the user can use inOrderBook to determine whether the order has entered the order. Canceled or fully filled orders are marked as completed Done status. + documentation: https://www.kucoin.com/docs-new/api-3470179 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -341,6 +354,7 @@ def batch_add_orders(self, req: BatchAddOrdersReq, """ summary: Batch Add Orders description: This endpoint supports sequential batch order placement from a single endpoint. A maximum of 5orders can be placed simultaneously. The order types must be limit orders of the same trading pair + documentation: https://www.kucoin.com/docs-new/api-3470168 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -359,6 +373,7 @@ def batch_add_orders_sync(self, req: BatchAddOrdersSyncReq, """ summary: Batch Add Orders Sync description: This endpoint supports sequential batch order placement from a single endpoint. A maximum of 5orders can be placed simultaneously. The order types must be limit orders of the same trading pair + documentation: https://www.kucoin.com/docs-new/api-3470169 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -377,6 +392,7 @@ def cancel_order_by_order_id(self, req: CancelOrderByOrderIdReq, """ summary: Cancel Order By OrderId description: This endpoint can be used to cancel a spot order by orderId. This endpoint only sends cancellation requests. The results of the requests must be obtained by checking the order status or subscribing to websocket. + documentation: https://www.kucoin.com/docs-new/api-3470174 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -395,6 +411,7 @@ def get_order_by_order_id(self, req: GetOrderByOrderIdReq, """ summary: Get Order By OrderId description: This endpoint can be used to obtain information for a single Spot order using the order id. After the user successfully places an order, the order is in Active state, and the user can use inOrderBook to determine whether the order has entered the order. Canceled or fully filled orders are marked as completed Done status. + documentation: https://www.kucoin.com/docs-new/api-3470181 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -412,6 +429,7 @@ def add_order(self, req: AddOrderReq, **kwargs: Any) -> AddOrderResp: """ summary: Add Order description: Place order to the Spot trading system, you can place two major types of orders: limit and market. Orders can only be placed if your account has sufficient funds. Once an order is placed, your funds will be put on hold for the duration of the order. The amount of funds on hold depends on the order type and parameters specified. + documentation: https://www.kucoin.com/docs-new/api-3470188 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -431,6 +449,7 @@ def cancel_order_by_client_oid_sync( """ summary: Cancel Order By ClientOid Sync description: This endpoint can be used to cancel a spot order by orderId. + documentation: https://www.kucoin.com/docs-new/api-3470186 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -450,6 +469,7 @@ def cancel_order_by_order_id_sync( """ summary: Cancel Order By OrderId Sync description: This endpoint can be used to cancel a spot order by orderId. + documentation: https://www.kucoin.com/docs-new/api-3470185 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -468,6 +488,7 @@ def add_order_sync(self, req: AddOrderSyncReq, """ summary: Add Order Sync description: Place order to the spot trading system The difference between this interface and \"Add order\" is that this interface will synchronously return the order information after the order matching is completed. For higher latency requirements, please select the \"Add order\" interface. If there is a requirement for returning data integrity, please select this interface + documentation: https://www.kucoin.com/docs-new/api-3470170 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -486,6 +507,7 @@ def add_order_test(self, req: AddOrderTestReq, """ summary: Add Order Test description: Order test endpoint, the request parameters and return parameters of this endpoint are exactly the same as the order endpoint, and can be used to verify whether the signature is correct and other operations. After placing an order, the order will not enter the matching system, and the order cannot be queried. + documentation: https://www.kucoin.com/docs-new/api-3470187 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -506,6 +528,7 @@ def get_recent_trade_history_old( """ summary: Get Recent Trade History - Old description: Request via this endpoint to get a list of 1000 fills in the last 24 hours. The return value is the data after Pagination, sorted in descending order according to time. + documentation: https://www.kucoin.com/docs-new/api-3470351 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -526,6 +549,7 @@ def get_recent_orders_list_old( """ summary: Get Recent Orders List - Old description: Request via this endpoint to get your current order list. The return value is the data after Pagination, sorted in descending order according to time. + documentation: https://www.kucoin.com/docs-new/api-3470347 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -545,6 +569,7 @@ def cancel_order_by_client_oid_old( """ summary: Cancel Order By ClientOid - Old description: This endpoint can be used to cancel a spot order by clientOid. This endpoint only sends cancellation requests. The results of the requests must be obtained by checking the order status or subscribing to websocket. + documentation: https://www.kucoin.com/docs-new/api-3470344 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -565,6 +590,7 @@ def get_order_by_client_oid_old( """ summary: Get Order By ClientOid - Old description: Request via this interface to check the information of a single active order via clientOid. The system will prompt that the order does not exists if the order does not exist or has been settled. + documentation: https://www.kucoin.com/docs-new/api-3470349 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -584,6 +610,7 @@ def batch_cancel_order_old(self, req: BatchCancelOrderOldReq, """ summary: Batch Cancel Order - Old description: Request via this endpoint to cancel all open orders. The response is a list of ids of the canceled orders. + documentation: https://www.kucoin.com/docs-new/api-3470345 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -603,6 +630,7 @@ def get_orders_list_old(self, req: GetOrdersListOldReq, """ summary: Get Orders List - Old description: Request via this endpoint to get your current order list. The return value is the data after Pagination, sorted in descending order according to time. + documentation: https://www.kucoin.com/docs-new/api-3470346 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -622,6 +650,7 @@ def batch_add_orders_old(self, req: BatchAddOrdersOldReq, """ summary: Batch Add Orders - Old description: Request via this endpoint to place 5 orders at the same time. The order type must be a limit order of the same symbol. + documentation: https://www.kucoin.com/docs-new/api-3470342 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -642,6 +671,7 @@ def cancel_order_by_order_id_old( """ summary: Cancel Order By OrderId - Old description: This endpoint can be used to cancel a spot order by orderId. This endpoint only sends cancellation requests. The results of the requests must be obtained by checking the order status or subscribing to websocket. + documentation: https://www.kucoin.com/docs-new/api-3470343 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -661,6 +691,7 @@ def get_order_by_order_id_old(self, req: GetOrderByOrderIdOldReq, """ summary: Get Order By OrderId - Old description: Request via this endpoint to get a single order info by order ID. + documentation: https://www.kucoin.com/docs-new/api-3470348 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -680,6 +711,7 @@ def add_order_old(self, req: AddOrderOldReq, """ summary: Add Order - Old description: Place order to the Spot trading system, you can place two major types of orders: limit and market. Orders can only be placed if your account has sufficient funds. Once an order is placed, your funds will be put on hold for the duration of the order. The amount of funds on hold depends on the order type and parameters specified. + documentation: https://www.kucoin.com/docs-new/api-3470333 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -699,6 +731,7 @@ def add_order_test_old(self, req: AddOrderTestOldReq, """ summary: Add Order Test - Old description: Order test endpoint, the request parameters and return parameters of this endpoint are exactly the same as the order endpoint, and can be used to verify whether the signature is correct and other operations. After placing an order, the order will not enter the matching system, and the order cannot be queried. + documentation: https://www.kucoin.com/docs-new/api-3470341 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -717,6 +750,7 @@ def batch_cancel_stop_order(self, req: BatchCancelStopOrderReq, """ summary: Batch Cancel Stop Orders description: This endpoint can be used to cancel a spot stop orders by batch. + documentation: https://www.kucoin.com/docs-new/api-3470337 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -737,6 +771,7 @@ def cancel_stop_order_by_client_oid( """ summary: Cancel Stop Order By ClientOid description: This endpoint can be used to cancel a spot stop order by clientOid. + documentation: https://www.kucoin.com/docs-new/api-3470336 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -755,6 +790,7 @@ def get_stop_orders_list(self, req: GetStopOrdersListReq, """ summary: Get Stop Orders List description: This interface is to obtain all Spot active stop order lists + documentation: https://www.kucoin.com/docs-new/api-3470338 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -775,6 +811,7 @@ def cancel_stop_order_by_order_id( """ summary: Cancel Stop Order By OrderId description: This endpoint can be used to cancel a spot stop order by orderId. + documentation: https://www.kucoin.com/docs-new/api-3470335 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -793,6 +830,7 @@ def get_stop_order_by_order_id(self, req: GetStopOrderByOrderIdReq, """ summary: Get Stop Order By OrderId description: This interface is to obtain Spot stop order details by orderId + documentation: https://www.kucoin.com/docs-new/api-3470339 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -812,6 +850,7 @@ def add_stop_order(self, req: AddStopOrderReq, """ summary: Add Stop Order description: Place stop order to the Spot trading system, you can place two major types of orders: limit and market. Orders can only be placed if your account has sufficient funds. Once an order is placed, your funds will be put on hold for the duration of the order. The amount of funds on hold depends on the order type and parameters specified. + documentation: https://www.kucoin.com/docs-new/api-3470334 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -831,6 +870,7 @@ def get_stop_order_by_client_oid( """ summary: Get Stop Order By ClientOid description: This interface is to obtain Spot stop order details by orderId + documentation: https://www.kucoin.com/docs-new/api-3470340 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -851,6 +891,7 @@ def cancel_oco_order_by_client_oid( """ summary: Cancel OCO Order By ClientOid description: Request via this interface to cancel a stop order via the clientOid. You will receive cancelledOrderIds field once the system has received the cancellation request. The cancellation request will be processed by the matching engine in sequence. To know if the request is processed (successfully or not), you may check the order status or the update message from the pushes. + documentation: https://www.kucoin.com/docs-new/api-3470355 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -871,6 +912,7 @@ def get_oco_order_by_client_oid( """ summary: Get OCO Order By ClientOid description: Request via this interface to get a oco order information via the client order ID. + documentation: https://www.kucoin.com/docs-new/api-3470358 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -891,6 +933,7 @@ def get_oco_order_detail_by_order_id( """ summary: Get OCO Order Detail By OrderId description: Request via this interface to get a oco order detail via the order ID. + documentation: https://www.kucoin.com/docs-new/api-3470359 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -911,6 +954,7 @@ def cancel_oco_order_by_order_id( """ summary: Cancel OCO Order By OrderId description: This endpoint can be used to cancel a spot order by orderId. This endpoint only sends cancellation requests. The results of the requests must be obtained by checking the order status or subscribing to websocket. + documentation: https://www.kucoin.com/docs-new/api-3470354 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -930,6 +974,7 @@ def get_oco_order_by_order_id(self, req: GetOcoOrderByOrderIdReq, """ summary: Get OCO Order By OrderId description: Request via this interface to get a oco order information via the order ID. + documentation: https://www.kucoin.com/docs-new/api-3470357 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -949,6 +994,7 @@ def add_oco_order(self, req: AddOcoOrderReq, """ summary: Add OCO Order description: Place OCO order to the Spot trading system + documentation: https://www.kucoin.com/docs-new/api-3470353 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -968,6 +1014,7 @@ def batch_cancel_oco_orders(self, req: BatchCancelOcoOrdersReq, """ summary: Batch Cancel OCO Order description: This interface can batch cancel OCO orders through orderIds. You will receive cancelledOrderIds field once the system has received the cancellation request. The cancellation request will be processed by the matching engine in sequence. To know if the request is processed (successfully or not), you may check the order status or the update message from the pushes. + documentation: https://www.kucoin.com/docs-new/api-3470356 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ @@ -987,6 +1034,7 @@ def get_oco_order_list(self, req: GetOcoOrderListReq, """ summary: Get OCO Order List description: Request via this endpoint to get your current OCO order list. Items are paginated and sorted to show the latest first. See the Pagination section for retrieving additional entries after the first page. + documentation: https://www.kucoin.com/docs-new/api-3470360 +---------------------+---------+ | Extra API Info | Value | +---------------------+---------+ diff --git a/sdk/python/kucoin_universal_sdk/generate/viplending/viplending/api_vip_lending.py b/sdk/python/kucoin_universal_sdk/generate/viplending/viplending/api_vip_lending.py index a361cac9..cc089fba 100644 --- a/sdk/python/kucoin_universal_sdk/generate/viplending/viplending/api_vip_lending.py +++ b/sdk/python/kucoin_universal_sdk/generate/viplending/viplending/api_vip_lending.py @@ -14,6 +14,7 @@ def get_accounts(self, **kwargs: Any) -> GetAccountsResp: """ summary: Get Accounts description: Accounts participating in OTC lending, This interface is only for querying accounts currently running OTC lending. + documentation: https://www.kucoin.com/docs-new/api-3470278 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+ @@ -31,6 +32,7 @@ def get_account_detail(self, **kwargs: Any) -> GetAccountDetailResp: """ summary: Get Account Detail description: The following information is only applicable to loans. Get information on off-exchange funding and loans, This endpoint is only for querying accounts that are currently involved in loans. + documentation: https://www.kucoin.com/docs-new/api-3470277 +---------------------+------------+ | Extra API Info | Value | +---------------------+------------+

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