{
    "swagger": "2.0",
    "info": {
        "description": "Textile's HTTP REST API Documentation",
        "title": "Textile REST API",
        "termsOfService": "https://github.com/textileio/go-textile/blob/master/TERMS",
        "contact": {
            "name": "Textile",
            "url": "https://textile.io/",
            "email": "contact@textile.io"
        },
        "license": {
            "name": "MIT License",
            "url": "https://github.com/textileio/go-textile/blob/master/LICENSE"
        },
        "version": "0"
    },
    "basePath": "/api/v0",
    "paths": {
        "/account": {
            "get": {
                "description": "Shows the local peer's account info as a contact",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "account"
                ],
                "summary": "Show account contact",
                "responses": {
                    "200": {
                        "description": "contact",
                        "schema": {
                            "$ref": "#/definitions/pb.Contact"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/account/address": {
            "get": {
                "description": "Shows the local peer's account address",
                "produces": [
                    "text/plain"
                ],
                "tags": [
                    "account"
                ],
                "summary": "Show account address",
                "responses": {
                    "200": {
                        "description": "address",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/account/seed": {
            "get": {
                "description": "Shows the local peer's account seed",
                "produces": [
                    "text/plain"
                ],
                "tags": [
                    "account"
                ],
                "summary": "Show account seed",
                "responses": {
                    "200": {
                        "description": "seed",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/blocks": {
            "get": {
                "description": "Paginates blocks in a thread. Blocks are the raw components in a thread.\nThink of them as an append-only log of thread updates where each update is\nhash-linked to its parent(s). New / recovering peers can sync history by simply\ntraversing the hash tree.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "blocks"
                ],
                "summary": "Paginates blocks in a thread",
                "parameters": [
                    {
                        "type": "string",
                        "default": "thread=,offset=,limit=5",
                        "description": "thread: Thread ID, offset: Offset ID to start listing from (omit for latest), limit: List page size (default: 5)",
                        "name": "X-Textile-Opts",
                        "in": "header"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "blocks",
                        "schema": {
                            "$ref": "#/definitions/pb.BlockList"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/blocks/{id}": {
            "delete": {
                "description": "Removes a thread block by ID",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "blocks"
                ],
                "summary": "Remove thread block",
                "parameters": [
                    {
                        "type": "string",
                        "description": "block id",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "201": {
                        "description": "block",
                        "schema": {
                            "$ref": "#/definitions/pb.Block"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/blocks/{id}/comment": {
            "get": {
                "description": "Gets a thread comment by block ID",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "blocks"
                ],
                "summary": "Get thread comment",
                "parameters": [
                    {
                        "type": "string",
                        "description": "block id",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "comment",
                        "schema": {
                            "$ref": "#/definitions/pb.Comment"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/blocks/{id}/comments": {
            "get": {
                "description": "Lists comments on a thread block",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "blocks"
                ],
                "summary": "List comments",
                "parameters": [
                    {
                        "type": "string",
                        "description": "block id",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "comments",
                        "schema": {
                            "$ref": "#/definitions/pb.CommentList"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            },
            "post": {
                "description": "Adds a comment to a thread block",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "blocks"
                ],
                "summary": "Add a comment",
                "parameters": [
                    {
                        "type": "string",
                        "description": "block id",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "urlescaped comment body",
                        "name": "X-Textile-Args",
                        "in": "header",
                        "required": true
                    }
                ],
                "responses": {
                    "201": {
                        "description": "comment",
                        "schema": {
                            "$ref": "#/definitions/pb.Comment"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/blocks/{id}/files": {
            "get": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "files"
                ],
                "summary": "Gets the metadata for a files block",
                "parameters": [
                    {
                        "type": "string",
                        "description": "block id",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "files",
                        "schema": {
                            "$ref": "#/definitions/pb.Files"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/blocks/{id}/files/{index}/{path}/content": {
            "get": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "files"
                ],
                "summary": "Gets the decrypted file content of a file within a files block",
                "parameters": [
                    {
                        "type": "string",
                        "description": "block id",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "file index",
                        "name": "index",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "file path",
                        "name": "path",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "integer"
                            }
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/blocks/{id}/files/{index}/{path}/meta": {
            "get": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "files"
                ],
                "summary": "Gets the metadata of a file within a files block",
                "parameters": [
                    {
                        "type": "string",
                        "description": "block id",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "file index",
                        "name": "index",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "file path",
                        "name": "path",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "file",
                        "schema": {
                            "$ref": "#/definitions/pb.FileIndex"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/blocks/{id}/like": {
            "get": {
                "description": "Gets a thread like by block ID",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "blocks"
                ],
                "summary": "Get thread like",
                "parameters": [
                    {
                        "type": "string",
                        "description": "block id",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "like",
                        "schema": {
                            "$ref": "#/definitions/pb.Like"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/blocks/{id}/likes": {
            "get": {
                "description": "Lists likes on a thread block",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "blocks"
                ],
                "summary": "List likes",
                "parameters": [
                    {
                        "type": "string",
                        "description": "block id",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "likes",
                        "schema": {
                            "$ref": "#/definitions/pb.LikeList"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            },
            "post": {
                "description": "Adds a like to a thread block",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "blocks"
                ],
                "summary": "Add a like",
                "parameters": [
                    {
                        "type": "string",
                        "description": "block id",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "201": {
                        "description": "like",
                        "schema": {
                            "$ref": "#/definitions/pb.Like"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/blocks/{id}/meta": {
            "get": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "blocks"
                ],
                "summary": "Gets the metadata for a block",
                "parameters": [
                    {
                        "type": "string",
                        "description": "block id",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "block",
                        "schema": {
                            "$ref": "#/definitions/pb.Block"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/cafes": {
            "get": {
                "description": "List info about all active cafe sessions. Cafes are other peers on the network\nwho offer pinning, backup, and inbox services",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "cafes"
                ],
                "summary": "List info about all active cafe sessions",
                "responses": {
                    "200": {
                        "description": "cafe sessions",
                        "schema": {
                            "$ref": "#/definitions/pb.CafeSessionList"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            },
            "post": {
                "description": "Registers with a cafe and saves an expiring service session token. An access\ntoken is required to register, and should be obtained separately from the target\nCafe",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "cafes"
                ],
                "summary": "Register with a Cafe",
                "parameters": [
                    {
                        "type": "string",
                        "description": "cafe id",
                        "name": "X-Textile-Args",
                        "in": "header",
                        "required": true
                    },
                    {
                        "type": "string",
                        "default": "token=",
                        "description": "token: An access token supplied by the Cafe",
                        "name": "X-Textile-Opts",
                        "in": "header"
                    }
                ],
                "responses": {
                    "201": {
                        "description": "cafe session",
                        "schema": {
                            "$ref": "#/definitions/pb.CafeSession"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/cafes/messages": {
            "post": {
                "description": "Check for messages at all cafes. New messages are downloaded and processed\nopportunistically.",
                "produces": [
                    "text/plain"
                ],
                "tags": [
                    "cafes"
                ],
                "summary": "Check for messages at all cafes",
                "responses": {
                    "200": {
                        "description": "ok",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/cafes/{id}": {
            "get": {
                "description": "Gets and displays info about a cafe session. Cafes are other peers on the network\nwho offer pinning, backup, and inbox services",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "cafes"
                ],
                "summary": "Gets and displays info about a cafe session",
                "parameters": [
                    {
                        "type": "string",
                        "description": "cafe id",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "cafe session",
                        "schema": {
                            "$ref": "#/definitions/pb.CafeSession"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            },
            "delete": {
                "description": "Deregisters with a cafe (content will expire based on the cafe's service rules)",
                "tags": [
                    "cafes"
                ],
                "summary": "Deregisters a cafe",
                "parameters": [
                    {
                        "type": "string",
                        "description": "cafe id",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "ok",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/config": {
            "put": {
                "description": "Replace entire config file contents. The config command controls configuration\nvariables. It works much like 'git config'. The configuration values are stored\nin a config file inside the Textile repository.",
                "consumes": [
                    "application/json"
                ],
                "tags": [
                    "config"
                ],
                "summary": "Replace config settings.",
                "parameters": [
                    {
                        "description": "JSON document",
                        "name": "config",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/mill.Json"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            },
            "patch": {
                "description": "When patching config values, valid JSON types must be used. For example, a string\nshould be escaped or wrapped in single quotes (e.g., \\\"127.0.0.1:40600\\\") and\narrays and objects work fine (e.g. '{\"API\": \"127.0.0.1:40600\"}') but should be\nwrapped in single quotes. Be sure to restart the daemon for changes to take effect.\nSee https://tools.ietf.org/html/rfc6902 for details on RFC6902 JSON patch format.",
                "consumes": [
                    "application/json"
                ],
                "tags": [
                    "config"
                ],
                "summary": "Set/update config settings",
                "parameters": [
                    {
                        "description": "An RFC6902 JSON patch (array of ops)",
                        "name": "patch",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/mill.Json"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/config/{path}": {
            "get": {
                "description": "Report the currently active config settings, which may differ from the values\nspecifed when setting/patching values.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "config"
                ],
                "summary": "Get active config settings",
                "parameters": [
                    {
                        "type": "string",
                        "description": "config path (e.g., Addresses/API)",
                        "name": "path",
                        "in": "path"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "new config value",
                        "schema": {
                            "$ref": "#/definitions/mill.Json"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/contacts": {
            "get": {
                "description": "Lists known contacts.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "contacts"
                ],
                "summary": "List known contacts",
                "responses": {
                    "200": {
                        "description": "contacts",
                        "schema": {
                            "$ref": "#/definitions/pb.ContactList"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/contacts/search": {
            "post": {
                "description": "Search for contacts known locally and on the network",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "contacts"
                ],
                "summary": "Search for contacts",
                "parameters": [
                    {
                        "type": "string",
                        "default": "local=\"false\",limit=5,wait=5,address=,username=,events=\"false\"",
                        "description": "local: Whether to only search local contacts, remote: Whether to only search remote contacts, limit: Stops searching after limit results are found, wait: Stops searching after 'wait' seconds have elapsed (max 30s), username: search by username string, address: search by account address string, events: Whether to emit Server-Sent Events (SSEvent) or plain JSON",
                        "name": "X-Textile-Opts",
                        "in": "header"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "results stream",
                        "schema": {
                            "$ref": "#/definitions/pb.QueryResult"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/contacts/{address}": {
            "get": {
                "description": "Gets a known contact",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "contacts"
                ],
                "summary": "Get a known contact",
                "parameters": [
                    {
                        "type": "string",
                        "description": "address",
                        "name": "address",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "contact",
                        "schema": {
                            "$ref": "#/definitions/pb.Contact"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            },
            "put": {
                "description": "Adds a contact by username or account address to known contacts.",
                "consumes": [
                    "application/json"
                ],
                "tags": [
                    "contacts"
                ],
                "summary": "Add to known contacts",
                "parameters": [
                    {
                        "type": "string",
                        "description": "address",
                        "name": "address",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "contact",
                        "name": "contact",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/pb.Contact"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "ok",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            },
            "delete": {
                "description": "Removes a known contact",
                "tags": [
                    "contacts"
                ],
                "summary": "Remove a contact",
                "parameters": [
                    {
                        "type": "string",
                        "description": "address",
                        "name": "address",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "ok",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/feed": {
            "get": {
                "description": "Paginates post (join|leave|files|message) and annotation (comment|like) block types\nThe mode option dictates how the feed is displayed:\n\"chrono\": All feed block types are shown. Annotations always nest their target post,\ni.e., the post a comment is about.\n\"annotated\": Annotations are nested under post targets, but are not shown in the\ntop-level feed.\n\"stacks\": Related blocks are chronologically grouped into \"stacks\". A new stack is\nstarted if an unrelated block breaks continuity. This mode is used by Textile\nPhotos. Stacks may include:\n* The initial post with some nested annotations. Newer annotations may have already\nbeen listed.\n* One or more annotations about a post. The newest annotation assumes the \"top\"\nposition in the stack. Additional annotations are nested under the target.\nNewer annotations may have already been listed in the case as well.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "feed"
                ],
                "summary": "Paginates post and annotation block types",
                "parameters": [
                    {
                        "type": "string",
                        "default": "thread=,offset=,limit=5,mode=\"chrono\"",
                        "description": "thread: Thread ID (can also use 'default'), offset: Offset ID to start listing from (omit for latest), limit: List page size (default: 5), mode: Feed mode (one of 'chrono', 'annotated', or 'stacks')",
                        "name": "X-Textile-Opts",
                        "in": "header"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "feed",
                        "schema": {
                            "$ref": "#/definitions/pb.FeedItemList"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/file/{hash}/content": {
            "get": {
                "description": "Returns decrypted raw content for file",
                "produces": [
                    "application/octet-stream"
                ],
                "tags": [
                    "files"
                ],
                "summary": "File content at hash",
                "parameters": [
                    {
                        "type": "string",
                        "description": "file hash",
                        "name": "hash",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/file/{target}/meta": {
            "get": {
                "description": "Returns the metadata for file",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "files"
                ],
                "summary": "File metadata at hash",
                "parameters": [
                    {
                        "type": "string",
                        "description": "file hash",
                        "name": "hash",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "file",
                        "schema": {
                            "$ref": "#/definitions/pb.FileIndex"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/files": {
            "get": {
                "description": "Paginates thread files. If thread id not provided, paginate all files.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "files"
                ],
                "summary": "Paginates thread files",
                "parameters": [
                    {
                        "type": "string",
                        "default": "thread=,offset=,limit=5",
                        "description": "thread: Thread ID. Omit for all, offset: Offset ID to start listing from. Omit for latest, limit: List page size. (default: 5)",
                        "name": "X-Textile-Opts",
                        "in": "header"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "files",
                        "schema": {
                            "$ref": "#/definitions/pb.FilesList"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/invites": {
            "get": {
                "description": "Lists all pending thread invites",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "invites"
                ],
                "summary": "List invites",
                "responses": {
                    "200": {
                        "description": "invites",
                        "schema": {
                            "$ref": "#/definitions/pb.InviteViewList"
                        }
                    }
                }
            },
            "post": {
                "description": "Creates a direct account-to-account or external invite to a thread",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "invites"
                ],
                "summary": "Create an invite to a thread",
                "parameters": [
                    {
                        "type": "string",
                        "default": "thread=,address=",
                        "description": "thread: Thread ID (can also use 'default'), address: Account Address (omit to create an external invite)",
                        "name": "X-Textile-Opts",
                        "in": "header"
                    }
                ],
                "responses": {
                    "201": {
                        "description": "invite",
                        "schema": {
                            "$ref": "#/definitions/pb.ExternalInvite"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/invites/{id}/accept": {
            "post": {
                "description": "Accepts a direct peer-to-peer or external invite to a thread. Use the key option\nwith an external invite",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "invites"
                ],
                "summary": "Accept a thread invite",
                "parameters": [
                    {
                        "type": "string",
                        "description": "invite id",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "default": "key=",
                        "description": "key: key for an external invite",
                        "name": "X-Textile-Opts",
                        "in": "header"
                    }
                ],
                "responses": {
                    "201": {
                        "description": "join block",
                        "schema": {
                            "$ref": "#/definitions/pb.Block"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "409": {
                        "description": "Conflict",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/invites/{id}/ignore": {
            "post": {
                "description": "Ignores a direct peer-to-peer invite to a thread",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "invites"
                ],
                "summary": "Ignore a thread invite",
                "parameters": [
                    {
                        "type": "string",
                        "description": "invite id",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "ok",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/ipfs/cat/{path}": {
            "get": {
                "description": "Displays the data behind an IPFS CID (hash) or Path",
                "produces": [
                    "application/octet-stream"
                ],
                "tags": [
                    "ipfs"
                ],
                "summary": "Cat IPFS data",
                "parameters": [
                    {
                        "type": "string",
                        "description": "ipfs/ipns cid",
                        "name": "path",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "default": "key=",
                        "description": "key: Key to decrypt data on-the-fly",
                        "name": "X-Textile-Opts",
                        "in": "header"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "data",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "integer"
                            }
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/ipfs/id": {
            "get": {
                "description": "Displays underlying IPFS peer ID",
                "produces": [
                    "text/plain"
                ],
                "tags": [
                    "ipfs"
                ],
                "summary": "Get IPFS peer ID",
                "responses": {
                    "200": {
                        "description": "peer id",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/ipfs/pubsub/pub/{topic}": {
            "post": {
                "description": "Publishes a message to a given pubsub topic",
                "consumes": [
                    "application/octet-stream"
                ],
                "produces": [
                    "text/plain"
                ],
                "tags": [
                    "ipfs"
                ],
                "summary": "Publish a message",
                "responses": {
                    "204": {
                        "description": "ok",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/ipfs/pubsub/sub/{topic}": {
            "get": {
                "description": "Subscribes to messages on a given topic",
                "produces": [
                    "text/event-stream with events",
                    " or just application/json"
                ],
                "tags": [
                    "ipfs"
                ],
                "summary": "Subscribe messages",
                "responses": {
                    "200": {
                        "description": "results stream",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/ipfs/swarm/connect": {
            "post": {
                "description": "Opens a new direct connection to a peer using an IPFS multiaddr",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "ipfs"
                ],
                "summary": "Opens a new direct connection to a peer address",
                "parameters": [
                    {
                        "type": "string",
                        "description": "peer address",
                        "name": "X-Textile-Args",
                        "in": "header",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "ok",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "string"
                            }
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/ipfs/swarm/peers": {
            "get": {
                "description": "Lists the set of peers this node is connected to",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "ipfs"
                ],
                "summary": "List swarm peers",
                "parameters": [
                    {
                        "type": "string",
                        "default": "verbose=\"false\",latency=\"false\",streams=\"false\",direction=\"false\"",
                        "description": "verbose: Display all extra information, latency: Also list information about latency to each peer, streams: Also list information about open streams for each peer, direction: Also list information about the direction of connection",
                        "name": "X-Textile-Opts",
                        "in": "header"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "connection",
                        "schema": {
                            "$ref": "#/definitions/ipfs.ConnInfos"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/keys/{target}": {
            "get": {
                "description": "Shows file keys under the given target from an add",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "files"
                ],
                "summary": "Show file keys",
                "parameters": [
                    {
                        "type": "string",
                        "description": "target id",
                        "name": "target",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "keys",
                        "schema": {
                            "$ref": "#/definitions/pb.Keys"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/logs/{subsystem}": {
            "post": {
                "description": "List or change the verbosity of one or all subsystems log output. Textile logs\npiggyback on the IPFS event logs",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "utils"
                ],
                "summary": "Access subsystem logs",
                "parameters": [
                    {
                        "type": "string",
                        "description": "subsystem logging identifier (omit for all)",
                        "name": "subsystem",
                        "in": "path"
                    },
                    {
                        "type": "string",
                        "default": "level=,tex-only=\"false\"",
                        "description": "level: Log-level (one of: debug, info, warning, error, critical, or ",
                        "name": "X-Textile-Opts",
                        "in": "header"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "subsystems",
                        "schema": {
                            "$ref": "#/definitions/api.SubsystemInfo"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/messages": {
            "get": {
                "description": "Paginates thread messages",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "messages"
                ],
                "summary": "Paginates thread messages",
                "parameters": [
                    {
                        "type": "string",
                        "default": "thread=,offset=,limit=10",
                        "description": "thread: Thread ID (can also use 'default', omit for all), offset: Offset ID to start listing from (omit for latest), limit: List page size (default: 5)",
                        "name": "X-Textile-Opts",
                        "in": "header"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "messages",
                        "schema": {
                            "$ref": "#/definitions/pb.TextList"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/messages/{block}": {
            "get": {
                "description": "Gets a thread message by block ID",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "messages"
                ],
                "summary": "Get thread message",
                "parameters": [
                    {
                        "type": "string",
                        "description": "block id",
                        "name": "block",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "message",
                        "schema": {
                            "$ref": "#/definitions/pb.Text"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/mills/blob": {
            "post": {
                "description": "Takes a binary data blob, and optionally encrypts it, before adding to IPFS,\nand returns a file object",
                "consumes": [
                    "multipart/form-data"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "mills"
                ],
                "summary": "Process raw data blobs",
                "parameters": [
                    {
                        "type": "file",
                        "description": "multipart/form-data file",
                        "name": "file",
                        "in": "formData"
                    },
                    {
                        "type": "string",
                        "default": "plaintext=false,use=\"\"",
                        "description": "plaintext: whether to leave unencrypted), use: if empty, assumes body contains multipart form file data, otherwise, will attempt to fetch given CID from IPFS",
                        "name": "X-Textile-Opts",
                        "in": "header"
                    }
                ],
                "responses": {
                    "201": {
                        "description": "file",
                        "schema": {
                            "$ref": "#/definitions/pb.FileIndex"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/mills/image/exif": {
            "post": {
                "description": "Takes an input image, and extracts its EXIF data (optionally encrypting output),\nbefore adding to IPFS, and returns a file object",
                "consumes": [
                    "multipart/form-data"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "mills"
                ],
                "summary": "Extract EXIF data from image",
                "parameters": [
                    {
                        "type": "file",
                        "description": "multipart/form-data file",
                        "name": "file",
                        "in": "formData"
                    },
                    {
                        "type": "string",
                        "default": "plaintext=false,use=\"\"",
                        "description": "plaintext: whether to leave unencrypted, use: if empty, assumes body contains multipart form file data, otherwise, will attempt to fetch given CID from IPFS",
                        "name": "X-Textile-Opts",
                        "in": "header"
                    }
                ],
                "responses": {
                    "201": {
                        "description": "file",
                        "schema": {
                            "$ref": "#/definitions/pb.FileIndex"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/mills/image/resize": {
            "post": {
                "description": "Takes an input image, and resizes/resamples it (optionally encrypting output),\nbefore adding to IPFS, and returns a file object",
                "consumes": [
                    "multipart/form-data"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "mills"
                ],
                "summary": "Resize an image",
                "parameters": [
                    {
                        "type": "file",
                        "description": "multipart/form-data file",
                        "name": "file",
                        "in": "formData"
                    },
                    {
                        "type": "string",
                        "default": "plaintext=false,use=\"\",quality=75,width=100",
                        "description": "plaintext: whether to leave unencrypted, use: if empty, assumes body contains multipart form file data, otherwise, will attempt to fetch given CID from IPFS, width: the requested image width (required), quality: the requested JPEG image quality",
                        "name": "X-Textile-Opts",
                        "in": "header",
                        "required": true
                    }
                ],
                "responses": {
                    "201": {
                        "description": "file",
                        "schema": {
                            "$ref": "#/definitions/pb.FileIndex"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/mills/json": {
            "post": {
                "description": "Takes an input JSON document, validates it according to its json-schema.org definition,\noptionally encrypts the output before adding to IPFS, and returns a file object",
                "consumes": [
                    "multipart/form-data"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "mills"
                ],
                "summary": "Process input JSON data",
                "parameters": [
                    {
                        "type": "file",
                        "description": "multipart/form-data file",
                        "name": "file",
                        "in": "formData"
                    },
                    {
                        "type": "string",
                        "default": "plaintext=\"false\",use=\"\"",
                        "description": "plaintext: whether to leave unencrypted, use: if empty, assumes body contains multipart form file data, otherwise, will attempt to fetch given CID from IPFS",
                        "name": "X-Textile-Opts",
                        "in": "header"
                    }
                ],
                "responses": {
                    "201": {
                        "description": "file",
                        "schema": {
                            "$ref": "#/definitions/pb.FileIndex"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/mills/schema": {
            "post": {
                "description": "Takes a JSON-based Schema, validates it, adds it to IPFS, and returns a file object",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "mills"
                ],
                "summary": "Validate, add, and pin a new Schema",
                "parameters": [
                    {
                        "description": "schema",
                        "name": "schema",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/pb.Node"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "file",
                        "schema": {
                            "$ref": "#/definitions/pb.FileIndex"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/notifications": {
            "get": {
                "description": "Lists all notifications generated by thread and account activity.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "notifications"
                ],
                "summary": "List notifications",
                "responses": {
                    "200": {
                        "description": "notifications",
                        "schema": {
                            "$ref": "#/definitions/pb.NotificationList"
                        }
                    }
                }
            }
        },
        "/notifications/{id}/read": {
            "post": {
                "description": "Marks a notifiction as read by ID. Use 'all' to mark all as read.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "notifications"
                ],
                "summary": "Mark notifiction as read",
                "parameters": [
                    {
                        "type": "string",
                        "description": "notification id",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "ok",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/observe/{id}": {
            "get": {
                "description": "Observes updates in a thread or all threads. An update is generated\nwhen a new block is added to a thread. There are several update types:\nMERGE, IGNORE, FLAG, JOIN, ANNOUNCE, LEAVE, TEXT, FILES, COMMENT, LIKE",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "observe"
                ],
                "summary": "Observe thread updates",
                "parameters": [
                    {
                        "type": "string",
                        "description": "thread id, omit to stream all events",
                        "name": "thread",
                        "in": "path"
                    },
                    {
                        "type": "string",
                        "default": "type=,events=\"false\"",
                        "description": "type: Or'd list of event types (e.g., FILES|COMMENTS|LIKES) or empty to include all types, events: Whether to emit Server-Sent Events (SSEvent) or plain JSON",
                        "name": "X-Textile-Opts",
                        "in": "header"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "stream of updates",
                        "schema": {
                            "$ref": "#/definitions/pb.FeedItem"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/ping": {
            "get": {
                "description": "Pings another peer on the network, returning online|offline.",
                "produces": [
                    "text/plain"
                ],
                "tags": [
                    "utils"
                ],
                "summary": "Ping a network peer",
                "parameters": [
                    {
                        "type": "string",
                        "description": "peerid",
                        "name": "X-Textile-Args",
                        "in": "header",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "One of online|offline",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/profile": {
            "get": {
                "description": "Gets the local node's public profile",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "profile"
                ],
                "summary": "Get public profile",
                "responses": {
                    "200": {
                        "description": "peer",
                        "schema": {
                            "$ref": "#/definitions/pb.Peer"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/profile/avatar": {
            "post": {
                "description": "Forces local node to update avatar image to latest image added to 'account' thread",
                "produces": [
                    "text/plain"
                ],
                "tags": [
                    "profile"
                ],
                "summary": "Set avatar",
                "responses": {
                    "201": {
                        "description": "ok",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/profile/name": {
            "post": {
                "description": "Sets public profile display name to given string",
                "produces": [
                    "text/plain"
                ],
                "tags": [
                    "profile"
                ],
                "summary": "Set display name",
                "parameters": [
                    {
                        "type": "string",
                        "description": "name",
                        "name": "X-Textile-Args",
                        "in": "header",
                        "required": true
                    }
                ],
                "responses": {
                    "201": {
                        "description": "ok",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/publish": {
            "post": {
                "description": "Publishes payload bytes to a topic on the network.",
                "consumes": [
                    "application/octet-stream"
                ],
                "produces": [
                    "text/plain"
                ],
                "tags": [
                    "utils"
                ],
                "summary": "Publish payload to topic",
                "parameters": [
                    {
                        "type": "string",
                        "description": "topic",
                        "name": "X-Textile-Args",
                        "in": "header",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "ok",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/snapshots": {
            "post": {
                "description": "Snapshots all threads and pushes to registered cafes",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "threads"
                ],
                "summary": "Create thread snapshots",
                "responses": {
                    "201": {
                        "description": "ok",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/snapshots/search": {
            "post": {
                "description": "Searches the network for thread snapshots",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "threads"
                ],
                "summary": "Search for thread snapshots",
                "parameters": [
                    {
                        "type": "string",
                        "default": "wait=5,events=\"false\"",
                        "description": "wait: Stops searching after 'wait' seconds have elapsed (max 30s), events: Whether to emit Server-Sent Events (SSEvent) or plain JSON",
                        "name": "X-Textile-Opts",
                        "in": "header"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "results stream",
                        "schema": {
                            "$ref": "#/definitions/pb.QueryResult"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/summary": {
            "get": {
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "utils"
                ],
                "summary": "Get a summary of node data",
                "responses": {
                    "200": {
                        "description": "summary",
                        "schema": {
                            "$ref": "#/definitions/pb.Summary"
                        }
                    }
                }
            }
        },
        "/threads": {
            "get": {
                "description": "Lists all local threads, returning a ThreadList object",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "threads"
                ],
                "summary": "Lists info on all threads",
                "responses": {
                    "200": {
                        "description": "threads",
                        "schema": {
                            "$ref": "#/definitions/pb.ThreadList"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            },
            "post": {
                "description": "Adds a new Thread with given name, type, and sharing and whitelist options, returning\na Thread object",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "threads"
                ],
                "summary": "Adds and joins a new thread",
                "parameters": [
                    {
                        "type": "string",
                        "description": "name",
                        "name": "X-Textile-Args",
                        "in": "header",
                        "required": true
                    },
                    {
                        "type": "string",
                        "default": "type=private,sharing=not_shared,whitelist=",
                        "description": "key: A locally unique key used by an app to identify this thread on recovery, schema: Existing Thread Schema IPFS CID, type: Set the thread type to one of 'private', 'read_only', 'public', or 'open', sharing: Set the thread sharing style to one of 'not_shared','invite_only', or 'shared', whitelist: An array of contact addresses. When supplied, the thread will not allow additional peers beyond those in array, useful for 1-1 chat/file sharing",
                        "name": "X-Textile-Opts",
                        "in": "header"
                    }
                ],
                "responses": {
                    "201": {
                        "description": "thread",
                        "schema": {
                            "$ref": "#/definitions/pb.Thread"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/threads/{id}": {
            "get": {
                "description": "Gets and displays info about a thread",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "threads"
                ],
                "summary": "Gets a thread",
                "parameters": [
                    {
                        "type": "string",
                        "description": "thread id",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "thread",
                        "schema": {
                            "$ref": "#/definitions/pb.Thread"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            },
            "put": {
                "description": "Adds or updates a thread directly, usually from a backup",
                "tags": [
                    "threads"
                ],
                "summary": "Add or update a thread directly",
                "parameters": [
                    {
                        "type": "string",
                        "description": "id",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "thread",
                        "name": "thread",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/pb.Thread"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "ok",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            },
            "delete": {
                "description": "Abandons a thread, and if no one else is participating, then the thread dissipates.",
                "tags": [
                    "threads"
                ],
                "summary": "Abandons a thread.",
                "parameters": [
                    {
                        "type": "string",
                        "description": "thread id",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "ok",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/threads/{id}/files": {
            "post": {
                "description": "Adds a file or directory of files to a thread. Files not supported by the thread\nschema are ignored. Nested directories are included. An existing file hash may\nalso be used as input.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "threads"
                ],
                "summary": "Adds a file or directory of files to a thread",
                "parameters": [
                    {
                        "description": "list of milled dirs (output from mill endpoint)",
                        "name": "dir",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/pb.DirectoryList"
                        }
                    },
                    {
                        "type": "string",
                        "default": "caption=",
                        "description": "caption: Caption to add to file(s)",
                        "name": "X-Textile-Opts",
                        "in": "header"
                    }
                ],
                "responses": {
                    "201": {
                        "description": "file",
                        "schema": {
                            "$ref": "#/definitions/pb.Files"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/threads/{id}/messages": {
            "post": {
                "description": "Adds a message to a thread",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "threads"
                ],
                "summary": "Add a message",
                "parameters": [
                    {
                        "type": "string",
                        "description": "urlescaped message body",
                        "name": "X-Textile-Args",
                        "in": "header",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "message",
                        "schema": {
                            "$ref": "#/definitions/pb.Text"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/threads/{id}/name": {
            "put": {
                "description": "Renames a thread. Only initiators can rename a thread.",
                "tags": [
                    "threads"
                ],
                "summary": "Rename a thread",
                "parameters": [
                    {
                        "type": "string",
                        "description": "id",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "name",
                        "name": "X-Textile-Args",
                        "in": "header",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "ok",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/threads/{id}/peers": {
            "get": {
                "description": "Lists all peers in a thread",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "threads"
                ],
                "summary": "List all thread peers",
                "parameters": [
                    {
                        "type": "string",
                        "description": "thread id",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "contacts",
                        "schema": {
                            "$ref": "#/definitions/pb.ContactList"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/tokens": {
            "get": {
                "description": "List info about all stored cafe tokens",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "tokens"
                ],
                "summary": "List local tokens",
                "responses": {
                    "200": {
                        "description": "tokens",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            },
            "post": {
                "description": "Generates an access token (44 random bytes) and saves a bcrypt hashed version for\nfuture lookup. The response contains a base58 encoded version of the random bytes\ntoken. If the 'store' option is set to false, the token is generated, but not\nstored in the local Cafe db. Alternatively, an existing token can be added using\nby specifying the 'token' option.\nTokens allow other peers to register with a Cafe peer.",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "tokens"
                ],
                "summary": "Create an access token",
                "parameters": [
                    {
                        "type": "string",
                        "default": "token=,store=\"true\"",
                        "description": "token: Use existing token, rather than creating a new one, store: Whether to store the added/generated token to the local db",
                        "name": "X-Textile-Opts",
                        "in": "header"
                    }
                ],
                "responses": {
                    "201": {
                        "description": "token",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        },
        "/tokens/{id}": {
            "get": {
                "description": "Check validity of existing cafe access token",
                "produces": [
                    "text/plain"
                ],
                "tags": [
                    "tokens"
                ],
                "summary": "Check token validity",
                "parameters": [
                    {
                        "type": "string",
                        "description": "invite id",
                        "name": "token",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "ok",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            },
            "delete": {
                "description": "Removes an existing cafe token",
                "tags": [
                    "tokens"
                ],
                "summary": "Removes a cafe token",
                "parameters": [
                    {
                        "type": "string",
                        "description": "token",
                        "name": "token",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "ok",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "string"
                        }
                    }
                }
            }
        }
    },
    "definitions": {
        "api.SubsystemInfo": {
            "type": "object",
            "additionalProperties": {
                "type": "string"
            }
        },
        "ipfs.ConnInfos": {
            "type": "object",
            "properties": {
                "peers": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/ipfs.connInfo"
                    }
                }
            }
        },
        "ipfs.connInfo": {
            "type": "object",
            "properties": {
                "addr": {
                    "type": "string"
                },
                "direction": {
                    "type": "string"
                },
                "latency": {
                    "type": "string"
                },
                "muxer": {
                    "type": "string"
                },
                "peer": {
                    "type": "string"
                },
                "streams": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/ipfs.streamInfo"
                    }
                }
            }
        },
        "ipfs.streamInfo": {
            "type": "object",
            "properties": {
                "protocol": {
                    "type": "string"
                }
            }
        },
        "mill.Json": {
            "type": "object"
        },
        "pb.Block": {
            "type": "object",
            "properties": {
                "attempts": {
                    "type": "integer"
                },
                "author": {
                    "type": "string"
                },
                "body": {
                    "type": "string"
                },
                "data": {
                    "type": "string"
                },
                "date": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "parents": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "status": {
                    "type": "integer"
                },
                "target": {
                    "type": "string"
                },
                "thread": {
                    "type": "string"
                },
                "type": {
                    "type": "integer"
                },
                "user": {
                    "description": "view info",
                    "type": "object",
                    "$ref": "#/definitions/pb.User"
                }
            }
        },
        "pb.BlockList": {
            "type": "object",
            "properties": {
                "items": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/pb.Block"
                    }
                }
            }
        },
        "pb.Cafe": {
            "type": "object",
            "properties": {
                "address": {
                    "type": "string"
                },
                "api": {
                    "type": "string"
                },
                "node": {
                    "type": "string"
                },
                "peer": {
                    "type": "string"
                },
                "protocol": {
                    "type": "string"
                },
                "url": {
                    "type": "string"
                }
            }
        },
        "pb.CafeSession": {
            "type": "object",
            "properties": {
                "access": {
                    "type": "string"
                },
                "cafe": {
                    "type": "object",
                    "$ref": "#/definitions/pb.Cafe"
                },
                "exp": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "refresh": {
                    "type": "string"
                },
                "rexp": {
                    "type": "string"
                },
                "subject": {
                    "type": "string"
                },
                "type": {
                    "type": "string"
                }
            }
        },
        "pb.CafeSessionList": {
            "type": "object",
            "properties": {
                "items": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/pb.CafeSession"
                    }
                }
            }
        },
        "pb.Comment": {
            "type": "object",
            "properties": {
                "body": {
                    "type": "string"
                },
                "date": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "target": {
                    "type": "object",
                    "$ref": "#/definitions/pb.FeedItem"
                },
                "user": {
                    "type": "object",
                    "$ref": "#/definitions/pb.User"
                }
            }
        },
        "pb.CommentList": {
            "type": "object",
            "properties": {
                "items": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/pb.Comment"
                    }
                }
            }
        },
        "pb.Contact": {
            "type": "object",
            "properties": {
                "address": {
                    "type": "string"
                },
                "avatar": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "peers": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/pb.Peer"
                    }
                },
                "threads": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            }
        },
        "pb.ContactList": {
            "type": "object",
            "properties": {
                "items": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/pb.Contact"
                    }
                }
            }
        },
        "pb.Directory": {
            "type": "object",
            "properties": {
                "files": {
                    "type": "object",
                    "additionalProperties": {
                        "$ref": "#/definitions/pb.FileIndex"
                    }
                }
            }
        },
        "pb.DirectoryList": {
            "type": "object",
            "properties": {
                "items": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/pb.Directory"
                    }
                }
            }
        },
        "pb.ExternalInvite": {
            "type": "object",
            "properties": {
                "id": {
                    "type": "string"
                },
                "inviter": {
                    "type": "string"
                },
                "key": {
                    "type": "string"
                }
            }
        },
        "pb.FeedItem": {
            "type": "object",
            "properties": {
                "block": {
                    "type": "string"
                },
                "payload": {
                    "type": "string"
                },
                "thread": {
                    "type": "string"
                }
            }
        },
        "pb.FeedItemList": {
            "type": "object",
            "properties": {
                "count": {
                    "type": "integer"
                },
                "items": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/pb.FeedItem"
                    }
                },
                "next": {
                    "type": "string"
                }
            }
        },
        "pb.File": {
            "type": "object",
            "properties": {
                "file": {
                    "type": "object",
                    "$ref": "#/definitions/pb.FileIndex"
                },
                "index": {
                    "type": "integer"
                },
                "links": {
                    "type": "object",
                    "additionalProperties": {
                        "$ref": "#/definitions/pb.FileIndex"
                    }
                }
            }
        },
        "pb.FileIndex": {
            "type": "object",
            "properties": {
                "added": {
                    "type": "string"
                },
                "checksum": {
                    "type": "string"
                },
                "hash": {
                    "type": "string"
                },
                "key": {
                    "type": "string"
                },
                "media": {
                    "type": "string"
                },
                "meta": {
                    "type": "string"
                },
                "mill": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "opts": {
                    "type": "string"
                },
                "size": {
                    "type": "integer"
                },
                "source": {
                    "type": "string"
                },
                "targets": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            }
        },
        "pb.Files": {
            "type": "object",
            "properties": {
                "block": {
                    "type": "string"
                },
                "caption": {
                    "type": "string"
                },
                "comments": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/pb.Comment"
                    }
                },
                "data": {
                    "type": "string"
                },
                "date": {
                    "type": "string"
                },
                "files": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/pb.File"
                    }
                },
                "likes": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/pb.Like"
                    }
                },
                "target": {
                    "type": "string"
                },
                "threads": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "user": {
                    "type": "object",
                    "$ref": "#/definitions/pb.User"
                }
            }
        },
        "pb.FilesList": {
            "type": "object",
            "properties": {
                "items": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/pb.Files"
                    }
                }
            }
        },
        "pb.InviteView": {
            "type": "object",
            "properties": {
                "date": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "inviter": {
                    "type": "object",
                    "$ref": "#/definitions/pb.User"
                },
                "name": {
                    "type": "string"
                }
            }
        },
        "pb.InviteViewList": {
            "type": "object",
            "properties": {
                "items": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/pb.InviteView"
                    }
                }
            }
        },
        "pb.Keys": {
            "type": "object",
            "properties": {
                "files": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    }
                }
            }
        },
        "pb.Like": {
            "type": "object",
            "properties": {
                "date": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "target": {
                    "type": "object",
                    "$ref": "#/definitions/pb.FeedItem"
                },
                "user": {
                    "type": "object",
                    "$ref": "#/definitions/pb.User"
                }
            }
        },
        "pb.LikeList": {
            "type": "object",
            "properties": {
                "items": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/pb.Like"
                    }
                }
            }
        },
        "pb.Link": {
            "type": "object",
            "properties": {
                "json_schema": {
                    "type": "string"
                },
                "mill": {
                    "type": "string"
                },
                "opts": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    }
                },
                "pin": {
                    "type": "boolean"
                },
                "plaintext": {
                    "type": "boolean"
                },
                "use": {
                    "type": "string"
                }
            }
        },
        "pb.Node": {
            "type": "object",
            "properties": {
                "json_schema": {
                    "type": "string"
                },
                "links": {
                    "type": "object",
                    "additionalProperties": {
                        "$ref": "#/definitions/pb.Link"
                    }
                },
                "mill": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "opts": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    }
                },
                "pin": {
                    "type": "boolean"
                },
                "plaintext": {
                    "type": "boolean"
                }
            }
        },
        "pb.Notification": {
            "type": "object",
            "properties": {
                "actor": {
                    "type": "string"
                },
                "block": {
                    "type": "string"
                },
                "body": {
                    "type": "string"
                },
                "date": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "read": {
                    "type": "boolean"
                },
                "subject": {
                    "type": "string"
                },
                "subject_desc": {
                    "type": "string"
                },
                "target": {
                    "type": "string"
                },
                "type": {
                    "type": "integer"
                },
                "user": {
                    "description": "view info",
                    "type": "object",
                    "$ref": "#/definitions/pb.User"
                }
            }
        },
        "pb.NotificationList": {
            "type": "object",
            "properties": {
                "items": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/pb.Notification"
                    }
                }
            }
        },
        "pb.Peer": {
            "type": "object",
            "properties": {
                "address": {
                    "type": "string"
                },
                "avatar": {
                    "type": "string"
                },
                "created": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "inboxes": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/pb.Cafe"
                    }
                },
                "name": {
                    "type": "string"
                },
                "updated": {
                    "type": "string"
                }
            }
        },
        "pb.QueryResult": {
            "type": "object",
            "properties": {
                "date": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "local": {
                    "type": "boolean"
                },
                "value": {
                    "type": "string"
                }
            }
        },
        "pb.Summary": {
            "type": "object",
            "properties": {
                "account_peer_count": {
                    "type": "integer"
                },
                "address": {
                    "type": "string"
                },
                "contact_count": {
                    "type": "integer"
                },
                "files_count": {
                    "type": "integer"
                },
                "id": {
                    "type": "string"
                },
                "thread_count": {
                    "type": "integer"
                }
            }
        },
        "pb.Text": {
            "type": "object",
            "properties": {
                "block": {
                    "type": "string"
                },
                "body": {
                    "type": "string"
                },
                "comments": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/pb.Comment"
                    }
                },
                "date": {
                    "type": "string"
                },
                "likes": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/pb.Like"
                    }
                },
                "user": {
                    "type": "object",
                    "$ref": "#/definitions/pb.User"
                }
            }
        },
        "pb.TextList": {
            "type": "object",
            "properties": {
                "items": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/pb.Text"
                    }
                }
            }
        },
        "pb.Thread": {
            "type": "object",
            "properties": {
                "block_count": {
                    "type": "integer"
                },
                "head": {
                    "type": "string"
                },
                "head_blocks": {
                    "description": "view info",
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/pb.Block"
                    }
                },
                "id": {
                    "type": "string"
                },
                "initiator": {
                    "type": "string"
                },
                "key": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "peer_count": {
                    "type": "integer"
                },
                "schema": {
                    "type": "string"
                },
                "schema_node": {
                    "type": "object",
                    "$ref": "#/definitions/pb.Node"
                },
                "sharing": {
                    "type": "integer"
                },
                "sk": {
                    "type": "array",
                    "items": {
                        "type": "integer"
                    }
                },
                "state": {
                    "description": "Deprecated: Do not use.",
                    "type": "integer"
                },
                "type": {
                    "type": "integer"
                },
                "whitelist": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            }
        },
        "pb.ThreadList": {
            "type": "object",
            "properties": {
                "items": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/pb.Thread"
                    }
                }
            }
        },
        "pb.User": {
            "type": "object",
            "properties": {
                "address": {
                    "type": "string"
                },
                "avatar": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                }
            }
        }
    },
    "securityDefinitions": {
        "BasicAuth": {
            "type": "basic"
        }
    }
}