API.md
Endpoint: http://127.0.0.1:6806
Both are POST methods
An interface with parameters is required, the parameter is a JSON string, placed in the body, and the header
Content-Type is application/json
Return value
{
"code": 0,
"msg": "",
"data": {}
}
code: non-zero for exceptionsmsg: an empty string under normal circumstances, an error text will be returned under abnormal conditionsdata: may be {}, [] or NULL, depending on the interfaceView API token in <kbd>Settings - About</kbd>, request header: Authorization: Token xxx
/api/notebook/lsNotebooks
No parameters
Return value
{
"code": 0,
"msg": "",
"data": {
"notebooks": [
{
"id": "20210817205410-2kvfpfn",
"name": "Test Notebook",
"icon": "1f41b",
"sort": 0,
"closed": false
},
{
"id": "20210808180117-czj9bvb",
"name": "SiYuan User Guide",
"icon": "1f4d4",
"sort": 1,
"closed": false
}
]
}
}
/api/notebook/openNotebook
Parameters
{
"notebook": "20210831090520-7dvbdv0"
}
notebook: Notebook IDReturn value
{
"code": 0,
"msg": "",
"data": null
}
/api/notebook/closeNotebook
Parameters
{
"notebook": "20210831090520-7dvbdv0"
}
notebook: Notebook IDReturn value
{
"code": 0,
"msg": "",
"data": null
}
/api/notebook/renameNotebook
Parameters
{
"notebook": "20210831090520-7dvbdv0",
"name": "New name for notebook"
}
notebook: Notebook IDReturn value
{
"code": 0,
"msg": "",
"data": null
}
/api/notebook/createNotebook
Parameters
{
"name": "Notebook name"
}
Return value
{
"code": 0,
"msg": "",
"data": {
"notebook": {
"id": "20220126215949-r1wvoch",
"name": "Notebook name",
"icon": "",
"sort": 0,
"closed": false
}
}
}
/api/notebook/removeNotebook
Parameters
{
"notebook": "20210831090520-7dvbdv0"
}
notebook: Notebook IDReturn value
{
"code": 0,
"msg": "",
"data": null
}
/api/notebook/getNotebookConf
Parameters
{
"notebook": "20210817205410-2kvfpfn"
}
notebook: Notebook IDReturn value
{
"code": 0,
"msg": "",
"data": {
"box": "20210817205410-2kvfpfn",
"conf": {
"name": "Test Notebook",
"closed": false,
"refCreateSavePath": "",
"createDocNameTemplate": "",
"dailyNoteSavePath": "/daily note/{{now | date \"2006/01\"}}/{{now | date \"2006-01-02\"}}",
"dailyNoteTemplatePath": ""
},
"name": "Test Notebook"
}
}
/api/notebook/setNotebookConf
Parameters
{
"notebook": "20210817205410-2kvfpfn",
"conf": {
"name": "Test Notebook",
"closed": false,
"refCreateSavePath": "",
"createDocNameTemplate": "",
"dailyNoteSavePath": "/daily note/{{now | date \"2006/01\"}}/{{now | date \"2006-01-02\"}}",
"dailyNoteTemplatePath": ""
}
}
notebook: Notebook IDReturn value
{
"code": 0,
"msg": "",
"data": {
"name": "Test Notebook",
"closed": false,
"refCreateSavePath": "",
"createDocNameTemplate": "",
"dailyNoteSavePath": "/daily note/{{now | date \"2006/01\"}}/{{now | date \"2006-01-02\"}}",
"dailyNoteTemplatePath": ""
}
}
/api/filetree/createDocWithMd
Parameters
{
"notebook": "20210817205410-2kvfpfn",
"path": "/foo/bar",
"markdown": ""
}
notebook: Notebook IDpath: Document path, which needs to start with / and separate levels with / (path here corresponds to the
database hpath field)markdown: GFM Markdown contentReturn value
{
"code": 0,
"msg": "",
"data": "20210914223645-oj2vnx2"
}
data: Created document IDpath to call this interface repeatedly, the existing document will not be overwritten/api/filetree/renameDoc
Parameters
{
"notebook": "20210831090520-7dvbdv0",
"path": "/20210902210113-0avi12f.sy",
"title": "New document title"
}
notebook: Notebook IDpath: Document pathtitle: New document titleReturn value
{
"code": 0,
"msg": "",
"data": null
}
Rename a document by id:
/api/filetree/renameDocByID
Parameters
{
"id": "20210902210113-0avi12f",
"title": "New document title"
}
id: Document IDtitle: New document titleReturn value
{
"code": 0,
"msg": "",
"data": null
}
/api/filetree/removeDoc
Parameters
{
"notebook": "20210831090520-7dvbdv0",
"path": "/20210902210113-0avi12f.sy"
}
notebook: Notebook IDpath: Document pathReturn value
{
"code": 0,
"msg": "",
"data": null
}
Remove a document by id:
/api/filetree/removeDocByID
Parameters
{
"id": "20210902210113-0avi12f"
}
id: Document IDReturn value
{
"code": 0,
"msg": "",
"data": null
}
/api/filetree/moveDocs
Parameters
{
"fromPaths": ["/20210917220056-yxtyl7i.sy"],
"toNotebook": "20210817205410-2kvfpfn",
"toPath": "/"
}
fromPaths: Source pathstoNotebook: Target notebook IDtoPath: Target pathReturn value
{
"code": 0,
"msg": "",
"data": null
}
Move documents by id:
/api/filetree/moveDocsByID
Parameters
{
"fromIDs": ["20210917220056-yxtyl7i"],
"toID": "20210817205410-2kvfpfn"
}
fromIDs: Source docs' IDstoID: Target parent doc's ID or notebook IDReturn value
{
"code": 0,
"msg": "",
"data": null
}
/api/filetree/getHPathByPath
Parameters
{
"notebook": "20210831090520-7dvbdv0",
"path": "/20210917220500-sz588nq/20210917220056-yxtyl7i.sy"
}
notebook: Notebook IDpath: Document pathReturn value
{
"code": 0,
"msg": "",
"data": "/foo/bar"
}
/api/filetree/getHPathByID
Parameters
{
"id": "20210917220056-yxtyl7i"
}
id: Block IDReturn value
{
"code": 0,
"msg": "",
"data": "/foo/bar"
}
/api/filetree/getPathByID
Parameters
{
"id": "20210808180320-fqgskfj"
}
id: Block IDReturn value
{
"code": 0,
"msg": "",
"data": {
"notebook": "20210808180117-czj9bvb",
"path": "/20200812220555-lj3enxa/20210808180320-fqgskfj.sy"
}
}
/api/filetree/getIDsByHPath
Parameters
{
"path": "/foo/bar",
"notebook": "20210808180117-czj9bvb"
}
path: Human-readable pathnotebook: Notebook IDReturn value
{
"code": 0,
"msg": "",
"data": [
"20200813004931-q4cu8na"
]
}
/api/asset/upload
The parameter is an HTTP Multipart form
assetsDirPath: The folder path where assets are stored, with the data folder as the root path, for example:
"/assets/": workspace/data/assets/ folder"/assets/sub/": workspace/data/assets/sub/ folderUnder normal circumstances, it is recommended to use the first method, which is stored in the assets folder of the workspace, putting in a subdirectory has some side effects, please refer to the assets chapter of the user guide.
file[]: Uploaded file list
Return value
{
"code": 0,
"msg": "",
"data": {
"errFiles": [""],
"succMap": {
"foo.png": "assets/foo-20210719092549-9j5y79r.png"
}
}
}
errFiles: List of filenames with errors in upload processingsuccMap: For successfully processed files, the key is the file name when uploading, and the value is
assets/foo-id.png, which is used to replace the asset link address in the existing Markdown content with the
uploaded address/api/block/insertBlock
Parameters
{
"dataType": "markdown",
"data": "foo**bar**{: style=\"color: var(--b3-font-color8);\"}baz",
"nextID": "",
"previousID": "20211229114650-vrek5x6",
"parentID": ""
}
dataType: The data type to be inserted, the value can be markdown or domdata: Data to be insertednextID: The ID of the next block, used to anchor the insertion positionpreviousID: The ID of the previous block, used to anchor the insertion positionparentID: The ID of the parent block, used to anchor the insertion positionnextID, previousID, and parentID must have at least one value, using priority: nextID > previousID >
parentID
Return value
{
"code": 0,
"msg": "",
"data": [
{
"doOperations": [
{
"action": "insert",
"data": "<div data-node-id=\"20211230115020-g02dfx0\" data-node-index=\"1\" data-type=\"NodeParagraph\" class=\"p\"><div contenteditable=\"true\" spellcheck=\"false\">foo<strong style=\"color: var(--b3-font-color8);\">bar</strong>baz</div><div class=\"protyle-attr\" contenteditable=\"false\"></div></div>",
"id": "20211230115020-g02dfx0",
"parentID": "",
"previousID": "20211229114650-vrek5x6",
"retData": null
}
],
"undoOperations": null
}
]
}
action.data: DOM generated by the newly inserted blockaction.id: ID of the newly inserted block/api/block/prependBlock
Parameters
{
"data": "foo**bar**{: style=\"color: var(--b3-font-color8);\"}baz",
"dataType": "markdown",
"parentID": "20220107173950-7f9m1nb"
}
dataType: The data type to be inserted, the value can be markdown or domdata: Data to be insertedparentID: The ID of the parent block, used to anchor the insertion positionReturn value
{
"code": 0,
"msg": "",
"data": [
{
"doOperations": [
{
"action": "insert",
"data": "<div data-node-id=\"20220108003710-hm0x9sc\" data-node-index=\"1\" data-type=\"NodeParagraph\" class=\"p\"><div contenteditable=\"true\" spellcheck=\"false\">foo<strong style=\"color: var(--b3-font-color8);\">bar</strong>baz</div><div class=\"protyle-attr\" contenteditable=\"false\"></div></div>",
"id": "20220108003710-hm0x9sc",
"parentID": "20220107173950-7f9m1nb",
"previousID": "",
"retData": null
}
],
"undoOperations": null
}
]
}
action.data: DOM generated by the newly inserted blockaction.id: ID of the newly inserted block/api/block/appendBlock
Parameters
{
"data": "foo**bar**{: style=\"color: var(--b3-font-color8);\"}baz",
"dataType": "markdown",
"parentID": "20220107173950-7f9m1nb"
}
dataType: The data type to be inserted, the value can be markdown or domdata: Data to be insertedparentID: The ID of the parent block, used to anchor the insertion positionReturn value
{
"code": 0,
"msg": "",
"data": [
{
"doOperations": [
{
"action": "insert",
"data": "<div data-node-id=\"20220108003642-y2wmpcv\" data-node-index=\"1\" data-type=\"NodeParagraph\" class=\"p\"><div contenteditable=\"true\" spellcheck=\"false\">foo<strong style=\"color: var(--b3-font-color8);\">bar</strong>baz</div><div class=\"protyle-attr\" contenteditable=\"false\"></div></div>",
"id": "20220108003642-y2wmpcv",
"parentID": "20220107173950-7f9m1nb",
"previousID": "20220108003615-7rk41t1",
"retData": null
}
],
"undoOperations": null
}
]
}
action.data: DOM generated by the newly inserted blockaction.id: ID of the newly inserted block/api/block/updateBlock
Parameters
{
"dataType": "markdown",
"data": "foobarbaz",
"id": "20211230161520-querkps"
}
dataType: The data type to be updated, the value can be markdown or domdata: Data to be updatedid: ID of the block to be updatedReturn value
{
"code": 0,
"msg": "",
"data": [
{
"doOperations": [
{
"action": "update",
"data": "<div data-node-id=\"20211230161520-querkps\" data-node-index=\"1\" data-type=\"NodeParagraph\" class=\"p\"><div contenteditable=\"true\" spellcheck=\"false\">foo<strong>bar</strong>baz</div><div class=\"protyle-attr\" contenteditable=\"false\"></div></div>",
"id": "20211230161520-querkps",
"parentID": "",
"previousID": "",
"retData": null
}
],
"undoOperations": null
}
]
}
action.data: DOM generated by the updated block/api/block/deleteBlock
Parameters
{
"id": "20211230161520-querkps"
}
id: ID of the block to be deletedReturn value
{
"code": 0,
"msg": "",
"data": [
{
"doOperations": [
{
"action": "delete",
"data": null,
"id": "20211230162439-vtm09qo",
"parentID": "",
"previousID": "",
"retData": null
}
],
"undoOperations": null
}
]
}
/api/block/moveBlock
Parameters
{
"id": "20230406180530-3o1rqkc",
"previousID": "20230406152734-if5kyx6",
"parentID": "20230404183855-woe52ko"
}
id: Block ID to movepreviousID: The ID of the previous block, used to anchor the insertion positionparentID: The ID of the parent block, used to anchor the insertion position, previousID and parentID cannot
be empty at the same time, if they exist at the same time, previousID will be used firstReturn value
{
"code": 0,
"msg": "",
"data": [
{
"doOperations": [
{
"action": "move",
"data": null,
"id": "20230406180530-3o1rqkc",
"parentID": "20230404183855-woe52ko",
"previousID": "20230406152734-if5kyx6",
"nextID": "",
"retData": null,
"srcIDs": null,
"name": "",
"type": ""
}
],
"undoOperations": null
}
]
}
/api/block/foldBlock
Parameters
{
"id": "20231224160424-2f5680o"
}
id: Block ID to foldReturn value
{
"code": 0,
"msg": "",
"data": null
}
/api/block/unfoldBlock
Parameters
{
"id": "20231224160424-2f5680o"
}
id: Block ID to unfoldReturn value
{
"code": 0,
"msg": "",
"data": null
}
/api/block/getBlockKramdown
Parameters
{
"id": "20201225220954-dlgzk1o"
}
id: ID of the block to be gotReturn value
{
"code": 0,
"msg": "",
"data": {
"id": "20201225220954-dlgzk1o",
"kramdown": "* {: id=\"20201225220954-e913snx\"}Create a new notebook, create a new document under the notebook\n {: id=\"20210131161940-kfs31q6\"}\n* {: id=\"20201225220954-ygz217h\"}Enter <kbd>/</kbd> in the editor to trigger the function menu\n {: id=\"20210131161940-eo0riwq\"}\n* {: id=\"20201225220954-875yybt\"}((20200924101200-gss5vee \"Navigate in the content block\")) and ((20200924100906-0u4zfq3 \"Window and tab\"))\n {: id=\"20210131161940-b5uow2h\"}"
}
}
/api/block/getChildBlocks
Parameters
{
"id": "20230506212712-vt9ajwj"
}
id: Parent block IDReturn value
{
"code": 0,
"msg": "",
"data": [
{
"id": "20230512083858-mjdwkbn",
"type": "h",
"subType": "h1"
},
{
"id": "20230513213727-thswvfd",
"type": "s"
},
{
"id": "20230513213633-9lsj4ew",
"type": "l",
"subType": "u"
}
]
}
/api/block/transferBlockRef
Parameters
{
"fromID": "20230612160235-mv6rrh1",
"toID": "20230613093045-uwcomng",
"refIDs": ["20230613092230-cpyimmd"]
}
fromID: Def block IDtoID: Target block IDrefIDs: Ref block IDs point to def block ID, optional, if not specified, all ref block IDs will be transferredReturn value
{
"code": 0,
"msg": "",
"data": null
}
/api/attr/setBlockAttrs
Parameters
{
"id": "20210912214605-uhi5gco",
"attrs": {
"custom-attr1": "line1\nline2"
}
}
id: Block IDattrs: Block attributes, custom attributes must be prefixed with custom-Return value
{
"code": 0,
"msg": "",
"data": null
}
/api/attr/getBlockAttrs
Parameters
{
"id": "20210912214605-uhi5gco"
}
id: Block IDReturn value
{
"code": 0,
"msg": "",
"data": {
"custom-attr1": "line1\nline2",
"id": "20210912214605-uhi5gco",
"title": "PDF Annotation Demo",
"type": "doc",
"updated": "20210916120715"
}
}
/api/query/sql
Parameters
{
"stmt": "SELECT * FROM blocks WHERE content LIKE'%content%' LIMIT 7"
}
stmt: SQL statementReturn value
{
"code": 0,
"msg": "",
"data": [
{ "col": "val" }
]
}
Note: To ensure data security, access to this interface is prohibited in Publish Mode.
/api/sqlite/flushTransaction
No parameters
Return value
{
"code": 0,
"msg": "",
"data": null
}
/api/template/render
Parameters
{
"id": "20220724223548-j6g0o87",
"path": "F:\\SiYuan\\data\\templates\\foo.md"
}
id: The ID of the document where the rendering is calledpath: Template file absolute pathReturn value
{
"code": 0,
"msg": "",
"data": {
"content": "<div data-node-id=\"20220729234848-dlgsah7\" data-node-index=\"1\" data-type=\"NodeParagraph\" class=\"p\" updated=\"20220729234840\"><div contenteditable=\"true\" spellcheck=\"false\">foo</div><div class=\"protyle-attr\" contenteditable=\"false\"></div></div>",
"path": "F:\\SiYuan\\data\\templates\\foo.md"
}
}
/api/template/renderSprig
Parameters
{
"template": "/daily note/{{now | date \"2006/01\"}}/{{now | date \"2006-01-02\"}}"
}
template: template contentReturn value
{
"code": 0,
"msg": "",
"data": "/daily note/2023/03/2023-03-24"
}
/api/file/getFile
Parameters
json { "path": "/data/20210808180117-6v0mkxr/20200923234011-ieuun1p.sy" }
path: the file path under the workspace pathReturn value
Response status code 200: File content
Response status code 202: Exception information
{
"code": 404,
"msg": "",
"data": null
}
code: non-zero for exceptions
-1: Parameter parsing error403: Permission denied (file is not in the workspace)404: Not Found (file doesn't exist)405: Method Not Allowed (it's a directory)500: Server Error (stat file failed / read file failed)msg: a piece of text describing the error
/api/file/putFile
The parameter is an HTTP Multipart form
path: the file path under the workspace pathisDir: whether to create a folder, when true only create a folder, ignore filemodTime: last access and modification time, Unix timefile: the uploaded fileReturn value
{
"code": 0,
"msg": "",
"data": null
}
/api/file/removeFile
Parameters
{
"path": "/data/20210808180117-6v0mkxr/20200923234011-ieuun1p.sy"
}
path: the file path under the workspace pathReturn value
{
"code": 0,
"msg": "",
"data": null
}
/api/file/renameFile
Parameters
{
"path": "/data/assets/image-20230523085812-k3o9t32.png",
"newPath": "/data/assets/test-20230523085812-k3o9t32.png"
}
path: the file path under the workspace pathnewPath: the new file path under the workspace pathReturn value
{
"code": 0,
"msg": "",
"data": null
}
/api/file/readDir
Parameters
{
"path": "/data/20210808180117-6v0mkxr/20200923234011-ieuun1p"
}
path: the dir path under the workspace pathReturn value
{
"code": 0,
"msg": "",
"data": [
{
"isDir": true,
"isSymlink": false,
"name": "20210808180303-6yi0dv5",
"updated": 1691467624
},
{
"isDir": false,
"isSymlink": false,
"name": "20210808180303-6yi0dv5.sy",
"updated": 1663298365
}
]
}
/api/export/exportMdContent
Parameters
{
"id": ""
}
id: ID of the doc block to exportReturn value
{
"code": 0,
"msg": "",
"data": {
"hPath": "/Please Start Here",
"content": "## 🍫 Content Block\n\nIn SiYuan, the only important core concept is..."
}
}
hPath: human-readable pathcontent: Markdown content/api/export/exportResources
Parameters
{
"paths": [
"/conf/appearance/boot",
"/conf/appearance/langs",
"/conf/appearance/emojis/conf.json",
"/conf/appearance/icons/index.html"
],
"name": "zip-file-name"
}
paths: A list of file or folder paths to be exported, the same filename/folder name will be overwrittenname: (Optional) The exported file name, which defaults to export-YYYY-MM-DD_hh-mm-ss.zip when not setReturn value
{
"code": 0,
"msg": "",
"data": {
"path": "temp/export/zip-file-name.zip"
}
}
path: The path of *.zip file created
zip-file-name.zip is as follows:
zip-file-name
bootlangsconf.jsonindex.html/api/convert/pandoc
Working directory
workspace/temp/convert/pandoc/${dir}Put file can be used to write the file to be converted to this directory firstGet file to get the converted file
importStdMd to import the converted folder directlyParameters
{
"dir": "test",
"args": [
"--to", "markdown_strict-raw_html",
"foo.epub",
"-o", "foo.md"
]
}
args: Pandoc command line parametersReturn value
{
"code": 0,
"msg": "",
"data": {
"path": "/temp/convert/pandoc/test"
}
}
path: the path under the workspace/api/notification/pushMsg
Parameters
{
"msg": "test",
"timeout": 7000
}
timeout: The duration of the message display in milliseconds. This field can be omitted, the default is 7000
millisecondsReturn value
{
"code": 0,
"msg": "",
"data": {
"id": "62jtmqi"
}
}
id: Message ID/api/notification/pushErrMsg
Parameters
{
"msg": "test",
"timeout": 7000
}
timeout: The duration of the message display in milliseconds. This field can be omitted, the default is 7000
millisecondsReturn value
{
"code": 0,
"msg": "",
"data": {
"id": "qc9znut"
}
}
id: Message ID/api/network/forwardProxy
Parameters
{
"url": "https://b3log.org/siyuan/",
"method": "GET",
"timeout": 7000,
"contentType": "text/html",
"headers": [
{
"Cookie": ""
}
],
"payload": {},
"payloadEncoding": "text",
"responseEncoding": "text"
}
url: URL to forward
method: HTTP method, default is POST
timeout: timeout in milliseconds, default is 7000
contentType: Content-Type, default is application/json
headers: HTTP headers
payload: HTTP payload, object or string
payloadEncoding: The encoding scheme used by pyaload, default is text, optional values are as follows
textbase64 | base64-stdbase64-urlbase32 | base32-stdbase32-hexhexresponseEncoding: The encoding scheme used by body in response data, default is text, optional values are as
follows
textbase64 | base64-stdbase64-urlbase32 | base32-stdbase32-hexhexReturn value
{
"code": 0,
"msg": "",
"data": {
"body": "",
"bodyEncoding": "text",
"contentType": "text/html",
"elapsed": 1976,
"headers": {
},
"status": 200,
"url": "https://b3log.org/siyuan"
}
}
bodyEncoding: The encoding scheme used by body, is consistent with field responseEncoding in request,
default is text, optional values are as follows
textbase64 | base64-stdbase64-urlbase32 | base32-stdbase32-hexhex/api/system/bootProgress
No parameters
Return value
{
"code": 0,
"msg": "",
"data": {
"details": "Finishing boot...",
"progress": 100
}
}
/api/system/version
No parameters
Return value
{
"code": 0,
"msg": "",
"data": "1.3.5"
}
/api/system/currentTime
No parameters
Return value
{
"code": 0,
"msg": "",
"data": 1631850968131
}
data: Precision in milliseconds