GoWave API

Contract 3.4.15

GoWave API

GoWave implements the Remnawave backend API, contract @remnawave/backend-contract 3.4.15. Requests go to your panel: https://<panel domain>/api/... with Authorization: Bearer <token>. Endpoints GoWave adds on top of the contract are under GoWave extensions.

Authentication

Send requests to your panel at https://<panel domain>/api/…. Each endpoint lists its authentication requirements.

Security schemes
{
  "bearerAuth": {
    "type": "http",
    "scheme": "bearer",
    "bearerFormat": "JWT"
  }
}

GoWave extensions

Endpoints GoWave adds on top of @remnawave/backend-contract. Remnawave clients and bots do not call them; the GoWave web interface does.

GET/api/nodes/traffic-summaryGet lifetime node traffic

Raw bytes each node has served since it was added, summed from the usage history. Monthly resets of trafficUsedBytes do not clear it, and the node consumption multiplier is not applied. Nodes without recorded traffic are absent.

Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: 200
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "required": [
          "response"
        ],
        "properties": {
          "response": {
            "type": "object",
            "required": [
              "nodes"
            ],
            "properties": {
              "nodes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "required": [
                    "uuid",
                    "lifetimeTrafficBytes"
                  ],
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid"
                    },
                    "lifetimeTrafficBytes": {
                      "type": "integer",
                      "minimum": 0
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
GET/api/nodes/{uuid}/logsGet node logs

Last lines of the Xray or node log, read from the node. Works with the Go node; remnawave/node has no such endpoint. If the node cannot be reached, the response is still 200 with a single [ERROR] ... line.

Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string",
      "format": "uuid"
    }
  },
  {
    "name": "type",
    "in": "query",
    "schema": {
      "type": "string",
      "enum": [
        "xray",
        "node"
      ],
      "default": "xray"
    }
  },
  {
    "name": "lines",
    "in": "query",
    "schema": {
      "type": "integer",
      "minimum": 1,
      "default": 500
    }
  }
]

Responses

Response: 200
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "required": [
          "response"
        ],
        "properties": {
          "response": {
            "type": "object",
            "required": [
              "logs"
            ],
            "properties": {
              "logs": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    }
  }
}
Response: 404
{
  "description": "Node not found."
}
GET/api/nodes/{uuid}/updatesCheck node updates

Asks a Go node for its versions and the releases it can install. Without repo the node lists aaaSaZaN/remnanode-go releases; pass XTLS/Xray-core for the core. If the node cannot fetch the releases, response holds only error.

Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string",
      "format": "uuid"
    }
  },
  {
    "name": "repo",
    "in": "query",
    "description": "GitHub repository, `owner/name`.",
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: 200
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "required": [
          "response"
        ],
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "currentVersion": {
                "type": "string",
                "description": "Node version."
              },
              "currentCoreVersion": {
                "type": "string",
                "description": "Xray core version."
              },
              "architecture": {
                "type": "string"
              },
              "os": {
                "type": "string"
              },
              "latestRelease": {
                "$ref": "#/components/schemas/GoWaveNodeRelease"
              },
              "latestPrerelease": {
                "$ref": "#/components/schemas/GoWaveNodeRelease"
              },
              "allReleases": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/GoWaveNodeRelease"
                }
              },
              "error": {
                "type": "string"
              }
            }
          }
        }
      }
    }
  }
}
Response: 404
{
  "description": "Node not found."
}
Response: 502
{
  "description": "The node did not answer."
}
POST/api/nodes/{uuid}/updates/applyUpdate node or core

Installs the given release of the Go node or its Xray core. The body goes to the node as is. The node checks the checksum, keeps the previous binary and restarts; the panel re-checks its health two seconds later.

Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string",
      "format": "uuid"
    }
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "required": [
          "type",
          "version"
        ],
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "node",
              "core"
            ]
          },
          "version": {
            "type": "string",
            "description": "Release tag, as `tag_name` in `GET /api/nodes/{uuid}/updates`."
          },
          "repo": {
            "type": "string",
            "description": "Defaults to `aaaSaZaN/remnanode-go` for `node` and `XTLS/Xray-core` for `core`."
          }
        }
      }
    }
  }
}

Responses

Response: 200
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "required": [
          "response"
        ],
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "success": {
                "type": "boolean"
              },
              "version": {
                "type": "string"
              }
            }
          }
        }
      }
    }
  }
}
Response: 400
{
  "description": "Invalid body."
}
Response: 404
{
  "description": "Node not found."
}
Response: 502
{
  "description": "The node refused the update or did not answer."
}
GET/api/system/updates/checkCheck panel updates

Compares the running version with the latest GoWave release on GitHub. The body is not wrapped in response. In Docker canAutoUpdate is false and updateCommand holds the command to run on the server.

Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: 200
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "required": [
          "currentVersion",
          "latestVersion",
          "changelog",
          "hasUpdate",
          "isDocker",
          "canAutoUpdate"
        ],
        "properties": {
          "currentVersion": {
            "type": "string"
          },
          "latestVersion": {
            "type": "string"
          },
          "changelog": {
            "type": "string",
            "description": "Release notes in Markdown."
          },
          "hasUpdate": {
            "type": "boolean"
          },
          "isDocker": {
            "type": "boolean"
          },
          "canAutoUpdate": {
            "type": "boolean"
          },
          "updateCommand": {
            "type": "string"
          }
        }
      }
    }
  }
}
Response: 502
{
  "description": "GitHub did not answer. The body is plain text."
}
POST/api/system/updates/applyUpdate the panel

Systemd installs only. Downloads the latest release binary and web interface, replaces them and exits two seconds after answering; systemd starts the new version (Restart=always).

Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: 200
{
  "description": "Files replaced, the panel is restarting.",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          }
        }
      }
    }
  }
}
Response: 400
{
  "description": "Running in Docker. The body is plain text with the update command."
}
Response: 500
{
  "description": "Download or replacement failed; the old version keeps running. The body is plain text."
}
POST/api/system/actions/restoreRestore from backup

Replaces the panel data with a backup: a .tar.gz archive with a *.sql.gz PostgreSQL dump inside, as Remnawave makes them. The dump is loaded into a staging database first, so a broken backup leaves the live data untouched.

Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "multipart/form-data": {
      "schema": {
        "type": "object",
        "required": [
          "file"
        ],
        "properties": {
          "file": {
            "type": "string",
            "format": "binary"
          }
        }
      }
    }
  }
}

Responses

Response: 200
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "required": [
          "response"
        ],
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "message": {
                "type": "string"
              }
            }
          }
        }
      }
    }
  }
}
Response: 400
{
  "description": "No file, or the backup could not be restored."
}

auth

POST/api/auth/loginLogin as superadmin
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "description": "Username of the user"
          },
          "password": {
            "type": "string",
            "description": "Password of the user"
          }
        },
        "required": [
          "username",
          "password"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "accessToken": {
                "type": "string"
              }
            },
            "required": [
              "accessToken"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/auth/oauth2/authorizeInitiate OAuth2 authorization
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "provider": {
            "type": "string",
            "enum": [
              "telegram",
              "github",
              "pocketid",
              "yandex",
              "keycloak",
              "generic"
            ],
            "description": "`yandex` is not supported by GoWave."
          }
        },
        "required": [
          "provider"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "authorizationUrl": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uri"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "authorizationUrl"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/auth/oauth2/callbackCallback from OAuth2
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "provider": {
            "type": "string",
            "enum": [
              "telegram",
              "github",
              "pocketid",
              "yandex",
              "keycloak",
              "generic"
            ],
            "description": "`yandex` is not supported by GoWave."
          },
          "code": {
            "type": "string"
          },
          "state": {
            "type": "string"
          }
        },
        "required": [
          "provider",
          "code",
          "state"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "accessToken": {
                "type": "string"
              }
            },
            "required": [
              "accessToken"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/auth/passkey/authentication/optionsGet the authentication options for passkey
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {}
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/auth/passkey/authentication/verifyVerify the authentication for passkey
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {}
        },
        "required": [
          "response"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "accessToken": {
                "type": "string"
              }
            },
            "required": [
              "accessToken"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/auth/registerRegister as superadmin
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "description": "Username of the user"
          },
          "password": {
            "type": "string",
            "minLength": 24,
            "pattern": "^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9]).{24,}$"
          }
        },
        "required": [
          "username",
          "password"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "accessToken": {
                "type": "string"
              }
            },
            "required": [
              "accessToken"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/auth/statusGet the status of the authentication
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "isLoginAllowed": {
                "type": "boolean"
              },
              "isRegisterAllowed": {
                "type": "boolean"
              },
              "authentication": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "passkey": {
                        "type": "object",
                        "properties": {
                          "enabled": {
                            "type": "boolean"
                          }
                        },
                        "required": [
                          "enabled"
                        ],
                        "additionalProperties": false
                      },
                      "oauth2": {
                        "type": "object",
                        "properties": {
                          "providers": {
                            "type": "object",
                            "propertyNames": {
                              "type": "string",
                              "enum": [
                                "telegram",
                                "github",
                                "pocketid",
                                "yandex",
                                "keycloak",
                                "generic"
                              ]
                            },
                            "additionalProperties": {
                              "type": "boolean"
                            },
                            "required": [
                              "telegram",
                              "github",
                              "pocketid",
                              "yandex",
                              "keycloak",
                              "generic"
                            ]
                          }
                        },
                        "required": [
                          "providers"
                        ],
                        "additionalProperties": false
                      },
                      "password": {
                        "type": "object",
                        "properties": {
                          "enabled": {
                            "type": "boolean"
                          }
                        },
                        "required": [
                          "enabled"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "passkey",
                      "oauth2",
                      "password"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "branding": {
                "type": "object",
                "properties": {
                  "title": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "logoUrl": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                },
                "required": [
                  "title",
                  "logoUrl"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "isLoginAllowed",
              "isRegisterAllowed",
              "authentication",
              "branding"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}

bandwidth-stats

GET/api/bandwidth-stats/internal-squads/{squadUuid}/users/{userId}/usageGet a single user daily traffic usage on the internal squad nodes for a period

Returns users whose total usage over the period on the given nodes is >= minTotalBytes, scoped to the nodes reachable via the Internal Squad inbounds. Every day in the range is present (zero-filled). Underlying usage data is flushed to the database roughly every 2 minutes.

Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "squadUuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  },
  {
    "name": "userId",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  },
  {
    "name": "start",
    "in": "query",
    "required": true,
    "schema": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      "description": "Start date (YYYY-MM-DD)"
    }
  },
  {
    "name": "end",
    "in": "query",
    "required": true,
    "schema": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      "description": "End date (YYYY-MM-DD)"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "days": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "date": {
                      "type": "string",
                      "description": "Day (YYYY-MM-DD)"
                    },
                    "nodes": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "uuid": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                          },
                          "totalBytes": {
                            "type": "number",
                            "description": "Used bytes on this node that day (raw bytes)"
                          }
                        },
                        "required": [
                          "uuid",
                          "totalBytes"
                        ],
                        "additionalProperties": false
                      }
                    }
                  },
                  "required": [
                    "date",
                    "nodes"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "days"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/bandwidth-stats/internal-squads/{uuid}/usageGet internal squad users traffic usage for a period

Returns users whose total usage over the period on the given nodes is >= minTotalBytes, scoped to the nodes reachable via the internal squad inbounds. Underlying usage data is flushed to the database roughly every 2 minutes.

Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  },
  {
    "name": "start",
    "in": "query",
    "required": true,
    "schema": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      "description": "Start date (YYYY-MM-DD)"
    }
  },
  {
    "name": "end",
    "in": "query",
    "required": true,
    "schema": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      "description": "End date (YYYY-MM-DD)"
    }
  },
  {
    "name": "minTotalBytes",
    "in": "query",
    "required": false,
    "schema": {
      "default": 0,
      "description": "Only include users whose total usage over the period is >= this (bytes)",
      "type": "number",
      "minimum": 0
    }
  },
  {
    "name": "limit",
    "in": "query",
    "required": false,
    "schema": {
      "default": 250,
      "description": "Number of users to return, no more than 1000",
      "type": "number",
      "minimum": 1,
      "maximum": 1000
    }
  },
  {
    "name": "cursor",
    "in": "query",
    "required": false,
    "schema": {
      "description": "Pass the nextCursor from the previous response. Omit on the first request.",
      "type": "number"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "squadUuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "users": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "number"
                    },
                    "totalBytes": {
                      "type": "number",
                      "description": "Total used bytes over the period (raw bytes)"
                    }
                  },
                  "required": [
                    "id",
                    "totalBytes"
                  ],
                  "additionalProperties": false
                }
              },
              "nextCursor": {
                "description": "Cursor to fetch the next page, or null if there are no more results",
                "type": [
                  "string",
                  "null"
                ]
              },
              "hasMore": {
                "type": "boolean",
                "description": "Whether there are more results to fetch"
              }
            },
            "required": [
              "squadUuid",
              "users",
              "nextCursor",
              "hasMore"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/bandwidth-stats/nodes/{uuid}/usersGet Node Users Usage by Node UUID
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  },
  {
    "name": "start",
    "in": "query",
    "required": true,
    "schema": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      "description": "Start date (YYYY-MM-DD)"
    }
  },
  {
    "name": "end",
    "in": "query",
    "required": true,
    "schema": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      "description": "End date (YYYY-MM-DD)"
    }
  },
  {
    "name": "topUsersLimit",
    "in": "query",
    "required": false,
    "schema": {
      "default": 100,
      "type": "number",
      "minimum": 1
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "categories": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "sparklineData": {
                "type": "array",
                "items": {
                  "type": "number"
                }
              },
              "topUsers": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "color": {
                      "type": "string"
                    },
                    "username": {
                      "type": "string"
                    },
                    "total": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "color",
                    "username",
                    "total"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "categories",
              "sparklineData",
              "topUsers"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/bandwidth-stats/nodes/usageGet users exceeding a traffic threshold on the given nodes for a period

Returns users whose total usage over the period on the given nodes is >= minTotalBytes. Underlying usage data is flushed to the database roughly every 2 minutes.

Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "start",
    "in": "query",
    "required": true,
    "schema": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      "description": "Start date (YYYY-MM-DD)"
    }
  },
  {
    "name": "end",
    "in": "query",
    "required": true,
    "schema": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      "description": "End date (YYYY-MM-DD)"
    }
  },
  {
    "name": "minTotalBytes",
    "in": "query",
    "required": false,
    "schema": {
      "default": 0,
      "description": "Only include users whose total usage over the period is >= this (bytes)",
      "type": "number",
      "minimum": 0
    }
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "nodesUuids": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            },
            "description": "Node UUIDs to include"
          }
        },
        "required": [
          "nodesUuids"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "nodes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "users": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "number"
                          },
                          "totalBytes": {
                            "type": "number",
                            "description": "Total used bytes over the period (raw bytes)"
                          }
                        },
                        "required": [
                          "id",
                          "totalBytes"
                        ],
                        "additionalProperties": false
                      }
                    }
                  },
                  "required": [
                    "uuid",
                    "users"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "nodes"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/bandwidth-stats/nodes/usersGet Nodes Users Usage by Nodes UUIDs
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "start",
    "in": "query",
    "required": true,
    "schema": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      "description": "Start date (YYYY-MM-DD)"
    }
  },
  {
    "name": "end",
    "in": "query",
    "required": true,
    "schema": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      "description": "End date (YYYY-MM-DD)"
    }
  },
  {
    "name": "topUsersLimit",
    "in": "query",
    "required": false,
    "schema": {
      "default": 100,
      "type": "number",
      "minimum": 1
    }
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "nodesUuids": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            }
          }
        },
        "required": [
          "nodesUuids"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "categories": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "sparklineData": {
                "type": "array",
                "items": {
                  "type": "number"
                }
              },
              "topUsers": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "color": {
                      "type": "string"
                    },
                    "username": {
                      "type": "string"
                    },
                    "total": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "color",
                    "username",
                    "total"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "categories",
              "sparklineData",
              "topUsers"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/bandwidth-stats/nodesGet Nodes Usage by Range
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "start",
    "in": "query",
    "required": true,
    "schema": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      "description": "Start date (YYYY-MM-DD)"
    }
  },
  {
    "name": "end",
    "in": "query",
    "required": true,
    "schema": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      "description": "End date (YYYY-MM-DD)"
    }
  },
  {
    "name": "topNodesLimit",
    "in": "query",
    "required": false,
    "schema": {
      "default": 20,
      "description": "Limit of top nodes to return",
      "type": "number",
      "minimum": 1
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "categories": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "sparklineData": {
                "type": "array",
                "items": {
                  "type": "number"
                }
              },
              "topNodes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "color": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "countryCode": {
                      "type": "string"
                    },
                    "total": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "uuid",
                    "color",
                    "name",
                    "countryCode",
                    "total"
                  ],
                  "additionalProperties": false
                }
              },
              "series": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "name": {
                      "type": "string"
                    },
                    "color": {
                      "type": "string"
                    },
                    "countryCode": {
                      "type": "string"
                    },
                    "total": {
                      "type": "number"
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "number"
                      }
                    }
                  },
                  "required": [
                    "uuid",
                    "name",
                    "color",
                    "countryCode",
                    "total",
                    "data"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "categories",
              "sparklineData",
              "topNodes",
              "series"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/bandwidth-stats/users/{userId}Get User Usage by Range
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "userId",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  },
  {
    "name": "start",
    "in": "query",
    "required": true,
    "schema": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      "description": "Start date (YYYY-MM-DD)"
    }
  },
  {
    "name": "end",
    "in": "query",
    "required": true,
    "schema": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      "description": "End date (YYYY-MM-DD)"
    }
  },
  {
    "name": "topNodesLimit",
    "in": "query",
    "required": false,
    "schema": {
      "default": 20,
      "type": "number",
      "minimum": 1
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "categories": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "sparklineData": {
                "type": "array",
                "items": {
                  "type": "number"
                }
              },
              "topNodes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "color": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "countryCode": {
                      "type": "string"
                    },
                    "total": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "uuid",
                    "color",
                    "name",
                    "countryCode",
                    "total"
                  ],
                  "additionalProperties": false
                }
              },
              "series": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "name": {
                      "type": "string"
                    },
                    "color": {
                      "type": "string"
                    },
                    "countryCode": {
                      "type": "string"
                    },
                    "total": {
                      "type": "number"
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "number"
                      }
                    }
                  },
                  "required": [
                    "uuid",
                    "name",
                    "color",
                    "countryCode",
                    "total",
                    "data"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "categories",
              "sparklineData",
              "topNodes",
              "series"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}

config-profiles

GET/api/config-profiles/{uuid}/computed-configGet computed config profile by uuid
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "viewPosition": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "name": {
                "type": "string"
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "config": {},
              "inbounds": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "profileUuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "tag": {
                      "type": "string"
                    },
                    "type": {
                      "type": "string"
                    },
                    "network": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "security": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "port": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "rawInbound": {
                      "anyOf": [
                        {},
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "uuid",
                    "profileUuid",
                    "tag",
                    "type",
                    "network",
                    "security",
                    "port",
                    "rawInbound"
                  ],
                  "additionalProperties": false
                }
              },
              "nodes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "name": {
                      "type": "string"
                    },
                    "countryCode": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "uuid",
                    "name",
                    "countryCode"
                  ],
                  "additionalProperties": false
                }
              },
              "createdAt": {},
              "updatedAt": {}
            },
            "required": [
              "uuid",
              "viewPosition",
              "name",
              "tags",
              "config",
              "inbounds",
              "nodes",
              "createdAt",
              "updatedAt"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/config-profiles/{uuid}/inboundsGet inbounds by profile uuid
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "total": {
                "type": "number"
              },
              "inbounds": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "profileUuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "tag": {
                      "type": "string"
                    },
                    "type": {
                      "type": "string"
                    },
                    "network": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "security": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "port": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "rawInbound": {
                      "anyOf": [
                        {},
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "activeSquads": {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      }
                    }
                  },
                  "required": [
                    "uuid",
                    "profileUuid",
                    "tag",
                    "type",
                    "network",
                    "security",
                    "port",
                    "rawInbound",
                    "activeSquads"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "total",
              "inbounds"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/config-profiles/{uuid}Get config profile by uuid
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "viewPosition": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "name": {
                "type": "string"
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "config": {},
              "inbounds": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "profileUuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "tag": {
                      "type": "string"
                    },
                    "type": {
                      "type": "string"
                    },
                    "network": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "security": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "port": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "rawInbound": {
                      "anyOf": [
                        {},
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "uuid",
                    "profileUuid",
                    "tag",
                    "type",
                    "network",
                    "security",
                    "port",
                    "rawInbound"
                  ],
                  "additionalProperties": false
                }
              },
              "nodes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "name": {
                      "type": "string"
                    },
                    "countryCode": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "uuid",
                    "name",
                    "countryCode"
                  ],
                  "additionalProperties": false
                }
              },
              "createdAt": {},
              "updatedAt": {}
            },
            "required": [
              "uuid",
              "viewPosition",
              "name",
              "tags",
              "config",
              "inbounds",
              "nodes",
              "createdAt",
              "updatedAt"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
DELETE/api/config-profiles/{uuid}Delete config profile
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success"
}
POST/api/config-profiles/actions/reorderReorder config profiles
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "viewPosition": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "uuid": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                }
              },
              "required": [
                "viewPosition",
                "uuid"
              ]
            }
          }
        },
        "required": [
          "items"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "total": {
                "type": "number"
              },
              "configProfiles": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "viewPosition": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "name": {
                      "type": "string"
                    },
                    "tags": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "config": {},
                    "inbounds": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "uuid": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                          },
                          "profileUuid": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                          },
                          "tag": {
                            "type": "string"
                          },
                          "type": {
                            "type": "string"
                          },
                          "network": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "security": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "port": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "rawInbound": {
                            "anyOf": [
                              {},
                              {
                                "type": "null"
                              }
                            ]
                          }
                        },
                        "required": [
                          "uuid",
                          "profileUuid",
                          "tag",
                          "type",
                          "network",
                          "security",
                          "port",
                          "rawInbound"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "nodes": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "uuid": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                          },
                          "name": {
                            "type": "string"
                          },
                          "countryCode": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "uuid",
                          "name",
                          "countryCode"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "createdAt": {},
                    "updatedAt": {}
                  },
                  "required": [
                    "uuid",
                    "viewPosition",
                    "name",
                    "tags",
                    "config",
                    "inbounds",
                    "nodes",
                    "createdAt",
                    "updatedAt"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "total",
              "configProfiles"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/config-profiles/inboundsGet all inbounds from all config profiles
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "total": {
                "type": "number"
              },
              "inbounds": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "profileUuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "tag": {
                      "type": "string"
                    },
                    "type": {
                      "type": "string"
                    },
                    "network": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "security": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "port": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "rawInbound": {
                      "anyOf": [
                        {},
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "activeSquads": {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      }
                    }
                  },
                  "required": [
                    "uuid",
                    "profileUuid",
                    "tag",
                    "type",
                    "network",
                    "security",
                    "port",
                    "rawInbound",
                    "activeSquads"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "total",
              "inbounds"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/config-profiles/tagsGet tags of Config Profiles
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "required": [
              "tags"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
PATCH/api/config-profiles/tagsSet tags of Config Profile
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "tags": {
            "maxItems": 10,
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 36,
              "pattern": "^[A-Z0-9_:]+$"
            }
          }
        },
        "required": [
          "uuid",
          "tags"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "required": [
              "uuid",
              "tags"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/config-profilesGet config profiles
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "total": {
                "type": "number"
              },
              "configProfiles": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "viewPosition": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "name": {
                      "type": "string"
                    },
                    "tags": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "config": {},
                    "inbounds": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "uuid": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                          },
                          "profileUuid": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                          },
                          "tag": {
                            "type": "string"
                          },
                          "type": {
                            "type": "string"
                          },
                          "network": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "security": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "port": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "rawInbound": {
                            "anyOf": [
                              {},
                              {
                                "type": "null"
                              }
                            ]
                          }
                        },
                        "required": [
                          "uuid",
                          "profileUuid",
                          "tag",
                          "type",
                          "network",
                          "security",
                          "port",
                          "rawInbound"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "nodes": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "uuid": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                          },
                          "name": {
                            "type": "string"
                          },
                          "countryCode": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "uuid",
                          "name",
                          "countryCode"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "createdAt": {},
                    "updatedAt": {}
                  },
                  "required": [
                    "uuid",
                    "viewPosition",
                    "name",
                    "tags",
                    "config",
                    "inbounds",
                    "nodes",
                    "createdAt",
                    "updatedAt"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "total",
              "configProfiles"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/config-profilesCreate config profile
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 2,
            "maxLength": 30,
            "pattern": "^[A-Za-z0-9_\\s-]+$"
          },
          "config": {
            "type": "object",
            "properties": {},
            "additionalProperties": {}
          }
        },
        "required": [
          "name",
          "config"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "viewPosition": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "name": {
                "type": "string"
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "config": {},
              "inbounds": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "profileUuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "tag": {
                      "type": "string"
                    },
                    "type": {
                      "type": "string"
                    },
                    "network": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "security": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "port": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "rawInbound": {
                      "anyOf": [
                        {},
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "uuid",
                    "profileUuid",
                    "tag",
                    "type",
                    "network",
                    "security",
                    "port",
                    "rawInbound"
                  ],
                  "additionalProperties": false
                }
              },
              "nodes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "name": {
                      "type": "string"
                    },
                    "countryCode": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "uuid",
                    "name",
                    "countryCode"
                  ],
                  "additionalProperties": false
                }
              },
              "createdAt": {},
              "updatedAt": {}
            },
            "required": [
              "uuid",
              "viewPosition",
              "name",
              "tags",
              "config",
              "inbounds",
              "nodes",
              "createdAt",
              "updatedAt"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
PATCH/api/config-profilesUpdate Core Config in specific config profile
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "name": {
            "type": "string",
            "minLength": 2,
            "maxLength": 30,
            "pattern": "^[A-Za-z0-9_\\s-]+$"
          },
          "config": {
            "type": "object",
            "properties": {},
            "additionalProperties": {}
          }
        },
        "required": [
          "uuid"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "viewPosition": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "name": {
                "type": "string"
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "config": {},
              "inbounds": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "profileUuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "tag": {
                      "type": "string"
                    },
                    "type": {
                      "type": "string"
                    },
                    "network": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "security": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "port": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "rawInbound": {
                      "anyOf": [
                        {},
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "uuid",
                    "profileUuid",
                    "tag",
                    "type",
                    "network",
                    "security",
                    "port",
                    "rawInbound"
                  ],
                  "additionalProperties": false
                }
              },
              "nodes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "name": {
                      "type": "string"
                    },
                    "countryCode": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "uuid",
                    "name",
                    "countryCode"
                  ],
                  "additionalProperties": false
                }
              },
              "createdAt": {},
              "updatedAt": {}
            },
            "required": [
              "uuid",
              "viewPosition",
              "name",
              "tags",
              "config",
              "inbounds",
              "nodes",
              "createdAt",
              "updatedAt"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}

connections

GET/api/connections/by-node/{jobId}Get Connections for Node by Job ID
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "jobId",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "isCompleted": {
                "type": "boolean"
              },
              "isFailed": {
                "type": "boolean"
              },
              "result": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "nodeUuid": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      "users": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "userId": {
                              "type": "number"
                            },
                            "ips": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "ip": {
                                    "type": "string"
                                  },
                                  "lastSeen": {}
                                },
                                "required": [
                                  "ip",
                                  "lastSeen"
                                ],
                                "additionalProperties": false
                              }
                            }
                          },
                          "required": [
                            "userId",
                            "ips"
                          ],
                          "additionalProperties": false
                        }
                      }
                    },
                    "required": [
                      "success",
                      "nodeUuid",
                      "users"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "isCompleted",
              "isFailed",
              "result"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/connections/by-node/{nodeUuid}Request Connections for Node
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "nodeUuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "jobId": {
                "type": "string"
              }
            },
            "required": [
              "jobId"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/connections/by-user/{jobId}Get Connections for User by Job ID
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "jobId",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "isCompleted": {
                "type": "boolean"
              },
              "isFailed": {
                "type": "boolean"
              },
              "progress": {
                "type": "object",
                "properties": {
                  "total": {
                    "type": "number"
                  },
                  "completed": {
                    "type": "number"
                  },
                  "percent": {
                    "type": "number"
                  }
                },
                "required": [
                  "total",
                  "completed",
                  "percent"
                ],
                "additionalProperties": false
              },
              "result": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "userId": {
                        "type": "number"
                      },
                      "nodes": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "nodeUuid": {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                            },
                            "nodeName": {
                              "type": "string"
                            },
                            "countryCode": {
                              "type": "string"
                            },
                            "ips": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "ip": {
                                    "type": "string"
                                  },
                                  "lastSeen": {}
                                },
                                "required": [
                                  "ip",
                                  "lastSeen"
                                ],
                                "additionalProperties": false
                              }
                            }
                          },
                          "required": [
                            "nodeUuid",
                            "nodeName",
                            "countryCode",
                            "ips"
                          ],
                          "additionalProperties": false
                        }
                      }
                    },
                    "required": [
                      "success",
                      "userId",
                      "nodes"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "isCompleted",
              "isFailed",
              "progress",
              "result"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/connections/by-user/{userId}Request Connections for User
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "userId",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "jobId": {
                "type": "string"
              }
            },
            "required": [
              "jobId"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/connections/dropDrop Connections for Users or IPs
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "dropBy": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "by": {
                    "type": "string",
                    "const": "userIds"
                  },
                  "userIds": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "number"
                    }
                  }
                },
                "required": [
                  "by",
                  "userIds"
                ],
                "description": "Drop by user IDs"
              },
              {
                "type": "object",
                "properties": {
                  "by": {
                    "type": "string",
                    "const": "ipAddresses"
                  },
                  "ipAddresses": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "ipv4",
                          "pattern": "^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$"
                        },
                        {
                          "type": "string",
                          "format": "ipv6",
                          "pattern": "^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$"
                        }
                      ]
                    }
                  }
                },
                "required": [
                  "by",
                  "ipAddresses"
                ],
                "description": "Drop by IP addresses"
              }
            ]
          },
          "targetNodes": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "target": {
                    "type": "string",
                    "const": "allNodes"
                  }
                },
                "required": [
                  "target"
                ],
                "description": "Target all connected nodes"
              },
              {
                "type": "object",
                "properties": {
                  "target": {
                    "type": "string",
                    "const": "specificNodes"
                  },
                  "nodeUuids": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    }
                  }
                },
                "required": [
                  "target",
                  "nodeUuids"
                ],
                "description": "Target specific nodes"
              }
            ]
          }
        },
        "required": [
          "dropBy",
          "targetNodes"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success"
}
GET/api/connections/geocheck/{jobId}Get Geocheck for Node by Job ID
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "jobId",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "isCompleted": {
                "type": "boolean"
              },
              "isFailed": {
                "type": "boolean"
              },
              "result": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "success": {
                        "type": "boolean"
                      },
                      "nodeUuid": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      "image": {
                        "anyOf": [
                          {
                            "type": "object",
                            "properties": {
                              "format": {
                                "type": "string",
                                "const": "svg"
                              },
                              "media_type": {
                                "type": "string",
                                "const": "image/svg+xml"
                              },
                              "encoding": {
                                "type": "string",
                                "const": "base64"
                              },
                              "data": {
                                "type": "string",
                                "description": "Base64-encoded image, ready for a data: URL"
                              }
                            },
                            "required": [
                              "format",
                              "media_type",
                              "encoding",
                              "data"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "rawReport": {
                        "anyOf": [
                          {
                            "type": "object",
                            "propertyNames": {
                              "type": "string"
                            },
                            "additionalProperties": {}
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "The full node report with the image object stripped out"
                      },
                      "message": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "success",
                      "nodeUuid",
                      "image",
                      "rawReport",
                      "message"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "isCompleted",
              "isFailed",
              "result"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/connections/geocheck/{nodeUuid}Request Geocheck for Node

Queues a geocheck on the node and returns a job ID. Poll "Get Geocheck for Node by Job ID" for the result, the node may take up to a minute to answer.

Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "nodeUuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "ip": {
            "description": "Check from this IP address",
            "type": "string"
          },
          "interface": {
            "description": "Check from this network interface",
            "type": "string"
          }
        }
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "jobId": {
                "type": "string"
              }
            },
            "required": [
              "jobId"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}

external-squads

POST/api/external-squads/{uuid}/bulk-actions/add-usersAdd all users to external squad
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success"
}
DELETE/api/external-squads/{uuid}/bulk-actions/remove-usersDelete users from external squad
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success"
}
GET/api/external-squads/{uuid}Get external squad by uuid
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "viewPosition": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "name": {
                "type": "string"
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "info": {
                "type": "object",
                "properties": {
                  "membersCount": {
                    "type": "number"
                  }
                },
                "required": [
                  "membersCount"
                ],
                "additionalProperties": false
              },
              "templates": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "templateUuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "templateType": {
                      "type": "string",
                      "enum": [
                        "XRAY_JSON",
                        "XRAY_BASE64",
                        "MIHOMO",
                        "STASH",
                        "CLASH",
                        "SINGBOX"
                      ]
                    }
                  },
                  "required": [
                    "templateUuid",
                    "templateType"
                  ],
                  "additionalProperties": false
                }
              },
              "subscriptionSettings": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "serveJsonAtBaseSubscription": {
                        "type": "boolean"
                      },
                      "isShowCustomRemarks": {
                        "type": "boolean"
                      },
                      "randomizeHosts": {
                        "type": "boolean"
                      }
                    },
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "hostOverrides": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "serverDescription": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 30
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "vlessRouteId": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 65535
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "responseHeadersAdd": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "type": "string"
                }
              },
              "responseHeadersRemove": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "hwidSettings": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "enabled": {
                        "type": "boolean"
                      },
                      "fallbackDeviceLimit": {
                        "type": "number"
                      },
                      "maxDevicesAnnounce": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 200
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "enabled",
                      "fallbackDeviceLimit",
                      "maxDevicesAnnounce"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "customRemarks": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "expiredUsers": {
                        "minItems": 1,
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "limitedUsers": {
                        "minItems": 1,
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "disabledUsers": {
                        "minItems": 1,
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "emptyHosts": {
                        "minItems": 1,
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "HWIDMaxDevicesExceeded": {
                        "minItems": 1,
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "HWIDNotSupported": {
                        "minItems": 1,
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    },
                    "required": [
                      "expiredUsers",
                      "limitedUsers",
                      "disabledUsers",
                      "emptyHosts",
                      "HWIDMaxDevicesExceeded",
                      "HWIDNotSupported"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "subpageConfigUuid": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "createdAt": {},
              "updatedAt": {}
            },
            "required": [
              "uuid",
              "viewPosition",
              "name",
              "tags",
              "info",
              "templates",
              "subscriptionSettings",
              "hostOverrides",
              "responseHeadersAdd",
              "responseHeadersRemove",
              "hwidSettings",
              "customRemarks",
              "subpageConfigUuid",
              "createdAt",
              "updatedAt"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
DELETE/api/external-squads/{uuid}Delete external squad
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success"
}
POST/api/external-squads/actions/reorderReorder external squads
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "viewPosition": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "uuid": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                }
              },
              "required": [
                "viewPosition",
                "uuid"
              ]
            }
          }
        },
        "required": [
          "items"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "total": {
                "type": "number"
              },
              "externalSquads": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "viewPosition": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "name": {
                      "type": "string"
                    },
                    "tags": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "info": {
                      "type": "object",
                      "properties": {
                        "membersCount": {
                          "type": "number"
                        }
                      },
                      "required": [
                        "membersCount"
                      ],
                      "additionalProperties": false
                    },
                    "templates": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "templateUuid": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                          },
                          "templateType": {
                            "type": "string",
                            "enum": [
                              "XRAY_JSON",
                              "XRAY_BASE64",
                              "MIHOMO",
                              "STASH",
                              "CLASH",
                              "SINGBOX"
                            ]
                          }
                        },
                        "required": [
                          "templateUuid",
                          "templateType"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "subscriptionSettings": {
                      "anyOf": [
                        {
                          "type": "object",
                          "properties": {
                            "serveJsonAtBaseSubscription": {
                              "type": "boolean"
                            },
                            "isShowCustomRemarks": {
                              "type": "boolean"
                            },
                            "randomizeHosts": {
                              "type": "boolean"
                            }
                          },
                          "additionalProperties": false
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "hostOverrides": {
                      "anyOf": [
                        {
                          "type": "object",
                          "properties": {
                            "serverDescription": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "maxLength": 30
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "vlessRouteId": {
                              "anyOf": [
                                {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 65535
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            }
                          },
                          "additionalProperties": false
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "responseHeadersAdd": {
                      "type": "object",
                      "propertyNames": {
                        "type": "string"
                      },
                      "additionalProperties": {
                        "type": "string"
                      }
                    },
                    "responseHeadersRemove": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "hwidSettings": {
                      "anyOf": [
                        {
                          "type": "object",
                          "properties": {
                            "enabled": {
                              "type": "boolean"
                            },
                            "fallbackDeviceLimit": {
                              "type": "number"
                            },
                            "maxDevicesAnnounce": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "maxLength": 200
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            }
                          },
                          "required": [
                            "enabled",
                            "fallbackDeviceLimit",
                            "maxDevicesAnnounce"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "customRemarks": {
                      "anyOf": [
                        {
                          "type": "object",
                          "properties": {
                            "expiredUsers": {
                              "minItems": 1,
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            },
                            "limitedUsers": {
                              "minItems": 1,
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            },
                            "disabledUsers": {
                              "minItems": 1,
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            },
                            "emptyHosts": {
                              "minItems": 1,
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            },
                            "HWIDMaxDevicesExceeded": {
                              "minItems": 1,
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            },
                            "HWIDNotSupported": {
                              "minItems": 1,
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            }
                          },
                          "required": [
                            "expiredUsers",
                            "limitedUsers",
                            "disabledUsers",
                            "emptyHosts",
                            "HWIDMaxDevicesExceeded",
                            "HWIDNotSupported"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "subpageConfigUuid": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "createdAt": {},
                    "updatedAt": {}
                  },
                  "required": [
                    "uuid",
                    "viewPosition",
                    "name",
                    "tags",
                    "info",
                    "templates",
                    "subscriptionSettings",
                    "hostOverrides",
                    "responseHeadersAdd",
                    "responseHeadersRemove",
                    "hwidSettings",
                    "customRemarks",
                    "subpageConfigUuid",
                    "createdAt",
                    "updatedAt"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "total",
              "externalSquads"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/external-squads/tagsGet tags of External Squads
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "required": [
              "tags"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
PATCH/api/external-squads/tagsSet tags of External Squad
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "tags": {
            "maxItems": 10,
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 36,
              "pattern": "^[A-Z0-9_:]+$"
            }
          }
        },
        "required": [
          "uuid",
          "tags"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "required": [
              "uuid",
              "tags"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/external-squadsGet all external squads
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "total": {
                "type": "number"
              },
              "externalSquads": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "viewPosition": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "name": {
                      "type": "string"
                    },
                    "tags": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "info": {
                      "type": "object",
                      "properties": {
                        "membersCount": {
                          "type": "number"
                        }
                      },
                      "required": [
                        "membersCount"
                      ],
                      "additionalProperties": false
                    },
                    "templates": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "templateUuid": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                          },
                          "templateType": {
                            "type": "string",
                            "enum": [
                              "XRAY_JSON",
                              "XRAY_BASE64",
                              "MIHOMO",
                              "STASH",
                              "CLASH",
                              "SINGBOX"
                            ]
                          }
                        },
                        "required": [
                          "templateUuid",
                          "templateType"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "subscriptionSettings": {
                      "anyOf": [
                        {
                          "type": "object",
                          "properties": {
                            "serveJsonAtBaseSubscription": {
                              "type": "boolean"
                            },
                            "isShowCustomRemarks": {
                              "type": "boolean"
                            },
                            "randomizeHosts": {
                              "type": "boolean"
                            }
                          },
                          "additionalProperties": false
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "hostOverrides": {
                      "anyOf": [
                        {
                          "type": "object",
                          "properties": {
                            "serverDescription": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "maxLength": 30
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "vlessRouteId": {
                              "anyOf": [
                                {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 65535
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            }
                          },
                          "additionalProperties": false
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "responseHeadersAdd": {
                      "type": "object",
                      "propertyNames": {
                        "type": "string"
                      },
                      "additionalProperties": {
                        "type": "string"
                      }
                    },
                    "responseHeadersRemove": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "hwidSettings": {
                      "anyOf": [
                        {
                          "type": "object",
                          "properties": {
                            "enabled": {
                              "type": "boolean"
                            },
                            "fallbackDeviceLimit": {
                              "type": "number"
                            },
                            "maxDevicesAnnounce": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "maxLength": 200
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            }
                          },
                          "required": [
                            "enabled",
                            "fallbackDeviceLimit",
                            "maxDevicesAnnounce"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "customRemarks": {
                      "anyOf": [
                        {
                          "type": "object",
                          "properties": {
                            "expiredUsers": {
                              "minItems": 1,
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            },
                            "limitedUsers": {
                              "minItems": 1,
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            },
                            "disabledUsers": {
                              "minItems": 1,
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            },
                            "emptyHosts": {
                              "minItems": 1,
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            },
                            "HWIDMaxDevicesExceeded": {
                              "minItems": 1,
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            },
                            "HWIDNotSupported": {
                              "minItems": 1,
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            }
                          },
                          "required": [
                            "expiredUsers",
                            "limitedUsers",
                            "disabledUsers",
                            "emptyHosts",
                            "HWIDMaxDevicesExceeded",
                            "HWIDNotSupported"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "subpageConfigUuid": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "createdAt": {},
                    "updatedAt": {}
                  },
                  "required": [
                    "uuid",
                    "viewPosition",
                    "name",
                    "tags",
                    "info",
                    "templates",
                    "subscriptionSettings",
                    "hostOverrides",
                    "responseHeadersAdd",
                    "responseHeadersRemove",
                    "hwidSettings",
                    "customRemarks",
                    "subpageConfigUuid",
                    "createdAt",
                    "updatedAt"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "total",
              "externalSquads"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/external-squadsCreate external squad
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 2,
            "maxLength": 30,
            "pattern": "^[A-Za-z0-9_\\s-]+$"
          }
        },
        "required": [
          "name"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "viewPosition": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "name": {
                "type": "string"
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "info": {
                "type": "object",
                "properties": {
                  "membersCount": {
                    "type": "number"
                  }
                },
                "required": [
                  "membersCount"
                ],
                "additionalProperties": false
              },
              "templates": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "templateUuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "templateType": {
                      "type": "string",
                      "enum": [
                        "XRAY_JSON",
                        "XRAY_BASE64",
                        "MIHOMO",
                        "STASH",
                        "CLASH",
                        "SINGBOX"
                      ]
                    }
                  },
                  "required": [
                    "templateUuid",
                    "templateType"
                  ],
                  "additionalProperties": false
                }
              },
              "subscriptionSettings": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "serveJsonAtBaseSubscription": {
                        "type": "boolean"
                      },
                      "isShowCustomRemarks": {
                        "type": "boolean"
                      },
                      "randomizeHosts": {
                        "type": "boolean"
                      }
                    },
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "hostOverrides": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "serverDescription": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 30
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "vlessRouteId": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 65535
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "responseHeadersAdd": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "type": "string"
                }
              },
              "responseHeadersRemove": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "hwidSettings": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "enabled": {
                        "type": "boolean"
                      },
                      "fallbackDeviceLimit": {
                        "type": "number"
                      },
                      "maxDevicesAnnounce": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 200
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "enabled",
                      "fallbackDeviceLimit",
                      "maxDevicesAnnounce"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "customRemarks": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "expiredUsers": {
                        "minItems": 1,
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "limitedUsers": {
                        "minItems": 1,
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "disabledUsers": {
                        "minItems": 1,
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "emptyHosts": {
                        "minItems": 1,
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "HWIDMaxDevicesExceeded": {
                        "minItems": 1,
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "HWIDNotSupported": {
                        "minItems": 1,
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    },
                    "required": [
                      "expiredUsers",
                      "limitedUsers",
                      "disabledUsers",
                      "emptyHosts",
                      "HWIDMaxDevicesExceeded",
                      "HWIDNotSupported"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "subpageConfigUuid": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "createdAt": {},
              "updatedAt": {}
            },
            "required": [
              "uuid",
              "viewPosition",
              "name",
              "tags",
              "info",
              "templates",
              "subscriptionSettings",
              "hostOverrides",
              "responseHeadersAdd",
              "responseHeadersRemove",
              "hwidSettings",
              "customRemarks",
              "subpageConfigUuid",
              "createdAt",
              "updatedAt"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
PATCH/api/external-squadsUpdate external squad
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "description": "UUID of the external squad"
          },
          "name": {
            "type": "string",
            "minLength": 2,
            "maxLength": 30,
            "pattern": "^[A-Za-z0-9_\\s-]+$"
          },
          "templates": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "templateUuid": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "UUID of the subscription template"
                },
                "templateType": {
                  "type": "string",
                  "enum": [
                    "XRAY_JSON",
                    "XRAY_BASE64",
                    "MIHOMO",
                    "STASH",
                    "CLASH",
                    "SINGBOX"
                  ],
                  "description": "Type of the subscription template"
                }
              },
              "required": [
                "templateUuid",
                "templateType"
              ]
            }
          },
          "subscriptionSettings": {
            "type": "object",
            "properties": {
              "serveJsonAtBaseSubscription": {
                "type": "boolean"
              },
              "isShowCustomRemarks": {
                "type": "boolean"
              },
              "randomizeHosts": {
                "type": "boolean"
              }
            }
          },
          "hostOverrides": {
            "type": "object",
            "properties": {
              "serverDescription": {
                "anyOf": [
                  {
                    "type": "string",
                    "maxLength": 30
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "vlessRouteId": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 65535
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            }
          },
          "responseHeadersAdd": {
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {
              "type": "string"
            }
          },
          "responseHeadersRemove": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "hwidSettings": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "enabled": {
                    "type": "boolean"
                  },
                  "fallbackDeviceLimit": {
                    "type": "number"
                  },
                  "maxDevicesAnnounce": {
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 200
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "enabled",
                  "fallbackDeviceLimit",
                  "maxDevicesAnnounce"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "customRemarks": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "expiredUsers": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "limitedUsers": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "disabledUsers": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "emptyHosts": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "HWIDMaxDevicesExceeded": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "HWIDNotSupported": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "required": [
                  "expiredUsers",
                  "limitedUsers",
                  "disabledUsers",
                  "emptyHosts",
                  "HWIDMaxDevicesExceeded",
                  "HWIDNotSupported"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "subpageConfigUuid": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "uuid"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "viewPosition": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "name": {
                "type": "string"
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "info": {
                "type": "object",
                "properties": {
                  "membersCount": {
                    "type": "number"
                  }
                },
                "required": [
                  "membersCount"
                ],
                "additionalProperties": false
              },
              "templates": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "templateUuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "templateType": {
                      "type": "string",
                      "enum": [
                        "XRAY_JSON",
                        "XRAY_BASE64",
                        "MIHOMO",
                        "STASH",
                        "CLASH",
                        "SINGBOX"
                      ]
                    }
                  },
                  "required": [
                    "templateUuid",
                    "templateType"
                  ],
                  "additionalProperties": false
                }
              },
              "subscriptionSettings": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "serveJsonAtBaseSubscription": {
                        "type": "boolean"
                      },
                      "isShowCustomRemarks": {
                        "type": "boolean"
                      },
                      "randomizeHosts": {
                        "type": "boolean"
                      }
                    },
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "hostOverrides": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "serverDescription": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 30
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "vlessRouteId": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 65535
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "responseHeadersAdd": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "type": "string"
                }
              },
              "responseHeadersRemove": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "hwidSettings": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "enabled": {
                        "type": "boolean"
                      },
                      "fallbackDeviceLimit": {
                        "type": "number"
                      },
                      "maxDevicesAnnounce": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 200
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "enabled",
                      "fallbackDeviceLimit",
                      "maxDevicesAnnounce"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "customRemarks": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "expiredUsers": {
                        "minItems": 1,
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "limitedUsers": {
                        "minItems": 1,
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "disabledUsers": {
                        "minItems": 1,
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "emptyHosts": {
                        "minItems": 1,
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "HWIDMaxDevicesExceeded": {
                        "minItems": 1,
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "HWIDNotSupported": {
                        "minItems": 1,
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    },
                    "required": [
                      "expiredUsers",
                      "limitedUsers",
                      "disabledUsers",
                      "emptyHosts",
                      "HWIDMaxDevicesExceeded",
                      "HWIDNotSupported"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "subpageConfigUuid": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "createdAt": {},
              "updatedAt": {}
            },
            "required": [
              "uuid",
              "viewPosition",
              "name",
              "tags",
              "info",
              "templates",
              "subscriptionSettings",
              "hostOverrides",
              "responseHeadersAdd",
              "responseHeadersRemove",
              "hwidSettings",
              "customRemarks",
              "subpageConfigUuid",
              "createdAt",
              "updatedAt"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}

hosts

GET/api/hosts/{uuid}Get a host by UUID
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "viewPosition": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "remark": {
                "type": "string"
              },
              "address": {
                "type": "string"
              },
              "port": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "path": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "sni": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "host": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "alpn": {
                "anyOf": [
                  {
                    "type": "string",
                    "enum": [
                      "h3",
                      "h2",
                      "http/1.1",
                      "h2,http/1.1",
                      "h3,h2,http/1.1",
                      "h3,h2"
                    ]
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "fingerprint": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "isDisabled": {
                "type": "boolean"
              },
              "securityLayer": {
                "default": "DEFAULT",
                "type": "string",
                "enum": [
                  "DEFAULT",
                  "TLS",
                  "NONE"
                ]
              },
              "xhttpExtraParams": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "muxParams": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "sockoptParams": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "finalMask": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "inbound": {
                "type": "object",
                "properties": {
                  "configProfileUuid": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "configProfileInboundUuid": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "configProfileUuid",
                  "configProfileInboundUuid"
                ],
                "additionalProperties": false
              },
              "serverDescription": {
                "anyOf": [
                  {
                    "type": "string",
                    "maxLength": 30
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "tags": {
                "default": [],
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "isHidden": {
                "default": false,
                "type": "boolean"
              },
              "overrideSniFromAddress": {
                "default": false,
                "type": "boolean"
              },
              "keepSniBlank": {
                "default": false,
                "type": "boolean"
              },
              "vlessRouteId": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 65535
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "pinnedPeerCertSha256": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "verifyPeerCertByName": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "shuffleHost": {
                "type": "boolean"
              },
              "mihomoX25519": {
                "type": "boolean"
              },
              "mihomoIpVersion": {
                "anyOf": [
                  {
                    "type": "string",
                    "enum": [
                      "dual",
                      "ipv4",
                      "ipv6",
                      "ipv4-prefer",
                      "ipv6-prefer"
                    ]
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "nodes": {
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                }
              },
              "xrayJsonTemplateUuid": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "excludeFromSubscriptionTypes": {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "XRAY_JSON",
                    "XRAY_BASE64",
                    "MIHOMO",
                    "STASH",
                    "CLASH",
                    "SINGBOX"
                  ]
                }
              },
              "mapper": {
                "type": "object",
                "properties": {
                  "xrayJson": {
                    "title": "Xray JSON",
                    "markdownDescription": "Operations applied to the **outbound** generated for this host in the Xray JSON subscription. Paths are counted from the root of the outbound.\n\n```json\n[\n  {\n    \"op\": \"copy\",\n    \"from\": \"streamSettings.tlsSettings.cipherSuites\",\n    \"to\": \"streamSettings.tlsSettings.cipherSuites\"\n  },\n  {\n    \"op\": \"unset\",\n    \"to\": \"mux\"\n  }\n]\n```",
                    "type": "array",
                    "items": {
                      "oneOf": [
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "copy",
                              "title": "Copy",
                              "markdownDescription": "Take a value from the raw inbound."
                            },
                            "from": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Source path",
                              "markdownDescription": "Dot-separated path inside the **raw inbound** of the config profile this host belongs to. Array items are addressed by index.\n\nWith a `$host.` prefix the value is read from the **host** itself, after overrides have been resolved – `$host.securityOptions.serverName` holds the SNI that actually went into the config.\n\nOnly a part of the host is readable. Each entry below also opens everything nested under it:\n\n`address`, `port`, `finalRemark`, `protocol`, `transport`, `security`, `protocolOptions`, `transportOptions`, `securityOptions`, `mux`, `streamOverrides.finalMask`, `streamOverrides.sockopt`, `clientOverrides.serverDescription`, `metadata.remark`, `metadata.tags`, `metadata.inboundTag`\n\n> If the path resolves to nothing – or points outside the list above – the operation is skipped and the target key is **not** created.",
                              "examples": [
                                "streamSettings.tlsSettings.cipherSuites",
                                "streamSettings.tlsSettings.alpn",
                                "streamSettings.realitySettings.serverNames.0",
                                "$host.address",
                                "$host.securityOptions.serverName",
                                "$host.transportOptions.path",
                                "$host.mux.smux"
                              ]
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "streamSettings.tlsSettings.enableSessionResumption",
                                "streamSettings.tlsSettings.cipherSuites"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "from",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Copy from the inbound",
                          "markdownDescription": "Reads a value from the raw inbound and writes it into the generated config.\n\n```json\n{\n  \"op\": \"copy\",\n  \"from\": \"streamSettings.tlsSettings.cipherSuites\",\n  \"to\": \"streamSettings.tlsSettings.cipherSuites\"\n}\n```",
                          "defaultSnippets": [
                            {
                              "label": "copy",
                              "description": "Copy a value from the raw inbound",
                              "body": {
                                "op": "copy",
                                "from": "$1",
                                "to": "$2"
                              }
                            }
                          ]
                        },
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "set",
                              "title": "Set",
                              "markdownDescription": "Write a fixed value."
                            },
                            "value": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "boolean"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "$ref": "#/$defs/__schema0"
                                  }
                                },
                                {
                                  "type": "object",
                                  "propertyNames": {
                                    "type": "string"
                                  },
                                  "additionalProperties": {
                                    "$ref": "#/$defs/__schema1"
                                  }
                                }
                              ],
                              "title": "Value",
                              "markdownDescription": "The value to write. Strings, numbers, booleans, arrays and objects are allowed."
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "streamSettings.tlsSettings.enableSessionResumption",
                                "streamSettings.tlsSettings.cipherSuites"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "value",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Set a fixed value",
                          "markdownDescription": "Writes a literal value into the generated config, creating the key if it is missing.\n\n```json\n{\n  \"op\": \"set\",\n  \"to\": \"streamSettings.tlsSettings.enableSessionResumption\",\n  \"value\": true\n}\n```",
                          "defaultSnippets": [
                            {
                              "label": "set",
                              "description": "Write a fixed value",
                              "body": {
                                "op": "set",
                                "to": "$1",
                                "value": "$2"
                              }
                            }
                          ]
                        },
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "unset",
                              "title": "Unset",
                              "markdownDescription": "Remove a field."
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "streamSettings.tlsSettings.enableSessionResumption",
                                "streamSettings.tlsSettings.cipherSuites"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Remove a field",
                          "markdownDescription": "Removes a field the generator produced by itself.\n\n```json\n{\n  \"op\": \"unset\",\n  \"to\": \"mux\"\n}\n```\n\n> Only the field itself is removed. A parent object left empty stays in the config as `{}`.",
                          "defaultSnippets": [
                            {
                              "label": "unset",
                              "description": "Remove a field",
                              "body": {
                                "op": "unset",
                                "to": "$1"
                              }
                            }
                          ]
                        }
                      ],
                      "title": "Operation",
                      "markdownDescription": "Operations run one after another, in the order they are listed.\n\nA later operation sees what the previous ones wrote, so an `unset` can remove a key an earlier `set` added."
                    }
                  },
                  "mihomo": {
                    "title": "Mihomo",
                    "markdownDescription": "Operations applied to the **proxy node** generated for this host in the Mihomo subscription.\n\nPaths are counted from the root of the node, where Mihomo keys are written in kebab-case.\n\n```json\n[\n  {\n    \"op\": \"set\",\n    \"to\": \"ip-version\",\n    \"value\": \"ipv4\"\n  }\n]\n```",
                    "type": "array",
                    "items": {
                      "oneOf": [
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "copy",
                              "title": "Copy",
                              "markdownDescription": "Take a value from the raw inbound."
                            },
                            "from": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Source path",
                              "markdownDescription": "Dot-separated path inside the **raw inbound** of the config profile this host belongs to. Array items are addressed by index.\n\nWith a `$host.` prefix the value is read from the **host** itself, after overrides have been resolved – `$host.securityOptions.serverName` holds the SNI that actually went into the config.\n\nOnly a part of the host is readable. Each entry below also opens everything nested under it:\n\n`address`, `port`, `finalRemark`, `protocol`, `transport`, `security`, `protocolOptions`, `transportOptions`, `securityOptions`, `mux`, `streamOverrides.finalMask`, `streamOverrides.sockopt`, `clientOverrides.serverDescription`, `metadata.remark`, `metadata.tags`, `metadata.inboundTag`\n\n> If the path resolves to nothing – or points outside the list above – the operation is skipped and the target key is **not** created.",
                              "examples": [
                                "streamSettings.tlsSettings.cipherSuites",
                                "streamSettings.tlsSettings.alpn",
                                "streamSettings.realitySettings.serverNames.0",
                                "$host.address",
                                "$host.securityOptions.serverName",
                                "$host.transportOptions.path",
                                "$host.mux.smux"
                              ]
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the generated **proxy node**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "ip-version",
                                "client-fingerprint",
                                "tfo",
                                "reality-opts.support-x25519mlkem768"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "from",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Copy from the inbound",
                          "markdownDescription": "Reads a value from the raw inbound and writes it into the generated config.\n\n```json\n{\n  \"op\": \"copy\",\n  \"from\": \"streamSettings.realitySettings.serverNames.0\",\n  \"to\": \"servername\"\n}\n```",
                          "defaultSnippets": [
                            {
                              "label": "copy",
                              "description": "Copy a value from the raw inbound",
                              "body": {
                                "op": "copy",
                                "from": "$1",
                                "to": "$2"
                              }
                            }
                          ]
                        },
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "set",
                              "title": "Set",
                              "markdownDescription": "Write a fixed value."
                            },
                            "value": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "boolean"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "$ref": "#/$defs/__schema2"
                                  }
                                },
                                {
                                  "type": "object",
                                  "propertyNames": {
                                    "type": "string"
                                  },
                                  "additionalProperties": {
                                    "$ref": "#/$defs/__schema3"
                                  }
                                }
                              ],
                              "title": "Value",
                              "markdownDescription": "The value to write. Strings, numbers, booleans, arrays and objects are allowed."
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the generated **proxy node**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "ip-version",
                                "client-fingerprint",
                                "tfo",
                                "reality-opts.support-x25519mlkem768"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "value",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Set a fixed value",
                          "markdownDescription": "Writes a literal value into the generated config, creating the key if it is missing.\n\n```json\n{\n  \"op\": \"set\",\n  \"to\": \"reality-opts.support-x25519mlkem768\",\n  \"value\": true\n}\n```",
                          "defaultSnippets": [
                            {
                              "label": "set",
                              "description": "Write a fixed value",
                              "body": {
                                "op": "set",
                                "to": "$1",
                                "value": "$2"
                              }
                            }
                          ]
                        },
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "unset",
                              "title": "Unset",
                              "markdownDescription": "Remove a field."
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the generated **proxy node**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "ip-version",
                                "client-fingerprint",
                                "tfo",
                                "reality-opts.support-x25519mlkem768"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Remove a field",
                          "markdownDescription": "Removes a field the generator produced by itself.\n\n```json\n{\n  \"op\": \"unset\",\n  \"to\": \"smux\"\n}\n```\n\n> Only the field itself is removed. A parent object left empty stays in the config as `{}`.",
                          "defaultSnippets": [
                            {
                              "label": "unset",
                              "description": "Remove a field",
                              "body": {
                                "op": "unset",
                                "to": "$1"
                              }
                            }
                          ]
                        }
                      ],
                      "title": "Operation",
                      "markdownDescription": "Operations run one after another, in the order they are listed.\n\nA later operation sees what the previous ones wrote, so an `unset` can remove a key an earlier `set` added."
                    }
                  },
                  "base64": {
                    "title": "Base64",
                    "markdownDescription": "Operations applied to the share link generated for this host in the Base64 subscription.\n\n`to` is a plain query parameter name, not a path – dots carry no meaning here.\n\nWith a `$link.` prefix the operation rewrites the link itself instead of its query string. Writable parts: `$link.address`, `$link.port`, `$link.password`, `$link.remark`, and `$link.method` for Shadowsocks. `$link.password` is the credential of the protocol.\n\n> A value that cannot make a valid link – an empty address, a port outside 1-65535 – is ignored, and the generated one is kept.\n\n```json\n[\n  {\n    \"op\": \"set\",\n    \"to\": \"fp\",\n    \"value\": \"chrome\"\n  },\n  {\n    \"op\": \"unset\",\n    \"to\": \"fm\"\n  },\n  {\n    \"op\": \"set\",\n    \"to\": \"$link.port\",\n    \"value\": 2053\n  },\n  {\n    \"op\": \"copy\",\n    \"from\": \"$host.securityOptions.serverName\",\n    \"to\": \"$link.address\"\n  }\n]\n```",
                    "type": "array",
                    "items": {
                      "oneOf": [
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "copy",
                              "title": "Copy",
                              "markdownDescription": "Take a value from the raw inbound."
                            },
                            "from": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Source path",
                              "markdownDescription": "Dot-separated path inside the **raw inbound** of the config profile this host belongs to. Array items are addressed by index.\n\nWith a `$host.` prefix the value is read from the **host** itself, after overrides have been resolved – `$host.securityOptions.serverName` holds the SNI that actually went into the config.\n\nOnly a part of the host is readable. Each entry below also opens everything nested under it:\n\n`address`, `port`, `finalRemark`, `protocol`, `transport`, `security`, `protocolOptions`, `transportOptions`, `securityOptions`, `mux`, `streamOverrides.finalMask`, `streamOverrides.sockopt`, `clientOverrides.serverDescription`, `metadata.remark`, `metadata.tags`, `metadata.inboundTag`\n\n> If the path resolves to nothing – or points outside the list above – the operation is skipped and the target key is **not** created.",
                              "examples": [
                                "streamSettings.tlsSettings.cipherSuites",
                                "streamSettings.tlsSettings.alpn",
                                "streamSettings.realitySettings.serverNames.0",
                                "$host.address",
                                "$host.securityOptions.serverName",
                                "$host.transportOptions.path",
                                "$host.mux.smux"
                              ]
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the query string of the generated **share link**, or the link itself with a `$link.` prefix, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "$link.address",
                                "$link.port",
                                "$link.password",
                                "$link.remark",
                                "$link.method",
                                "alpn",
                                "authority",
                                "cs",
                                "encryption",
                                "extra",
                                "flow",
                                "fm",
                                "fp",
                                "headerType",
                                "heartbeatPeriod",
                                "host",
                                "mode",
                                "mtu",
                                "obfs",
                                "obfs-password",
                                "path",
                                "pbk",
                                "pcs",
                                "pinSHA256",
                                "pqv",
                                "security",
                                "serviceName",
                                "sid",
                                "sni",
                                "spx",
                                "tti",
                                "type",
                                "vcn"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "from",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Copy from the inbound",
                          "markdownDescription": "Reads a value from the raw inbound and writes it into the generated config.\n\n```json\n{\n  \"op\": \"copy\",\n  \"from\": \"streamSettings.realitySettings.serverNames.0\",\n  \"to\": \"sni\"\n}\n```",
                          "defaultSnippets": [
                            {
                              "label": "copy",
                              "description": "Copy a value from the raw inbound",
                              "body": {
                                "op": "copy",
                                "from": "$1",
                                "to": "$2"
                              }
                            }
                          ]
                        },
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "set",
                              "title": "Set",
                              "markdownDescription": "Write a fixed value."
                            },
                            "value": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "boolean"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "$ref": "#/$defs/__schema4"
                                  }
                                },
                                {
                                  "type": "object",
                                  "propertyNames": {
                                    "type": "string"
                                  },
                                  "additionalProperties": {
                                    "$ref": "#/$defs/__schema5"
                                  }
                                }
                              ],
                              "title": "Value",
                              "markdownDescription": "The value to write. Strings, numbers, booleans, arrays and objects are allowed."
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the query string of the generated **share link**, or the link itself with a `$link.` prefix, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "$link.address",
                                "$link.port",
                                "$link.password",
                                "$link.remark",
                                "$link.method",
                                "alpn",
                                "authority",
                                "cs",
                                "encryption",
                                "extra",
                                "flow",
                                "fm",
                                "fp",
                                "headerType",
                                "heartbeatPeriod",
                                "host",
                                "mode",
                                "mtu",
                                "obfs",
                                "obfs-password",
                                "path",
                                "pbk",
                                "pcs",
                                "pinSHA256",
                                "pqv",
                                "security",
                                "serviceName",
                                "sid",
                                "sni",
                                "spx",
                                "tti",
                                "type",
                                "vcn"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "value",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Set a fixed value",
                          "markdownDescription": "Writes a literal value into the generated config, creating the key if it is missing.\n\n```json\n{\n  \"op\": \"set\",\n  \"to\": \"fp\",\n  \"value\": \"chrome\"\n}\n```",
                          "defaultSnippets": [
                            {
                              "label": "set",
                              "description": "Write a fixed value",
                              "body": {
                                "op": "set",
                                "to": "$1",
                                "value": "$2"
                              }
                            }
                          ]
                        },
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "unset",
                              "title": "Unset",
                              "markdownDescription": "Remove a field."
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the query string of the generated **share link**, or the link itself with a `$link.` prefix, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "$link.address",
                                "$link.port",
                                "$link.password",
                                "$link.remark",
                                "$link.method",
                                "alpn",
                                "authority",
                                "cs",
                                "encryption",
                                "extra",
                                "flow",
                                "fm",
                                "fp",
                                "headerType",
                                "heartbeatPeriod",
                                "host",
                                "mode",
                                "mtu",
                                "obfs",
                                "obfs-password",
                                "path",
                                "pbk",
                                "pcs",
                                "pinSHA256",
                                "pqv",
                                "security",
                                "serviceName",
                                "sid",
                                "sni",
                                "spx",
                                "tti",
                                "type",
                                "vcn"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Remove a field",
                          "markdownDescription": "Removes a field the generator produced by itself.\n\n```json\n{\n  \"op\": \"unset\",\n  \"to\": \"fm\"\n}\n```\n\n> Only the field itself is removed. A parent object left empty stays in the config as `{}`.",
                          "defaultSnippets": [
                            {
                              "label": "unset",
                              "description": "Remove a field",
                              "body": {
                                "op": "unset",
                                "to": "$1"
                              }
                            }
                          ]
                        }
                      ],
                      "title": "Operation",
                      "markdownDescription": "Operations run one after another, in the order they are listed.\n\nA later operation sees what the previous ones wrote, so an `unset` can remove a key an earlier `set` added."
                    }
                  },
                  "singbox": {
                    "title": "sing-box",
                    "markdownDescription": "Operations applied to the **outbound** generated for this host in the sing-box subscription. Paths are counted from the root of the outbound.\n\nsing-box keys are written in snake_case, and the outbound of a Hysteria2 host has a shape of its own.\n\n```json\n[\n  {\n    \"op\": \"set\",\n    \"to\": \"tls.utls.fingerprint\",\n    \"value\": \"chrome\"\n  },\n  {\n    \"op\": \"unset\",\n    \"to\": \"multiplex\"\n  }\n]\n```",
                    "type": "array",
                    "items": {
                      "oneOf": [
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "copy",
                              "title": "Copy",
                              "markdownDescription": "Take a value from the raw inbound."
                            },
                            "from": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Source path",
                              "markdownDescription": "Dot-separated path inside the **raw inbound** of the config profile this host belongs to. Array items are addressed by index.\n\nWith a `$host.` prefix the value is read from the **host** itself, after overrides have been resolved – `$host.securityOptions.serverName` holds the SNI that actually went into the config.\n\nOnly a part of the host is readable. Each entry below also opens everything nested under it:\n\n`address`, `port`, `finalRemark`, `protocol`, `transport`, `security`, `protocolOptions`, `transportOptions`, `securityOptions`, `mux`, `streamOverrides.finalMask`, `streamOverrides.sockopt`, `clientOverrides.serverDescription`, `metadata.remark`, `metadata.tags`, `metadata.inboundTag`\n\n> If the path resolves to nothing – or points outside the list above – the operation is skipped and the target key is **not** created.",
                              "examples": [
                                "streamSettings.tlsSettings.cipherSuites",
                                "streamSettings.tlsSettings.alpn",
                                "streamSettings.realitySettings.serverNames.0",
                                "$host.address",
                                "$host.securityOptions.serverName",
                                "$host.transportOptions.path",
                                "$host.mux.smux"
                              ]
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "domain_resolver",
                                "multiplex.protocol",
                                "packet_encoding",
                                "tcp_fast_open",
                                "tls.insecure",
                                "tls.utls.fingerprint"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "from",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Copy from the inbound",
                          "markdownDescription": "Reads a value from the raw inbound and writes it into the generated config.\n\n```json\n{\n  \"op\": \"copy\",\n  \"from\": \"streamSettings.realitySettings.serverNames.0\",\n  \"to\": \"tls.server_name\"\n}\n```",
                          "defaultSnippets": [
                            {
                              "label": "copy",
                              "description": "Copy a value from the raw inbound",
                              "body": {
                                "op": "copy",
                                "from": "$1",
                                "to": "$2"
                              }
                            }
                          ]
                        },
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "set",
                              "title": "Set",
                              "markdownDescription": "Write a fixed value."
                            },
                            "value": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "boolean"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "$ref": "#/$defs/__schema6"
                                  }
                                },
                                {
                                  "type": "object",
                                  "propertyNames": {
                                    "type": "string"
                                  },
                                  "additionalProperties": {
                                    "$ref": "#/$defs/__schema7"
                                  }
                                }
                              ],
                              "title": "Value",
                              "markdownDescription": "The value to write. Strings, numbers, booleans, arrays and objects are allowed."
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "domain_resolver",
                                "multiplex.protocol",
                                "packet_encoding",
                                "tcp_fast_open",
                                "tls.insecure",
                                "tls.utls.fingerprint"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "value",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Set a fixed value",
                          "markdownDescription": "Writes a literal value into the generated config, creating the key if it is missing.\n\n```json\n{\n  \"op\": \"set\",\n  \"to\": \"tls.utls.fingerprint\",\n  \"value\": \"chrome\"\n}\n```",
                          "defaultSnippets": [
                            {
                              "label": "set",
                              "description": "Write a fixed value",
                              "body": {
                                "op": "set",
                                "to": "$1",
                                "value": "$2"
                              }
                            }
                          ]
                        },
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "unset",
                              "title": "Unset",
                              "markdownDescription": "Remove a field."
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "domain_resolver",
                                "multiplex.protocol",
                                "packet_encoding",
                                "tcp_fast_open",
                                "tls.insecure",
                                "tls.utls.fingerprint"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Remove a field",
                          "markdownDescription": "Removes a field the generator produced by itself.\n\n```json\n{\n  \"op\": \"unset\",\n  \"to\": \"multiplex\"\n}\n```\n\n> Only the field itself is removed. A parent object left empty stays in the config as `{}`.",
                          "defaultSnippets": [
                            {
                              "label": "unset",
                              "description": "Remove a field",
                              "body": {
                                "op": "unset",
                                "to": "$1"
                              }
                            }
                          ]
                        }
                      ],
                      "title": "Operation",
                      "markdownDescription": "Operations run one after another, in the order they are listed.\n\nA later operation sees what the previous ones wrote, so an `unset` can remove a key an earlier `set` added."
                    }
                  }
                },
                "additionalProperties": false,
                "title": "Host Mapper",
                "markdownDescription": "Rewrites the config generated for this host, per client type.\n\nOperations run **after** the generator has finished, so they can change or remove anything it produced.\n\nThe source for `copy` is the raw inbound of the config profile this host belongs to, or the host itself when the path starts with `$host.`.\n\n> `to` is never checked against the target client. A misspelled key is written exactly like a real one."
              },
              "internalSquads": {
                "type": "object",
                "properties": {
                  "mode": {
                    "type": "string",
                    "enum": [
                      "EXCLUDE",
                      "ALLOW_ONLY"
                    ]
                  },
                  "squads": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    }
                  }
                },
                "required": [
                  "mode",
                  "squads"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "uuid",
              "viewPosition",
              "remark",
              "address",
              "port",
              "path",
              "sni",
              "host",
              "alpn",
              "fingerprint",
              "isDisabled",
              "securityLayer",
              "xhttpExtraParams",
              "muxParams",
              "sockoptParams",
              "finalMask",
              "inbound",
              "serverDescription",
              "tags",
              "isHidden",
              "overrideSniFromAddress",
              "keepSniBlank",
              "vlessRouteId",
              "pinnedPeerCertSha256",
              "verifyPeerCertByName",
              "shuffleHost",
              "mihomoX25519",
              "mihomoIpVersion",
              "nodes",
              "xrayJsonTemplateUuid",
              "excludeFromSubscriptionTypes",
              "mapper",
              "internalSquads"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false,
        "$defs": {
          "__schema0": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema0"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema0"
                }
              }
            ]
          },
          "__schema1": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema1"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema1"
                }
              }
            ]
          },
          "__schema2": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema2"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema2"
                }
              }
            ]
          },
          "__schema3": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema3"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema3"
                }
              }
            ]
          },
          "__schema4": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema4"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema4"
                }
              }
            ]
          },
          "__schema5": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema5"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema5"
                }
              }
            ]
          },
          "__schema6": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema6"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema6"
                }
              }
            ]
          },
          "__schema7": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema7"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema7"
                }
              }
            ]
          }
        }
      }
    }
  }
}
DELETE/api/hosts/{uuid}Delete a host by UUID
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success"
}
POST/api/hosts/actions/cloneClone host
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "cloneFromUuid": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          }
        },
        "required": [
          "cloneFromUuid"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "viewPosition": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "remark": {
                "type": "string"
              },
              "address": {
                "type": "string"
              },
              "port": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "path": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "sni": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "host": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "alpn": {
                "anyOf": [
                  {
                    "type": "string",
                    "enum": [
                      "h3",
                      "h2",
                      "http/1.1",
                      "h2,http/1.1",
                      "h3,h2,http/1.1",
                      "h3,h2"
                    ]
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "fingerprint": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "isDisabled": {
                "type": "boolean"
              },
              "securityLayer": {
                "default": "DEFAULT",
                "type": "string",
                "enum": [
                  "DEFAULT",
                  "TLS",
                  "NONE"
                ]
              },
              "xhttpExtraParams": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "muxParams": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "sockoptParams": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "finalMask": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "inbound": {
                "type": "object",
                "properties": {
                  "configProfileUuid": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "configProfileInboundUuid": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "configProfileUuid",
                  "configProfileInboundUuid"
                ],
                "additionalProperties": false
              },
              "serverDescription": {
                "anyOf": [
                  {
                    "type": "string",
                    "maxLength": 30
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "tags": {
                "default": [],
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "isHidden": {
                "default": false,
                "type": "boolean"
              },
              "overrideSniFromAddress": {
                "default": false,
                "type": "boolean"
              },
              "keepSniBlank": {
                "default": false,
                "type": "boolean"
              },
              "vlessRouteId": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 65535
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "pinnedPeerCertSha256": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "verifyPeerCertByName": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "shuffleHost": {
                "type": "boolean"
              },
              "mihomoX25519": {
                "type": "boolean"
              },
              "mihomoIpVersion": {
                "anyOf": [
                  {
                    "type": "string",
                    "enum": [
                      "dual",
                      "ipv4",
                      "ipv6",
                      "ipv4-prefer",
                      "ipv6-prefer"
                    ]
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "nodes": {
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                }
              },
              "xrayJsonTemplateUuid": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "excludeFromSubscriptionTypes": {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "XRAY_JSON",
                    "XRAY_BASE64",
                    "MIHOMO",
                    "STASH",
                    "CLASH",
                    "SINGBOX"
                  ]
                }
              },
              "mapper": {
                "type": "object",
                "properties": {
                  "xrayJson": {
                    "title": "Xray JSON",
                    "markdownDescription": "Operations applied to the **outbound** generated for this host in the Xray JSON subscription. Paths are counted from the root of the outbound.\n\n```json\n[\n  {\n    \"op\": \"copy\",\n    \"from\": \"streamSettings.tlsSettings.cipherSuites\",\n    \"to\": \"streamSettings.tlsSettings.cipherSuites\"\n  },\n  {\n    \"op\": \"unset\",\n    \"to\": \"mux\"\n  }\n]\n```",
                    "type": "array",
                    "items": {
                      "oneOf": [
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "copy",
                              "title": "Copy",
                              "markdownDescription": "Take a value from the raw inbound."
                            },
                            "from": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Source path",
                              "markdownDescription": "Dot-separated path inside the **raw inbound** of the config profile this host belongs to. Array items are addressed by index.\n\nWith a `$host.` prefix the value is read from the **host** itself, after overrides have been resolved – `$host.securityOptions.serverName` holds the SNI that actually went into the config.\n\nOnly a part of the host is readable. Each entry below also opens everything nested under it:\n\n`address`, `port`, `finalRemark`, `protocol`, `transport`, `security`, `protocolOptions`, `transportOptions`, `securityOptions`, `mux`, `streamOverrides.finalMask`, `streamOverrides.sockopt`, `clientOverrides.serverDescription`, `metadata.remark`, `metadata.tags`, `metadata.inboundTag`\n\n> If the path resolves to nothing – or points outside the list above – the operation is skipped and the target key is **not** created.",
                              "examples": [
                                "streamSettings.tlsSettings.cipherSuites",
                                "streamSettings.tlsSettings.alpn",
                                "streamSettings.realitySettings.serverNames.0",
                                "$host.address",
                                "$host.securityOptions.serverName",
                                "$host.transportOptions.path",
                                "$host.mux.smux"
                              ]
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "streamSettings.tlsSettings.enableSessionResumption",
                                "streamSettings.tlsSettings.cipherSuites"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "from",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Copy from the inbound",
                          "markdownDescription": "Reads a value from the raw inbound and writes it into the generated config.\n\n```json\n{\n  \"op\": \"copy\",\n  \"from\": \"streamSettings.tlsSettings.cipherSuites\",\n  \"to\": \"streamSettings.tlsSettings.cipherSuites\"\n}\n```",
                          "defaultSnippets": [
                            {
                              "label": "copy",
                              "description": "Copy a value from the raw inbound",
                              "body": {
                                "op": "copy",
                                "from": "$1",
                                "to": "$2"
                              }
                            }
                          ]
                        },
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "set",
                              "title": "Set",
                              "markdownDescription": "Write a fixed value."
                            },
                            "value": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "boolean"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "$ref": "#/$defs/__schema0"
                                  }
                                },
                                {
                                  "type": "object",
                                  "propertyNames": {
                                    "type": "string"
                                  },
                                  "additionalProperties": {
                                    "$ref": "#/$defs/__schema1"
                                  }
                                }
                              ],
                              "title": "Value",
                              "markdownDescription": "The value to write. Strings, numbers, booleans, arrays and objects are allowed."
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "streamSettings.tlsSettings.enableSessionResumption",
                                "streamSettings.tlsSettings.cipherSuites"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "value",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Set a fixed value",
                          "markdownDescription": "Writes a literal value into the generated config, creating the key if it is missing.\n\n```json\n{\n  \"op\": \"set\",\n  \"to\": \"streamSettings.tlsSettings.enableSessionResumption\",\n  \"value\": true\n}\n```",
                          "defaultSnippets": [
                            {
                              "label": "set",
                              "description": "Write a fixed value",
                              "body": {
                                "op": "set",
                                "to": "$1",
                                "value": "$2"
                              }
                            }
                          ]
                        },
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "unset",
                              "title": "Unset",
                              "markdownDescription": "Remove a field."
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "streamSettings.tlsSettings.enableSessionResumption",
                                "streamSettings.tlsSettings.cipherSuites"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Remove a field",
                          "markdownDescription": "Removes a field the generator produced by itself.\n\n```json\n{\n  \"op\": \"unset\",\n  \"to\": \"mux\"\n}\n```\n\n> Only the field itself is removed. A parent object left empty stays in the config as `{}`.",
                          "defaultSnippets": [
                            {
                              "label": "unset",
                              "description": "Remove a field",
                              "body": {
                                "op": "unset",
                                "to": "$1"
                              }
                            }
                          ]
                        }
                      ],
                      "title": "Operation",
                      "markdownDescription": "Operations run one after another, in the order they are listed.\n\nA later operation sees what the previous ones wrote, so an `unset` can remove a key an earlier `set` added."
                    }
                  },
                  "mihomo": {
                    "title": "Mihomo",
                    "markdownDescription": "Operations applied to the **proxy node** generated for this host in the Mihomo subscription.\n\nPaths are counted from the root of the node, where Mihomo keys are written in kebab-case.\n\n```json\n[\n  {\n    \"op\": \"set\",\n    \"to\": \"ip-version\",\n    \"value\": \"ipv4\"\n  }\n]\n```",
                    "type": "array",
                    "items": {
                      "oneOf": [
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "copy",
                              "title": "Copy",
                              "markdownDescription": "Take a value from the raw inbound."
                            },
                            "from": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Source path",
                              "markdownDescription": "Dot-separated path inside the **raw inbound** of the config profile this host belongs to. Array items are addressed by index.\n\nWith a `$host.` prefix the value is read from the **host** itself, after overrides have been resolved – `$host.securityOptions.serverName` holds the SNI that actually went into the config.\n\nOnly a part of the host is readable. Each entry below also opens everything nested under it:\n\n`address`, `port`, `finalRemark`, `protocol`, `transport`, `security`, `protocolOptions`, `transportOptions`, `securityOptions`, `mux`, `streamOverrides.finalMask`, `streamOverrides.sockopt`, `clientOverrides.serverDescription`, `metadata.remark`, `metadata.tags`, `metadata.inboundTag`\n\n> If the path resolves to nothing – or points outside the list above – the operation is skipped and the target key is **not** created.",
                              "examples": [
                                "streamSettings.tlsSettings.cipherSuites",
                                "streamSettings.tlsSettings.alpn",
                                "streamSettings.realitySettings.serverNames.0",
                                "$host.address",
                                "$host.securityOptions.serverName",
                                "$host.transportOptions.path",
                                "$host.mux.smux"
                              ]
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the generated **proxy node**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "ip-version",
                                "client-fingerprint",
                                "tfo",
                                "reality-opts.support-x25519mlkem768"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "from",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Copy from the inbound",
                          "markdownDescription": "Reads a value from the raw inbound and writes it into the generated config.\n\n```json\n{\n  \"op\": \"copy\",\n  \"from\": \"streamSettings.realitySettings.serverNames.0\",\n  \"to\": \"servername\"\n}\n```",
                          "defaultSnippets": [
                            {
                              "label": "copy",
                              "description": "Copy a value from the raw inbound",
                              "body": {
                                "op": "copy",
                                "from": "$1",
                                "to": "$2"
                              }
                            }
                          ]
                        },
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "set",
                              "title": "Set",
                              "markdownDescription": "Write a fixed value."
                            },
                            "value": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "boolean"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "$ref": "#/$defs/__schema2"
                                  }
                                },
                                {
                                  "type": "object",
                                  "propertyNames": {
                                    "type": "string"
                                  },
                                  "additionalProperties": {
                                    "$ref": "#/$defs/__schema3"
                                  }
                                }
                              ],
                              "title": "Value",
                              "markdownDescription": "The value to write. Strings, numbers, booleans, arrays and objects are allowed."
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the generated **proxy node**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "ip-version",
                                "client-fingerprint",
                                "tfo",
                                "reality-opts.support-x25519mlkem768"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "value",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Set a fixed value",
                          "markdownDescription": "Writes a literal value into the generated config, creating the key if it is missing.\n\n```json\n{\n  \"op\": \"set\",\n  \"to\": \"reality-opts.support-x25519mlkem768\",\n  \"value\": true\n}\n```",
                          "defaultSnippets": [
                            {
                              "label": "set",
                              "description": "Write a fixed value",
                              "body": {
                                "op": "set",
                                "to": "$1",
                                "value": "$2"
                              }
                            }
                          ]
                        },
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "unset",
                              "title": "Unset",
                              "markdownDescription": "Remove a field."
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the generated **proxy node**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "ip-version",
                                "client-fingerprint",
                                "tfo",
                                "reality-opts.support-x25519mlkem768"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Remove a field",
                          "markdownDescription": "Removes a field the generator produced by itself.\n\n```json\n{\n  \"op\": \"unset\",\n  \"to\": \"smux\"\n}\n```\n\n> Only the field itself is removed. A parent object left empty stays in the config as `{}`.",
                          "defaultSnippets": [
                            {
                              "label": "unset",
                              "description": "Remove a field",
                              "body": {
                                "op": "unset",
                                "to": "$1"
                              }
                            }
                          ]
                        }
                      ],
                      "title": "Operation",
                      "markdownDescription": "Operations run one after another, in the order they are listed.\n\nA later operation sees what the previous ones wrote, so an `unset` can remove a key an earlier `set` added."
                    }
                  },
                  "base64": {
                    "title": "Base64",
                    "markdownDescription": "Operations applied to the share link generated for this host in the Base64 subscription.\n\n`to` is a plain query parameter name, not a path – dots carry no meaning here.\n\nWith a `$link.` prefix the operation rewrites the link itself instead of its query string. Writable parts: `$link.address`, `$link.port`, `$link.password`, `$link.remark`, and `$link.method` for Shadowsocks. `$link.password` is the credential of the protocol.\n\n> A value that cannot make a valid link – an empty address, a port outside 1-65535 – is ignored, and the generated one is kept.\n\n```json\n[\n  {\n    \"op\": \"set\",\n    \"to\": \"fp\",\n    \"value\": \"chrome\"\n  },\n  {\n    \"op\": \"unset\",\n    \"to\": \"fm\"\n  },\n  {\n    \"op\": \"set\",\n    \"to\": \"$link.port\",\n    \"value\": 2053\n  },\n  {\n    \"op\": \"copy\",\n    \"from\": \"$host.securityOptions.serverName\",\n    \"to\": \"$link.address\"\n  }\n]\n```",
                    "type": "array",
                    "items": {
                      "oneOf": [
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "copy",
                              "title": "Copy",
                              "markdownDescription": "Take a value from the raw inbound."
                            },
                            "from": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Source path",
                              "markdownDescription": "Dot-separated path inside the **raw inbound** of the config profile this host belongs to. Array items are addressed by index.\n\nWith a `$host.` prefix the value is read from the **host** itself, after overrides have been resolved – `$host.securityOptions.serverName` holds the SNI that actually went into the config.\n\nOnly a part of the host is readable. Each entry below also opens everything nested under it:\n\n`address`, `port`, `finalRemark`, `protocol`, `transport`, `security`, `protocolOptions`, `transportOptions`, `securityOptions`, `mux`, `streamOverrides.finalMask`, `streamOverrides.sockopt`, `clientOverrides.serverDescription`, `metadata.remark`, `metadata.tags`, `metadata.inboundTag`\n\n> If the path resolves to nothing – or points outside the list above – the operation is skipped and the target key is **not** created.",
                              "examples": [
                                "streamSettings.tlsSettings.cipherSuites",
                                "streamSettings.tlsSettings.alpn",
                                "streamSettings.realitySettings.serverNames.0",
                                "$host.address",
                                "$host.securityOptions.serverName",
                                "$host.transportOptions.path",
                                "$host.mux.smux"
                              ]
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the query string of the generated **share link**, or the link itself with a `$link.` prefix, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "$link.address",
                                "$link.port",
                                "$link.password",
                                "$link.remark",
                                "$link.method",
                                "alpn",
                                "authority",
                                "cs",
                                "encryption",
                                "extra",
                                "flow",
                                "fm",
                                "fp",
                                "headerType",
                                "heartbeatPeriod",
                                "host",
                                "mode",
                                "mtu",
                                "obfs",
                                "obfs-password",
                                "path",
                                "pbk",
                                "pcs",
                                "pinSHA256",
                                "pqv",
                                "security",
                                "serviceName",
                                "sid",
                                "sni",
                                "spx",
                                "tti",
                                "type",
                                "vcn"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "from",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Copy from the inbound",
                          "markdownDescription": "Reads a value from the raw inbound and writes it into the generated config.\n\n```json\n{\n  \"op\": \"copy\",\n  \"from\": \"streamSettings.realitySettings.serverNames.0\",\n  \"to\": \"sni\"\n}\n```",
                          "defaultSnippets": [
                            {
                              "label": "copy",
                              "description": "Copy a value from the raw inbound",
                              "body": {
                                "op": "copy",
                                "from": "$1",
                                "to": "$2"
                              }
                            }
                          ]
                        },
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "set",
                              "title": "Set",
                              "markdownDescription": "Write a fixed value."
                            },
                            "value": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "boolean"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "$ref": "#/$defs/__schema4"
                                  }
                                },
                                {
                                  "type": "object",
                                  "propertyNames": {
                                    "type": "string"
                                  },
                                  "additionalProperties": {
                                    "$ref": "#/$defs/__schema5"
                                  }
                                }
                              ],
                              "title": "Value",
                              "markdownDescription": "The value to write. Strings, numbers, booleans, arrays and objects are allowed."
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the query string of the generated **share link**, or the link itself with a `$link.` prefix, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "$link.address",
                                "$link.port",
                                "$link.password",
                                "$link.remark",
                                "$link.method",
                                "alpn",
                                "authority",
                                "cs",
                                "encryption",
                                "extra",
                                "flow",
                                "fm",
                                "fp",
                                "headerType",
                                "heartbeatPeriod",
                                "host",
                                "mode",
                                "mtu",
                                "obfs",
                                "obfs-password",
                                "path",
                                "pbk",
                                "pcs",
                                "pinSHA256",
                                "pqv",
                                "security",
                                "serviceName",
                                "sid",
                                "sni",
                                "spx",
                                "tti",
                                "type",
                                "vcn"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "value",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Set a fixed value",
                          "markdownDescription": "Writes a literal value into the generated config, creating the key if it is missing.\n\n```json\n{\n  \"op\": \"set\",\n  \"to\": \"fp\",\n  \"value\": \"chrome\"\n}\n```",
                          "defaultSnippets": [
                            {
                              "label": "set",
                              "description": "Write a fixed value",
                              "body": {
                                "op": "set",
                                "to": "$1",
                                "value": "$2"
                              }
                            }
                          ]
                        },
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "unset",
                              "title": "Unset",
                              "markdownDescription": "Remove a field."
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the query string of the generated **share link**, or the link itself with a `$link.` prefix, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "$link.address",
                                "$link.port",
                                "$link.password",
                                "$link.remark",
                                "$link.method",
                                "alpn",
                                "authority",
                                "cs",
                                "encryption",
                                "extra",
                                "flow",
                                "fm",
                                "fp",
                                "headerType",
                                "heartbeatPeriod",
                                "host",
                                "mode",
                                "mtu",
                                "obfs",
                                "obfs-password",
                                "path",
                                "pbk",
                                "pcs",
                                "pinSHA256",
                                "pqv",
                                "security",
                                "serviceName",
                                "sid",
                                "sni",
                                "spx",
                                "tti",
                                "type",
                                "vcn"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Remove a field",
                          "markdownDescription": "Removes a field the generator produced by itself.\n\n```json\n{\n  \"op\": \"unset\",\n  \"to\": \"fm\"\n}\n```\n\n> Only the field itself is removed. A parent object left empty stays in the config as `{}`.",
                          "defaultSnippets": [
                            {
                              "label": "unset",
                              "description": "Remove a field",
                              "body": {
                                "op": "unset",
                                "to": "$1"
                              }
                            }
                          ]
                        }
                      ],
                      "title": "Operation",
                      "markdownDescription": "Operations run one after another, in the order they are listed.\n\nA later operation sees what the previous ones wrote, so an `unset` can remove a key an earlier `set` added."
                    }
                  },
                  "singbox": {
                    "title": "sing-box",
                    "markdownDescription": "Operations applied to the **outbound** generated for this host in the sing-box subscription. Paths are counted from the root of the outbound.\n\nsing-box keys are written in snake_case, and the outbound of a Hysteria2 host has a shape of its own.\n\n```json\n[\n  {\n    \"op\": \"set\",\n    \"to\": \"tls.utls.fingerprint\",\n    \"value\": \"chrome\"\n  },\n  {\n    \"op\": \"unset\",\n    \"to\": \"multiplex\"\n  }\n]\n```",
                    "type": "array",
                    "items": {
                      "oneOf": [
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "copy",
                              "title": "Copy",
                              "markdownDescription": "Take a value from the raw inbound."
                            },
                            "from": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Source path",
                              "markdownDescription": "Dot-separated path inside the **raw inbound** of the config profile this host belongs to. Array items are addressed by index.\n\nWith a `$host.` prefix the value is read from the **host** itself, after overrides have been resolved – `$host.securityOptions.serverName` holds the SNI that actually went into the config.\n\nOnly a part of the host is readable. Each entry below also opens everything nested under it:\n\n`address`, `port`, `finalRemark`, `protocol`, `transport`, `security`, `protocolOptions`, `transportOptions`, `securityOptions`, `mux`, `streamOverrides.finalMask`, `streamOverrides.sockopt`, `clientOverrides.serverDescription`, `metadata.remark`, `metadata.tags`, `metadata.inboundTag`\n\n> If the path resolves to nothing – or points outside the list above – the operation is skipped and the target key is **not** created.",
                              "examples": [
                                "streamSettings.tlsSettings.cipherSuites",
                                "streamSettings.tlsSettings.alpn",
                                "streamSettings.realitySettings.serverNames.0",
                                "$host.address",
                                "$host.securityOptions.serverName",
                                "$host.transportOptions.path",
                                "$host.mux.smux"
                              ]
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "domain_resolver",
                                "multiplex.protocol",
                                "packet_encoding",
                                "tcp_fast_open",
                                "tls.insecure",
                                "tls.utls.fingerprint"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "from",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Copy from the inbound",
                          "markdownDescription": "Reads a value from the raw inbound and writes it into the generated config.\n\n```json\n{\n  \"op\": \"copy\",\n  \"from\": \"streamSettings.realitySettings.serverNames.0\",\n  \"to\": \"tls.server_name\"\n}\n```",
                          "defaultSnippets": [
                            {
                              "label": "copy",
                              "description": "Copy a value from the raw inbound",
                              "body": {
                                "op": "copy",
                                "from": "$1",
                                "to": "$2"
                              }
                            }
                          ]
                        },
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "set",
                              "title": "Set",
                              "markdownDescription": "Write a fixed value."
                            },
                            "value": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "boolean"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "$ref": "#/$defs/__schema6"
                                  }
                                },
                                {
                                  "type": "object",
                                  "propertyNames": {
                                    "type": "string"
                                  },
                                  "additionalProperties": {
                                    "$ref": "#/$defs/__schema7"
                                  }
                                }
                              ],
                              "title": "Value",
                              "markdownDescription": "The value to write. Strings, numbers, booleans, arrays and objects are allowed."
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "domain_resolver",
                                "multiplex.protocol",
                                "packet_encoding",
                                "tcp_fast_open",
                                "tls.insecure",
                                "tls.utls.fingerprint"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "value",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Set a fixed value",
                          "markdownDescription": "Writes a literal value into the generated config, creating the key if it is missing.\n\n```json\n{\n  \"op\": \"set\",\n  \"to\": \"tls.utls.fingerprint\",\n  \"value\": \"chrome\"\n}\n```",
                          "defaultSnippets": [
                            {
                              "label": "set",
                              "description": "Write a fixed value",
                              "body": {
                                "op": "set",
                                "to": "$1",
                                "value": "$2"
                              }
                            }
                          ]
                        },
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "unset",
                              "title": "Unset",
                              "markdownDescription": "Remove a field."
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "domain_resolver",
                                "multiplex.protocol",
                                "packet_encoding",
                                "tcp_fast_open",
                                "tls.insecure",
                                "tls.utls.fingerprint"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Remove a field",
                          "markdownDescription": "Removes a field the generator produced by itself.\n\n```json\n{\n  \"op\": \"unset\",\n  \"to\": \"multiplex\"\n}\n```\n\n> Only the field itself is removed. A parent object left empty stays in the config as `{}`.",
                          "defaultSnippets": [
                            {
                              "label": "unset",
                              "description": "Remove a field",
                              "body": {
                                "op": "unset",
                                "to": "$1"
                              }
                            }
                          ]
                        }
                      ],
                      "title": "Operation",
                      "markdownDescription": "Operations run one after another, in the order they are listed.\n\nA later operation sees what the previous ones wrote, so an `unset` can remove a key an earlier `set` added."
                    }
                  }
                },
                "additionalProperties": false,
                "title": "Host Mapper",
                "markdownDescription": "Rewrites the config generated for this host, per client type.\n\nOperations run **after** the generator has finished, so they can change or remove anything it produced.\n\nThe source for `copy` is the raw inbound of the config profile this host belongs to, or the host itself when the path starts with `$host.`.\n\n> `to` is never checked against the target client. A misspelled key is written exactly like a real one."
              },
              "internalSquads": {
                "type": "object",
                "properties": {
                  "mode": {
                    "type": "string",
                    "enum": [
                      "EXCLUDE",
                      "ALLOW_ONLY"
                    ]
                  },
                  "squads": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    }
                  }
                },
                "required": [
                  "mode",
                  "squads"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "uuid",
              "viewPosition",
              "remark",
              "address",
              "port",
              "path",
              "sni",
              "host",
              "alpn",
              "fingerprint",
              "isDisabled",
              "securityLayer",
              "xhttpExtraParams",
              "muxParams",
              "sockoptParams",
              "finalMask",
              "inbound",
              "serverDescription",
              "tags",
              "isHidden",
              "overrideSniFromAddress",
              "keepSniBlank",
              "vlessRouteId",
              "pinnedPeerCertSha256",
              "verifyPeerCertByName",
              "shuffleHost",
              "mihomoX25519",
              "mihomoIpVersion",
              "nodes",
              "xrayJsonTemplateUuid",
              "excludeFromSubscriptionTypes",
              "mapper",
              "internalSquads"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false,
        "$defs": {
          "__schema0": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema0"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema0"
                }
              }
            ]
          },
          "__schema1": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema1"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema1"
                }
              }
            ]
          },
          "__schema2": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema2"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema2"
                }
              }
            ]
          },
          "__schema3": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema3"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema3"
                }
              }
            ]
          },
          "__schema4": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema4"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema4"
                }
              }
            ]
          },
          "__schema5": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema5"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema5"
                }
              }
            ]
          },
          "__schema6": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema6"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema6"
                }
              }
            ]
          },
          "__schema7": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema7"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema7"
                }
              }
            ]
          }
        }
      }
    }
  }
}
POST/api/hosts/actions/reorderReorder hosts
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "hosts": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "viewPosition": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "uuid": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                }
              },
              "required": [
                "viewPosition",
                "uuid"
              ]
            }
          }
        },
        "required": [
          "hosts"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "isUpdated": {
                "type": "boolean"
              }
            },
            "required": [
              "isUpdated"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/hosts/bulk/deleteDelete hosts by UUIDs
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "uuids": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            }
          }
        },
        "required": [
          "uuids"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success"
}
POST/api/hosts/bulk/disableDisable hosts by UUIDs
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "uuids": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            }
          }
        },
        "required": [
          "uuids"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success"
}
POST/api/hosts/bulk/enableEnable hosts by UUIDs
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "uuids": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            }
          }
        },
        "required": [
          "uuids"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success"
}
PATCH/api/hosts/bulk/updateUpdate many hosts
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "inbound": {
            "type": "object",
            "properties": {
              "configProfileUuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "configProfileInboundUuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              }
            },
            "required": [
              "configProfileUuid",
              "configProfileInboundUuid"
            ]
          },
          "remark": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          },
          "address": {
            "type": "string"
          },
          "port": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "path": {
            "type": [
              "string",
              "null"
            ]
          },
          "sni": {
            "type": [
              "string",
              "null"
            ]
          },
          "host": {
            "type": [
              "string",
              "null"
            ]
          },
          "alpn": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "h3",
                  "h2",
                  "http/1.1",
                  "h2,http/1.1",
                  "h3,h2,http/1.1",
                  "h3,h2"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "fingerprint": {
            "type": [
              "string",
              "null"
            ]
          },
          "isDisabled": {
            "type": "boolean"
          },
          "securityLayer": {
            "type": "string",
            "enum": [
              "DEFAULT",
              "TLS",
              "NONE"
            ]
          },
          "xhttpExtraParams": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ]
          },
          "muxParams": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ]
          },
          "sockoptParams": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ]
          },
          "finalMask": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ]
          },
          "serverDescription": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 30
              },
              {
                "type": "null"
              }
            ]
          },
          "tags": {
            "maxItems": 10,
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 36,
              "pattern": "^[A-Z0-9_:]+$"
            }
          },
          "isHidden": {
            "type": "boolean"
          },
          "overrideSniFromAddress": {
            "type": "boolean"
          },
          "keepSniBlank": {
            "type": "boolean"
          },
          "vlessRouteId": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 65535
              },
              {
                "type": "null"
              }
            ]
          },
          "pinnedPeerCertSha256": {
            "type": [
              "string",
              "null"
            ]
          },
          "verifyPeerCertByName": {
            "type": [
              "string",
              "null"
            ]
          },
          "shuffleHost": {
            "type": "boolean"
          },
          "mihomoX25519": {
            "type": "boolean"
          },
          "mihomoIpVersion": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "dual",
                  "ipv4",
                  "ipv6",
                  "ipv4-prefer",
                  "ipv6-prefer"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "nodes": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            }
          },
          "xrayJsonTemplateUuid": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              {
                "type": "null"
              }
            ]
          },
          "excludeFromSubscriptionTypes": {
            "description": "Optional. Subscription types from which the host will be excluded from.",
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "XRAY_JSON",
                "XRAY_BASE64",
                "MIHOMO",
                "STASH",
                "CLASH",
                "SINGBOX"
              ]
            }
          },
          "mapper": {
            "type": "object",
            "properties": {
              "xrayJson": {
                "title": "Xray JSON",
                "markdownDescription": "Operations applied to the **outbound** generated for this host in the Xray JSON subscription. Paths are counted from the root of the outbound.\n\n```json\n[\n  {\n    \"op\": \"copy\",\n    \"from\": \"streamSettings.tlsSettings.cipherSuites\",\n    \"to\": \"streamSettings.tlsSettings.cipherSuites\"\n  },\n  {\n    \"op\": \"unset\",\n    \"to\": \"mux\"\n  }\n]\n```",
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "type": "object",
                      "properties": {
                        "op": {
                          "type": "string",
                          "const": "copy",
                          "title": "Copy",
                          "markdownDescription": "Take a value from the raw inbound."
                        },
                        "from": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Source path",
                          "markdownDescription": "Dot-separated path inside the **raw inbound** of the config profile this host belongs to. Array items are addressed by index.\n\nWith a `$host.` prefix the value is read from the **host** itself, after overrides have been resolved – `$host.securityOptions.serverName` holds the SNI that actually went into the config.\n\nOnly a part of the host is readable. Each entry below also opens everything nested under it:\n\n`address`, `port`, `finalRemark`, `protocol`, `transport`, `security`, `protocolOptions`, `transportOptions`, `securityOptions`, `mux`, `streamOverrides.finalMask`, `streamOverrides.sockopt`, `clientOverrides.serverDescription`, `metadata.remark`, `metadata.tags`, `metadata.inboundTag`\n\n> If the path resolves to nothing – or points outside the list above – the operation is skipped and the target key is **not** created.",
                          "examples": [
                            "streamSettings.tlsSettings.cipherSuites",
                            "streamSettings.tlsSettings.alpn",
                            "streamSettings.realitySettings.serverNames.0",
                            "$host.address",
                            "$host.securityOptions.serverName",
                            "$host.transportOptions.path",
                            "$host.mux.smux"
                          ]
                        },
                        "to": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Target path",
                          "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                          "examples": [
                            "streamSettings.tlsSettings.enableSessionResumption",
                            "streamSettings.tlsSettings.cipherSuites"
                          ]
                        }
                      },
                      "required": [
                        "op",
                        "from",
                        "to"
                      ],
                      "title": "Copy from the inbound",
                      "markdownDescription": "Reads a value from the raw inbound and writes it into the generated config.\n\n```json\n{\n  \"op\": \"copy\",\n  \"from\": \"streamSettings.tlsSettings.cipherSuites\",\n  \"to\": \"streamSettings.tlsSettings.cipherSuites\"\n}\n```",
                      "defaultSnippets": [
                        {
                          "label": "copy",
                          "description": "Copy a value from the raw inbound",
                          "body": {
                            "op": "copy",
                            "from": "$1",
                            "to": "$2"
                          }
                        }
                      ]
                    },
                    {
                      "type": "object",
                      "properties": {
                        "op": {
                          "type": "string",
                          "const": "set",
                          "title": "Set",
                          "markdownDescription": "Write a fixed value."
                        },
                        "value": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "number"
                            },
                            {
                              "type": "boolean"
                            },
                            {
                              "type": "array",
                              "items": {
                                "$ref": "#/$defs/__schema0"
                              }
                            },
                            {
                              "type": "object",
                              "propertyNames": {
                                "type": "string"
                              },
                              "additionalProperties": {
                                "$ref": "#/$defs/__schema1"
                              }
                            }
                          ],
                          "title": "Value",
                          "markdownDescription": "The value to write. Strings, numbers, booleans, arrays and objects are allowed."
                        },
                        "to": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Target path",
                          "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                          "examples": [
                            "streamSettings.tlsSettings.enableSessionResumption",
                            "streamSettings.tlsSettings.cipherSuites"
                          ]
                        }
                      },
                      "required": [
                        "op",
                        "value",
                        "to"
                      ],
                      "title": "Set a fixed value",
                      "markdownDescription": "Writes a literal value into the generated config, creating the key if it is missing.\n\n```json\n{\n  \"op\": \"set\",\n  \"to\": \"streamSettings.tlsSettings.enableSessionResumption\",\n  \"value\": true\n}\n```",
                      "defaultSnippets": [
                        {
                          "label": "set",
                          "description": "Write a fixed value",
                          "body": {
                            "op": "set",
                            "to": "$1",
                            "value": "$2"
                          }
                        }
                      ]
                    },
                    {
                      "type": "object",
                      "properties": {
                        "op": {
                          "type": "string",
                          "const": "unset",
                          "title": "Unset",
                          "markdownDescription": "Remove a field."
                        },
                        "to": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Target path",
                          "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                          "examples": [
                            "streamSettings.tlsSettings.enableSessionResumption",
                            "streamSettings.tlsSettings.cipherSuites"
                          ]
                        }
                      },
                      "required": [
                        "op",
                        "to"
                      ],
                      "title": "Remove a field",
                      "markdownDescription": "Removes a field the generator produced by itself.\n\n```json\n{\n  \"op\": \"unset\",\n  \"to\": \"mux\"\n}\n```\n\n> Only the field itself is removed. A parent object left empty stays in the config as `{}`.",
                      "defaultSnippets": [
                        {
                          "label": "unset",
                          "description": "Remove a field",
                          "body": {
                            "op": "unset",
                            "to": "$1"
                          }
                        }
                      ]
                    }
                  ],
                  "title": "Operation",
                  "markdownDescription": "Operations run one after another, in the order they are listed.\n\nA later operation sees what the previous ones wrote, so an `unset` can remove a key an earlier `set` added."
                }
              },
              "mihomo": {
                "title": "Mihomo",
                "markdownDescription": "Operations applied to the **proxy node** generated for this host in the Mihomo subscription.\n\nPaths are counted from the root of the node, where Mihomo keys are written in kebab-case.\n\n```json\n[\n  {\n    \"op\": \"set\",\n    \"to\": \"ip-version\",\n    \"value\": \"ipv4\"\n  }\n]\n```",
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "type": "object",
                      "properties": {
                        "op": {
                          "type": "string",
                          "const": "copy",
                          "title": "Copy",
                          "markdownDescription": "Take a value from the raw inbound."
                        },
                        "from": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Source path",
                          "markdownDescription": "Dot-separated path inside the **raw inbound** of the config profile this host belongs to. Array items are addressed by index.\n\nWith a `$host.` prefix the value is read from the **host** itself, after overrides have been resolved – `$host.securityOptions.serverName` holds the SNI that actually went into the config.\n\nOnly a part of the host is readable. Each entry below also opens everything nested under it:\n\n`address`, `port`, `finalRemark`, `protocol`, `transport`, `security`, `protocolOptions`, `transportOptions`, `securityOptions`, `mux`, `streamOverrides.finalMask`, `streamOverrides.sockopt`, `clientOverrides.serverDescription`, `metadata.remark`, `metadata.tags`, `metadata.inboundTag`\n\n> If the path resolves to nothing – or points outside the list above – the operation is skipped and the target key is **not** created.",
                          "examples": [
                            "streamSettings.tlsSettings.cipherSuites",
                            "streamSettings.tlsSettings.alpn",
                            "streamSettings.realitySettings.serverNames.0",
                            "$host.address",
                            "$host.securityOptions.serverName",
                            "$host.transportOptions.path",
                            "$host.mux.smux"
                          ]
                        },
                        "to": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Target path",
                          "markdownDescription": "Dot-separated path inside the generated **proxy node**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                          "examples": [
                            "ip-version",
                            "client-fingerprint",
                            "tfo",
                            "reality-opts.support-x25519mlkem768"
                          ]
                        }
                      },
                      "required": [
                        "op",
                        "from",
                        "to"
                      ],
                      "title": "Copy from the inbound",
                      "markdownDescription": "Reads a value from the raw inbound and writes it into the generated config.\n\n```json\n{\n  \"op\": \"copy\",\n  \"from\": \"streamSettings.realitySettings.serverNames.0\",\n  \"to\": \"servername\"\n}\n```",
                      "defaultSnippets": [
                        {
                          "label": "copy",
                          "description": "Copy a value from the raw inbound",
                          "body": {
                            "op": "copy",
                            "from": "$1",
                            "to": "$2"
                          }
                        }
                      ]
                    },
                    {
                      "type": "object",
                      "properties": {
                        "op": {
                          "type": "string",
                          "const": "set",
                          "title": "Set",
                          "markdownDescription": "Write a fixed value."
                        },
                        "value": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "number"
                            },
                            {
                              "type": "boolean"
                            },
                            {
                              "type": "array",
                              "items": {
                                "$ref": "#/$defs/__schema2"
                              }
                            },
                            {
                              "type": "object",
                              "propertyNames": {
                                "type": "string"
                              },
                              "additionalProperties": {
                                "$ref": "#/$defs/__schema3"
                              }
                            }
                          ],
                          "title": "Value",
                          "markdownDescription": "The value to write. Strings, numbers, booleans, arrays and objects are allowed."
                        },
                        "to": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Target path",
                          "markdownDescription": "Dot-separated path inside the generated **proxy node**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                          "examples": [
                            "ip-version",
                            "client-fingerprint",
                            "tfo",
                            "reality-opts.support-x25519mlkem768"
                          ]
                        }
                      },
                      "required": [
                        "op",
                        "value",
                        "to"
                      ],
                      "title": "Set a fixed value",
                      "markdownDescription": "Writes a literal value into the generated config, creating the key if it is missing.\n\n```json\n{\n  \"op\": \"set\",\n  \"to\": \"reality-opts.support-x25519mlkem768\",\n  \"value\": true\n}\n```",
                      "defaultSnippets": [
                        {
                          "label": "set",
                          "description": "Write a fixed value",
                          "body": {
                            "op": "set",
                            "to": "$1",
                            "value": "$2"
                          }
                        }
                      ]
                    },
                    {
                      "type": "object",
                      "properties": {
                        "op": {
                          "type": "string",
                          "const": "unset",
                          "title": "Unset",
                          "markdownDescription": "Remove a field."
                        },
                        "to": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Target path",
                          "markdownDescription": "Dot-separated path inside the generated **proxy node**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                          "examples": [
                            "ip-version",
                            "client-fingerprint",
                            "tfo",
                            "reality-opts.support-x25519mlkem768"
                          ]
                        }
                      },
                      "required": [
                        "op",
                        "to"
                      ],
                      "title": "Remove a field",
                      "markdownDescription": "Removes a field the generator produced by itself.\n\n```json\n{\n  \"op\": \"unset\",\n  \"to\": \"smux\"\n}\n```\n\n> Only the field itself is removed. A parent object left empty stays in the config as `{}`.",
                      "defaultSnippets": [
                        {
                          "label": "unset",
                          "description": "Remove a field",
                          "body": {
                            "op": "unset",
                            "to": "$1"
                          }
                        }
                      ]
                    }
                  ],
                  "title": "Operation",
                  "markdownDescription": "Operations run one after another, in the order they are listed.\n\nA later operation sees what the previous ones wrote, so an `unset` can remove a key an earlier `set` added."
                }
              },
              "base64": {
                "title": "Base64",
                "markdownDescription": "Operations applied to the share link generated for this host in the Base64 subscription.\n\n`to` is a plain query parameter name, not a path – dots carry no meaning here.\n\nWith a `$link.` prefix the operation rewrites the link itself instead of its query string. Writable parts: `$link.address`, `$link.port`, `$link.password`, `$link.remark`, and `$link.method` for Shadowsocks. `$link.password` is the credential of the protocol.\n\n> A value that cannot make a valid link – an empty address, a port outside 1-65535 – is ignored, and the generated one is kept.\n\n```json\n[\n  {\n    \"op\": \"set\",\n    \"to\": \"fp\",\n    \"value\": \"chrome\"\n  },\n  {\n    \"op\": \"unset\",\n    \"to\": \"fm\"\n  },\n  {\n    \"op\": \"set\",\n    \"to\": \"$link.port\",\n    \"value\": 2053\n  },\n  {\n    \"op\": \"copy\",\n    \"from\": \"$host.securityOptions.serverName\",\n    \"to\": \"$link.address\"\n  }\n]\n```",
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "type": "object",
                      "properties": {
                        "op": {
                          "type": "string",
                          "const": "copy",
                          "title": "Copy",
                          "markdownDescription": "Take a value from the raw inbound."
                        },
                        "from": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Source path",
                          "markdownDescription": "Dot-separated path inside the **raw inbound** of the config profile this host belongs to. Array items are addressed by index.\n\nWith a `$host.` prefix the value is read from the **host** itself, after overrides have been resolved – `$host.securityOptions.serverName` holds the SNI that actually went into the config.\n\nOnly a part of the host is readable. Each entry below also opens everything nested under it:\n\n`address`, `port`, `finalRemark`, `protocol`, `transport`, `security`, `protocolOptions`, `transportOptions`, `securityOptions`, `mux`, `streamOverrides.finalMask`, `streamOverrides.sockopt`, `clientOverrides.serverDescription`, `metadata.remark`, `metadata.tags`, `metadata.inboundTag`\n\n> If the path resolves to nothing – or points outside the list above – the operation is skipped and the target key is **not** created.",
                          "examples": [
                            "streamSettings.tlsSettings.cipherSuites",
                            "streamSettings.tlsSettings.alpn",
                            "streamSettings.realitySettings.serverNames.0",
                            "$host.address",
                            "$host.securityOptions.serverName",
                            "$host.transportOptions.path",
                            "$host.mux.smux"
                          ]
                        },
                        "to": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Target path",
                          "markdownDescription": "Dot-separated path inside the query string of the generated **share link**, or the link itself with a `$link.` prefix, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                          "examples": [
                            "$link.address",
                            "$link.port",
                            "$link.password",
                            "$link.remark",
                            "$link.method",
                            "alpn",
                            "authority",
                            "cs",
                            "encryption",
                            "extra",
                            "flow",
                            "fm",
                            "fp",
                            "headerType",
                            "heartbeatPeriod",
                            "host",
                            "mode",
                            "mtu",
                            "obfs",
                            "obfs-password",
                            "path",
                            "pbk",
                            "pcs",
                            "pinSHA256",
                            "pqv",
                            "security",
                            "serviceName",
                            "sid",
                            "sni",
                            "spx",
                            "tti",
                            "type",
                            "vcn"
                          ]
                        }
                      },
                      "required": [
                        "op",
                        "from",
                        "to"
                      ],
                      "title": "Copy from the inbound",
                      "markdownDescription": "Reads a value from the raw inbound and writes it into the generated config.\n\n```json\n{\n  \"op\": \"copy\",\n  \"from\": \"streamSettings.realitySettings.serverNames.0\",\n  \"to\": \"sni\"\n}\n```",
                      "defaultSnippets": [
                        {
                          "label": "copy",
                          "description": "Copy a value from the raw inbound",
                          "body": {
                            "op": "copy",
                            "from": "$1",
                            "to": "$2"
                          }
                        }
                      ]
                    },
                    {
                      "type": "object",
                      "properties": {
                        "op": {
                          "type": "string",
                          "const": "set",
                          "title": "Set",
                          "markdownDescription": "Write a fixed value."
                        },
                        "value": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "number"
                            },
                            {
                              "type": "boolean"
                            },
                            {
                              "type": "array",
                              "items": {
                                "$ref": "#/$defs/__schema4"
                              }
                            },
                            {
                              "type": "object",
                              "propertyNames": {
                                "type": "string"
                              },
                              "additionalProperties": {
                                "$ref": "#/$defs/__schema5"
                              }
                            }
                          ],
                          "title": "Value",
                          "markdownDescription": "The value to write. Strings, numbers, booleans, arrays and objects are allowed."
                        },
                        "to": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Target path",
                          "markdownDescription": "Dot-separated path inside the query string of the generated **share link**, or the link itself with a `$link.` prefix, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                          "examples": [
                            "$link.address",
                            "$link.port",
                            "$link.password",
                            "$link.remark",
                            "$link.method",
                            "alpn",
                            "authority",
                            "cs",
                            "encryption",
                            "extra",
                            "flow",
                            "fm",
                            "fp",
                            "headerType",
                            "heartbeatPeriod",
                            "host",
                            "mode",
                            "mtu",
                            "obfs",
                            "obfs-password",
                            "path",
                            "pbk",
                            "pcs",
                            "pinSHA256",
                            "pqv",
                            "security",
                            "serviceName",
                            "sid",
                            "sni",
                            "spx",
                            "tti",
                            "type",
                            "vcn"
                          ]
                        }
                      },
                      "required": [
                        "op",
                        "value",
                        "to"
                      ],
                      "title": "Set a fixed value",
                      "markdownDescription": "Writes a literal value into the generated config, creating the key if it is missing.\n\n```json\n{\n  \"op\": \"set\",\n  \"to\": \"fp\",\n  \"value\": \"chrome\"\n}\n```",
                      "defaultSnippets": [
                        {
                          "label": "set",
                          "description": "Write a fixed value",
                          "body": {
                            "op": "set",
                            "to": "$1",
                            "value": "$2"
                          }
                        }
                      ]
                    },
                    {
                      "type": "object",
                      "properties": {
                        "op": {
                          "type": "string",
                          "const": "unset",
                          "title": "Unset",
                          "markdownDescription": "Remove a field."
                        },
                        "to": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Target path",
                          "markdownDescription": "Dot-separated path inside the query string of the generated **share link**, or the link itself with a `$link.` prefix, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                          "examples": [
                            "$link.address",
                            "$link.port",
                            "$link.password",
                            "$link.remark",
                            "$link.method",
                            "alpn",
                            "authority",
                            "cs",
                            "encryption",
                            "extra",
                            "flow",
                            "fm",
                            "fp",
                            "headerType",
                            "heartbeatPeriod",
                            "host",
                            "mode",
                            "mtu",
                            "obfs",
                            "obfs-password",
                            "path",
                            "pbk",
                            "pcs",
                            "pinSHA256",
                            "pqv",
                            "security",
                            "serviceName",
                            "sid",
                            "sni",
                            "spx",
                            "tti",
                            "type",
                            "vcn"
                          ]
                        }
                      },
                      "required": [
                        "op",
                        "to"
                      ],
                      "title": "Remove a field",
                      "markdownDescription": "Removes a field the generator produced by itself.\n\n```json\n{\n  \"op\": \"unset\",\n  \"to\": \"fm\"\n}\n```\n\n> Only the field itself is removed. A parent object left empty stays in the config as `{}`.",
                      "defaultSnippets": [
                        {
                          "label": "unset",
                          "description": "Remove a field",
                          "body": {
                            "op": "unset",
                            "to": "$1"
                          }
                        }
                      ]
                    }
                  ],
                  "title": "Operation",
                  "markdownDescription": "Operations run one after another, in the order they are listed.\n\nA later operation sees what the previous ones wrote, so an `unset` can remove a key an earlier `set` added."
                }
              },
              "singbox": {
                "title": "sing-box",
                "markdownDescription": "Operations applied to the **outbound** generated for this host in the sing-box subscription. Paths are counted from the root of the outbound.\n\nsing-box keys are written in snake_case, and the outbound of a Hysteria2 host has a shape of its own.\n\n```json\n[\n  {\n    \"op\": \"set\",\n    \"to\": \"tls.utls.fingerprint\",\n    \"value\": \"chrome\"\n  },\n  {\n    \"op\": \"unset\",\n    \"to\": \"multiplex\"\n  }\n]\n```",
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "type": "object",
                      "properties": {
                        "op": {
                          "type": "string",
                          "const": "copy",
                          "title": "Copy",
                          "markdownDescription": "Take a value from the raw inbound."
                        },
                        "from": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Source path",
                          "markdownDescription": "Dot-separated path inside the **raw inbound** of the config profile this host belongs to. Array items are addressed by index.\n\nWith a `$host.` prefix the value is read from the **host** itself, after overrides have been resolved – `$host.securityOptions.serverName` holds the SNI that actually went into the config.\n\nOnly a part of the host is readable. Each entry below also opens everything nested under it:\n\n`address`, `port`, `finalRemark`, `protocol`, `transport`, `security`, `protocolOptions`, `transportOptions`, `securityOptions`, `mux`, `streamOverrides.finalMask`, `streamOverrides.sockopt`, `clientOverrides.serverDescription`, `metadata.remark`, `metadata.tags`, `metadata.inboundTag`\n\n> If the path resolves to nothing – or points outside the list above – the operation is skipped and the target key is **not** created.",
                          "examples": [
                            "streamSettings.tlsSettings.cipherSuites",
                            "streamSettings.tlsSettings.alpn",
                            "streamSettings.realitySettings.serverNames.0",
                            "$host.address",
                            "$host.securityOptions.serverName",
                            "$host.transportOptions.path",
                            "$host.mux.smux"
                          ]
                        },
                        "to": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Target path",
                          "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                          "examples": [
                            "domain_resolver",
                            "multiplex.protocol",
                            "packet_encoding",
                            "tcp_fast_open",
                            "tls.insecure",
                            "tls.utls.fingerprint"
                          ]
                        }
                      },
                      "required": [
                        "op",
                        "from",
                        "to"
                      ],
                      "title": "Copy from the inbound",
                      "markdownDescription": "Reads a value from the raw inbound and writes it into the generated config.\n\n```json\n{\n  \"op\": \"copy\",\n  \"from\": \"streamSettings.realitySettings.serverNames.0\",\n  \"to\": \"tls.server_name\"\n}\n```",
                      "defaultSnippets": [
                        {
                          "label": "copy",
                          "description": "Copy a value from the raw inbound",
                          "body": {
                            "op": "copy",
                            "from": "$1",
                            "to": "$2"
                          }
                        }
                      ]
                    },
                    {
                      "type": "object",
                      "properties": {
                        "op": {
                          "type": "string",
                          "const": "set",
                          "title": "Set",
                          "markdownDescription": "Write a fixed value."
                        },
                        "value": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "number"
                            },
                            {
                              "type": "boolean"
                            },
                            {
                              "type": "array",
                              "items": {
                                "$ref": "#/$defs/__schema6"
                              }
                            },
                            {
                              "type": "object",
                              "propertyNames": {
                                "type": "string"
                              },
                              "additionalProperties": {
                                "$ref": "#/$defs/__schema7"
                              }
                            }
                          ],
                          "title": "Value",
                          "markdownDescription": "The value to write. Strings, numbers, booleans, arrays and objects are allowed."
                        },
                        "to": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Target path",
                          "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                          "examples": [
                            "domain_resolver",
                            "multiplex.protocol",
                            "packet_encoding",
                            "tcp_fast_open",
                            "tls.insecure",
                            "tls.utls.fingerprint"
                          ]
                        }
                      },
                      "required": [
                        "op",
                        "value",
                        "to"
                      ],
                      "title": "Set a fixed value",
                      "markdownDescription": "Writes a literal value into the generated config, creating the key if it is missing.\n\n```json\n{\n  \"op\": \"set\",\n  \"to\": \"tls.utls.fingerprint\",\n  \"value\": \"chrome\"\n}\n```",
                      "defaultSnippets": [
                        {
                          "label": "set",
                          "description": "Write a fixed value",
                          "body": {
                            "op": "set",
                            "to": "$1",
                            "value": "$2"
                          }
                        }
                      ]
                    },
                    {
                      "type": "object",
                      "properties": {
                        "op": {
                          "type": "string",
                          "const": "unset",
                          "title": "Unset",
                          "markdownDescription": "Remove a field."
                        },
                        "to": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Target path",
                          "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                          "examples": [
                            "domain_resolver",
                            "multiplex.protocol",
                            "packet_encoding",
                            "tcp_fast_open",
                            "tls.insecure",
                            "tls.utls.fingerprint"
                          ]
                        }
                      },
                      "required": [
                        "op",
                        "to"
                      ],
                      "title": "Remove a field",
                      "markdownDescription": "Removes a field the generator produced by itself.\n\n```json\n{\n  \"op\": \"unset\",\n  \"to\": \"multiplex\"\n}\n```\n\n> Only the field itself is removed. A parent object left empty stays in the config as `{}`.",
                      "defaultSnippets": [
                        {
                          "label": "unset",
                          "description": "Remove a field",
                          "body": {
                            "op": "unset",
                            "to": "$1"
                          }
                        }
                      ]
                    }
                  ],
                  "title": "Operation",
                  "markdownDescription": "Operations run one after another, in the order they are listed.\n\nA later operation sees what the previous ones wrote, so an `unset` can remove a key an earlier `set` added."
                }
              }
            },
            "title": "Host Mapper",
            "markdownDescription": "Rewrites the config generated for this host, per client type.\n\nOperations run **after** the generator has finished, so they can change or remove anything it produced.\n\nThe source for `copy` is the raw inbound of the config profile this host belongs to, or the host itself when the path starts with `$host.`.\n\n> `to` is never checked against the target client. A misspelled key is written exactly like a real one."
          },
          "internalSquads": {
            "type": "object",
            "properties": {
              "mode": {
                "type": "string",
                "enum": [
                  "EXCLUDE",
                  "ALLOW_ONLY"
                ]
              },
              "squads": {
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                }
              }
            },
            "required": [
              "mode",
              "squads"
            ]
          },
          "uuids": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            }
          }
        },
        "required": [
          "uuids"
        ],
        "$defs": {
          "__schema0": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema0"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema0"
                }
              }
            ]
          },
          "__schema1": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema1"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema1"
                }
              }
            ]
          },
          "__schema2": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema2"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema2"
                }
              }
            ]
          },
          "__schema3": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema3"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema3"
                }
              }
            ]
          },
          "__schema4": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema4"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema4"
                }
              }
            ]
          },
          "__schema5": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema5"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema5"
                }
              }
            ]
          },
          "__schema6": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema6"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema6"
                }
              }
            ]
          },
          "__schema7": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema7"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema7"
                }
              }
            ]
          }
        }
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success"
}
GET/api/hosts/tagsGet tags of hosts
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "required": [
              "tags"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/hostsGet hosts
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "uuid": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                "viewPosition": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "remark": {
                  "type": "string"
                },
                "address": {
                  "type": "string"
                },
                "port": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "path": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "sni": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "host": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "alpn": {
                  "anyOf": [
                    {
                      "type": "string",
                      "enum": [
                        "h3",
                        "h2",
                        "http/1.1",
                        "h2,http/1.1",
                        "h3,h2,http/1.1",
                        "h3,h2"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "fingerprint": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "isDisabled": {
                  "type": "boolean"
                },
                "securityLayer": {
                  "default": "DEFAULT",
                  "type": "string",
                  "enum": [
                    "DEFAULT",
                    "TLS",
                    "NONE"
                  ]
                },
                "xhttpExtraParams": {
                  "anyOf": [
                    {},
                    {
                      "type": "null"
                    }
                  ]
                },
                "muxParams": {
                  "anyOf": [
                    {},
                    {
                      "type": "null"
                    }
                  ]
                },
                "sockoptParams": {
                  "anyOf": [
                    {},
                    {
                      "type": "null"
                    }
                  ]
                },
                "finalMask": {
                  "anyOf": [
                    {},
                    {
                      "type": "null"
                    }
                  ]
                },
                "inbound": {
                  "type": "object",
                  "properties": {
                    "configProfileUuid": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "configProfileInboundUuid": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "configProfileUuid",
                    "configProfileInboundUuid"
                  ],
                  "additionalProperties": false
                },
                "serverDescription": {
                  "anyOf": [
                    {
                      "type": "string",
                      "maxLength": 30
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "tags": {
                  "default": [],
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "isHidden": {
                  "default": false,
                  "type": "boolean"
                },
                "overrideSniFromAddress": {
                  "default": false,
                  "type": "boolean"
                },
                "keepSniBlank": {
                  "default": false,
                  "type": "boolean"
                },
                "vlessRouteId": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 65535
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "pinnedPeerCertSha256": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "verifyPeerCertByName": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "shuffleHost": {
                  "type": "boolean"
                },
                "mihomoX25519": {
                  "type": "boolean"
                },
                "mihomoIpVersion": {
                  "anyOf": [
                    {
                      "type": "string",
                      "enum": [
                        "dual",
                        "ipv4",
                        "ipv6",
                        "ipv4-prefer",
                        "ipv6-prefer"
                      ]
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "nodes": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  }
                },
                "xrayJsonTemplateUuid": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "excludeFromSubscriptionTypes": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "enum": [
                      "XRAY_JSON",
                      "XRAY_BASE64",
                      "MIHOMO",
                      "STASH",
                      "CLASH",
                      "SINGBOX"
                    ]
                  }
                },
                "mapper": {
                  "type": "object",
                  "properties": {
                    "xrayJson": {
                      "title": "Xray JSON",
                      "markdownDescription": "Operations applied to the **outbound** generated for this host in the Xray JSON subscription. Paths are counted from the root of the outbound.\n\n```json\n[\n  {\n    \"op\": \"copy\",\n    \"from\": \"streamSettings.tlsSettings.cipherSuites\",\n    \"to\": \"streamSettings.tlsSettings.cipherSuites\"\n  },\n  {\n    \"op\": \"unset\",\n    \"to\": \"mux\"\n  }\n]\n```",
                      "type": "array",
                      "items": {
                        "oneOf": [
                          {
                            "type": "object",
                            "properties": {
                              "op": {
                                "type": "string",
                                "const": "copy",
                                "title": "Copy",
                                "markdownDescription": "Take a value from the raw inbound."
                              },
                              "from": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 512,
                                "title": "Source path",
                                "markdownDescription": "Dot-separated path inside the **raw inbound** of the config profile this host belongs to. Array items are addressed by index.\n\nWith a `$host.` prefix the value is read from the **host** itself, after overrides have been resolved – `$host.securityOptions.serverName` holds the SNI that actually went into the config.\n\nOnly a part of the host is readable. Each entry below also opens everything nested under it:\n\n`address`, `port`, `finalRemark`, `protocol`, `transport`, `security`, `protocolOptions`, `transportOptions`, `securityOptions`, `mux`, `streamOverrides.finalMask`, `streamOverrides.sockopt`, `clientOverrides.serverDescription`, `metadata.remark`, `metadata.tags`, `metadata.inboundTag`\n\n> If the path resolves to nothing – or points outside the list above – the operation is skipped and the target key is **not** created.",
                                "examples": [
                                  "streamSettings.tlsSettings.cipherSuites",
                                  "streamSettings.tlsSettings.alpn",
                                  "streamSettings.realitySettings.serverNames.0",
                                  "$host.address",
                                  "$host.securityOptions.serverName",
                                  "$host.transportOptions.path",
                                  "$host.mux.smux"
                                ]
                              },
                              "to": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 512,
                                "title": "Target path",
                                "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                                "examples": [
                                  "streamSettings.tlsSettings.enableSessionResumption",
                                  "streamSettings.tlsSettings.cipherSuites"
                                ]
                              }
                            },
                            "required": [
                              "op",
                              "from",
                              "to"
                            ],
                            "additionalProperties": false,
                            "title": "Copy from the inbound",
                            "markdownDescription": "Reads a value from the raw inbound and writes it into the generated config.\n\n```json\n{\n  \"op\": \"copy\",\n  \"from\": \"streamSettings.tlsSettings.cipherSuites\",\n  \"to\": \"streamSettings.tlsSettings.cipherSuites\"\n}\n```",
                            "defaultSnippets": [
                              {
                                "label": "copy",
                                "description": "Copy a value from the raw inbound",
                                "body": {
                                  "op": "copy",
                                  "from": "$1",
                                  "to": "$2"
                                }
                              }
                            ]
                          },
                          {
                            "type": "object",
                            "properties": {
                              "op": {
                                "type": "string",
                                "const": "set",
                                "title": "Set",
                                "markdownDescription": "Write a fixed value."
                              },
                              "value": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "boolean"
                                  },
                                  {
                                    "type": "array",
                                    "items": {
                                      "$ref": "#/$defs/__schema0"
                                    }
                                  },
                                  {
                                    "type": "object",
                                    "propertyNames": {
                                      "type": "string"
                                    },
                                    "additionalProperties": {
                                      "$ref": "#/$defs/__schema1"
                                    }
                                  }
                                ],
                                "title": "Value",
                                "markdownDescription": "The value to write. Strings, numbers, booleans, arrays and objects are allowed."
                              },
                              "to": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 512,
                                "title": "Target path",
                                "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                                "examples": [
                                  "streamSettings.tlsSettings.enableSessionResumption",
                                  "streamSettings.tlsSettings.cipherSuites"
                                ]
                              }
                            },
                            "required": [
                              "op",
                              "value",
                              "to"
                            ],
                            "additionalProperties": false,
                            "title": "Set a fixed value",
                            "markdownDescription": "Writes a literal value into the generated config, creating the key if it is missing.\n\n```json\n{\n  \"op\": \"set\",\n  \"to\": \"streamSettings.tlsSettings.enableSessionResumption\",\n  \"value\": true\n}\n```",
                            "defaultSnippets": [
                              {
                                "label": "set",
                                "description": "Write a fixed value",
                                "body": {
                                  "op": "set",
                                  "to": "$1",
                                  "value": "$2"
                                }
                              }
                            ]
                          },
                          {
                            "type": "object",
                            "properties": {
                              "op": {
                                "type": "string",
                                "const": "unset",
                                "title": "Unset",
                                "markdownDescription": "Remove a field."
                              },
                              "to": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 512,
                                "title": "Target path",
                                "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                                "examples": [
                                  "streamSettings.tlsSettings.enableSessionResumption",
                                  "streamSettings.tlsSettings.cipherSuites"
                                ]
                              }
                            },
                            "required": [
                              "op",
                              "to"
                            ],
                            "additionalProperties": false,
                            "title": "Remove a field",
                            "markdownDescription": "Removes a field the generator produced by itself.\n\n```json\n{\n  \"op\": \"unset\",\n  \"to\": \"mux\"\n}\n```\n\n> Only the field itself is removed. A parent object left empty stays in the config as `{}`.",
                            "defaultSnippets": [
                              {
                                "label": "unset",
                                "description": "Remove a field",
                                "body": {
                                  "op": "unset",
                                  "to": "$1"
                                }
                              }
                            ]
                          }
                        ],
                        "title": "Operation",
                        "markdownDescription": "Operations run one after another, in the order they are listed.\n\nA later operation sees what the previous ones wrote, so an `unset` can remove a key an earlier `set` added."
                      }
                    },
                    "mihomo": {
                      "title": "Mihomo",
                      "markdownDescription": "Operations applied to the **proxy node** generated for this host in the Mihomo subscription.\n\nPaths are counted from the root of the node, where Mihomo keys are written in kebab-case.\n\n```json\n[\n  {\n    \"op\": \"set\",\n    \"to\": \"ip-version\",\n    \"value\": \"ipv4\"\n  }\n]\n```",
                      "type": "array",
                      "items": {
                        "oneOf": [
                          {
                            "type": "object",
                            "properties": {
                              "op": {
                                "type": "string",
                                "const": "copy",
                                "title": "Copy",
                                "markdownDescription": "Take a value from the raw inbound."
                              },
                              "from": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 512,
                                "title": "Source path",
                                "markdownDescription": "Dot-separated path inside the **raw inbound** of the config profile this host belongs to. Array items are addressed by index.\n\nWith a `$host.` prefix the value is read from the **host** itself, after overrides have been resolved – `$host.securityOptions.serverName` holds the SNI that actually went into the config.\n\nOnly a part of the host is readable. Each entry below also opens everything nested under it:\n\n`address`, `port`, `finalRemark`, `protocol`, `transport`, `security`, `protocolOptions`, `transportOptions`, `securityOptions`, `mux`, `streamOverrides.finalMask`, `streamOverrides.sockopt`, `clientOverrides.serverDescription`, `metadata.remark`, `metadata.tags`, `metadata.inboundTag`\n\n> If the path resolves to nothing – or points outside the list above – the operation is skipped and the target key is **not** created.",
                                "examples": [
                                  "streamSettings.tlsSettings.cipherSuites",
                                  "streamSettings.tlsSettings.alpn",
                                  "streamSettings.realitySettings.serverNames.0",
                                  "$host.address",
                                  "$host.securityOptions.serverName",
                                  "$host.transportOptions.path",
                                  "$host.mux.smux"
                                ]
                              },
                              "to": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 512,
                                "title": "Target path",
                                "markdownDescription": "Dot-separated path inside the generated **proxy node**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                                "examples": [
                                  "ip-version",
                                  "client-fingerprint",
                                  "tfo",
                                  "reality-opts.support-x25519mlkem768"
                                ]
                              }
                            },
                            "required": [
                              "op",
                              "from",
                              "to"
                            ],
                            "additionalProperties": false,
                            "title": "Copy from the inbound",
                            "markdownDescription": "Reads a value from the raw inbound and writes it into the generated config.\n\n```json\n{\n  \"op\": \"copy\",\n  \"from\": \"streamSettings.realitySettings.serverNames.0\",\n  \"to\": \"servername\"\n}\n```",
                            "defaultSnippets": [
                              {
                                "label": "copy",
                                "description": "Copy a value from the raw inbound",
                                "body": {
                                  "op": "copy",
                                  "from": "$1",
                                  "to": "$2"
                                }
                              }
                            ]
                          },
                          {
                            "type": "object",
                            "properties": {
                              "op": {
                                "type": "string",
                                "const": "set",
                                "title": "Set",
                                "markdownDescription": "Write a fixed value."
                              },
                              "value": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "boolean"
                                  },
                                  {
                                    "type": "array",
                                    "items": {
                                      "$ref": "#/$defs/__schema2"
                                    }
                                  },
                                  {
                                    "type": "object",
                                    "propertyNames": {
                                      "type": "string"
                                    },
                                    "additionalProperties": {
                                      "$ref": "#/$defs/__schema3"
                                    }
                                  }
                                ],
                                "title": "Value",
                                "markdownDescription": "The value to write. Strings, numbers, booleans, arrays and objects are allowed."
                              },
                              "to": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 512,
                                "title": "Target path",
                                "markdownDescription": "Dot-separated path inside the generated **proxy node**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                                "examples": [
                                  "ip-version",
                                  "client-fingerprint",
                                  "tfo",
                                  "reality-opts.support-x25519mlkem768"
                                ]
                              }
                            },
                            "required": [
                              "op",
                              "value",
                              "to"
                            ],
                            "additionalProperties": false,
                            "title": "Set a fixed value",
                            "markdownDescription": "Writes a literal value into the generated config, creating the key if it is missing.\n\n```json\n{\n  \"op\": \"set\",\n  \"to\": \"reality-opts.support-x25519mlkem768\",\n  \"value\": true\n}\n```",
                            "defaultSnippets": [
                              {
                                "label": "set",
                                "description": "Write a fixed value",
                                "body": {
                                  "op": "set",
                                  "to": "$1",
                                  "value": "$2"
                                }
                              }
                            ]
                          },
                          {
                            "type": "object",
                            "properties": {
                              "op": {
                                "type": "string",
                                "const": "unset",
                                "title": "Unset",
                                "markdownDescription": "Remove a field."
                              },
                              "to": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 512,
                                "title": "Target path",
                                "markdownDescription": "Dot-separated path inside the generated **proxy node**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                                "examples": [
                                  "ip-version",
                                  "client-fingerprint",
                                  "tfo",
                                  "reality-opts.support-x25519mlkem768"
                                ]
                              }
                            },
                            "required": [
                              "op",
                              "to"
                            ],
                            "additionalProperties": false,
                            "title": "Remove a field",
                            "markdownDescription": "Removes a field the generator produced by itself.\n\n```json\n{\n  \"op\": \"unset\",\n  \"to\": \"smux\"\n}\n```\n\n> Only the field itself is removed. A parent object left empty stays in the config as `{}`.",
                            "defaultSnippets": [
                              {
                                "label": "unset",
                                "description": "Remove a field",
                                "body": {
                                  "op": "unset",
                                  "to": "$1"
                                }
                              }
                            ]
                          }
                        ],
                        "title": "Operation",
                        "markdownDescription": "Operations run one after another, in the order they are listed.\n\nA later operation sees what the previous ones wrote, so an `unset` can remove a key an earlier `set` added."
                      }
                    },
                    "base64": {
                      "title": "Base64",
                      "markdownDescription": "Operations applied to the share link generated for this host in the Base64 subscription.\n\n`to` is a plain query parameter name, not a path – dots carry no meaning here.\n\nWith a `$link.` prefix the operation rewrites the link itself instead of its query string. Writable parts: `$link.address`, `$link.port`, `$link.password`, `$link.remark`, and `$link.method` for Shadowsocks. `$link.password` is the credential of the protocol.\n\n> A value that cannot make a valid link – an empty address, a port outside 1-65535 – is ignored, and the generated one is kept.\n\n```json\n[\n  {\n    \"op\": \"set\",\n    \"to\": \"fp\",\n    \"value\": \"chrome\"\n  },\n  {\n    \"op\": \"unset\",\n    \"to\": \"fm\"\n  },\n  {\n    \"op\": \"set\",\n    \"to\": \"$link.port\",\n    \"value\": 2053\n  },\n  {\n    \"op\": \"copy\",\n    \"from\": \"$host.securityOptions.serverName\",\n    \"to\": \"$link.address\"\n  }\n]\n```",
                      "type": "array",
                      "items": {
                        "oneOf": [
                          {
                            "type": "object",
                            "properties": {
                              "op": {
                                "type": "string",
                                "const": "copy",
                                "title": "Copy",
                                "markdownDescription": "Take a value from the raw inbound."
                              },
                              "from": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 512,
                                "title": "Source path",
                                "markdownDescription": "Dot-separated path inside the **raw inbound** of the config profile this host belongs to. Array items are addressed by index.\n\nWith a `$host.` prefix the value is read from the **host** itself, after overrides have been resolved – `$host.securityOptions.serverName` holds the SNI that actually went into the config.\n\nOnly a part of the host is readable. Each entry below also opens everything nested under it:\n\n`address`, `port`, `finalRemark`, `protocol`, `transport`, `security`, `protocolOptions`, `transportOptions`, `securityOptions`, `mux`, `streamOverrides.finalMask`, `streamOverrides.sockopt`, `clientOverrides.serverDescription`, `metadata.remark`, `metadata.tags`, `metadata.inboundTag`\n\n> If the path resolves to nothing – or points outside the list above – the operation is skipped and the target key is **not** created.",
                                "examples": [
                                  "streamSettings.tlsSettings.cipherSuites",
                                  "streamSettings.tlsSettings.alpn",
                                  "streamSettings.realitySettings.serverNames.0",
                                  "$host.address",
                                  "$host.securityOptions.serverName",
                                  "$host.transportOptions.path",
                                  "$host.mux.smux"
                                ]
                              },
                              "to": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 512,
                                "title": "Target path",
                                "markdownDescription": "Dot-separated path inside the query string of the generated **share link**, or the link itself with a `$link.` prefix, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                                "examples": [
                                  "$link.address",
                                  "$link.port",
                                  "$link.password",
                                  "$link.remark",
                                  "$link.method",
                                  "alpn",
                                  "authority",
                                  "cs",
                                  "encryption",
                                  "extra",
                                  "flow",
                                  "fm",
                                  "fp",
                                  "headerType",
                                  "heartbeatPeriod",
                                  "host",
                                  "mode",
                                  "mtu",
                                  "obfs",
                                  "obfs-password",
                                  "path",
                                  "pbk",
                                  "pcs",
                                  "pinSHA256",
                                  "pqv",
                                  "security",
                                  "serviceName",
                                  "sid",
                                  "sni",
                                  "spx",
                                  "tti",
                                  "type",
                                  "vcn"
                                ]
                              }
                            },
                            "required": [
                              "op",
                              "from",
                              "to"
                            ],
                            "additionalProperties": false,
                            "title": "Copy from the inbound",
                            "markdownDescription": "Reads a value from the raw inbound and writes it into the generated config.\n\n```json\n{\n  \"op\": \"copy\",\n  \"from\": \"streamSettings.realitySettings.serverNames.0\",\n  \"to\": \"sni\"\n}\n```",
                            "defaultSnippets": [
                              {
                                "label": "copy",
                                "description": "Copy a value from the raw inbound",
                                "body": {
                                  "op": "copy",
                                  "from": "$1",
                                  "to": "$2"
                                }
                              }
                            ]
                          },
                          {
                            "type": "object",
                            "properties": {
                              "op": {
                                "type": "string",
                                "const": "set",
                                "title": "Set",
                                "markdownDescription": "Write a fixed value."
                              },
                              "value": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "boolean"
                                  },
                                  {
                                    "type": "array",
                                    "items": {
                                      "$ref": "#/$defs/__schema4"
                                    }
                                  },
                                  {
                                    "type": "object",
                                    "propertyNames": {
                                      "type": "string"
                                    },
                                    "additionalProperties": {
                                      "$ref": "#/$defs/__schema5"
                                    }
                                  }
                                ],
                                "title": "Value",
                                "markdownDescription": "The value to write. Strings, numbers, booleans, arrays and objects are allowed."
                              },
                              "to": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 512,
                                "title": "Target path",
                                "markdownDescription": "Dot-separated path inside the query string of the generated **share link**, or the link itself with a `$link.` prefix, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                                "examples": [
                                  "$link.address",
                                  "$link.port",
                                  "$link.password",
                                  "$link.remark",
                                  "$link.method",
                                  "alpn",
                                  "authority",
                                  "cs",
                                  "encryption",
                                  "extra",
                                  "flow",
                                  "fm",
                                  "fp",
                                  "headerType",
                                  "heartbeatPeriod",
                                  "host",
                                  "mode",
                                  "mtu",
                                  "obfs",
                                  "obfs-password",
                                  "path",
                                  "pbk",
                                  "pcs",
                                  "pinSHA256",
                                  "pqv",
                                  "security",
                                  "serviceName",
                                  "sid",
                                  "sni",
                                  "spx",
                                  "tti",
                                  "type",
                                  "vcn"
                                ]
                              }
                            },
                            "required": [
                              "op",
                              "value",
                              "to"
                            ],
                            "additionalProperties": false,
                            "title": "Set a fixed value",
                            "markdownDescription": "Writes a literal value into the generated config, creating the key if it is missing.\n\n```json\n{\n  \"op\": \"set\",\n  \"to\": \"fp\",\n  \"value\": \"chrome\"\n}\n```",
                            "defaultSnippets": [
                              {
                                "label": "set",
                                "description": "Write a fixed value",
                                "body": {
                                  "op": "set",
                                  "to": "$1",
                                  "value": "$2"
                                }
                              }
                            ]
                          },
                          {
                            "type": "object",
                            "properties": {
                              "op": {
                                "type": "string",
                                "const": "unset",
                                "title": "Unset",
                                "markdownDescription": "Remove a field."
                              },
                              "to": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 512,
                                "title": "Target path",
                                "markdownDescription": "Dot-separated path inside the query string of the generated **share link**, or the link itself with a `$link.` prefix, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                                "examples": [
                                  "$link.address",
                                  "$link.port",
                                  "$link.password",
                                  "$link.remark",
                                  "$link.method",
                                  "alpn",
                                  "authority",
                                  "cs",
                                  "encryption",
                                  "extra",
                                  "flow",
                                  "fm",
                                  "fp",
                                  "headerType",
                                  "heartbeatPeriod",
                                  "host",
                                  "mode",
                                  "mtu",
                                  "obfs",
                                  "obfs-password",
                                  "path",
                                  "pbk",
                                  "pcs",
                                  "pinSHA256",
                                  "pqv",
                                  "security",
                                  "serviceName",
                                  "sid",
                                  "sni",
                                  "spx",
                                  "tti",
                                  "type",
                                  "vcn"
                                ]
                              }
                            },
                            "required": [
                              "op",
                              "to"
                            ],
                            "additionalProperties": false,
                            "title": "Remove a field",
                            "markdownDescription": "Removes a field the generator produced by itself.\n\n```json\n{\n  \"op\": \"unset\",\n  \"to\": \"fm\"\n}\n```\n\n> Only the field itself is removed. A parent object left empty stays in the config as `{}`.",
                            "defaultSnippets": [
                              {
                                "label": "unset",
                                "description": "Remove a field",
                                "body": {
                                  "op": "unset",
                                  "to": "$1"
                                }
                              }
                            ]
                          }
                        ],
                        "title": "Operation",
                        "markdownDescription": "Operations run one after another, in the order they are listed.\n\nA later operation sees what the previous ones wrote, so an `unset` can remove a key an earlier `set` added."
                      }
                    },
                    "singbox": {
                      "title": "sing-box",
                      "markdownDescription": "Operations applied to the **outbound** generated for this host in the sing-box subscription. Paths are counted from the root of the outbound.\n\nsing-box keys are written in snake_case, and the outbound of a Hysteria2 host has a shape of its own.\n\n```json\n[\n  {\n    \"op\": \"set\",\n    \"to\": \"tls.utls.fingerprint\",\n    \"value\": \"chrome\"\n  },\n  {\n    \"op\": \"unset\",\n    \"to\": \"multiplex\"\n  }\n]\n```",
                      "type": "array",
                      "items": {
                        "oneOf": [
                          {
                            "type": "object",
                            "properties": {
                              "op": {
                                "type": "string",
                                "const": "copy",
                                "title": "Copy",
                                "markdownDescription": "Take a value from the raw inbound."
                              },
                              "from": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 512,
                                "title": "Source path",
                                "markdownDescription": "Dot-separated path inside the **raw inbound** of the config profile this host belongs to. Array items are addressed by index.\n\nWith a `$host.` prefix the value is read from the **host** itself, after overrides have been resolved – `$host.securityOptions.serverName` holds the SNI that actually went into the config.\n\nOnly a part of the host is readable. Each entry below also opens everything nested under it:\n\n`address`, `port`, `finalRemark`, `protocol`, `transport`, `security`, `protocolOptions`, `transportOptions`, `securityOptions`, `mux`, `streamOverrides.finalMask`, `streamOverrides.sockopt`, `clientOverrides.serverDescription`, `metadata.remark`, `metadata.tags`, `metadata.inboundTag`\n\n> If the path resolves to nothing – or points outside the list above – the operation is skipped and the target key is **not** created.",
                                "examples": [
                                  "streamSettings.tlsSettings.cipherSuites",
                                  "streamSettings.tlsSettings.alpn",
                                  "streamSettings.realitySettings.serverNames.0",
                                  "$host.address",
                                  "$host.securityOptions.serverName",
                                  "$host.transportOptions.path",
                                  "$host.mux.smux"
                                ]
                              },
                              "to": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 512,
                                "title": "Target path",
                                "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                                "examples": [
                                  "domain_resolver",
                                  "multiplex.protocol",
                                  "packet_encoding",
                                  "tcp_fast_open",
                                  "tls.insecure",
                                  "tls.utls.fingerprint"
                                ]
                              }
                            },
                            "required": [
                              "op",
                              "from",
                              "to"
                            ],
                            "additionalProperties": false,
                            "title": "Copy from the inbound",
                            "markdownDescription": "Reads a value from the raw inbound and writes it into the generated config.\n\n```json\n{\n  \"op\": \"copy\",\n  \"from\": \"streamSettings.realitySettings.serverNames.0\",\n  \"to\": \"tls.server_name\"\n}\n```",
                            "defaultSnippets": [
                              {
                                "label": "copy",
                                "description": "Copy a value from the raw inbound",
                                "body": {
                                  "op": "copy",
                                  "from": "$1",
                                  "to": "$2"
                                }
                              }
                            ]
                          },
                          {
                            "type": "object",
                            "properties": {
                              "op": {
                                "type": "string",
                                "const": "set",
                                "title": "Set",
                                "markdownDescription": "Write a fixed value."
                              },
                              "value": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "boolean"
                                  },
                                  {
                                    "type": "array",
                                    "items": {
                                      "$ref": "#/$defs/__schema6"
                                    }
                                  },
                                  {
                                    "type": "object",
                                    "propertyNames": {
                                      "type": "string"
                                    },
                                    "additionalProperties": {
                                      "$ref": "#/$defs/__schema7"
                                    }
                                  }
                                ],
                                "title": "Value",
                                "markdownDescription": "The value to write. Strings, numbers, booleans, arrays and objects are allowed."
                              },
                              "to": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 512,
                                "title": "Target path",
                                "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                                "examples": [
                                  "domain_resolver",
                                  "multiplex.protocol",
                                  "packet_encoding",
                                  "tcp_fast_open",
                                  "tls.insecure",
                                  "tls.utls.fingerprint"
                                ]
                              }
                            },
                            "required": [
                              "op",
                              "value",
                              "to"
                            ],
                            "additionalProperties": false,
                            "title": "Set a fixed value",
                            "markdownDescription": "Writes a literal value into the generated config, creating the key if it is missing.\n\n```json\n{\n  \"op\": \"set\",\n  \"to\": \"tls.utls.fingerprint\",\n  \"value\": \"chrome\"\n}\n```",
                            "defaultSnippets": [
                              {
                                "label": "set",
                                "description": "Write a fixed value",
                                "body": {
                                  "op": "set",
                                  "to": "$1",
                                  "value": "$2"
                                }
                              }
                            ]
                          },
                          {
                            "type": "object",
                            "properties": {
                              "op": {
                                "type": "string",
                                "const": "unset",
                                "title": "Unset",
                                "markdownDescription": "Remove a field."
                              },
                              "to": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 512,
                                "title": "Target path",
                                "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                                "examples": [
                                  "domain_resolver",
                                  "multiplex.protocol",
                                  "packet_encoding",
                                  "tcp_fast_open",
                                  "tls.insecure",
                                  "tls.utls.fingerprint"
                                ]
                              }
                            },
                            "required": [
                              "op",
                              "to"
                            ],
                            "additionalProperties": false,
                            "title": "Remove a field",
                            "markdownDescription": "Removes a field the generator produced by itself.\n\n```json\n{\n  \"op\": \"unset\",\n  \"to\": \"multiplex\"\n}\n```\n\n> Only the field itself is removed. A parent object left empty stays in the config as `{}`.",
                            "defaultSnippets": [
                              {
                                "label": "unset",
                                "description": "Remove a field",
                                "body": {
                                  "op": "unset",
                                  "to": "$1"
                                }
                              }
                            ]
                          }
                        ],
                        "title": "Operation",
                        "markdownDescription": "Operations run one after another, in the order they are listed.\n\nA later operation sees what the previous ones wrote, so an `unset` can remove a key an earlier `set` added."
                      }
                    }
                  },
                  "additionalProperties": false,
                  "title": "Host Mapper",
                  "markdownDescription": "Rewrites the config generated for this host, per client type.\n\nOperations run **after** the generator has finished, so they can change or remove anything it produced.\n\nThe source for `copy` is the raw inbound of the config profile this host belongs to, or the host itself when the path starts with `$host.`.\n\n> `to` is never checked against the target client. A misspelled key is written exactly like a real one."
                },
                "internalSquads": {
                  "type": "object",
                  "properties": {
                    "mode": {
                      "type": "string",
                      "enum": [
                        "EXCLUDE",
                        "ALLOW_ONLY"
                      ]
                    },
                    "squads": {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      }
                    }
                  },
                  "required": [
                    "mode",
                    "squads"
                  ],
                  "additionalProperties": false
                }
              },
              "required": [
                "uuid",
                "viewPosition",
                "remark",
                "address",
                "port",
                "path",
                "sni",
                "host",
                "alpn",
                "fingerprint",
                "isDisabled",
                "securityLayer",
                "xhttpExtraParams",
                "muxParams",
                "sockoptParams",
                "finalMask",
                "inbound",
                "serverDescription",
                "tags",
                "isHidden",
                "overrideSniFromAddress",
                "keepSniBlank",
                "vlessRouteId",
                "pinnedPeerCertSha256",
                "verifyPeerCertByName",
                "shuffleHost",
                "mihomoX25519",
                "mihomoIpVersion",
                "nodes",
                "xrayJsonTemplateUuid",
                "excludeFromSubscriptionTypes",
                "mapper",
                "internalSquads"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false,
        "$defs": {
          "__schema0": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema0"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema0"
                }
              }
            ]
          },
          "__schema1": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema1"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema1"
                }
              }
            ]
          },
          "__schema2": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema2"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema2"
                }
              }
            ]
          },
          "__schema3": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema3"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema3"
                }
              }
            ]
          },
          "__schema4": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema4"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema4"
                }
              }
            ]
          },
          "__schema5": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema5"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema5"
                }
              }
            ]
          },
          "__schema6": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema6"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema6"
                }
              }
            ]
          },
          "__schema7": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema7"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema7"
                }
              }
            ]
          }
        }
      }
    }
  }
}
POST/api/hostsCreate a new host
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "inbound": {
            "type": "object",
            "properties": {
              "configProfileUuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "configProfileInboundUuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              }
            },
            "required": [
              "configProfileUuid",
              "configProfileInboundUuid"
            ]
          },
          "remark": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          },
          "address": {
            "type": "string"
          },
          "port": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "path": {
            "type": [
              "string",
              "null"
            ]
          },
          "sni": {
            "type": [
              "string",
              "null"
            ]
          },
          "host": {
            "type": [
              "string",
              "null"
            ]
          },
          "alpn": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "h3",
                  "h2",
                  "http/1.1",
                  "h2,http/1.1",
                  "h3,h2,http/1.1",
                  "h3,h2"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "fingerprint": {
            "type": [
              "string",
              "null"
            ]
          },
          "isDisabled": {
            "default": false,
            "type": "boolean"
          },
          "securityLayer": {
            "default": "DEFAULT",
            "type": "string",
            "enum": [
              "DEFAULT",
              "TLS",
              "NONE"
            ]
          },
          "xhttpExtraParams": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ]
          },
          "muxParams": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ]
          },
          "sockoptParams": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ]
          },
          "finalMask": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ]
          },
          "serverDescription": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 30
              },
              {
                "type": "null"
              }
            ]
          },
          "tags": {
            "maxItems": 10,
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 36,
              "pattern": "^[A-Z0-9_:]+$"
            }
          },
          "isHidden": {
            "default": false,
            "type": "boolean"
          },
          "overrideSniFromAddress": {
            "default": false,
            "type": "boolean"
          },
          "keepSniBlank": {
            "default": false,
            "type": "boolean"
          },
          "pinnedPeerCertSha256": {
            "type": [
              "string",
              "null"
            ]
          },
          "verifyPeerCertByName": {
            "type": [
              "string",
              "null"
            ]
          },
          "vlessRouteId": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 65535
              },
              {
                "type": "null"
              }
            ]
          },
          "shuffleHost": {
            "default": false,
            "type": "boolean"
          },
          "mihomoX25519": {
            "default": false,
            "type": "boolean"
          },
          "mihomoIpVersion": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "dual",
                  "ipv4",
                  "ipv6",
                  "ipv4-prefer",
                  "ipv6-prefer"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "nodes": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            }
          },
          "xrayJsonTemplateUuid": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              {
                "type": "null"
              }
            ]
          },
          "excludeFromSubscriptionTypes": {
            "description": "Optional. Subscription types from which the host will be excluded from.",
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "XRAY_JSON",
                "XRAY_BASE64",
                "MIHOMO",
                "STASH",
                "CLASH",
                "SINGBOX"
              ]
            }
          },
          "mapper": {
            "type": "object",
            "properties": {
              "xrayJson": {
                "title": "Xray JSON",
                "markdownDescription": "Operations applied to the **outbound** generated for this host in the Xray JSON subscription. Paths are counted from the root of the outbound.\n\n```json\n[\n  {\n    \"op\": \"copy\",\n    \"from\": \"streamSettings.tlsSettings.cipherSuites\",\n    \"to\": \"streamSettings.tlsSettings.cipherSuites\"\n  },\n  {\n    \"op\": \"unset\",\n    \"to\": \"mux\"\n  }\n]\n```",
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "type": "object",
                      "properties": {
                        "op": {
                          "type": "string",
                          "const": "copy",
                          "title": "Copy",
                          "markdownDescription": "Take a value from the raw inbound."
                        },
                        "from": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Source path",
                          "markdownDescription": "Dot-separated path inside the **raw inbound** of the config profile this host belongs to. Array items are addressed by index.\n\nWith a `$host.` prefix the value is read from the **host** itself, after overrides have been resolved – `$host.securityOptions.serverName` holds the SNI that actually went into the config.\n\nOnly a part of the host is readable. Each entry below also opens everything nested under it:\n\n`address`, `port`, `finalRemark`, `protocol`, `transport`, `security`, `protocolOptions`, `transportOptions`, `securityOptions`, `mux`, `streamOverrides.finalMask`, `streamOverrides.sockopt`, `clientOverrides.serverDescription`, `metadata.remark`, `metadata.tags`, `metadata.inboundTag`\n\n> If the path resolves to nothing – or points outside the list above – the operation is skipped and the target key is **not** created.",
                          "examples": [
                            "streamSettings.tlsSettings.cipherSuites",
                            "streamSettings.tlsSettings.alpn",
                            "streamSettings.realitySettings.serverNames.0",
                            "$host.address",
                            "$host.securityOptions.serverName",
                            "$host.transportOptions.path",
                            "$host.mux.smux"
                          ]
                        },
                        "to": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Target path",
                          "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                          "examples": [
                            "streamSettings.tlsSettings.enableSessionResumption",
                            "streamSettings.tlsSettings.cipherSuites"
                          ]
                        }
                      },
                      "required": [
                        "op",
                        "from",
                        "to"
                      ],
                      "title": "Copy from the inbound",
                      "markdownDescription": "Reads a value from the raw inbound and writes it into the generated config.\n\n```json\n{\n  \"op\": \"copy\",\n  \"from\": \"streamSettings.tlsSettings.cipherSuites\",\n  \"to\": \"streamSettings.tlsSettings.cipherSuites\"\n}\n```",
                      "defaultSnippets": [
                        {
                          "label": "copy",
                          "description": "Copy a value from the raw inbound",
                          "body": {
                            "op": "copy",
                            "from": "$1",
                            "to": "$2"
                          }
                        }
                      ]
                    },
                    {
                      "type": "object",
                      "properties": {
                        "op": {
                          "type": "string",
                          "const": "set",
                          "title": "Set",
                          "markdownDescription": "Write a fixed value."
                        },
                        "value": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "number"
                            },
                            {
                              "type": "boolean"
                            },
                            {
                              "type": "array",
                              "items": {
                                "$ref": "#/$defs/__schema0"
                              }
                            },
                            {
                              "type": "object",
                              "propertyNames": {
                                "type": "string"
                              },
                              "additionalProperties": {
                                "$ref": "#/$defs/__schema1"
                              }
                            }
                          ],
                          "title": "Value",
                          "markdownDescription": "The value to write. Strings, numbers, booleans, arrays and objects are allowed."
                        },
                        "to": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Target path",
                          "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                          "examples": [
                            "streamSettings.tlsSettings.enableSessionResumption",
                            "streamSettings.tlsSettings.cipherSuites"
                          ]
                        }
                      },
                      "required": [
                        "op",
                        "value",
                        "to"
                      ],
                      "title": "Set a fixed value",
                      "markdownDescription": "Writes a literal value into the generated config, creating the key if it is missing.\n\n```json\n{\n  \"op\": \"set\",\n  \"to\": \"streamSettings.tlsSettings.enableSessionResumption\",\n  \"value\": true\n}\n```",
                      "defaultSnippets": [
                        {
                          "label": "set",
                          "description": "Write a fixed value",
                          "body": {
                            "op": "set",
                            "to": "$1",
                            "value": "$2"
                          }
                        }
                      ]
                    },
                    {
                      "type": "object",
                      "properties": {
                        "op": {
                          "type": "string",
                          "const": "unset",
                          "title": "Unset",
                          "markdownDescription": "Remove a field."
                        },
                        "to": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Target path",
                          "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                          "examples": [
                            "streamSettings.tlsSettings.enableSessionResumption",
                            "streamSettings.tlsSettings.cipherSuites"
                          ]
                        }
                      },
                      "required": [
                        "op",
                        "to"
                      ],
                      "title": "Remove a field",
                      "markdownDescription": "Removes a field the generator produced by itself.\n\n```json\n{\n  \"op\": \"unset\",\n  \"to\": \"mux\"\n}\n```\n\n> Only the field itself is removed. A parent object left empty stays in the config as `{}`.",
                      "defaultSnippets": [
                        {
                          "label": "unset",
                          "description": "Remove a field",
                          "body": {
                            "op": "unset",
                            "to": "$1"
                          }
                        }
                      ]
                    }
                  ],
                  "title": "Operation",
                  "markdownDescription": "Operations run one after another, in the order they are listed.\n\nA later operation sees what the previous ones wrote, so an `unset` can remove a key an earlier `set` added."
                }
              },
              "mihomo": {
                "title": "Mihomo",
                "markdownDescription": "Operations applied to the **proxy node** generated for this host in the Mihomo subscription.\n\nPaths are counted from the root of the node, where Mihomo keys are written in kebab-case.\n\n```json\n[\n  {\n    \"op\": \"set\",\n    \"to\": \"ip-version\",\n    \"value\": \"ipv4\"\n  }\n]\n```",
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "type": "object",
                      "properties": {
                        "op": {
                          "type": "string",
                          "const": "copy",
                          "title": "Copy",
                          "markdownDescription": "Take a value from the raw inbound."
                        },
                        "from": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Source path",
                          "markdownDescription": "Dot-separated path inside the **raw inbound** of the config profile this host belongs to. Array items are addressed by index.\n\nWith a `$host.` prefix the value is read from the **host** itself, after overrides have been resolved – `$host.securityOptions.serverName` holds the SNI that actually went into the config.\n\nOnly a part of the host is readable. Each entry below also opens everything nested under it:\n\n`address`, `port`, `finalRemark`, `protocol`, `transport`, `security`, `protocolOptions`, `transportOptions`, `securityOptions`, `mux`, `streamOverrides.finalMask`, `streamOverrides.sockopt`, `clientOverrides.serverDescription`, `metadata.remark`, `metadata.tags`, `metadata.inboundTag`\n\n> If the path resolves to nothing – or points outside the list above – the operation is skipped and the target key is **not** created.",
                          "examples": [
                            "streamSettings.tlsSettings.cipherSuites",
                            "streamSettings.tlsSettings.alpn",
                            "streamSettings.realitySettings.serverNames.0",
                            "$host.address",
                            "$host.securityOptions.serverName",
                            "$host.transportOptions.path",
                            "$host.mux.smux"
                          ]
                        },
                        "to": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Target path",
                          "markdownDescription": "Dot-separated path inside the generated **proxy node**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                          "examples": [
                            "ip-version",
                            "client-fingerprint",
                            "tfo",
                            "reality-opts.support-x25519mlkem768"
                          ]
                        }
                      },
                      "required": [
                        "op",
                        "from",
                        "to"
                      ],
                      "title": "Copy from the inbound",
                      "markdownDescription": "Reads a value from the raw inbound and writes it into the generated config.\n\n```json\n{\n  \"op\": \"copy\",\n  \"from\": \"streamSettings.realitySettings.serverNames.0\",\n  \"to\": \"servername\"\n}\n```",
                      "defaultSnippets": [
                        {
                          "label": "copy",
                          "description": "Copy a value from the raw inbound",
                          "body": {
                            "op": "copy",
                            "from": "$1",
                            "to": "$2"
                          }
                        }
                      ]
                    },
                    {
                      "type": "object",
                      "properties": {
                        "op": {
                          "type": "string",
                          "const": "set",
                          "title": "Set",
                          "markdownDescription": "Write a fixed value."
                        },
                        "value": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "number"
                            },
                            {
                              "type": "boolean"
                            },
                            {
                              "type": "array",
                              "items": {
                                "$ref": "#/$defs/__schema2"
                              }
                            },
                            {
                              "type": "object",
                              "propertyNames": {
                                "type": "string"
                              },
                              "additionalProperties": {
                                "$ref": "#/$defs/__schema3"
                              }
                            }
                          ],
                          "title": "Value",
                          "markdownDescription": "The value to write. Strings, numbers, booleans, arrays and objects are allowed."
                        },
                        "to": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Target path",
                          "markdownDescription": "Dot-separated path inside the generated **proxy node**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                          "examples": [
                            "ip-version",
                            "client-fingerprint",
                            "tfo",
                            "reality-opts.support-x25519mlkem768"
                          ]
                        }
                      },
                      "required": [
                        "op",
                        "value",
                        "to"
                      ],
                      "title": "Set a fixed value",
                      "markdownDescription": "Writes a literal value into the generated config, creating the key if it is missing.\n\n```json\n{\n  \"op\": \"set\",\n  \"to\": \"reality-opts.support-x25519mlkem768\",\n  \"value\": true\n}\n```",
                      "defaultSnippets": [
                        {
                          "label": "set",
                          "description": "Write a fixed value",
                          "body": {
                            "op": "set",
                            "to": "$1",
                            "value": "$2"
                          }
                        }
                      ]
                    },
                    {
                      "type": "object",
                      "properties": {
                        "op": {
                          "type": "string",
                          "const": "unset",
                          "title": "Unset",
                          "markdownDescription": "Remove a field."
                        },
                        "to": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Target path",
                          "markdownDescription": "Dot-separated path inside the generated **proxy node**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                          "examples": [
                            "ip-version",
                            "client-fingerprint",
                            "tfo",
                            "reality-opts.support-x25519mlkem768"
                          ]
                        }
                      },
                      "required": [
                        "op",
                        "to"
                      ],
                      "title": "Remove a field",
                      "markdownDescription": "Removes a field the generator produced by itself.\n\n```json\n{\n  \"op\": \"unset\",\n  \"to\": \"smux\"\n}\n```\n\n> Only the field itself is removed. A parent object left empty stays in the config as `{}`.",
                      "defaultSnippets": [
                        {
                          "label": "unset",
                          "description": "Remove a field",
                          "body": {
                            "op": "unset",
                            "to": "$1"
                          }
                        }
                      ]
                    }
                  ],
                  "title": "Operation",
                  "markdownDescription": "Operations run one after another, in the order they are listed.\n\nA later operation sees what the previous ones wrote, so an `unset` can remove a key an earlier `set` added."
                }
              },
              "base64": {
                "title": "Base64",
                "markdownDescription": "Operations applied to the share link generated for this host in the Base64 subscription.\n\n`to` is a plain query parameter name, not a path – dots carry no meaning here.\n\nWith a `$link.` prefix the operation rewrites the link itself instead of its query string. Writable parts: `$link.address`, `$link.port`, `$link.password`, `$link.remark`, and `$link.method` for Shadowsocks. `$link.password` is the credential of the protocol.\n\n> A value that cannot make a valid link – an empty address, a port outside 1-65535 – is ignored, and the generated one is kept.\n\n```json\n[\n  {\n    \"op\": \"set\",\n    \"to\": \"fp\",\n    \"value\": \"chrome\"\n  },\n  {\n    \"op\": \"unset\",\n    \"to\": \"fm\"\n  },\n  {\n    \"op\": \"set\",\n    \"to\": \"$link.port\",\n    \"value\": 2053\n  },\n  {\n    \"op\": \"copy\",\n    \"from\": \"$host.securityOptions.serverName\",\n    \"to\": \"$link.address\"\n  }\n]\n```",
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "type": "object",
                      "properties": {
                        "op": {
                          "type": "string",
                          "const": "copy",
                          "title": "Copy",
                          "markdownDescription": "Take a value from the raw inbound."
                        },
                        "from": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Source path",
                          "markdownDescription": "Dot-separated path inside the **raw inbound** of the config profile this host belongs to. Array items are addressed by index.\n\nWith a `$host.` prefix the value is read from the **host** itself, after overrides have been resolved – `$host.securityOptions.serverName` holds the SNI that actually went into the config.\n\nOnly a part of the host is readable. Each entry below also opens everything nested under it:\n\n`address`, `port`, `finalRemark`, `protocol`, `transport`, `security`, `protocolOptions`, `transportOptions`, `securityOptions`, `mux`, `streamOverrides.finalMask`, `streamOverrides.sockopt`, `clientOverrides.serverDescription`, `metadata.remark`, `metadata.tags`, `metadata.inboundTag`\n\n> If the path resolves to nothing – or points outside the list above – the operation is skipped and the target key is **not** created.",
                          "examples": [
                            "streamSettings.tlsSettings.cipherSuites",
                            "streamSettings.tlsSettings.alpn",
                            "streamSettings.realitySettings.serverNames.0",
                            "$host.address",
                            "$host.securityOptions.serverName",
                            "$host.transportOptions.path",
                            "$host.mux.smux"
                          ]
                        },
                        "to": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Target path",
                          "markdownDescription": "Dot-separated path inside the query string of the generated **share link**, or the link itself with a `$link.` prefix, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                          "examples": [
                            "$link.address",
                            "$link.port",
                            "$link.password",
                            "$link.remark",
                            "$link.method",
                            "alpn",
                            "authority",
                            "cs",
                            "encryption",
                            "extra",
                            "flow",
                            "fm",
                            "fp",
                            "headerType",
                            "heartbeatPeriod",
                            "host",
                            "mode",
                            "mtu",
                            "obfs",
                            "obfs-password",
                            "path",
                            "pbk",
                            "pcs",
                            "pinSHA256",
                            "pqv",
                            "security",
                            "serviceName",
                            "sid",
                            "sni",
                            "spx",
                            "tti",
                            "type",
                            "vcn"
                          ]
                        }
                      },
                      "required": [
                        "op",
                        "from",
                        "to"
                      ],
                      "title": "Copy from the inbound",
                      "markdownDescription": "Reads a value from the raw inbound and writes it into the generated config.\n\n```json\n{\n  \"op\": \"copy\",\n  \"from\": \"streamSettings.realitySettings.serverNames.0\",\n  \"to\": \"sni\"\n}\n```",
                      "defaultSnippets": [
                        {
                          "label": "copy",
                          "description": "Copy a value from the raw inbound",
                          "body": {
                            "op": "copy",
                            "from": "$1",
                            "to": "$2"
                          }
                        }
                      ]
                    },
                    {
                      "type": "object",
                      "properties": {
                        "op": {
                          "type": "string",
                          "const": "set",
                          "title": "Set",
                          "markdownDescription": "Write a fixed value."
                        },
                        "value": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "number"
                            },
                            {
                              "type": "boolean"
                            },
                            {
                              "type": "array",
                              "items": {
                                "$ref": "#/$defs/__schema4"
                              }
                            },
                            {
                              "type": "object",
                              "propertyNames": {
                                "type": "string"
                              },
                              "additionalProperties": {
                                "$ref": "#/$defs/__schema5"
                              }
                            }
                          ],
                          "title": "Value",
                          "markdownDescription": "The value to write. Strings, numbers, booleans, arrays and objects are allowed."
                        },
                        "to": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Target path",
                          "markdownDescription": "Dot-separated path inside the query string of the generated **share link**, or the link itself with a `$link.` prefix, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                          "examples": [
                            "$link.address",
                            "$link.port",
                            "$link.password",
                            "$link.remark",
                            "$link.method",
                            "alpn",
                            "authority",
                            "cs",
                            "encryption",
                            "extra",
                            "flow",
                            "fm",
                            "fp",
                            "headerType",
                            "heartbeatPeriod",
                            "host",
                            "mode",
                            "mtu",
                            "obfs",
                            "obfs-password",
                            "path",
                            "pbk",
                            "pcs",
                            "pinSHA256",
                            "pqv",
                            "security",
                            "serviceName",
                            "sid",
                            "sni",
                            "spx",
                            "tti",
                            "type",
                            "vcn"
                          ]
                        }
                      },
                      "required": [
                        "op",
                        "value",
                        "to"
                      ],
                      "title": "Set a fixed value",
                      "markdownDescription": "Writes a literal value into the generated config, creating the key if it is missing.\n\n```json\n{\n  \"op\": \"set\",\n  \"to\": \"fp\",\n  \"value\": \"chrome\"\n}\n```",
                      "defaultSnippets": [
                        {
                          "label": "set",
                          "description": "Write a fixed value",
                          "body": {
                            "op": "set",
                            "to": "$1",
                            "value": "$2"
                          }
                        }
                      ]
                    },
                    {
                      "type": "object",
                      "properties": {
                        "op": {
                          "type": "string",
                          "const": "unset",
                          "title": "Unset",
                          "markdownDescription": "Remove a field."
                        },
                        "to": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Target path",
                          "markdownDescription": "Dot-separated path inside the query string of the generated **share link**, or the link itself with a `$link.` prefix, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                          "examples": [
                            "$link.address",
                            "$link.port",
                            "$link.password",
                            "$link.remark",
                            "$link.method",
                            "alpn",
                            "authority",
                            "cs",
                            "encryption",
                            "extra",
                            "flow",
                            "fm",
                            "fp",
                            "headerType",
                            "heartbeatPeriod",
                            "host",
                            "mode",
                            "mtu",
                            "obfs",
                            "obfs-password",
                            "path",
                            "pbk",
                            "pcs",
                            "pinSHA256",
                            "pqv",
                            "security",
                            "serviceName",
                            "sid",
                            "sni",
                            "spx",
                            "tti",
                            "type",
                            "vcn"
                          ]
                        }
                      },
                      "required": [
                        "op",
                        "to"
                      ],
                      "title": "Remove a field",
                      "markdownDescription": "Removes a field the generator produced by itself.\n\n```json\n{\n  \"op\": \"unset\",\n  \"to\": \"fm\"\n}\n```\n\n> Only the field itself is removed. A parent object left empty stays in the config as `{}`.",
                      "defaultSnippets": [
                        {
                          "label": "unset",
                          "description": "Remove a field",
                          "body": {
                            "op": "unset",
                            "to": "$1"
                          }
                        }
                      ]
                    }
                  ],
                  "title": "Operation",
                  "markdownDescription": "Operations run one after another, in the order they are listed.\n\nA later operation sees what the previous ones wrote, so an `unset` can remove a key an earlier `set` added."
                }
              },
              "singbox": {
                "title": "sing-box",
                "markdownDescription": "Operations applied to the **outbound** generated for this host in the sing-box subscription. Paths are counted from the root of the outbound.\n\nsing-box keys are written in snake_case, and the outbound of a Hysteria2 host has a shape of its own.\n\n```json\n[\n  {\n    \"op\": \"set\",\n    \"to\": \"tls.utls.fingerprint\",\n    \"value\": \"chrome\"\n  },\n  {\n    \"op\": \"unset\",\n    \"to\": \"multiplex\"\n  }\n]\n```",
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "type": "object",
                      "properties": {
                        "op": {
                          "type": "string",
                          "const": "copy",
                          "title": "Copy",
                          "markdownDescription": "Take a value from the raw inbound."
                        },
                        "from": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Source path",
                          "markdownDescription": "Dot-separated path inside the **raw inbound** of the config profile this host belongs to. Array items are addressed by index.\n\nWith a `$host.` prefix the value is read from the **host** itself, after overrides have been resolved – `$host.securityOptions.serverName` holds the SNI that actually went into the config.\n\nOnly a part of the host is readable. Each entry below also opens everything nested under it:\n\n`address`, `port`, `finalRemark`, `protocol`, `transport`, `security`, `protocolOptions`, `transportOptions`, `securityOptions`, `mux`, `streamOverrides.finalMask`, `streamOverrides.sockopt`, `clientOverrides.serverDescription`, `metadata.remark`, `metadata.tags`, `metadata.inboundTag`\n\n> If the path resolves to nothing – or points outside the list above – the operation is skipped and the target key is **not** created.",
                          "examples": [
                            "streamSettings.tlsSettings.cipherSuites",
                            "streamSettings.tlsSettings.alpn",
                            "streamSettings.realitySettings.serverNames.0",
                            "$host.address",
                            "$host.securityOptions.serverName",
                            "$host.transportOptions.path",
                            "$host.mux.smux"
                          ]
                        },
                        "to": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Target path",
                          "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                          "examples": [
                            "domain_resolver",
                            "multiplex.protocol",
                            "packet_encoding",
                            "tcp_fast_open",
                            "tls.insecure",
                            "tls.utls.fingerprint"
                          ]
                        }
                      },
                      "required": [
                        "op",
                        "from",
                        "to"
                      ],
                      "title": "Copy from the inbound",
                      "markdownDescription": "Reads a value from the raw inbound and writes it into the generated config.\n\n```json\n{\n  \"op\": \"copy\",\n  \"from\": \"streamSettings.realitySettings.serverNames.0\",\n  \"to\": \"tls.server_name\"\n}\n```",
                      "defaultSnippets": [
                        {
                          "label": "copy",
                          "description": "Copy a value from the raw inbound",
                          "body": {
                            "op": "copy",
                            "from": "$1",
                            "to": "$2"
                          }
                        }
                      ]
                    },
                    {
                      "type": "object",
                      "properties": {
                        "op": {
                          "type": "string",
                          "const": "set",
                          "title": "Set",
                          "markdownDescription": "Write a fixed value."
                        },
                        "value": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "number"
                            },
                            {
                              "type": "boolean"
                            },
                            {
                              "type": "array",
                              "items": {
                                "$ref": "#/$defs/__schema6"
                              }
                            },
                            {
                              "type": "object",
                              "propertyNames": {
                                "type": "string"
                              },
                              "additionalProperties": {
                                "$ref": "#/$defs/__schema7"
                              }
                            }
                          ],
                          "title": "Value",
                          "markdownDescription": "The value to write. Strings, numbers, booleans, arrays and objects are allowed."
                        },
                        "to": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Target path",
                          "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                          "examples": [
                            "domain_resolver",
                            "multiplex.protocol",
                            "packet_encoding",
                            "tcp_fast_open",
                            "tls.insecure",
                            "tls.utls.fingerprint"
                          ]
                        }
                      },
                      "required": [
                        "op",
                        "value",
                        "to"
                      ],
                      "title": "Set a fixed value",
                      "markdownDescription": "Writes a literal value into the generated config, creating the key if it is missing.\n\n```json\n{\n  \"op\": \"set\",\n  \"to\": \"tls.utls.fingerprint\",\n  \"value\": \"chrome\"\n}\n```",
                      "defaultSnippets": [
                        {
                          "label": "set",
                          "description": "Write a fixed value",
                          "body": {
                            "op": "set",
                            "to": "$1",
                            "value": "$2"
                          }
                        }
                      ]
                    },
                    {
                      "type": "object",
                      "properties": {
                        "op": {
                          "type": "string",
                          "const": "unset",
                          "title": "Unset",
                          "markdownDescription": "Remove a field."
                        },
                        "to": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Target path",
                          "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                          "examples": [
                            "domain_resolver",
                            "multiplex.protocol",
                            "packet_encoding",
                            "tcp_fast_open",
                            "tls.insecure",
                            "tls.utls.fingerprint"
                          ]
                        }
                      },
                      "required": [
                        "op",
                        "to"
                      ],
                      "title": "Remove a field",
                      "markdownDescription": "Removes a field the generator produced by itself.\n\n```json\n{\n  \"op\": \"unset\",\n  \"to\": \"multiplex\"\n}\n```\n\n> Only the field itself is removed. A parent object left empty stays in the config as `{}`.",
                      "defaultSnippets": [
                        {
                          "label": "unset",
                          "description": "Remove a field",
                          "body": {
                            "op": "unset",
                            "to": "$1"
                          }
                        }
                      ]
                    }
                  ],
                  "title": "Operation",
                  "markdownDescription": "Operations run one after another, in the order they are listed.\n\nA later operation sees what the previous ones wrote, so an `unset` can remove a key an earlier `set` added."
                }
              }
            },
            "title": "Host Mapper",
            "markdownDescription": "Rewrites the config generated for this host, per client type.\n\nOperations run **after** the generator has finished, so they can change or remove anything it produced.\n\nThe source for `copy` is the raw inbound of the config profile this host belongs to, or the host itself when the path starts with `$host.`.\n\n> `to` is never checked against the target client. A misspelled key is written exactly like a real one."
          },
          "internalSquads": {
            "type": "object",
            "properties": {
              "mode": {
                "type": "string",
                "enum": [
                  "EXCLUDE",
                  "ALLOW_ONLY"
                ]
              },
              "squads": {
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                }
              }
            },
            "required": [
              "mode",
              "squads"
            ]
          }
        },
        "required": [
          "inbound",
          "remark",
          "address",
          "port"
        ],
        "$defs": {
          "__schema0": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema0"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema0"
                }
              }
            ]
          },
          "__schema1": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema1"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema1"
                }
              }
            ]
          },
          "__schema2": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema2"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema2"
                }
              }
            ]
          },
          "__schema3": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema3"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema3"
                }
              }
            ]
          },
          "__schema4": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema4"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema4"
                }
              }
            ]
          },
          "__schema5": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema5"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema5"
                }
              }
            ]
          },
          "__schema6": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema6"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema6"
                }
              }
            ]
          },
          "__schema7": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema7"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema7"
                }
              }
            ]
          }
        }
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "viewPosition": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "remark": {
                "type": "string"
              },
              "address": {
                "type": "string"
              },
              "port": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "path": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "sni": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "host": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "alpn": {
                "anyOf": [
                  {
                    "type": "string",
                    "enum": [
                      "h3",
                      "h2",
                      "http/1.1",
                      "h2,http/1.1",
                      "h3,h2,http/1.1",
                      "h3,h2"
                    ]
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "fingerprint": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "isDisabled": {
                "type": "boolean"
              },
              "securityLayer": {
                "default": "DEFAULT",
                "type": "string",
                "enum": [
                  "DEFAULT",
                  "TLS",
                  "NONE"
                ]
              },
              "xhttpExtraParams": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "muxParams": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "sockoptParams": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "finalMask": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "inbound": {
                "type": "object",
                "properties": {
                  "configProfileUuid": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "configProfileInboundUuid": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "configProfileUuid",
                  "configProfileInboundUuid"
                ],
                "additionalProperties": false
              },
              "serverDescription": {
                "anyOf": [
                  {
                    "type": "string",
                    "maxLength": 30
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "tags": {
                "default": [],
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "isHidden": {
                "default": false,
                "type": "boolean"
              },
              "overrideSniFromAddress": {
                "default": false,
                "type": "boolean"
              },
              "keepSniBlank": {
                "default": false,
                "type": "boolean"
              },
              "vlessRouteId": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 65535
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "pinnedPeerCertSha256": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "verifyPeerCertByName": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "shuffleHost": {
                "type": "boolean"
              },
              "mihomoX25519": {
                "type": "boolean"
              },
              "mihomoIpVersion": {
                "anyOf": [
                  {
                    "type": "string",
                    "enum": [
                      "dual",
                      "ipv4",
                      "ipv6",
                      "ipv4-prefer",
                      "ipv6-prefer"
                    ]
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "nodes": {
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                }
              },
              "xrayJsonTemplateUuid": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "excludeFromSubscriptionTypes": {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "XRAY_JSON",
                    "XRAY_BASE64",
                    "MIHOMO",
                    "STASH",
                    "CLASH",
                    "SINGBOX"
                  ]
                }
              },
              "mapper": {
                "type": "object",
                "properties": {
                  "xrayJson": {
                    "title": "Xray JSON",
                    "markdownDescription": "Operations applied to the **outbound** generated for this host in the Xray JSON subscription. Paths are counted from the root of the outbound.\n\n```json\n[\n  {\n    \"op\": \"copy\",\n    \"from\": \"streamSettings.tlsSettings.cipherSuites\",\n    \"to\": \"streamSettings.tlsSettings.cipherSuites\"\n  },\n  {\n    \"op\": \"unset\",\n    \"to\": \"mux\"\n  }\n]\n```",
                    "type": "array",
                    "items": {
                      "oneOf": [
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "copy",
                              "title": "Copy",
                              "markdownDescription": "Take a value from the raw inbound."
                            },
                            "from": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Source path",
                              "markdownDescription": "Dot-separated path inside the **raw inbound** of the config profile this host belongs to. Array items are addressed by index.\n\nWith a `$host.` prefix the value is read from the **host** itself, after overrides have been resolved – `$host.securityOptions.serverName` holds the SNI that actually went into the config.\n\nOnly a part of the host is readable. Each entry below also opens everything nested under it:\n\n`address`, `port`, `finalRemark`, `protocol`, `transport`, `security`, `protocolOptions`, `transportOptions`, `securityOptions`, `mux`, `streamOverrides.finalMask`, `streamOverrides.sockopt`, `clientOverrides.serverDescription`, `metadata.remark`, `metadata.tags`, `metadata.inboundTag`\n\n> If the path resolves to nothing – or points outside the list above – the operation is skipped and the target key is **not** created.",
                              "examples": [
                                "streamSettings.tlsSettings.cipherSuites",
                                "streamSettings.tlsSettings.alpn",
                                "streamSettings.realitySettings.serverNames.0",
                                "$host.address",
                                "$host.securityOptions.serverName",
                                "$host.transportOptions.path",
                                "$host.mux.smux"
                              ]
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "streamSettings.tlsSettings.enableSessionResumption",
                                "streamSettings.tlsSettings.cipherSuites"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "from",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Copy from the inbound",
                          "markdownDescription": "Reads a value from the raw inbound and writes it into the generated config.\n\n```json\n{\n  \"op\": \"copy\",\n  \"from\": \"streamSettings.tlsSettings.cipherSuites\",\n  \"to\": \"streamSettings.tlsSettings.cipherSuites\"\n}\n```",
                          "defaultSnippets": [
                            {
                              "label": "copy",
                              "description": "Copy a value from the raw inbound",
                              "body": {
                                "op": "copy",
                                "from": "$1",
                                "to": "$2"
                              }
                            }
                          ]
                        },
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "set",
                              "title": "Set",
                              "markdownDescription": "Write a fixed value."
                            },
                            "value": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "boolean"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "$ref": "#/$defs/__schema0"
                                  }
                                },
                                {
                                  "type": "object",
                                  "propertyNames": {
                                    "type": "string"
                                  },
                                  "additionalProperties": {
                                    "$ref": "#/$defs/__schema1"
                                  }
                                }
                              ],
                              "title": "Value",
                              "markdownDescription": "The value to write. Strings, numbers, booleans, arrays and objects are allowed."
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "streamSettings.tlsSettings.enableSessionResumption",
                                "streamSettings.tlsSettings.cipherSuites"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "value",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Set a fixed value",
                          "markdownDescription": "Writes a literal value into the generated config, creating the key if it is missing.\n\n```json\n{\n  \"op\": \"set\",\n  \"to\": \"streamSettings.tlsSettings.enableSessionResumption\",\n  \"value\": true\n}\n```",
                          "defaultSnippets": [
                            {
                              "label": "set",
                              "description": "Write a fixed value",
                              "body": {
                                "op": "set",
                                "to": "$1",
                                "value": "$2"
                              }
                            }
                          ]
                        },
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "unset",
                              "title": "Unset",
                              "markdownDescription": "Remove a field."
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "streamSettings.tlsSettings.enableSessionResumption",
                                "streamSettings.tlsSettings.cipherSuites"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Remove a field",
                          "markdownDescription": "Removes a field the generator produced by itself.\n\n```json\n{\n  \"op\": \"unset\",\n  \"to\": \"mux\"\n}\n```\n\n> Only the field itself is removed. A parent object left empty stays in the config as `{}`.",
                          "defaultSnippets": [
                            {
                              "label": "unset",
                              "description": "Remove a field",
                              "body": {
                                "op": "unset",
                                "to": "$1"
                              }
                            }
                          ]
                        }
                      ],
                      "title": "Operation",
                      "markdownDescription": "Operations run one after another, in the order they are listed.\n\nA later operation sees what the previous ones wrote, so an `unset` can remove a key an earlier `set` added."
                    }
                  },
                  "mihomo": {
                    "title": "Mihomo",
                    "markdownDescription": "Operations applied to the **proxy node** generated for this host in the Mihomo subscription.\n\nPaths are counted from the root of the node, where Mihomo keys are written in kebab-case.\n\n```json\n[\n  {\n    \"op\": \"set\",\n    \"to\": \"ip-version\",\n    \"value\": \"ipv4\"\n  }\n]\n```",
                    "type": "array",
                    "items": {
                      "oneOf": [
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "copy",
                              "title": "Copy",
                              "markdownDescription": "Take a value from the raw inbound."
                            },
                            "from": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Source path",
                              "markdownDescription": "Dot-separated path inside the **raw inbound** of the config profile this host belongs to. Array items are addressed by index.\n\nWith a `$host.` prefix the value is read from the **host** itself, after overrides have been resolved – `$host.securityOptions.serverName` holds the SNI that actually went into the config.\n\nOnly a part of the host is readable. Each entry below also opens everything nested under it:\n\n`address`, `port`, `finalRemark`, `protocol`, `transport`, `security`, `protocolOptions`, `transportOptions`, `securityOptions`, `mux`, `streamOverrides.finalMask`, `streamOverrides.sockopt`, `clientOverrides.serverDescription`, `metadata.remark`, `metadata.tags`, `metadata.inboundTag`\n\n> If the path resolves to nothing – or points outside the list above – the operation is skipped and the target key is **not** created.",
                              "examples": [
                                "streamSettings.tlsSettings.cipherSuites",
                                "streamSettings.tlsSettings.alpn",
                                "streamSettings.realitySettings.serverNames.0",
                                "$host.address",
                                "$host.securityOptions.serverName",
                                "$host.transportOptions.path",
                                "$host.mux.smux"
                              ]
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the generated **proxy node**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "ip-version",
                                "client-fingerprint",
                                "tfo",
                                "reality-opts.support-x25519mlkem768"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "from",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Copy from the inbound",
                          "markdownDescription": "Reads a value from the raw inbound and writes it into the generated config.\n\n```json\n{\n  \"op\": \"copy\",\n  \"from\": \"streamSettings.realitySettings.serverNames.0\",\n  \"to\": \"servername\"\n}\n```",
                          "defaultSnippets": [
                            {
                              "label": "copy",
                              "description": "Copy a value from the raw inbound",
                              "body": {
                                "op": "copy",
                                "from": "$1",
                                "to": "$2"
                              }
                            }
                          ]
                        },
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "set",
                              "title": "Set",
                              "markdownDescription": "Write a fixed value."
                            },
                            "value": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "boolean"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "$ref": "#/$defs/__schema2"
                                  }
                                },
                                {
                                  "type": "object",
                                  "propertyNames": {
                                    "type": "string"
                                  },
                                  "additionalProperties": {
                                    "$ref": "#/$defs/__schema3"
                                  }
                                }
                              ],
                              "title": "Value",
                              "markdownDescription": "The value to write. Strings, numbers, booleans, arrays and objects are allowed."
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the generated **proxy node**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "ip-version",
                                "client-fingerprint",
                                "tfo",
                                "reality-opts.support-x25519mlkem768"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "value",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Set a fixed value",
                          "markdownDescription": "Writes a literal value into the generated config, creating the key if it is missing.\n\n```json\n{\n  \"op\": \"set\",\n  \"to\": \"reality-opts.support-x25519mlkem768\",\n  \"value\": true\n}\n```",
                          "defaultSnippets": [
                            {
                              "label": "set",
                              "description": "Write a fixed value",
                              "body": {
                                "op": "set",
                                "to": "$1",
                                "value": "$2"
                              }
                            }
                          ]
                        },
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "unset",
                              "title": "Unset",
                              "markdownDescription": "Remove a field."
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the generated **proxy node**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "ip-version",
                                "client-fingerprint",
                                "tfo",
                                "reality-opts.support-x25519mlkem768"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Remove a field",
                          "markdownDescription": "Removes a field the generator produced by itself.\n\n```json\n{\n  \"op\": \"unset\",\n  \"to\": \"smux\"\n}\n```\n\n> Only the field itself is removed. A parent object left empty stays in the config as `{}`.",
                          "defaultSnippets": [
                            {
                              "label": "unset",
                              "description": "Remove a field",
                              "body": {
                                "op": "unset",
                                "to": "$1"
                              }
                            }
                          ]
                        }
                      ],
                      "title": "Operation",
                      "markdownDescription": "Operations run one after another, in the order they are listed.\n\nA later operation sees what the previous ones wrote, so an `unset` can remove a key an earlier `set` added."
                    }
                  },
                  "base64": {
                    "title": "Base64",
                    "markdownDescription": "Operations applied to the share link generated for this host in the Base64 subscription.\n\n`to` is a plain query parameter name, not a path – dots carry no meaning here.\n\nWith a `$link.` prefix the operation rewrites the link itself instead of its query string. Writable parts: `$link.address`, `$link.port`, `$link.password`, `$link.remark`, and `$link.method` for Shadowsocks. `$link.password` is the credential of the protocol.\n\n> A value that cannot make a valid link – an empty address, a port outside 1-65535 – is ignored, and the generated one is kept.\n\n```json\n[\n  {\n    \"op\": \"set\",\n    \"to\": \"fp\",\n    \"value\": \"chrome\"\n  },\n  {\n    \"op\": \"unset\",\n    \"to\": \"fm\"\n  },\n  {\n    \"op\": \"set\",\n    \"to\": \"$link.port\",\n    \"value\": 2053\n  },\n  {\n    \"op\": \"copy\",\n    \"from\": \"$host.securityOptions.serverName\",\n    \"to\": \"$link.address\"\n  }\n]\n```",
                    "type": "array",
                    "items": {
                      "oneOf": [
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "copy",
                              "title": "Copy",
                              "markdownDescription": "Take a value from the raw inbound."
                            },
                            "from": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Source path",
                              "markdownDescription": "Dot-separated path inside the **raw inbound** of the config profile this host belongs to. Array items are addressed by index.\n\nWith a `$host.` prefix the value is read from the **host** itself, after overrides have been resolved – `$host.securityOptions.serverName` holds the SNI that actually went into the config.\n\nOnly a part of the host is readable. Each entry below also opens everything nested under it:\n\n`address`, `port`, `finalRemark`, `protocol`, `transport`, `security`, `protocolOptions`, `transportOptions`, `securityOptions`, `mux`, `streamOverrides.finalMask`, `streamOverrides.sockopt`, `clientOverrides.serverDescription`, `metadata.remark`, `metadata.tags`, `metadata.inboundTag`\n\n> If the path resolves to nothing – or points outside the list above – the operation is skipped and the target key is **not** created.",
                              "examples": [
                                "streamSettings.tlsSettings.cipherSuites",
                                "streamSettings.tlsSettings.alpn",
                                "streamSettings.realitySettings.serverNames.0",
                                "$host.address",
                                "$host.securityOptions.serverName",
                                "$host.transportOptions.path",
                                "$host.mux.smux"
                              ]
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the query string of the generated **share link**, or the link itself with a `$link.` prefix, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "$link.address",
                                "$link.port",
                                "$link.password",
                                "$link.remark",
                                "$link.method",
                                "alpn",
                                "authority",
                                "cs",
                                "encryption",
                                "extra",
                                "flow",
                                "fm",
                                "fp",
                                "headerType",
                                "heartbeatPeriod",
                                "host",
                                "mode",
                                "mtu",
                                "obfs",
                                "obfs-password",
                                "path",
                                "pbk",
                                "pcs",
                                "pinSHA256",
                                "pqv",
                                "security",
                                "serviceName",
                                "sid",
                                "sni",
                                "spx",
                                "tti",
                                "type",
                                "vcn"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "from",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Copy from the inbound",
                          "markdownDescription": "Reads a value from the raw inbound and writes it into the generated config.\n\n```json\n{\n  \"op\": \"copy\",\n  \"from\": \"streamSettings.realitySettings.serverNames.0\",\n  \"to\": \"sni\"\n}\n```",
                          "defaultSnippets": [
                            {
                              "label": "copy",
                              "description": "Copy a value from the raw inbound",
                              "body": {
                                "op": "copy",
                                "from": "$1",
                                "to": "$2"
                              }
                            }
                          ]
                        },
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "set",
                              "title": "Set",
                              "markdownDescription": "Write a fixed value."
                            },
                            "value": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "boolean"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "$ref": "#/$defs/__schema4"
                                  }
                                },
                                {
                                  "type": "object",
                                  "propertyNames": {
                                    "type": "string"
                                  },
                                  "additionalProperties": {
                                    "$ref": "#/$defs/__schema5"
                                  }
                                }
                              ],
                              "title": "Value",
                              "markdownDescription": "The value to write. Strings, numbers, booleans, arrays and objects are allowed."
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the query string of the generated **share link**, or the link itself with a `$link.` prefix, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "$link.address",
                                "$link.port",
                                "$link.password",
                                "$link.remark",
                                "$link.method",
                                "alpn",
                                "authority",
                                "cs",
                                "encryption",
                                "extra",
                                "flow",
                                "fm",
                                "fp",
                                "headerType",
                                "heartbeatPeriod",
                                "host",
                                "mode",
                                "mtu",
                                "obfs",
                                "obfs-password",
                                "path",
                                "pbk",
                                "pcs",
                                "pinSHA256",
                                "pqv",
                                "security",
                                "serviceName",
                                "sid",
                                "sni",
                                "spx",
                                "tti",
                                "type",
                                "vcn"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "value",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Set a fixed value",
                          "markdownDescription": "Writes a literal value into the generated config, creating the key if it is missing.\n\n```json\n{\n  \"op\": \"set\",\n  \"to\": \"fp\",\n  \"value\": \"chrome\"\n}\n```",
                          "defaultSnippets": [
                            {
                              "label": "set",
                              "description": "Write a fixed value",
                              "body": {
                                "op": "set",
                                "to": "$1",
                                "value": "$2"
                              }
                            }
                          ]
                        },
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "unset",
                              "title": "Unset",
                              "markdownDescription": "Remove a field."
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the query string of the generated **share link**, or the link itself with a `$link.` prefix, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "$link.address",
                                "$link.port",
                                "$link.password",
                                "$link.remark",
                                "$link.method",
                                "alpn",
                                "authority",
                                "cs",
                                "encryption",
                                "extra",
                                "flow",
                                "fm",
                                "fp",
                                "headerType",
                                "heartbeatPeriod",
                                "host",
                                "mode",
                                "mtu",
                                "obfs",
                                "obfs-password",
                                "path",
                                "pbk",
                                "pcs",
                                "pinSHA256",
                                "pqv",
                                "security",
                                "serviceName",
                                "sid",
                                "sni",
                                "spx",
                                "tti",
                                "type",
                                "vcn"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Remove a field",
                          "markdownDescription": "Removes a field the generator produced by itself.\n\n```json\n{\n  \"op\": \"unset\",\n  \"to\": \"fm\"\n}\n```\n\n> Only the field itself is removed. A parent object left empty stays in the config as `{}`.",
                          "defaultSnippets": [
                            {
                              "label": "unset",
                              "description": "Remove a field",
                              "body": {
                                "op": "unset",
                                "to": "$1"
                              }
                            }
                          ]
                        }
                      ],
                      "title": "Operation",
                      "markdownDescription": "Operations run one after another, in the order they are listed.\n\nA later operation sees what the previous ones wrote, so an `unset` can remove a key an earlier `set` added."
                    }
                  },
                  "singbox": {
                    "title": "sing-box",
                    "markdownDescription": "Operations applied to the **outbound** generated for this host in the sing-box subscription. Paths are counted from the root of the outbound.\n\nsing-box keys are written in snake_case, and the outbound of a Hysteria2 host has a shape of its own.\n\n```json\n[\n  {\n    \"op\": \"set\",\n    \"to\": \"tls.utls.fingerprint\",\n    \"value\": \"chrome\"\n  },\n  {\n    \"op\": \"unset\",\n    \"to\": \"multiplex\"\n  }\n]\n```",
                    "type": "array",
                    "items": {
                      "oneOf": [
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "copy",
                              "title": "Copy",
                              "markdownDescription": "Take a value from the raw inbound."
                            },
                            "from": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Source path",
                              "markdownDescription": "Dot-separated path inside the **raw inbound** of the config profile this host belongs to. Array items are addressed by index.\n\nWith a `$host.` prefix the value is read from the **host** itself, after overrides have been resolved – `$host.securityOptions.serverName` holds the SNI that actually went into the config.\n\nOnly a part of the host is readable. Each entry below also opens everything nested under it:\n\n`address`, `port`, `finalRemark`, `protocol`, `transport`, `security`, `protocolOptions`, `transportOptions`, `securityOptions`, `mux`, `streamOverrides.finalMask`, `streamOverrides.sockopt`, `clientOverrides.serverDescription`, `metadata.remark`, `metadata.tags`, `metadata.inboundTag`\n\n> If the path resolves to nothing – or points outside the list above – the operation is skipped and the target key is **not** created.",
                              "examples": [
                                "streamSettings.tlsSettings.cipherSuites",
                                "streamSettings.tlsSettings.alpn",
                                "streamSettings.realitySettings.serverNames.0",
                                "$host.address",
                                "$host.securityOptions.serverName",
                                "$host.transportOptions.path",
                                "$host.mux.smux"
                              ]
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "domain_resolver",
                                "multiplex.protocol",
                                "packet_encoding",
                                "tcp_fast_open",
                                "tls.insecure",
                                "tls.utls.fingerprint"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "from",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Copy from the inbound",
                          "markdownDescription": "Reads a value from the raw inbound and writes it into the generated config.\n\n```json\n{\n  \"op\": \"copy\",\n  \"from\": \"streamSettings.realitySettings.serverNames.0\",\n  \"to\": \"tls.server_name\"\n}\n```",
                          "defaultSnippets": [
                            {
                              "label": "copy",
                              "description": "Copy a value from the raw inbound",
                              "body": {
                                "op": "copy",
                                "from": "$1",
                                "to": "$2"
                              }
                            }
                          ]
                        },
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "set",
                              "title": "Set",
                              "markdownDescription": "Write a fixed value."
                            },
                            "value": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "boolean"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "$ref": "#/$defs/__schema6"
                                  }
                                },
                                {
                                  "type": "object",
                                  "propertyNames": {
                                    "type": "string"
                                  },
                                  "additionalProperties": {
                                    "$ref": "#/$defs/__schema7"
                                  }
                                }
                              ],
                              "title": "Value",
                              "markdownDescription": "The value to write. Strings, numbers, booleans, arrays and objects are allowed."
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "domain_resolver",
                                "multiplex.protocol",
                                "packet_encoding",
                                "tcp_fast_open",
                                "tls.insecure",
                                "tls.utls.fingerprint"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "value",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Set a fixed value",
                          "markdownDescription": "Writes a literal value into the generated config, creating the key if it is missing.\n\n```json\n{\n  \"op\": \"set\",\n  \"to\": \"tls.utls.fingerprint\",\n  \"value\": \"chrome\"\n}\n```",
                          "defaultSnippets": [
                            {
                              "label": "set",
                              "description": "Write a fixed value",
                              "body": {
                                "op": "set",
                                "to": "$1",
                                "value": "$2"
                              }
                            }
                          ]
                        },
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "unset",
                              "title": "Unset",
                              "markdownDescription": "Remove a field."
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "domain_resolver",
                                "multiplex.protocol",
                                "packet_encoding",
                                "tcp_fast_open",
                                "tls.insecure",
                                "tls.utls.fingerprint"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Remove a field",
                          "markdownDescription": "Removes a field the generator produced by itself.\n\n```json\n{\n  \"op\": \"unset\",\n  \"to\": \"multiplex\"\n}\n```\n\n> Only the field itself is removed. A parent object left empty stays in the config as `{}`.",
                          "defaultSnippets": [
                            {
                              "label": "unset",
                              "description": "Remove a field",
                              "body": {
                                "op": "unset",
                                "to": "$1"
                              }
                            }
                          ]
                        }
                      ],
                      "title": "Operation",
                      "markdownDescription": "Operations run one after another, in the order they are listed.\n\nA later operation sees what the previous ones wrote, so an `unset` can remove a key an earlier `set` added."
                    }
                  }
                },
                "additionalProperties": false,
                "title": "Host Mapper",
                "markdownDescription": "Rewrites the config generated for this host, per client type.\n\nOperations run **after** the generator has finished, so they can change or remove anything it produced.\n\nThe source for `copy` is the raw inbound of the config profile this host belongs to, or the host itself when the path starts with `$host.`.\n\n> `to` is never checked against the target client. A misspelled key is written exactly like a real one."
              },
              "internalSquads": {
                "type": "object",
                "properties": {
                  "mode": {
                    "type": "string",
                    "enum": [
                      "EXCLUDE",
                      "ALLOW_ONLY"
                    ]
                  },
                  "squads": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    }
                  }
                },
                "required": [
                  "mode",
                  "squads"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "uuid",
              "viewPosition",
              "remark",
              "address",
              "port",
              "path",
              "sni",
              "host",
              "alpn",
              "fingerprint",
              "isDisabled",
              "securityLayer",
              "xhttpExtraParams",
              "muxParams",
              "sockoptParams",
              "finalMask",
              "inbound",
              "serverDescription",
              "tags",
              "isHidden",
              "overrideSniFromAddress",
              "keepSniBlank",
              "vlessRouteId",
              "pinnedPeerCertSha256",
              "verifyPeerCertByName",
              "shuffleHost",
              "mihomoX25519",
              "mihomoIpVersion",
              "nodes",
              "xrayJsonTemplateUuid",
              "excludeFromSubscriptionTypes",
              "mapper",
              "internalSquads"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false,
        "$defs": {
          "__schema0": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema0"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema0"
                }
              }
            ]
          },
          "__schema1": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema1"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema1"
                }
              }
            ]
          },
          "__schema2": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema2"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema2"
                }
              }
            ]
          },
          "__schema3": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema3"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema3"
                }
              }
            ]
          },
          "__schema4": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema4"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema4"
                }
              }
            ]
          },
          "__schema5": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema5"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema5"
                }
              }
            ]
          },
          "__schema6": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema6"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema6"
                }
              }
            ]
          },
          "__schema7": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema7"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema7"
                }
              }
            ]
          }
        }
      }
    }
  }
}
PATCH/api/hostsUpdate a host
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "inbound": {
            "type": "object",
            "properties": {
              "configProfileUuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "configProfileInboundUuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              }
            },
            "required": [
              "configProfileUuid",
              "configProfileInboundUuid"
            ]
          },
          "remark": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          },
          "address": {
            "type": "string"
          },
          "port": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "path": {
            "type": [
              "string",
              "null"
            ]
          },
          "sni": {
            "type": [
              "string",
              "null"
            ]
          },
          "host": {
            "type": [
              "string",
              "null"
            ]
          },
          "alpn": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "h3",
                  "h2",
                  "http/1.1",
                  "h2,http/1.1",
                  "h3,h2,http/1.1",
                  "h3,h2"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "fingerprint": {
            "type": [
              "string",
              "null"
            ]
          },
          "isDisabled": {
            "type": "boolean"
          },
          "securityLayer": {
            "type": "string",
            "enum": [
              "DEFAULT",
              "TLS",
              "NONE"
            ]
          },
          "xhttpExtraParams": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ]
          },
          "muxParams": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ]
          },
          "sockoptParams": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ]
          },
          "finalMask": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ]
          },
          "serverDescription": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 30
              },
              {
                "type": "null"
              }
            ]
          },
          "tags": {
            "maxItems": 10,
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 36,
              "pattern": "^[A-Z0-9_:]+$"
            }
          },
          "isHidden": {
            "type": "boolean"
          },
          "overrideSniFromAddress": {
            "type": "boolean"
          },
          "keepSniBlank": {
            "type": "boolean"
          },
          "vlessRouteId": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 65535
              },
              {
                "type": "null"
              }
            ]
          },
          "pinnedPeerCertSha256": {
            "type": [
              "string",
              "null"
            ]
          },
          "verifyPeerCertByName": {
            "type": [
              "string",
              "null"
            ]
          },
          "shuffleHost": {
            "type": "boolean"
          },
          "mihomoX25519": {
            "type": "boolean"
          },
          "mihomoIpVersion": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "dual",
                  "ipv4",
                  "ipv6",
                  "ipv4-prefer",
                  "ipv6-prefer"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "nodes": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            }
          },
          "xrayJsonTemplateUuid": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              {
                "type": "null"
              }
            ]
          },
          "excludeFromSubscriptionTypes": {
            "description": "Optional. Subscription types from which the host will be excluded from.",
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "XRAY_JSON",
                "XRAY_BASE64",
                "MIHOMO",
                "STASH",
                "CLASH",
                "SINGBOX"
              ]
            }
          },
          "mapper": {
            "type": "object",
            "properties": {
              "xrayJson": {
                "title": "Xray JSON",
                "markdownDescription": "Operations applied to the **outbound** generated for this host in the Xray JSON subscription. Paths are counted from the root of the outbound.\n\n```json\n[\n  {\n    \"op\": \"copy\",\n    \"from\": \"streamSettings.tlsSettings.cipherSuites\",\n    \"to\": \"streamSettings.tlsSettings.cipherSuites\"\n  },\n  {\n    \"op\": \"unset\",\n    \"to\": \"mux\"\n  }\n]\n```",
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "type": "object",
                      "properties": {
                        "op": {
                          "type": "string",
                          "const": "copy",
                          "title": "Copy",
                          "markdownDescription": "Take a value from the raw inbound."
                        },
                        "from": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Source path",
                          "markdownDescription": "Dot-separated path inside the **raw inbound** of the config profile this host belongs to. Array items are addressed by index.\n\nWith a `$host.` prefix the value is read from the **host** itself, after overrides have been resolved – `$host.securityOptions.serverName` holds the SNI that actually went into the config.\n\nOnly a part of the host is readable. Each entry below also opens everything nested under it:\n\n`address`, `port`, `finalRemark`, `protocol`, `transport`, `security`, `protocolOptions`, `transportOptions`, `securityOptions`, `mux`, `streamOverrides.finalMask`, `streamOverrides.sockopt`, `clientOverrides.serverDescription`, `metadata.remark`, `metadata.tags`, `metadata.inboundTag`\n\n> If the path resolves to nothing – or points outside the list above – the operation is skipped and the target key is **not** created.",
                          "examples": [
                            "streamSettings.tlsSettings.cipherSuites",
                            "streamSettings.tlsSettings.alpn",
                            "streamSettings.realitySettings.serverNames.0",
                            "$host.address",
                            "$host.securityOptions.serverName",
                            "$host.transportOptions.path",
                            "$host.mux.smux"
                          ]
                        },
                        "to": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Target path",
                          "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                          "examples": [
                            "streamSettings.tlsSettings.enableSessionResumption",
                            "streamSettings.tlsSettings.cipherSuites"
                          ]
                        }
                      },
                      "required": [
                        "op",
                        "from",
                        "to"
                      ],
                      "title": "Copy from the inbound",
                      "markdownDescription": "Reads a value from the raw inbound and writes it into the generated config.\n\n```json\n{\n  \"op\": \"copy\",\n  \"from\": \"streamSettings.tlsSettings.cipherSuites\",\n  \"to\": \"streamSettings.tlsSettings.cipherSuites\"\n}\n```",
                      "defaultSnippets": [
                        {
                          "label": "copy",
                          "description": "Copy a value from the raw inbound",
                          "body": {
                            "op": "copy",
                            "from": "$1",
                            "to": "$2"
                          }
                        }
                      ]
                    },
                    {
                      "type": "object",
                      "properties": {
                        "op": {
                          "type": "string",
                          "const": "set",
                          "title": "Set",
                          "markdownDescription": "Write a fixed value."
                        },
                        "value": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "number"
                            },
                            {
                              "type": "boolean"
                            },
                            {
                              "type": "array",
                              "items": {
                                "$ref": "#/$defs/__schema0"
                              }
                            },
                            {
                              "type": "object",
                              "propertyNames": {
                                "type": "string"
                              },
                              "additionalProperties": {
                                "$ref": "#/$defs/__schema1"
                              }
                            }
                          ],
                          "title": "Value",
                          "markdownDescription": "The value to write. Strings, numbers, booleans, arrays and objects are allowed."
                        },
                        "to": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Target path",
                          "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                          "examples": [
                            "streamSettings.tlsSettings.enableSessionResumption",
                            "streamSettings.tlsSettings.cipherSuites"
                          ]
                        }
                      },
                      "required": [
                        "op",
                        "value",
                        "to"
                      ],
                      "title": "Set a fixed value",
                      "markdownDescription": "Writes a literal value into the generated config, creating the key if it is missing.\n\n```json\n{\n  \"op\": \"set\",\n  \"to\": \"streamSettings.tlsSettings.enableSessionResumption\",\n  \"value\": true\n}\n```",
                      "defaultSnippets": [
                        {
                          "label": "set",
                          "description": "Write a fixed value",
                          "body": {
                            "op": "set",
                            "to": "$1",
                            "value": "$2"
                          }
                        }
                      ]
                    },
                    {
                      "type": "object",
                      "properties": {
                        "op": {
                          "type": "string",
                          "const": "unset",
                          "title": "Unset",
                          "markdownDescription": "Remove a field."
                        },
                        "to": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Target path",
                          "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                          "examples": [
                            "streamSettings.tlsSettings.enableSessionResumption",
                            "streamSettings.tlsSettings.cipherSuites"
                          ]
                        }
                      },
                      "required": [
                        "op",
                        "to"
                      ],
                      "title": "Remove a field",
                      "markdownDescription": "Removes a field the generator produced by itself.\n\n```json\n{\n  \"op\": \"unset\",\n  \"to\": \"mux\"\n}\n```\n\n> Only the field itself is removed. A parent object left empty stays in the config as `{}`.",
                      "defaultSnippets": [
                        {
                          "label": "unset",
                          "description": "Remove a field",
                          "body": {
                            "op": "unset",
                            "to": "$1"
                          }
                        }
                      ]
                    }
                  ],
                  "title": "Operation",
                  "markdownDescription": "Operations run one after another, in the order they are listed.\n\nA later operation sees what the previous ones wrote, so an `unset` can remove a key an earlier `set` added."
                }
              },
              "mihomo": {
                "title": "Mihomo",
                "markdownDescription": "Operations applied to the **proxy node** generated for this host in the Mihomo subscription.\n\nPaths are counted from the root of the node, where Mihomo keys are written in kebab-case.\n\n```json\n[\n  {\n    \"op\": \"set\",\n    \"to\": \"ip-version\",\n    \"value\": \"ipv4\"\n  }\n]\n```",
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "type": "object",
                      "properties": {
                        "op": {
                          "type": "string",
                          "const": "copy",
                          "title": "Copy",
                          "markdownDescription": "Take a value from the raw inbound."
                        },
                        "from": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Source path",
                          "markdownDescription": "Dot-separated path inside the **raw inbound** of the config profile this host belongs to. Array items are addressed by index.\n\nWith a `$host.` prefix the value is read from the **host** itself, after overrides have been resolved – `$host.securityOptions.serverName` holds the SNI that actually went into the config.\n\nOnly a part of the host is readable. Each entry below also opens everything nested under it:\n\n`address`, `port`, `finalRemark`, `protocol`, `transport`, `security`, `protocolOptions`, `transportOptions`, `securityOptions`, `mux`, `streamOverrides.finalMask`, `streamOverrides.sockopt`, `clientOverrides.serverDescription`, `metadata.remark`, `metadata.tags`, `metadata.inboundTag`\n\n> If the path resolves to nothing – or points outside the list above – the operation is skipped and the target key is **not** created.",
                          "examples": [
                            "streamSettings.tlsSettings.cipherSuites",
                            "streamSettings.tlsSettings.alpn",
                            "streamSettings.realitySettings.serverNames.0",
                            "$host.address",
                            "$host.securityOptions.serverName",
                            "$host.transportOptions.path",
                            "$host.mux.smux"
                          ]
                        },
                        "to": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Target path",
                          "markdownDescription": "Dot-separated path inside the generated **proxy node**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                          "examples": [
                            "ip-version",
                            "client-fingerprint",
                            "tfo",
                            "reality-opts.support-x25519mlkem768"
                          ]
                        }
                      },
                      "required": [
                        "op",
                        "from",
                        "to"
                      ],
                      "title": "Copy from the inbound",
                      "markdownDescription": "Reads a value from the raw inbound and writes it into the generated config.\n\n```json\n{\n  \"op\": \"copy\",\n  \"from\": \"streamSettings.realitySettings.serverNames.0\",\n  \"to\": \"servername\"\n}\n```",
                      "defaultSnippets": [
                        {
                          "label": "copy",
                          "description": "Copy a value from the raw inbound",
                          "body": {
                            "op": "copy",
                            "from": "$1",
                            "to": "$2"
                          }
                        }
                      ]
                    },
                    {
                      "type": "object",
                      "properties": {
                        "op": {
                          "type": "string",
                          "const": "set",
                          "title": "Set",
                          "markdownDescription": "Write a fixed value."
                        },
                        "value": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "number"
                            },
                            {
                              "type": "boolean"
                            },
                            {
                              "type": "array",
                              "items": {
                                "$ref": "#/$defs/__schema2"
                              }
                            },
                            {
                              "type": "object",
                              "propertyNames": {
                                "type": "string"
                              },
                              "additionalProperties": {
                                "$ref": "#/$defs/__schema3"
                              }
                            }
                          ],
                          "title": "Value",
                          "markdownDescription": "The value to write. Strings, numbers, booleans, arrays and objects are allowed."
                        },
                        "to": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Target path",
                          "markdownDescription": "Dot-separated path inside the generated **proxy node**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                          "examples": [
                            "ip-version",
                            "client-fingerprint",
                            "tfo",
                            "reality-opts.support-x25519mlkem768"
                          ]
                        }
                      },
                      "required": [
                        "op",
                        "value",
                        "to"
                      ],
                      "title": "Set a fixed value",
                      "markdownDescription": "Writes a literal value into the generated config, creating the key if it is missing.\n\n```json\n{\n  \"op\": \"set\",\n  \"to\": \"reality-opts.support-x25519mlkem768\",\n  \"value\": true\n}\n```",
                      "defaultSnippets": [
                        {
                          "label": "set",
                          "description": "Write a fixed value",
                          "body": {
                            "op": "set",
                            "to": "$1",
                            "value": "$2"
                          }
                        }
                      ]
                    },
                    {
                      "type": "object",
                      "properties": {
                        "op": {
                          "type": "string",
                          "const": "unset",
                          "title": "Unset",
                          "markdownDescription": "Remove a field."
                        },
                        "to": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Target path",
                          "markdownDescription": "Dot-separated path inside the generated **proxy node**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                          "examples": [
                            "ip-version",
                            "client-fingerprint",
                            "tfo",
                            "reality-opts.support-x25519mlkem768"
                          ]
                        }
                      },
                      "required": [
                        "op",
                        "to"
                      ],
                      "title": "Remove a field",
                      "markdownDescription": "Removes a field the generator produced by itself.\n\n```json\n{\n  \"op\": \"unset\",\n  \"to\": \"smux\"\n}\n```\n\n> Only the field itself is removed. A parent object left empty stays in the config as `{}`.",
                      "defaultSnippets": [
                        {
                          "label": "unset",
                          "description": "Remove a field",
                          "body": {
                            "op": "unset",
                            "to": "$1"
                          }
                        }
                      ]
                    }
                  ],
                  "title": "Operation",
                  "markdownDescription": "Operations run one after another, in the order they are listed.\n\nA later operation sees what the previous ones wrote, so an `unset` can remove a key an earlier `set` added."
                }
              },
              "base64": {
                "title": "Base64",
                "markdownDescription": "Operations applied to the share link generated for this host in the Base64 subscription.\n\n`to` is a plain query parameter name, not a path – dots carry no meaning here.\n\nWith a `$link.` prefix the operation rewrites the link itself instead of its query string. Writable parts: `$link.address`, `$link.port`, `$link.password`, `$link.remark`, and `$link.method` for Shadowsocks. `$link.password` is the credential of the protocol.\n\n> A value that cannot make a valid link – an empty address, a port outside 1-65535 – is ignored, and the generated one is kept.\n\n```json\n[\n  {\n    \"op\": \"set\",\n    \"to\": \"fp\",\n    \"value\": \"chrome\"\n  },\n  {\n    \"op\": \"unset\",\n    \"to\": \"fm\"\n  },\n  {\n    \"op\": \"set\",\n    \"to\": \"$link.port\",\n    \"value\": 2053\n  },\n  {\n    \"op\": \"copy\",\n    \"from\": \"$host.securityOptions.serverName\",\n    \"to\": \"$link.address\"\n  }\n]\n```",
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "type": "object",
                      "properties": {
                        "op": {
                          "type": "string",
                          "const": "copy",
                          "title": "Copy",
                          "markdownDescription": "Take a value from the raw inbound."
                        },
                        "from": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Source path",
                          "markdownDescription": "Dot-separated path inside the **raw inbound** of the config profile this host belongs to. Array items are addressed by index.\n\nWith a `$host.` prefix the value is read from the **host** itself, after overrides have been resolved – `$host.securityOptions.serverName` holds the SNI that actually went into the config.\n\nOnly a part of the host is readable. Each entry below also opens everything nested under it:\n\n`address`, `port`, `finalRemark`, `protocol`, `transport`, `security`, `protocolOptions`, `transportOptions`, `securityOptions`, `mux`, `streamOverrides.finalMask`, `streamOverrides.sockopt`, `clientOverrides.serverDescription`, `metadata.remark`, `metadata.tags`, `metadata.inboundTag`\n\n> If the path resolves to nothing – or points outside the list above – the operation is skipped and the target key is **not** created.",
                          "examples": [
                            "streamSettings.tlsSettings.cipherSuites",
                            "streamSettings.tlsSettings.alpn",
                            "streamSettings.realitySettings.serverNames.0",
                            "$host.address",
                            "$host.securityOptions.serverName",
                            "$host.transportOptions.path",
                            "$host.mux.smux"
                          ]
                        },
                        "to": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Target path",
                          "markdownDescription": "Dot-separated path inside the query string of the generated **share link**, or the link itself with a `$link.` prefix, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                          "examples": [
                            "$link.address",
                            "$link.port",
                            "$link.password",
                            "$link.remark",
                            "$link.method",
                            "alpn",
                            "authority",
                            "cs",
                            "encryption",
                            "extra",
                            "flow",
                            "fm",
                            "fp",
                            "headerType",
                            "heartbeatPeriod",
                            "host",
                            "mode",
                            "mtu",
                            "obfs",
                            "obfs-password",
                            "path",
                            "pbk",
                            "pcs",
                            "pinSHA256",
                            "pqv",
                            "security",
                            "serviceName",
                            "sid",
                            "sni",
                            "spx",
                            "tti",
                            "type",
                            "vcn"
                          ]
                        }
                      },
                      "required": [
                        "op",
                        "from",
                        "to"
                      ],
                      "title": "Copy from the inbound",
                      "markdownDescription": "Reads a value from the raw inbound and writes it into the generated config.\n\n```json\n{\n  \"op\": \"copy\",\n  \"from\": \"streamSettings.realitySettings.serverNames.0\",\n  \"to\": \"sni\"\n}\n```",
                      "defaultSnippets": [
                        {
                          "label": "copy",
                          "description": "Copy a value from the raw inbound",
                          "body": {
                            "op": "copy",
                            "from": "$1",
                            "to": "$2"
                          }
                        }
                      ]
                    },
                    {
                      "type": "object",
                      "properties": {
                        "op": {
                          "type": "string",
                          "const": "set",
                          "title": "Set",
                          "markdownDescription": "Write a fixed value."
                        },
                        "value": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "number"
                            },
                            {
                              "type": "boolean"
                            },
                            {
                              "type": "array",
                              "items": {
                                "$ref": "#/$defs/__schema4"
                              }
                            },
                            {
                              "type": "object",
                              "propertyNames": {
                                "type": "string"
                              },
                              "additionalProperties": {
                                "$ref": "#/$defs/__schema5"
                              }
                            }
                          ],
                          "title": "Value",
                          "markdownDescription": "The value to write. Strings, numbers, booleans, arrays and objects are allowed."
                        },
                        "to": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Target path",
                          "markdownDescription": "Dot-separated path inside the query string of the generated **share link**, or the link itself with a `$link.` prefix, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                          "examples": [
                            "$link.address",
                            "$link.port",
                            "$link.password",
                            "$link.remark",
                            "$link.method",
                            "alpn",
                            "authority",
                            "cs",
                            "encryption",
                            "extra",
                            "flow",
                            "fm",
                            "fp",
                            "headerType",
                            "heartbeatPeriod",
                            "host",
                            "mode",
                            "mtu",
                            "obfs",
                            "obfs-password",
                            "path",
                            "pbk",
                            "pcs",
                            "pinSHA256",
                            "pqv",
                            "security",
                            "serviceName",
                            "sid",
                            "sni",
                            "spx",
                            "tti",
                            "type",
                            "vcn"
                          ]
                        }
                      },
                      "required": [
                        "op",
                        "value",
                        "to"
                      ],
                      "title": "Set a fixed value",
                      "markdownDescription": "Writes a literal value into the generated config, creating the key if it is missing.\n\n```json\n{\n  \"op\": \"set\",\n  \"to\": \"fp\",\n  \"value\": \"chrome\"\n}\n```",
                      "defaultSnippets": [
                        {
                          "label": "set",
                          "description": "Write a fixed value",
                          "body": {
                            "op": "set",
                            "to": "$1",
                            "value": "$2"
                          }
                        }
                      ]
                    },
                    {
                      "type": "object",
                      "properties": {
                        "op": {
                          "type": "string",
                          "const": "unset",
                          "title": "Unset",
                          "markdownDescription": "Remove a field."
                        },
                        "to": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Target path",
                          "markdownDescription": "Dot-separated path inside the query string of the generated **share link**, or the link itself with a `$link.` prefix, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                          "examples": [
                            "$link.address",
                            "$link.port",
                            "$link.password",
                            "$link.remark",
                            "$link.method",
                            "alpn",
                            "authority",
                            "cs",
                            "encryption",
                            "extra",
                            "flow",
                            "fm",
                            "fp",
                            "headerType",
                            "heartbeatPeriod",
                            "host",
                            "mode",
                            "mtu",
                            "obfs",
                            "obfs-password",
                            "path",
                            "pbk",
                            "pcs",
                            "pinSHA256",
                            "pqv",
                            "security",
                            "serviceName",
                            "sid",
                            "sni",
                            "spx",
                            "tti",
                            "type",
                            "vcn"
                          ]
                        }
                      },
                      "required": [
                        "op",
                        "to"
                      ],
                      "title": "Remove a field",
                      "markdownDescription": "Removes a field the generator produced by itself.\n\n```json\n{\n  \"op\": \"unset\",\n  \"to\": \"fm\"\n}\n```\n\n> Only the field itself is removed. A parent object left empty stays in the config as `{}`.",
                      "defaultSnippets": [
                        {
                          "label": "unset",
                          "description": "Remove a field",
                          "body": {
                            "op": "unset",
                            "to": "$1"
                          }
                        }
                      ]
                    }
                  ],
                  "title": "Operation",
                  "markdownDescription": "Operations run one after another, in the order they are listed.\n\nA later operation sees what the previous ones wrote, so an `unset` can remove a key an earlier `set` added."
                }
              },
              "singbox": {
                "title": "sing-box",
                "markdownDescription": "Operations applied to the **outbound** generated for this host in the sing-box subscription. Paths are counted from the root of the outbound.\n\nsing-box keys are written in snake_case, and the outbound of a Hysteria2 host has a shape of its own.\n\n```json\n[\n  {\n    \"op\": \"set\",\n    \"to\": \"tls.utls.fingerprint\",\n    \"value\": \"chrome\"\n  },\n  {\n    \"op\": \"unset\",\n    \"to\": \"multiplex\"\n  }\n]\n```",
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "type": "object",
                      "properties": {
                        "op": {
                          "type": "string",
                          "const": "copy",
                          "title": "Copy",
                          "markdownDescription": "Take a value from the raw inbound."
                        },
                        "from": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Source path",
                          "markdownDescription": "Dot-separated path inside the **raw inbound** of the config profile this host belongs to. Array items are addressed by index.\n\nWith a `$host.` prefix the value is read from the **host** itself, after overrides have been resolved – `$host.securityOptions.serverName` holds the SNI that actually went into the config.\n\nOnly a part of the host is readable. Each entry below also opens everything nested under it:\n\n`address`, `port`, `finalRemark`, `protocol`, `transport`, `security`, `protocolOptions`, `transportOptions`, `securityOptions`, `mux`, `streamOverrides.finalMask`, `streamOverrides.sockopt`, `clientOverrides.serverDescription`, `metadata.remark`, `metadata.tags`, `metadata.inboundTag`\n\n> If the path resolves to nothing – or points outside the list above – the operation is skipped and the target key is **not** created.",
                          "examples": [
                            "streamSettings.tlsSettings.cipherSuites",
                            "streamSettings.tlsSettings.alpn",
                            "streamSettings.realitySettings.serverNames.0",
                            "$host.address",
                            "$host.securityOptions.serverName",
                            "$host.transportOptions.path",
                            "$host.mux.smux"
                          ]
                        },
                        "to": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Target path",
                          "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                          "examples": [
                            "domain_resolver",
                            "multiplex.protocol",
                            "packet_encoding",
                            "tcp_fast_open",
                            "tls.insecure",
                            "tls.utls.fingerprint"
                          ]
                        }
                      },
                      "required": [
                        "op",
                        "from",
                        "to"
                      ],
                      "title": "Copy from the inbound",
                      "markdownDescription": "Reads a value from the raw inbound and writes it into the generated config.\n\n```json\n{\n  \"op\": \"copy\",\n  \"from\": \"streamSettings.realitySettings.serverNames.0\",\n  \"to\": \"tls.server_name\"\n}\n```",
                      "defaultSnippets": [
                        {
                          "label": "copy",
                          "description": "Copy a value from the raw inbound",
                          "body": {
                            "op": "copy",
                            "from": "$1",
                            "to": "$2"
                          }
                        }
                      ]
                    },
                    {
                      "type": "object",
                      "properties": {
                        "op": {
                          "type": "string",
                          "const": "set",
                          "title": "Set",
                          "markdownDescription": "Write a fixed value."
                        },
                        "value": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "number"
                            },
                            {
                              "type": "boolean"
                            },
                            {
                              "type": "array",
                              "items": {
                                "$ref": "#/$defs/__schema6"
                              }
                            },
                            {
                              "type": "object",
                              "propertyNames": {
                                "type": "string"
                              },
                              "additionalProperties": {
                                "$ref": "#/$defs/__schema7"
                              }
                            }
                          ],
                          "title": "Value",
                          "markdownDescription": "The value to write. Strings, numbers, booleans, arrays and objects are allowed."
                        },
                        "to": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Target path",
                          "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                          "examples": [
                            "domain_resolver",
                            "multiplex.protocol",
                            "packet_encoding",
                            "tcp_fast_open",
                            "tls.insecure",
                            "tls.utls.fingerprint"
                          ]
                        }
                      },
                      "required": [
                        "op",
                        "value",
                        "to"
                      ],
                      "title": "Set a fixed value",
                      "markdownDescription": "Writes a literal value into the generated config, creating the key if it is missing.\n\n```json\n{\n  \"op\": \"set\",\n  \"to\": \"tls.utls.fingerprint\",\n  \"value\": \"chrome\"\n}\n```",
                      "defaultSnippets": [
                        {
                          "label": "set",
                          "description": "Write a fixed value",
                          "body": {
                            "op": "set",
                            "to": "$1",
                            "value": "$2"
                          }
                        }
                      ]
                    },
                    {
                      "type": "object",
                      "properties": {
                        "op": {
                          "type": "string",
                          "const": "unset",
                          "title": "Unset",
                          "markdownDescription": "Remove a field."
                        },
                        "to": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 512,
                          "title": "Target path",
                          "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                          "examples": [
                            "domain_resolver",
                            "multiplex.protocol",
                            "packet_encoding",
                            "tcp_fast_open",
                            "tls.insecure",
                            "tls.utls.fingerprint"
                          ]
                        }
                      },
                      "required": [
                        "op",
                        "to"
                      ],
                      "title": "Remove a field",
                      "markdownDescription": "Removes a field the generator produced by itself.\n\n```json\n{\n  \"op\": \"unset\",\n  \"to\": \"multiplex\"\n}\n```\n\n> Only the field itself is removed. A parent object left empty stays in the config as `{}`.",
                      "defaultSnippets": [
                        {
                          "label": "unset",
                          "description": "Remove a field",
                          "body": {
                            "op": "unset",
                            "to": "$1"
                          }
                        }
                      ]
                    }
                  ],
                  "title": "Operation",
                  "markdownDescription": "Operations run one after another, in the order they are listed.\n\nA later operation sees what the previous ones wrote, so an `unset` can remove a key an earlier `set` added."
                }
              }
            },
            "title": "Host Mapper",
            "markdownDescription": "Rewrites the config generated for this host, per client type.\n\nOperations run **after** the generator has finished, so they can change or remove anything it produced.\n\nThe source for `copy` is the raw inbound of the config profile this host belongs to, or the host itself when the path starts with `$host.`.\n\n> `to` is never checked against the target client. A misspelled key is written exactly like a real one."
          },
          "internalSquads": {
            "type": "object",
            "properties": {
              "mode": {
                "type": "string",
                "enum": [
                  "EXCLUDE",
                  "ALLOW_ONLY"
                ]
              },
              "squads": {
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                }
              }
            },
            "required": [
              "mode",
              "squads"
            ]
          }
        },
        "required": [
          "uuid"
        ],
        "$defs": {
          "__schema0": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema0"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema0"
                }
              }
            ]
          },
          "__schema1": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema1"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema1"
                }
              }
            ]
          },
          "__schema2": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema2"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema2"
                }
              }
            ]
          },
          "__schema3": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema3"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema3"
                }
              }
            ]
          },
          "__schema4": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema4"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema4"
                }
              }
            ]
          },
          "__schema5": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema5"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema5"
                }
              }
            ]
          },
          "__schema6": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema6"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema6"
                }
              }
            ]
          },
          "__schema7": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema7"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema7"
                }
              }
            ]
          }
        }
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "viewPosition": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "remark": {
                "type": "string"
              },
              "address": {
                "type": "string"
              },
              "port": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "path": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "sni": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "host": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "alpn": {
                "anyOf": [
                  {
                    "type": "string",
                    "enum": [
                      "h3",
                      "h2",
                      "http/1.1",
                      "h2,http/1.1",
                      "h3,h2,http/1.1",
                      "h3,h2"
                    ]
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "fingerprint": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "isDisabled": {
                "type": "boolean"
              },
              "securityLayer": {
                "default": "DEFAULT",
                "type": "string",
                "enum": [
                  "DEFAULT",
                  "TLS",
                  "NONE"
                ]
              },
              "xhttpExtraParams": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "muxParams": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "sockoptParams": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "finalMask": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "inbound": {
                "type": "object",
                "properties": {
                  "configProfileUuid": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "configProfileInboundUuid": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "configProfileUuid",
                  "configProfileInboundUuid"
                ],
                "additionalProperties": false
              },
              "serverDescription": {
                "anyOf": [
                  {
                    "type": "string",
                    "maxLength": 30
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "tags": {
                "default": [],
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "isHidden": {
                "default": false,
                "type": "boolean"
              },
              "overrideSniFromAddress": {
                "default": false,
                "type": "boolean"
              },
              "keepSniBlank": {
                "default": false,
                "type": "boolean"
              },
              "vlessRouteId": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 65535
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "pinnedPeerCertSha256": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "verifyPeerCertByName": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "shuffleHost": {
                "type": "boolean"
              },
              "mihomoX25519": {
                "type": "boolean"
              },
              "mihomoIpVersion": {
                "anyOf": [
                  {
                    "type": "string",
                    "enum": [
                      "dual",
                      "ipv4",
                      "ipv6",
                      "ipv4-prefer",
                      "ipv6-prefer"
                    ]
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "nodes": {
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                }
              },
              "xrayJsonTemplateUuid": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "excludeFromSubscriptionTypes": {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "XRAY_JSON",
                    "XRAY_BASE64",
                    "MIHOMO",
                    "STASH",
                    "CLASH",
                    "SINGBOX"
                  ]
                }
              },
              "mapper": {
                "type": "object",
                "properties": {
                  "xrayJson": {
                    "title": "Xray JSON",
                    "markdownDescription": "Operations applied to the **outbound** generated for this host in the Xray JSON subscription. Paths are counted from the root of the outbound.\n\n```json\n[\n  {\n    \"op\": \"copy\",\n    \"from\": \"streamSettings.tlsSettings.cipherSuites\",\n    \"to\": \"streamSettings.tlsSettings.cipherSuites\"\n  },\n  {\n    \"op\": \"unset\",\n    \"to\": \"mux\"\n  }\n]\n```",
                    "type": "array",
                    "items": {
                      "oneOf": [
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "copy",
                              "title": "Copy",
                              "markdownDescription": "Take a value from the raw inbound."
                            },
                            "from": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Source path",
                              "markdownDescription": "Dot-separated path inside the **raw inbound** of the config profile this host belongs to. Array items are addressed by index.\n\nWith a `$host.` prefix the value is read from the **host** itself, after overrides have been resolved – `$host.securityOptions.serverName` holds the SNI that actually went into the config.\n\nOnly a part of the host is readable. Each entry below also opens everything nested under it:\n\n`address`, `port`, `finalRemark`, `protocol`, `transport`, `security`, `protocolOptions`, `transportOptions`, `securityOptions`, `mux`, `streamOverrides.finalMask`, `streamOverrides.sockopt`, `clientOverrides.serverDescription`, `metadata.remark`, `metadata.tags`, `metadata.inboundTag`\n\n> If the path resolves to nothing – or points outside the list above – the operation is skipped and the target key is **not** created.",
                              "examples": [
                                "streamSettings.tlsSettings.cipherSuites",
                                "streamSettings.tlsSettings.alpn",
                                "streamSettings.realitySettings.serverNames.0",
                                "$host.address",
                                "$host.securityOptions.serverName",
                                "$host.transportOptions.path",
                                "$host.mux.smux"
                              ]
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "streamSettings.tlsSettings.enableSessionResumption",
                                "streamSettings.tlsSettings.cipherSuites"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "from",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Copy from the inbound",
                          "markdownDescription": "Reads a value from the raw inbound and writes it into the generated config.\n\n```json\n{\n  \"op\": \"copy\",\n  \"from\": \"streamSettings.tlsSettings.cipherSuites\",\n  \"to\": \"streamSettings.tlsSettings.cipherSuites\"\n}\n```",
                          "defaultSnippets": [
                            {
                              "label": "copy",
                              "description": "Copy a value from the raw inbound",
                              "body": {
                                "op": "copy",
                                "from": "$1",
                                "to": "$2"
                              }
                            }
                          ]
                        },
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "set",
                              "title": "Set",
                              "markdownDescription": "Write a fixed value."
                            },
                            "value": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "boolean"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "$ref": "#/$defs/__schema0"
                                  }
                                },
                                {
                                  "type": "object",
                                  "propertyNames": {
                                    "type": "string"
                                  },
                                  "additionalProperties": {
                                    "$ref": "#/$defs/__schema1"
                                  }
                                }
                              ],
                              "title": "Value",
                              "markdownDescription": "The value to write. Strings, numbers, booleans, arrays and objects are allowed."
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "streamSettings.tlsSettings.enableSessionResumption",
                                "streamSettings.tlsSettings.cipherSuites"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "value",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Set a fixed value",
                          "markdownDescription": "Writes a literal value into the generated config, creating the key if it is missing.\n\n```json\n{\n  \"op\": \"set\",\n  \"to\": \"streamSettings.tlsSettings.enableSessionResumption\",\n  \"value\": true\n}\n```",
                          "defaultSnippets": [
                            {
                              "label": "set",
                              "description": "Write a fixed value",
                              "body": {
                                "op": "set",
                                "to": "$1",
                                "value": "$2"
                              }
                            }
                          ]
                        },
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "unset",
                              "title": "Unset",
                              "markdownDescription": "Remove a field."
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "streamSettings.tlsSettings.enableSessionResumption",
                                "streamSettings.tlsSettings.cipherSuites"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Remove a field",
                          "markdownDescription": "Removes a field the generator produced by itself.\n\n```json\n{\n  \"op\": \"unset\",\n  \"to\": \"mux\"\n}\n```\n\n> Only the field itself is removed. A parent object left empty stays in the config as `{}`.",
                          "defaultSnippets": [
                            {
                              "label": "unset",
                              "description": "Remove a field",
                              "body": {
                                "op": "unset",
                                "to": "$1"
                              }
                            }
                          ]
                        }
                      ],
                      "title": "Operation",
                      "markdownDescription": "Operations run one after another, in the order they are listed.\n\nA later operation sees what the previous ones wrote, so an `unset` can remove a key an earlier `set` added."
                    }
                  },
                  "mihomo": {
                    "title": "Mihomo",
                    "markdownDescription": "Operations applied to the **proxy node** generated for this host in the Mihomo subscription.\n\nPaths are counted from the root of the node, where Mihomo keys are written in kebab-case.\n\n```json\n[\n  {\n    \"op\": \"set\",\n    \"to\": \"ip-version\",\n    \"value\": \"ipv4\"\n  }\n]\n```",
                    "type": "array",
                    "items": {
                      "oneOf": [
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "copy",
                              "title": "Copy",
                              "markdownDescription": "Take a value from the raw inbound."
                            },
                            "from": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Source path",
                              "markdownDescription": "Dot-separated path inside the **raw inbound** of the config profile this host belongs to. Array items are addressed by index.\n\nWith a `$host.` prefix the value is read from the **host** itself, after overrides have been resolved – `$host.securityOptions.serverName` holds the SNI that actually went into the config.\n\nOnly a part of the host is readable. Each entry below also opens everything nested under it:\n\n`address`, `port`, `finalRemark`, `protocol`, `transport`, `security`, `protocolOptions`, `transportOptions`, `securityOptions`, `mux`, `streamOverrides.finalMask`, `streamOverrides.sockopt`, `clientOverrides.serverDescription`, `metadata.remark`, `metadata.tags`, `metadata.inboundTag`\n\n> If the path resolves to nothing – or points outside the list above – the operation is skipped and the target key is **not** created.",
                              "examples": [
                                "streamSettings.tlsSettings.cipherSuites",
                                "streamSettings.tlsSettings.alpn",
                                "streamSettings.realitySettings.serverNames.0",
                                "$host.address",
                                "$host.securityOptions.serverName",
                                "$host.transportOptions.path",
                                "$host.mux.smux"
                              ]
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the generated **proxy node**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "ip-version",
                                "client-fingerprint",
                                "tfo",
                                "reality-opts.support-x25519mlkem768"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "from",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Copy from the inbound",
                          "markdownDescription": "Reads a value from the raw inbound and writes it into the generated config.\n\n```json\n{\n  \"op\": \"copy\",\n  \"from\": \"streamSettings.realitySettings.serverNames.0\",\n  \"to\": \"servername\"\n}\n```",
                          "defaultSnippets": [
                            {
                              "label": "copy",
                              "description": "Copy a value from the raw inbound",
                              "body": {
                                "op": "copy",
                                "from": "$1",
                                "to": "$2"
                              }
                            }
                          ]
                        },
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "set",
                              "title": "Set",
                              "markdownDescription": "Write a fixed value."
                            },
                            "value": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "boolean"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "$ref": "#/$defs/__schema2"
                                  }
                                },
                                {
                                  "type": "object",
                                  "propertyNames": {
                                    "type": "string"
                                  },
                                  "additionalProperties": {
                                    "$ref": "#/$defs/__schema3"
                                  }
                                }
                              ],
                              "title": "Value",
                              "markdownDescription": "The value to write. Strings, numbers, booleans, arrays and objects are allowed."
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the generated **proxy node**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "ip-version",
                                "client-fingerprint",
                                "tfo",
                                "reality-opts.support-x25519mlkem768"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "value",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Set a fixed value",
                          "markdownDescription": "Writes a literal value into the generated config, creating the key if it is missing.\n\n```json\n{\n  \"op\": \"set\",\n  \"to\": \"reality-opts.support-x25519mlkem768\",\n  \"value\": true\n}\n```",
                          "defaultSnippets": [
                            {
                              "label": "set",
                              "description": "Write a fixed value",
                              "body": {
                                "op": "set",
                                "to": "$1",
                                "value": "$2"
                              }
                            }
                          ]
                        },
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "unset",
                              "title": "Unset",
                              "markdownDescription": "Remove a field."
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the generated **proxy node**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "ip-version",
                                "client-fingerprint",
                                "tfo",
                                "reality-opts.support-x25519mlkem768"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Remove a field",
                          "markdownDescription": "Removes a field the generator produced by itself.\n\n```json\n{\n  \"op\": \"unset\",\n  \"to\": \"smux\"\n}\n```\n\n> Only the field itself is removed. A parent object left empty stays in the config as `{}`.",
                          "defaultSnippets": [
                            {
                              "label": "unset",
                              "description": "Remove a field",
                              "body": {
                                "op": "unset",
                                "to": "$1"
                              }
                            }
                          ]
                        }
                      ],
                      "title": "Operation",
                      "markdownDescription": "Operations run one after another, in the order they are listed.\n\nA later operation sees what the previous ones wrote, so an `unset` can remove a key an earlier `set` added."
                    }
                  },
                  "base64": {
                    "title": "Base64",
                    "markdownDescription": "Operations applied to the share link generated for this host in the Base64 subscription.\n\n`to` is a plain query parameter name, not a path – dots carry no meaning here.\n\nWith a `$link.` prefix the operation rewrites the link itself instead of its query string. Writable parts: `$link.address`, `$link.port`, `$link.password`, `$link.remark`, and `$link.method` for Shadowsocks. `$link.password` is the credential of the protocol.\n\n> A value that cannot make a valid link – an empty address, a port outside 1-65535 – is ignored, and the generated one is kept.\n\n```json\n[\n  {\n    \"op\": \"set\",\n    \"to\": \"fp\",\n    \"value\": \"chrome\"\n  },\n  {\n    \"op\": \"unset\",\n    \"to\": \"fm\"\n  },\n  {\n    \"op\": \"set\",\n    \"to\": \"$link.port\",\n    \"value\": 2053\n  },\n  {\n    \"op\": \"copy\",\n    \"from\": \"$host.securityOptions.serverName\",\n    \"to\": \"$link.address\"\n  }\n]\n```",
                    "type": "array",
                    "items": {
                      "oneOf": [
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "copy",
                              "title": "Copy",
                              "markdownDescription": "Take a value from the raw inbound."
                            },
                            "from": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Source path",
                              "markdownDescription": "Dot-separated path inside the **raw inbound** of the config profile this host belongs to. Array items are addressed by index.\n\nWith a `$host.` prefix the value is read from the **host** itself, after overrides have been resolved – `$host.securityOptions.serverName` holds the SNI that actually went into the config.\n\nOnly a part of the host is readable. Each entry below also opens everything nested under it:\n\n`address`, `port`, `finalRemark`, `protocol`, `transport`, `security`, `protocolOptions`, `transportOptions`, `securityOptions`, `mux`, `streamOverrides.finalMask`, `streamOverrides.sockopt`, `clientOverrides.serverDescription`, `metadata.remark`, `metadata.tags`, `metadata.inboundTag`\n\n> If the path resolves to nothing – or points outside the list above – the operation is skipped and the target key is **not** created.",
                              "examples": [
                                "streamSettings.tlsSettings.cipherSuites",
                                "streamSettings.tlsSettings.alpn",
                                "streamSettings.realitySettings.serverNames.0",
                                "$host.address",
                                "$host.securityOptions.serverName",
                                "$host.transportOptions.path",
                                "$host.mux.smux"
                              ]
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the query string of the generated **share link**, or the link itself with a `$link.` prefix, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "$link.address",
                                "$link.port",
                                "$link.password",
                                "$link.remark",
                                "$link.method",
                                "alpn",
                                "authority",
                                "cs",
                                "encryption",
                                "extra",
                                "flow",
                                "fm",
                                "fp",
                                "headerType",
                                "heartbeatPeriod",
                                "host",
                                "mode",
                                "mtu",
                                "obfs",
                                "obfs-password",
                                "path",
                                "pbk",
                                "pcs",
                                "pinSHA256",
                                "pqv",
                                "security",
                                "serviceName",
                                "sid",
                                "sni",
                                "spx",
                                "tti",
                                "type",
                                "vcn"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "from",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Copy from the inbound",
                          "markdownDescription": "Reads a value from the raw inbound and writes it into the generated config.\n\n```json\n{\n  \"op\": \"copy\",\n  \"from\": \"streamSettings.realitySettings.serverNames.0\",\n  \"to\": \"sni\"\n}\n```",
                          "defaultSnippets": [
                            {
                              "label": "copy",
                              "description": "Copy a value from the raw inbound",
                              "body": {
                                "op": "copy",
                                "from": "$1",
                                "to": "$2"
                              }
                            }
                          ]
                        },
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "set",
                              "title": "Set",
                              "markdownDescription": "Write a fixed value."
                            },
                            "value": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "boolean"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "$ref": "#/$defs/__schema4"
                                  }
                                },
                                {
                                  "type": "object",
                                  "propertyNames": {
                                    "type": "string"
                                  },
                                  "additionalProperties": {
                                    "$ref": "#/$defs/__schema5"
                                  }
                                }
                              ],
                              "title": "Value",
                              "markdownDescription": "The value to write. Strings, numbers, booleans, arrays and objects are allowed."
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the query string of the generated **share link**, or the link itself with a `$link.` prefix, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "$link.address",
                                "$link.port",
                                "$link.password",
                                "$link.remark",
                                "$link.method",
                                "alpn",
                                "authority",
                                "cs",
                                "encryption",
                                "extra",
                                "flow",
                                "fm",
                                "fp",
                                "headerType",
                                "heartbeatPeriod",
                                "host",
                                "mode",
                                "mtu",
                                "obfs",
                                "obfs-password",
                                "path",
                                "pbk",
                                "pcs",
                                "pinSHA256",
                                "pqv",
                                "security",
                                "serviceName",
                                "sid",
                                "sni",
                                "spx",
                                "tti",
                                "type",
                                "vcn"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "value",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Set a fixed value",
                          "markdownDescription": "Writes a literal value into the generated config, creating the key if it is missing.\n\n```json\n{\n  \"op\": \"set\",\n  \"to\": \"fp\",\n  \"value\": \"chrome\"\n}\n```",
                          "defaultSnippets": [
                            {
                              "label": "set",
                              "description": "Write a fixed value",
                              "body": {
                                "op": "set",
                                "to": "$1",
                                "value": "$2"
                              }
                            }
                          ]
                        },
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "unset",
                              "title": "Unset",
                              "markdownDescription": "Remove a field."
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the query string of the generated **share link**, or the link itself with a `$link.` prefix, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "$link.address",
                                "$link.port",
                                "$link.password",
                                "$link.remark",
                                "$link.method",
                                "alpn",
                                "authority",
                                "cs",
                                "encryption",
                                "extra",
                                "flow",
                                "fm",
                                "fp",
                                "headerType",
                                "heartbeatPeriod",
                                "host",
                                "mode",
                                "mtu",
                                "obfs",
                                "obfs-password",
                                "path",
                                "pbk",
                                "pcs",
                                "pinSHA256",
                                "pqv",
                                "security",
                                "serviceName",
                                "sid",
                                "sni",
                                "spx",
                                "tti",
                                "type",
                                "vcn"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Remove a field",
                          "markdownDescription": "Removes a field the generator produced by itself.\n\n```json\n{\n  \"op\": \"unset\",\n  \"to\": \"fm\"\n}\n```\n\n> Only the field itself is removed. A parent object left empty stays in the config as `{}`.",
                          "defaultSnippets": [
                            {
                              "label": "unset",
                              "description": "Remove a field",
                              "body": {
                                "op": "unset",
                                "to": "$1"
                              }
                            }
                          ]
                        }
                      ],
                      "title": "Operation",
                      "markdownDescription": "Operations run one after another, in the order they are listed.\n\nA later operation sees what the previous ones wrote, so an `unset` can remove a key an earlier `set` added."
                    }
                  },
                  "singbox": {
                    "title": "sing-box",
                    "markdownDescription": "Operations applied to the **outbound** generated for this host in the sing-box subscription. Paths are counted from the root of the outbound.\n\nsing-box keys are written in snake_case, and the outbound of a Hysteria2 host has a shape of its own.\n\n```json\n[\n  {\n    \"op\": \"set\",\n    \"to\": \"tls.utls.fingerprint\",\n    \"value\": \"chrome\"\n  },\n  {\n    \"op\": \"unset\",\n    \"to\": \"multiplex\"\n  }\n]\n```",
                    "type": "array",
                    "items": {
                      "oneOf": [
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "copy",
                              "title": "Copy",
                              "markdownDescription": "Take a value from the raw inbound."
                            },
                            "from": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Source path",
                              "markdownDescription": "Dot-separated path inside the **raw inbound** of the config profile this host belongs to. Array items are addressed by index.\n\nWith a `$host.` prefix the value is read from the **host** itself, after overrides have been resolved – `$host.securityOptions.serverName` holds the SNI that actually went into the config.\n\nOnly a part of the host is readable. Each entry below also opens everything nested under it:\n\n`address`, `port`, `finalRemark`, `protocol`, `transport`, `security`, `protocolOptions`, `transportOptions`, `securityOptions`, `mux`, `streamOverrides.finalMask`, `streamOverrides.sockopt`, `clientOverrides.serverDescription`, `metadata.remark`, `metadata.tags`, `metadata.inboundTag`\n\n> If the path resolves to nothing – or points outside the list above – the operation is skipped and the target key is **not** created.",
                              "examples": [
                                "streamSettings.tlsSettings.cipherSuites",
                                "streamSettings.tlsSettings.alpn",
                                "streamSettings.realitySettings.serverNames.0",
                                "$host.address",
                                "$host.securityOptions.serverName",
                                "$host.transportOptions.path",
                                "$host.mux.smux"
                              ]
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "domain_resolver",
                                "multiplex.protocol",
                                "packet_encoding",
                                "tcp_fast_open",
                                "tls.insecure",
                                "tls.utls.fingerprint"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "from",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Copy from the inbound",
                          "markdownDescription": "Reads a value from the raw inbound and writes it into the generated config.\n\n```json\n{\n  \"op\": \"copy\",\n  \"from\": \"streamSettings.realitySettings.serverNames.0\",\n  \"to\": \"tls.server_name\"\n}\n```",
                          "defaultSnippets": [
                            {
                              "label": "copy",
                              "description": "Copy a value from the raw inbound",
                              "body": {
                                "op": "copy",
                                "from": "$1",
                                "to": "$2"
                              }
                            }
                          ]
                        },
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "set",
                              "title": "Set",
                              "markdownDescription": "Write a fixed value."
                            },
                            "value": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "boolean"
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "$ref": "#/$defs/__schema6"
                                  }
                                },
                                {
                                  "type": "object",
                                  "propertyNames": {
                                    "type": "string"
                                  },
                                  "additionalProperties": {
                                    "$ref": "#/$defs/__schema7"
                                  }
                                }
                              ],
                              "title": "Value",
                              "markdownDescription": "The value to write. Strings, numbers, booleans, arrays and objects are allowed."
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "domain_resolver",
                                "multiplex.protocol",
                                "packet_encoding",
                                "tcp_fast_open",
                                "tls.insecure",
                                "tls.utls.fingerprint"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "value",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Set a fixed value",
                          "markdownDescription": "Writes a literal value into the generated config, creating the key if it is missing.\n\n```json\n{\n  \"op\": \"set\",\n  \"to\": \"tls.utls.fingerprint\",\n  \"value\": \"chrome\"\n}\n```",
                          "defaultSnippets": [
                            {
                              "label": "set",
                              "description": "Write a fixed value",
                              "body": {
                                "op": "set",
                                "to": "$1",
                                "value": "$2"
                              }
                            }
                          ]
                        },
                        {
                          "type": "object",
                          "properties": {
                            "op": {
                              "type": "string",
                              "const": "unset",
                              "title": "Unset",
                              "markdownDescription": "Remove a field."
                            },
                            "to": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512,
                              "title": "Target path",
                              "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                              "examples": [
                                "domain_resolver",
                                "multiplex.protocol",
                                "packet_encoding",
                                "tcp_fast_open",
                                "tls.insecure",
                                "tls.utls.fingerprint"
                              ]
                            }
                          },
                          "required": [
                            "op",
                            "to"
                          ],
                          "additionalProperties": false,
                          "title": "Remove a field",
                          "markdownDescription": "Removes a field the generator produced by itself.\n\n```json\n{\n  \"op\": \"unset\",\n  \"to\": \"multiplex\"\n}\n```\n\n> Only the field itself is removed. A parent object left empty stays in the config as `{}`.",
                          "defaultSnippets": [
                            {
                              "label": "unset",
                              "description": "Remove a field",
                              "body": {
                                "op": "unset",
                                "to": "$1"
                              }
                            }
                          ]
                        }
                      ],
                      "title": "Operation",
                      "markdownDescription": "Operations run one after another, in the order they are listed.\n\nA later operation sees what the previous ones wrote, so an `unset` can remove a key an earlier `set` added."
                    }
                  }
                },
                "additionalProperties": false,
                "title": "Host Mapper",
                "markdownDescription": "Rewrites the config generated for this host, per client type.\n\nOperations run **after** the generator has finished, so they can change or remove anything it produced.\n\nThe source for `copy` is the raw inbound of the config profile this host belongs to, or the host itself when the path starts with `$host.`.\n\n> `to` is never checked against the target client. A misspelled key is written exactly like a real one."
              },
              "internalSquads": {
                "type": "object",
                "properties": {
                  "mode": {
                    "type": "string",
                    "enum": [
                      "EXCLUDE",
                      "ALLOW_ONLY"
                    ]
                  },
                  "squads": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    }
                  }
                },
                "required": [
                  "mode",
                  "squads"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "uuid",
              "viewPosition",
              "remark",
              "address",
              "port",
              "path",
              "sni",
              "host",
              "alpn",
              "fingerprint",
              "isDisabled",
              "securityLayer",
              "xhttpExtraParams",
              "muxParams",
              "sockoptParams",
              "finalMask",
              "inbound",
              "serverDescription",
              "tags",
              "isHidden",
              "overrideSniFromAddress",
              "keepSniBlank",
              "vlessRouteId",
              "pinnedPeerCertSha256",
              "verifyPeerCertByName",
              "shuffleHost",
              "mihomoX25519",
              "mihomoIpVersion",
              "nodes",
              "xrayJsonTemplateUuid",
              "excludeFromSubscriptionTypes",
              "mapper",
              "internalSquads"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false,
        "$defs": {
          "__schema0": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema0"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema0"
                }
              }
            ]
          },
          "__schema1": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema1"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema1"
                }
              }
            ]
          },
          "__schema2": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema2"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema2"
                }
              }
            ]
          },
          "__schema3": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema3"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema3"
                }
              }
            ]
          },
          "__schema4": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema4"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema4"
                }
              }
            ]
          },
          "__schema5": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema5"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema5"
                }
              }
            ]
          },
          "__schema6": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema6"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema6"
                }
              }
            ]
          },
          "__schema7": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema7"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema7"
                }
              }
            ]
          }
        }
      }
    }
  }
}

hwid

GET/api/hwid/devices/{userId}Get user HWID devices
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "userId",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "total": {
                "type": "number"
              },
              "devices": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "hwid": {
                      "type": "string"
                    },
                    "userId": {
                      "type": "number"
                    },
                    "platform": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "osVersion": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "deviceModel": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "userAgent": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "requestIp": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "createdAt": {},
                    "updatedAt": {}
                  },
                  "required": [
                    "hwid",
                    "userId",
                    "platform",
                    "osVersion",
                    "deviceModel",
                    "userAgent",
                    "requestIp",
                    "createdAt",
                    "updatedAt"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "total",
              "devices"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/hwid/devices/delete-allDelete all user HWID devices
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "userId": {
            "type": "number"
          }
        },
        "required": [
          "userId"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "total": {
                "type": "number"
              },
              "devices": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "hwid": {
                      "type": "string"
                    },
                    "userId": {
                      "type": "number"
                    },
                    "platform": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "osVersion": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "deviceModel": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "userAgent": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "requestIp": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "createdAt": {},
                    "updatedAt": {}
                  },
                  "required": [
                    "hwid",
                    "userId",
                    "platform",
                    "osVersion",
                    "deviceModel",
                    "userAgent",
                    "requestIp",
                    "createdAt",
                    "updatedAt"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "total",
              "devices"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/hwid/devices/deleteDelete a user HWID device
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "userId": {
            "type": "number"
          },
          "hwid": {
            "type": "string"
          }
        },
        "required": [
          "userId",
          "hwid"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "total": {
                "type": "number"
              },
              "devices": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "hwid": {
                      "type": "string"
                    },
                    "userId": {
                      "type": "number"
                    },
                    "platform": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "osVersion": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "deviceModel": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "userAgent": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "requestIp": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "createdAt": {},
                    "updatedAt": {}
                  },
                  "required": [
                    "hwid",
                    "userId",
                    "platform",
                    "osVersion",
                    "deviceModel",
                    "userAgent",
                    "requestIp",
                    "createdAt",
                    "updatedAt"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "total",
              "devices"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/hwid/devices/statsGet HWID devices stats
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "byPlatform": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "platform": {
                      "type": "string"
                    },
                    "count": {
                      "type": "number"
                    },
                    "byApp": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "app": {
                            "type": "string"
                          },
                          "count": {
                            "type": "number"
                          }
                        },
                        "required": [
                          "app",
                          "count"
                        ],
                        "additionalProperties": false
                      }
                    }
                  },
                  "required": [
                    "platform",
                    "count",
                    "byApp"
                  ],
                  "additionalProperties": false
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "totalUniqueDevices": {
                    "type": "number"
                  },
                  "totalHwidDevices": {
                    "type": "number"
                  },
                  "averageHwidDevicesPerUser": {
                    "type": "number"
                  }
                },
                "required": [
                  "totalUniqueDevices",
                  "totalHwidDevices",
                  "averageHwidDevicesPerUser"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "byPlatform",
              "stats"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/hwid/devices/top-usersGet top users by HWID devices
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "start",
    "in": "query",
    "required": false,
    "schema": {
      "default": 0,
      "description": "Start index (offset) of the results to return, default is 0",
      "type": "number"
    }
  },
  {
    "name": "size",
    "in": "query",
    "required": false,
    "schema": {
      "default": 5,
      "type": "number",
      "minimum": 1,
      "maximum": 100,
      "description": "Number of results to return, no more than 100"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "users": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "number"
                    },
                    "username": {
                      "type": "string"
                    },
                    "devicesCount": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "id",
                    "username",
                    "devicesCount"
                  ],
                  "additionalProperties": false
                }
              },
              "total": {
                "type": "number"
              }
            },
            "required": [
              "users",
              "total"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/hwid/devicesGet HWID devices

Please note that the filters here are primarily intended for use by the frontend and rely on expensive operators such as LIKE under the hood. Misusing these filters may negatively impact the performance of your database.

Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "start",
    "in": "query",
    "required": false,
    "schema": {
      "default": 0,
      "description": "Start index (offset) of the results to return, default is 0",
      "type": "number"
    }
  },
  {
    "name": "size",
    "in": "query",
    "required": false,
    "schema": {
      "default": 25,
      "type": "number",
      "minimum": 1,
      "maximum": 1000,
      "description": "Number of results to return, no more than 1000"
    }
  },
  {
    "name": "filters",
    "in": "query",
    "required": false,
    "schema": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "value": {}
        },
        "required": [
          "id",
          "value"
        ]
      }
    }
  },
  {
    "name": "filterModes",
    "in": "query",
    "required": false,
    "schema": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "type": "string"
      }
    }
  },
  {
    "name": "globalFilterMode",
    "in": "query",
    "required": false,
    "schema": {
      "type": "string"
    }
  },
  {
    "name": "sorting",
    "in": "query",
    "required": false,
    "schema": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "desc": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "desc"
        ]
      }
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "devices": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "hwid": {
                      "type": "string"
                    },
                    "userId": {
                      "type": "number"
                    },
                    "platform": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "osVersion": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "deviceModel": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "userAgent": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "requestIp": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "createdAt": {},
                    "updatedAt": {}
                  },
                  "required": [
                    "hwid",
                    "userId",
                    "platform",
                    "osVersion",
                    "deviceModel",
                    "userAgent",
                    "requestIp",
                    "createdAt",
                    "updatedAt"
                  ],
                  "additionalProperties": false
                }
              },
              "total": {
                "type": "number"
              }
            },
            "required": [
              "devices",
              "total"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/hwid/devicesCreate a user HWID device
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "hwid": {
            "type": "string",
            "pattern": "^[a-zA-Z0-9=-]{10,64}$"
          },
          "userId": {
            "type": "number"
          },
          "platform": {
            "type": "string"
          },
          "osVersion": {
            "type": "string"
          },
          "deviceModel": {
            "type": "string"
          },
          "userAgent": {
            "type": "string"
          },
          "requestIp": {
            "type": "string"
          }
        },
        "required": [
          "hwid",
          "userId"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "total": {
                "type": "number"
              },
              "devices": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "hwid": {
                      "type": "string"
                    },
                    "userId": {
                      "type": "number"
                    },
                    "platform": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "osVersion": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "deviceModel": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "userAgent": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "requestIp": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "createdAt": {},
                    "updatedAt": {}
                  },
                  "required": [
                    "hwid",
                    "userId",
                    "platform",
                    "osVersion",
                    "deviceModel",
                    "userAgent",
                    "requestIp",
                    "createdAt",
                    "updatedAt"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "total",
              "devices"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}

infra-billing

DELETE/api/infra-billing/history/{uuid}Delete infra billing history
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success"
}
GET/api/infra-billing/historyGet infra billing history
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "start",
    "in": "query",
    "required": false,
    "schema": {
      "default": 0,
      "description": "Start index (offset) of the billing history records to return, default is 0",
      "type": "number"
    }
  },
  {
    "name": "size",
    "in": "query",
    "required": false,
    "schema": {
      "default": 50,
      "type": "number",
      "minimum": 1,
      "maximum": 500,
      "description": "Number of billing records to return, no more than 500"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "records": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "providerUuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "amount": {
                      "type": "number"
                    },
                    "billedAt": {},
                    "provider": {
                      "type": "object",
                      "properties": {
                        "uuid": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        "name": {
                          "type": "string"
                        },
                        "faviconLink": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "uuid",
                        "name",
                        "faviconLink"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "uuid",
                    "providerUuid",
                    "amount",
                    "billedAt",
                    "provider"
                  ],
                  "additionalProperties": false
                }
              },
              "total": {
                "type": "number"
              }
            },
            "required": [
              "records",
              "total"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/infra-billing/historyCreate infra billing history
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "providerUuid": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "amount": {
            "type": "number",
            "minimum": 0
          },
          "billedAt": {
            "description": "Billing date. Format: 2025-01-17T15:38:45.065Z",
            "type": "string",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d))|(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?)$"
          }
        },
        "required": [
          "providerUuid",
          "amount",
          "billedAt"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "records": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "providerUuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "amount": {
                      "type": "number"
                    },
                    "billedAt": {},
                    "provider": {
                      "type": "object",
                      "properties": {
                        "uuid": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        "name": {
                          "type": "string"
                        },
                        "faviconLink": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "uuid",
                        "name",
                        "faviconLink"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "uuid",
                    "providerUuid",
                    "amount",
                    "billedAt",
                    "provider"
                  ],
                  "additionalProperties": false
                }
              },
              "total": {
                "type": "number"
              }
            },
            "required": [
              "records",
              "total"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
DELETE/api/infra-billing/nodes/{uuid}Delete infra billing node
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success"
}
GET/api/infra-billing/nodesGet infra billing nodes
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "totalBillingNodes": {
                "type": "number"
              },
              "billingNodes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "nodeUuid": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "name": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "providerUuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "provider": {
                      "type": "object",
                      "properties": {
                        "uuid": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        "name": {
                          "type": "string"
                        },
                        "loginUrl": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "faviconLink": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "uuid",
                        "name",
                        "loginUrl",
                        "faviconLink"
                      ],
                      "additionalProperties": false
                    },
                    "node": {
                      "anyOf": [
                        {
                          "type": "object",
                          "properties": {
                            "uuid": {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                            },
                            "name": {
                              "type": "string"
                            },
                            "countryCode": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "uuid",
                            "name",
                            "countryCode"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "nextBillingAt": {},
                    "createdAt": {},
                    "updatedAt": {}
                  },
                  "required": [
                    "uuid",
                    "nodeUuid",
                    "name",
                    "providerUuid",
                    "provider",
                    "node",
                    "nextBillingAt",
                    "createdAt",
                    "updatedAt"
                  ],
                  "additionalProperties": false
                }
              },
              "availableBillingNodes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "name": {
                      "type": "string"
                    },
                    "countryCode": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "uuid",
                    "name",
                    "countryCode"
                  ],
                  "additionalProperties": false
                }
              },
              "totalAvailableBillingNodes": {
                "type": "number"
              },
              "stats": {
                "type": "object",
                "properties": {
                  "upcomingNodesCount": {
                    "type": "number"
                  },
                  "currentMonthPayments": {
                    "type": "number"
                  },
                  "totalSpent": {
                    "type": "number"
                  }
                },
                "required": [
                  "upcomingNodesCount",
                  "currentMonthPayments",
                  "totalSpent"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "totalBillingNodes",
              "billingNodes",
              "availableBillingNodes",
              "totalAvailableBillingNodes",
              "stats"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/infra-billing/nodesCreate infra billing node
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "providerUuid": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "nodeUuid": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              {
                "type": "null"
              }
            ]
          },
          "name": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 1,
                "maxLength": 255
              },
              {
                "type": "null"
              }
            ]
          },
          "nextBillingAt": {
            "description": "Next billing date. Format: 2025-01-17T15:38:45.065Z",
            "type": "string",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d))|(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?)$"
          }
        },
        "required": [
          "providerUuid",
          "nodeUuid",
          "name",
          "nextBillingAt"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "totalBillingNodes": {
                "type": "number"
              },
              "billingNodes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "nodeUuid": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "name": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "providerUuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "provider": {
                      "type": "object",
                      "properties": {
                        "uuid": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        "name": {
                          "type": "string"
                        },
                        "loginUrl": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "faviconLink": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "uuid",
                        "name",
                        "loginUrl",
                        "faviconLink"
                      ],
                      "additionalProperties": false
                    },
                    "node": {
                      "anyOf": [
                        {
                          "type": "object",
                          "properties": {
                            "uuid": {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                            },
                            "name": {
                              "type": "string"
                            },
                            "countryCode": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "uuid",
                            "name",
                            "countryCode"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "nextBillingAt": {},
                    "createdAt": {},
                    "updatedAt": {}
                  },
                  "required": [
                    "uuid",
                    "nodeUuid",
                    "name",
                    "providerUuid",
                    "provider",
                    "node",
                    "nextBillingAt",
                    "createdAt",
                    "updatedAt"
                  ],
                  "additionalProperties": false
                }
              },
              "availableBillingNodes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "name": {
                      "type": "string"
                    },
                    "countryCode": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "uuid",
                    "name",
                    "countryCode"
                  ],
                  "additionalProperties": false
                }
              },
              "totalAvailableBillingNodes": {
                "type": "number"
              },
              "stats": {
                "type": "object",
                "properties": {
                  "upcomingNodesCount": {
                    "type": "number"
                  },
                  "currentMonthPayments": {
                    "type": "number"
                  },
                  "totalSpent": {
                    "type": "number"
                  }
                },
                "required": [
                  "upcomingNodesCount",
                  "currentMonthPayments",
                  "totalSpent"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "totalBillingNodes",
              "billingNodes",
              "availableBillingNodes",
              "totalAvailableBillingNodes",
              "stats"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
PATCH/api/infra-billing/nodesUpdate infra billing nodes
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "uuids": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            }
          },
          "nextBillingAt": {
            "type": "string",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d))|(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?)$"
          }
        },
        "required": [
          "uuids",
          "nextBillingAt"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "totalBillingNodes": {
                "type": "number"
              },
              "billingNodes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "nodeUuid": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "name": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "providerUuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "provider": {
                      "type": "object",
                      "properties": {
                        "uuid": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        "name": {
                          "type": "string"
                        },
                        "loginUrl": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "faviconLink": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "uuid",
                        "name",
                        "loginUrl",
                        "faviconLink"
                      ],
                      "additionalProperties": false
                    },
                    "node": {
                      "anyOf": [
                        {
                          "type": "object",
                          "properties": {
                            "uuid": {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                            },
                            "name": {
                              "type": "string"
                            },
                            "countryCode": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "uuid",
                            "name",
                            "countryCode"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "nextBillingAt": {},
                    "createdAt": {},
                    "updatedAt": {}
                  },
                  "required": [
                    "uuid",
                    "nodeUuid",
                    "name",
                    "providerUuid",
                    "provider",
                    "node",
                    "nextBillingAt",
                    "createdAt",
                    "updatedAt"
                  ],
                  "additionalProperties": false
                }
              },
              "availableBillingNodes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "name": {
                      "type": "string"
                    },
                    "countryCode": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "uuid",
                    "name",
                    "countryCode"
                  ],
                  "additionalProperties": false
                }
              },
              "totalAvailableBillingNodes": {
                "type": "number"
              },
              "stats": {
                "type": "object",
                "properties": {
                  "upcomingNodesCount": {
                    "type": "number"
                  },
                  "currentMonthPayments": {
                    "type": "number"
                  },
                  "totalSpent": {
                    "type": "number"
                  }
                },
                "required": [
                  "upcomingNodesCount",
                  "currentMonthPayments",
                  "totalSpent"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "totalBillingNodes",
              "billingNodes",
              "availableBillingNodes",
              "totalAvailableBillingNodes",
              "stats"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/infra-billing/providers/{uuid}Get infra provider by uuid
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "name": {
                "type": "string"
              },
              "faviconLink": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "loginUrl": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "createdAt": {},
              "updatedAt": {},
              "billingHistory": {
                "type": "object",
                "properties": {
                  "totalAmount": {
                    "type": "number"
                  },
                  "totalBills": {
                    "type": "number"
                  }
                },
                "required": [
                  "totalAmount",
                  "totalBills"
                ],
                "additionalProperties": false
              },
              "billingNodes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "details": {
                      "anyOf": [
                        {
                          "type": "object",
                          "properties": {
                            "nodeUuid": {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                            },
                            "countryCode": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "nodeUuid",
                            "countryCode"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "name",
                    "details"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "uuid",
              "name",
              "faviconLink",
              "loginUrl",
              "createdAt",
              "updatedAt",
              "billingHistory",
              "billingNodes"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
DELETE/api/infra-billing/providers/{uuid}Delete infra provider by uuid
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success"
}
GET/api/infra-billing/providersGet all infra providers
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "total": {
                "type": "number"
              },
              "providers": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "name": {
                      "type": "string"
                    },
                    "faviconLink": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "loginUrl": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "createdAt": {},
                    "updatedAt": {},
                    "billingHistory": {
                      "type": "object",
                      "properties": {
                        "totalAmount": {
                          "type": "number"
                        },
                        "totalBills": {
                          "type": "number"
                        }
                      },
                      "required": [
                        "totalAmount",
                        "totalBills"
                      ],
                      "additionalProperties": false
                    },
                    "billingNodes": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "name": {
                            "type": "string"
                          },
                          "details": {
                            "anyOf": [
                              {
                                "type": "object",
                                "properties": {
                                  "nodeUuid": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                                  },
                                  "countryCode": {
                                    "type": "string"
                                  }
                                },
                                "required": [
                                  "nodeUuid",
                                  "countryCode"
                                ],
                                "additionalProperties": false
                              },
                              {
                                "type": "null"
                              }
                            ]
                          }
                        },
                        "required": [
                          "name",
                          "details"
                        ],
                        "additionalProperties": false
                      }
                    }
                  },
                  "required": [
                    "uuid",
                    "name",
                    "faviconLink",
                    "loginUrl",
                    "createdAt",
                    "updatedAt",
                    "billingHistory",
                    "billingNodes"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "total",
              "providers"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/infra-billing/providersCreate infra provider
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 2,
            "maxLength": 30
          },
          "faviconLink": {
            "type": "string",
            "format": "uri"
          },
          "loginUrl": {
            "type": "string",
            "format": "uri"
          }
        },
        "required": [
          "name"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "name": {
                "type": "string"
              },
              "faviconLink": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "loginUrl": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "createdAt": {},
              "updatedAt": {},
              "billingHistory": {
                "type": "object",
                "properties": {
                  "totalAmount": {
                    "type": "number"
                  },
                  "totalBills": {
                    "type": "number"
                  }
                },
                "required": [
                  "totalAmount",
                  "totalBills"
                ],
                "additionalProperties": false
              },
              "billingNodes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "details": {
                      "anyOf": [
                        {
                          "type": "object",
                          "properties": {
                            "nodeUuid": {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                            },
                            "countryCode": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "nodeUuid",
                            "countryCode"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "name",
                    "details"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "uuid",
              "name",
              "faviconLink",
              "loginUrl",
              "createdAt",
              "updatedAt",
              "billingHistory",
              "billingNodes"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
PATCH/api/infra-billing/providersUpdate infra provider
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "name": {
            "type": "string",
            "minLength": 2,
            "maxLength": 30
          },
          "faviconLink": {
            "anyOf": [
              {
                "type": "string",
                "format": "uri"
              },
              {
                "type": "null"
              }
            ]
          },
          "loginUrl": {
            "anyOf": [
              {
                "type": "string",
                "format": "uri"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "uuid"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "name": {
                "type": "string"
              },
              "faviconLink": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "loginUrl": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "createdAt": {},
              "updatedAt": {},
              "billingHistory": {
                "type": "object",
                "properties": {
                  "totalAmount": {
                    "type": "number"
                  },
                  "totalBills": {
                    "type": "number"
                  }
                },
                "required": [
                  "totalAmount",
                  "totalBills"
                ],
                "additionalProperties": false
              },
              "billingNodes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "details": {
                      "anyOf": [
                        {
                          "type": "object",
                          "properties": {
                            "nodeUuid": {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                            },
                            "countryCode": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "nodeUuid",
                            "countryCode"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "name",
                    "details"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "uuid",
              "name",
              "faviconLink",
              "loginUrl",
              "createdAt",
              "updatedAt",
              "billingHistory",
              "billingNodes"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}

internal-squads

GET/api/internal-squads/{uuid}/accessible-nodesGet internal squad accessible nodes
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "squadUuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "accessibleNodes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "nodeName": {
                      "type": "string"
                    },
                    "countryCode": {
                      "type": "string"
                    },
                    "configProfileUuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "configProfileName": {
                      "type": "string"
                    },
                    "activeInbounds": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  },
                  "required": [
                    "uuid",
                    "nodeName",
                    "countryCode",
                    "configProfileUuid",
                    "configProfileName",
                    "activeInbounds"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "squadUuid",
              "accessibleNodes"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/internal-squads/{uuid}/bulk-actions/add-many-usersAdd many users to internal squad
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "userIds": {
            "minItems": 1,
            "maxItems": 1000,
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "userIds"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success"
}
POST/api/internal-squads/{uuid}/bulk-actions/add-usersAdd all users to internal squad
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success"
}
DELETE/api/internal-squads/{uuid}/bulk-actions/remove-many-usersDelete many users from internal squad
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "userIds": {
            "minItems": 1,
            "maxItems": 1000,
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "userIds"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success"
}
DELETE/api/internal-squads/{uuid}/bulk-actions/remove-usersDelete users from internal squad
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success"
}
GET/api/internal-squads/{uuid}Get internal squad by uuid
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "viewPosition": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "name": {
                "type": "string"
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "info": {
                "type": "object",
                "properties": {
                  "membersCount": {
                    "type": "number"
                  },
                  "inboundsCount": {
                    "type": "number"
                  }
                },
                "required": [
                  "membersCount",
                  "inboundsCount"
                ],
                "additionalProperties": false
              },
              "inbounds": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "profileUuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "tag": {
                      "type": "string"
                    },
                    "type": {
                      "type": "string"
                    },
                    "network": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "security": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "port": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "rawInbound": {
                      "anyOf": [
                        {},
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "uuid",
                    "profileUuid",
                    "tag",
                    "type",
                    "network",
                    "security",
                    "port",
                    "rawInbound"
                  ],
                  "additionalProperties": false
                }
              },
              "createdAt": {},
              "updatedAt": {}
            },
            "required": [
              "uuid",
              "viewPosition",
              "name",
              "tags",
              "info",
              "inbounds",
              "createdAt",
              "updatedAt"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
DELETE/api/internal-squads/{uuid}Delete internal squad
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success"
}
POST/api/internal-squads/actions/reorderReorder internal squads
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "viewPosition": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "uuid": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                }
              },
              "required": [
                "viewPosition",
                "uuid"
              ]
            }
          }
        },
        "required": [
          "items"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "total": {
                "type": "number"
              },
              "internalSquads": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "viewPosition": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "name": {
                      "type": "string"
                    },
                    "tags": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "info": {
                      "type": "object",
                      "properties": {
                        "membersCount": {
                          "type": "number"
                        },
                        "inboundsCount": {
                          "type": "number"
                        }
                      },
                      "required": [
                        "membersCount",
                        "inboundsCount"
                      ],
                      "additionalProperties": false
                    },
                    "inbounds": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "uuid": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                          },
                          "profileUuid": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                          },
                          "tag": {
                            "type": "string"
                          },
                          "type": {
                            "type": "string"
                          },
                          "network": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "security": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "port": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "rawInbound": {
                            "anyOf": [
                              {},
                              {
                                "type": "null"
                              }
                            ]
                          }
                        },
                        "required": [
                          "uuid",
                          "profileUuid",
                          "tag",
                          "type",
                          "network",
                          "security",
                          "port",
                          "rawInbound"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "createdAt": {},
                    "updatedAt": {}
                  },
                  "required": [
                    "uuid",
                    "viewPosition",
                    "name",
                    "tags",
                    "info",
                    "inbounds",
                    "createdAt",
                    "updatedAt"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "total",
              "internalSquads"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/internal-squads/tagsGet tags of Internal Squads
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "required": [
              "tags"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
PATCH/api/internal-squads/tagsSet tags of Internal Squad
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "tags": {
            "maxItems": 10,
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 36,
              "pattern": "^[A-Z0-9_:]+$"
            }
          }
        },
        "required": [
          "uuid",
          "tags"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "required": [
              "uuid",
              "tags"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/internal-squadsGet all internal squads
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "total": {
                "type": "number"
              },
              "internalSquads": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "viewPosition": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "name": {
                      "type": "string"
                    },
                    "tags": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "info": {
                      "type": "object",
                      "properties": {
                        "membersCount": {
                          "type": "number"
                        },
                        "inboundsCount": {
                          "type": "number"
                        }
                      },
                      "required": [
                        "membersCount",
                        "inboundsCount"
                      ],
                      "additionalProperties": false
                    },
                    "inbounds": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "uuid": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                          },
                          "profileUuid": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                          },
                          "tag": {
                            "type": "string"
                          },
                          "type": {
                            "type": "string"
                          },
                          "network": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "security": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "port": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "rawInbound": {
                            "anyOf": [
                              {},
                              {
                                "type": "null"
                              }
                            ]
                          }
                        },
                        "required": [
                          "uuid",
                          "profileUuid",
                          "tag",
                          "type",
                          "network",
                          "security",
                          "port",
                          "rawInbound"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "createdAt": {},
                    "updatedAt": {}
                  },
                  "required": [
                    "uuid",
                    "viewPosition",
                    "name",
                    "tags",
                    "info",
                    "inbounds",
                    "createdAt",
                    "updatedAt"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "total",
              "internalSquads"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/internal-squadsCreate internal squad
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 2,
            "maxLength": 30,
            "pattern": "^[A-Za-z0-9_\\s-]+$"
          },
          "inbounds": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            }
          }
        },
        "required": [
          "name",
          "inbounds"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "viewPosition": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "name": {
                "type": "string"
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "info": {
                "type": "object",
                "properties": {
                  "membersCount": {
                    "type": "number"
                  },
                  "inboundsCount": {
                    "type": "number"
                  }
                },
                "required": [
                  "membersCount",
                  "inboundsCount"
                ],
                "additionalProperties": false
              },
              "inbounds": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "profileUuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "tag": {
                      "type": "string"
                    },
                    "type": {
                      "type": "string"
                    },
                    "network": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "security": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "port": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "rawInbound": {
                      "anyOf": [
                        {},
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "uuid",
                    "profileUuid",
                    "tag",
                    "type",
                    "network",
                    "security",
                    "port",
                    "rawInbound"
                  ],
                  "additionalProperties": false
                }
              },
              "createdAt": {},
              "updatedAt": {}
            },
            "required": [
              "uuid",
              "viewPosition",
              "name",
              "tags",
              "info",
              "inbounds",
              "createdAt",
              "updatedAt"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
PATCH/api/internal-squadsUpdate internal squad
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "name": {
            "type": "string",
            "minLength": 2,
            "maxLength": 30,
            "pattern": "^[A-Za-z0-9_\\s-]+$"
          },
          "inbounds": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            }
          }
        },
        "required": [
          "uuid"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "viewPosition": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "name": {
                "type": "string"
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "info": {
                "type": "object",
                "properties": {
                  "membersCount": {
                    "type": "number"
                  },
                  "inboundsCount": {
                    "type": "number"
                  }
                },
                "required": [
                  "membersCount",
                  "inboundsCount"
                ],
                "additionalProperties": false
              },
              "inbounds": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "profileUuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "tag": {
                      "type": "string"
                    },
                    "type": {
                      "type": "string"
                    },
                    "network": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "security": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "port": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "rawInbound": {
                      "anyOf": [
                        {},
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "uuid",
                    "profileUuid",
                    "tag",
                    "type",
                    "network",
                    "security",
                    "port",
                    "rawInbound"
                  ],
                  "additionalProperties": false
                }
              },
              "createdAt": {},
              "updatedAt": {}
            },
            "required": [
              "uuid",
              "viewPosition",
              "name",
              "tags",
              "info",
              "inbounds",
              "createdAt",
              "updatedAt"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}

keygen

GET/api/keygenGet SECRET_KEY for Remnawave Node
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "secretKey": {
                "type": "string"
              }
            },
            "required": [
              "secretKey"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}

metadata

GET/api/metadata/node/{uuid}Get node metadata
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "metadata": {
                "type": "object",
                "properties": {},
                "additionalProperties": {}
              }
            },
            "required": [
              "metadata"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
PUT/api/metadata/node/{uuid}Update or create Node Metadata
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "metadata": {
            "type": "object",
            "properties": {},
            "additionalProperties": {}
          }
        },
        "required": [
          "metadata"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "metadata": {
                "type": "object",
                "properties": {},
                "additionalProperties": {}
              }
            },
            "required": [
              "metadata"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/metadata/user/{userId}Get user metadata
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "userId",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "metadata": {
                "type": "object",
                "properties": {},
                "additionalProperties": {}
              }
            },
            "required": [
              "metadata"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
PUT/api/metadata/user/{userId}Update or create User Metadata
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "userId",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "metadata": {
            "type": "object",
            "properties": {},
            "additionalProperties": {}
          }
        },
        "required": [
          "metadata"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "metadata": {
                "type": "object",
                "properties": {},
                "additionalProperties": {}
              }
            },
            "required": [
              "metadata"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}

node-integrations

GET/api/node-integrations/{uuid}Get Node Integration by uuid
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "name": {
                "type": "string"
              },
              "description": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "config": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              }
            },
            "required": [
              "uuid",
              "name",
              "description",
              "config"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
DELETE/api/node-integrations/{uuid}Delete Node Integration
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success"
}
GET/api/node-integrationsGet all Node Integrations
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "total": {
                "type": "number"
              },
              "nodeIntegrations": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "name": {
                      "type": "string"
                    },
                    "description": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "config": {
                      "type": "object",
                      "propertyNames": {
                        "type": "string"
                      },
                      "additionalProperties": {}
                    }
                  },
                  "required": [
                    "uuid",
                    "name",
                    "description",
                    "config"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "total",
              "nodeIntegrations"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/node-integrationsCreate Node Integration
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 2,
            "maxLength": 30
          },
          "description": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 255
              },
              {
                "type": "null"
              }
            ]
          },
          "config": {
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {}
          }
        },
        "required": [
          "name",
          "config"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "name": {
                "type": "string"
              },
              "description": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "config": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              }
            },
            "required": [
              "uuid",
              "name",
              "description",
              "config"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
PATCH/api/node-integrationsUpdate Node Integration
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "name": {
            "type": "string",
            "minLength": 2,
            "maxLength": 30
          },
          "description": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 255
              },
              {
                "type": "null"
              }
            ]
          },
          "config": {
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {}
          },
          "restartNodes": {
            "type": "boolean"
          }
        },
        "required": [
          "uuid"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "name": {
                "type": "string"
              },
              "description": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "config": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              }
            },
            "required": [
              "uuid",
              "name",
              "description",
              "config"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}

node-plugins

GET/api/node-plugins/{uuid}Get Node Plugin by uuid
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "viewPosition": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "name": {
                "type": "string"
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "pluginConfig": {}
            },
            "required": [
              "uuid",
              "viewPosition",
              "name",
              "tags",
              "pluginConfig"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
DELETE/api/node-plugins/{uuid}Delete Node Plugin
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success"
}
POST/api/node-plugins/actions/cloneClone Node Plugin
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "cloneFromUuid": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          }
        },
        "required": [
          "cloneFromUuid"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "viewPosition": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "name": {
                "type": "string"
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "pluginConfig": {}
            },
            "required": [
              "uuid",
              "viewPosition",
              "name",
              "tags",
              "pluginConfig"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/node-plugins/actions/reorderReorder Node Plugins
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "viewPosition": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "uuid": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                }
              },
              "required": [
                "viewPosition",
                "uuid"
              ]
            }
          }
        },
        "required": [
          "items"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "total": {
                "type": "number"
              },
              "nodePlugins": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "viewPosition": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "name": {
                      "type": "string"
                    },
                    "tags": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "pluginConfig": {
                      "anyOf": [
                        {},
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "uuid",
                    "viewPosition",
                    "name",
                    "tags",
                    "pluginConfig"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "total",
              "nodePlugins"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/node-plugins/actions/syncSync Node Plugin to nodes

Push the current plugin config, including referenced shared lists, to every connected node this plugin is active on.

Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          }
        },
        "required": [
          "uuid"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success"
}
POST/api/node-plugins/executorExecute command on node plugins
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "command": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "command": {
                    "type": "string",
                    "const": "blockIps"
                  },
                  "ips": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "ip": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "ipv4",
                              "pattern": "^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$"
                            },
                            {
                              "type": "string",
                              "format": "ipv6",
                              "pattern": "^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$"
                            }
                          ]
                        },
                        "timeout": {
                          "type": "number"
                        }
                      },
                      "required": [
                        "ip",
                        "timeout"
                      ]
                    }
                  }
                },
                "required": [
                  "command",
                  "ips"
                ],
                "description": "Block IPs"
              },
              {
                "type": "object",
                "properties": {
                  "command": {
                    "type": "string",
                    "const": "unblockIps"
                  },
                  "ips": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "ipv4",
                          "pattern": "^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$"
                        },
                        {
                          "type": "string",
                          "format": "ipv6",
                          "pattern": "^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$"
                        }
                      ]
                    }
                  }
                },
                "required": [
                  "command",
                  "ips"
                ],
                "description": "Unblock IPs"
              },
              {
                "type": "object",
                "properties": {
                  "command": {
                    "type": "string",
                    "const": "recreateTables"
                  }
                },
                "required": [
                  "command"
                ],
                "description": "Recreate tables"
              }
            ]
          },
          "targetNodes": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "target": {
                    "type": "string",
                    "const": "allNodes"
                  }
                },
                "required": [
                  "target"
                ],
                "description": "Target all connected nodes"
              },
              {
                "type": "object",
                "properties": {
                  "target": {
                    "type": "string",
                    "const": "specificNodes"
                  },
                  "nodeUuids": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    }
                  }
                },
                "required": [
                  "target",
                  "nodeUuids"
                ],
                "description": "Target specific nodes"
              }
            ]
          }
        },
        "required": [
          "command",
          "targetNodes"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success"
}
POST/api/node-plugins/shared-lists/actions/syncSync Shared List to nodes

Push every plugin referencing this shared list to the nodes it is active on.

Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 2,
            "maxLength": 255,
            "pattern": "^[A-Za-z0-9_-]+(\\/[A-Za-z0-9_-]+)*$"
          }
        },
        "required": [
          "name"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success"
}
GET/api/node-plugins/shared-lists/by-nameGet Shared List by name
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "name",
    "in": "query",
    "required": true,
    "schema": {
      "type": "string",
      "minLength": 2,
      "maxLength": 255,
      "pattern": "^[A-Za-z0-9_-]+(\\/[A-Za-z0-9_-]+)*$"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "minLength": 2,
                "maxLength": 255,
                "pattern": "^[A-Za-z0-9_-]+(\\/[A-Za-z0-9_-]+)*$"
              },
              "config": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              }
            },
            "required": [
              "name",
              "config"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/node-plugins/shared-listsGet Shared Lists (Preview)

Returns only the name, type and item count of every shared list. Use "Get Shared List by name" to fetch the items themselves.

Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "total": {
                "type": "number"
              },
              "sharedLists": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string",
                      "minLength": 2,
                      "maxLength": 255,
                      "pattern": "^[A-Za-z0-9_-]+(\\/[A-Za-z0-9_-]+)*$"
                    },
                    "type": {
                      "type": "string"
                    },
                    "itemsCount": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "name",
                    "type",
                    "itemsCount"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "total",
              "sharedLists"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/node-plugins/shared-listsCreate Shared List
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 2,
            "maxLength": 255,
            "pattern": "^[A-Za-z0-9_-]+(\\/[A-Za-z0-9_-]+)*$"
          },
          "config": {
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {}
          }
        },
        "required": [
          "name",
          "config"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "minLength": 2,
                "maxLength": 255,
                "pattern": "^[A-Za-z0-9_-]+(\\/[A-Za-z0-9_-]+)*$"
              },
              "config": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              }
            },
            "required": [
              "name",
              "config"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
PATCH/api/node-plugins/shared-listsUpdate Shared List
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 2,
            "maxLength": 255,
            "pattern": "^[A-Za-z0-9_-]+(\\/[A-Za-z0-9_-]+)*$"
          },
          "config": {
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {}
          }
        },
        "required": [
          "name",
          "config"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "minLength": 2,
                "maxLength": 255,
                "pattern": "^[A-Za-z0-9_-]+(\\/[A-Za-z0-9_-]+)*$"
              },
              "config": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              }
            },
            "required": [
              "name",
              "config"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
DELETE/api/node-plugins/shared-listsDelete Shared List by name
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 2,
            "maxLength": 255,
            "pattern": "^[A-Za-z0-9_-]+(\\/[A-Za-z0-9_-]+)*$"
          }
        },
        "required": [
          "name"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success"
}
GET/api/node-plugins/tagsGet tags of Node Plugins
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "required": [
              "tags"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
PATCH/api/node-plugins/tagsSet tags of Node Plugin
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "tags": {
            "maxItems": 10,
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 36,
              "pattern": "^[A-Z0-9_:]+$"
            }
          }
        },
        "required": [
          "uuid",
          "tags"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "required": [
              "uuid",
              "tags"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/node-plugins/torrent-blocker/statsGet Torrent Blocker Reports Stats
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "stats": {
                "type": "object",
                "properties": {
                  "distinctNodes": {
                    "type": "number"
                  },
                  "distinctUsers": {
                    "type": "number"
                  },
                  "totalReports": {
                    "type": "number"
                  },
                  "reportsLast24Hours": {
                    "type": "number"
                  }
                },
                "required": [
                  "distinctNodes",
                  "distinctUsers",
                  "totalReports",
                  "reportsLast24Hours"
                ],
                "additionalProperties": false
              },
              "topUsers": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "userId": {
                      "type": "number"
                    },
                    "color": {
                      "type": "string"
                    },
                    "username": {
                      "type": "string"
                    },
                    "total": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "userId",
                    "color",
                    "username",
                    "total"
                  ],
                  "additionalProperties": false
                }
              },
              "topNodes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "countryCode": {
                      "type": "string"
                    },
                    "color": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "total": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "uuid",
                    "countryCode",
                    "color",
                    "name",
                    "total"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "stats",
              "topUsers",
              "topNodes"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
DELETE/api/node-plugins/torrent-blocker/truncateTruncate Torrent Blocker Reports
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success"
}
GET/api/node-plugins/torrent-blockerGet Torrent Blocker Reports

Please note that the filters here are primarily intended for use by the frontend and rely on expensive operators such as LIKE under the hood. Misusing these filters may negatively impact the performance of your database.

Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "start",
    "in": "query",
    "required": false,
    "schema": {
      "default": 0,
      "description": "Start index (offset) of the results to return, default is 0",
      "type": "number"
    }
  },
  {
    "name": "size",
    "in": "query",
    "required": false,
    "schema": {
      "default": 25,
      "type": "number",
      "minimum": 1,
      "maximum": 1000,
      "description": "Number of results to return, no more than 1000"
    }
  },
  {
    "name": "filters",
    "in": "query",
    "required": false,
    "schema": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "value": {}
        },
        "required": [
          "id",
          "value"
        ]
      }
    }
  },
  {
    "name": "filterModes",
    "in": "query",
    "required": false,
    "schema": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "type": "string"
      }
    }
  },
  {
    "name": "globalFilterMode",
    "in": "query",
    "required": false,
    "schema": {
      "type": "string"
    }
  },
  {
    "name": "sorting",
    "in": "query",
    "required": false,
    "schema": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "desc": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "desc"
        ]
      }
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "records": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "number"
                    },
                    "userId": {
                      "type": "number"
                    },
                    "nodeId": {
                      "type": "number"
                    },
                    "user": {
                      "type": "object",
                      "properties": {
                        "username": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "username"
                      ],
                      "additionalProperties": false
                    },
                    "node": {
                      "type": "object",
                      "properties": {
                        "uuid": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        "name": {
                          "type": "string"
                        },
                        "countryCode": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "uuid",
                        "name",
                        "countryCode"
                      ],
                      "additionalProperties": false
                    },
                    "report": {
                      "type": "object",
                      "properties": {
                        "actionReport": {
                          "type": "object",
                          "properties": {
                            "blocked": {
                              "type": "boolean"
                            },
                            "ip": {
                              "type": "string"
                            },
                            "blockDuration": {
                              "type": "number"
                            },
                            "willUnblockAt": {},
                            "userId": {
                              "type": "string"
                            },
                            "processedAt": {}
                          },
                          "required": [
                            "blocked",
                            "ip",
                            "blockDuration",
                            "willUnblockAt",
                            "userId",
                            "processedAt"
                          ],
                          "additionalProperties": false
                        },
                        "xrayReport": {
                          "type": "object",
                          "properties": {
                            "email": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "level": {
                              "type": [
                                "number",
                                "null"
                              ]
                            },
                            "protocol": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "network": {
                              "type": "string"
                            },
                            "source": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "destination": {
                              "type": "string"
                            },
                            "routeTarget": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "originalTarget": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "inboundTag": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "inboundName": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "inboundLocal": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "outboundTag": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "ts": {
                              "type": "number"
                            }
                          },
                          "required": [
                            "email",
                            "level",
                            "protocol",
                            "network",
                            "source",
                            "destination",
                            "routeTarget",
                            "originalTarget",
                            "inboundTag",
                            "inboundName",
                            "inboundLocal",
                            "outboundTag",
                            "ts"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "required": [
                        "actionReport",
                        "xrayReport"
                      ],
                      "additionalProperties": false
                    },
                    "createdAt": {}
                  },
                  "required": [
                    "id",
                    "userId",
                    "nodeId",
                    "user",
                    "node",
                    "report",
                    "createdAt"
                  ],
                  "additionalProperties": false
                }
              },
              "total": {
                "type": "number"
              }
            },
            "required": [
              "records",
              "total"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/node-pluginsGet all Node Plugins
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "total": {
                "type": "number"
              },
              "nodePlugins": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "viewPosition": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "name": {
                      "type": "string"
                    },
                    "tags": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "pluginConfig": {
                      "anyOf": [
                        {},
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "uuid",
                    "viewPosition",
                    "name",
                    "tags",
                    "pluginConfig"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "total",
              "nodePlugins"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/node-pluginsCreate Node Plugin
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 2,
            "maxLength": 30,
            "pattern": "^[A-Za-z0-9_\\s-]+$"
          }
        },
        "required": [
          "name"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "viewPosition": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "name": {
                "type": "string"
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "pluginConfig": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "uuid",
              "viewPosition",
              "name",
              "tags",
              "pluginConfig"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
PATCH/api/node-pluginsUpdate Node Plugin
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "name": {
            "type": "string",
            "minLength": 2,
            "maxLength": 30,
            "pattern": "^[A-Za-z0-9_\\s-]+$"
          },
          "pluginConfig": {}
        },
        "required": [
          "uuid"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "viewPosition": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "name": {
                "type": "string"
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "pluginConfig": {}
            },
            "required": [
              "uuid",
              "viewPosition",
              "name",
              "tags",
              "pluginConfig"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}

node-ssh

POST/api/node-ssh/{uuid}/ticketCreate a single-use ticket for opening an SSH terminal session
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "ticket": {
                "type": "string"
              },
              "path": {
                "type": "string"
              },
              "expiresInSeconds": {
                "type": "number"
              }
            },
            "required": [
              "ticket",
              "path",
              "expiresInSeconds"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/node-ssh/vault/evaluateOblivious evaluation step for unlocking the SSH key vault
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "blinded": {
            "type": "string",
            "maxLength": 128,
            "format": "base64",
            "contentEncoding": "base64",
            "pattern": "^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$"
          }
        },
        "required": [
          "blinded"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "evaluated": {
                "type": "string",
                "format": "base64",
                "contentEncoding": "base64",
                "pattern": "^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$"
              }
            },
            "required": [
              "evaluated"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/node-ssh/wsNode SSH terminal (WebSocket)

WebSocket for the node SSH terminal. First get a ticket with POST /api/node-ssh/{uuid}/ticket: it lives 15 seconds, works once and only from the same client IP. Then open the socket with Sec-WebSocket-Protocol: rw, <ticket>, <admin JWT>. API tokens are rejected; the socket needs an administrator session.

Authentication: public endpoint.

Path, query and header parameters
[
  {
    "name": "Sec-WebSocket-Protocol",
    "in": "header",
    "required": true,
    "schema": {
      "type": "string",
      "example": "rw, <ticket>, <jwt>"
    }
  }
]

Responses

Response: 101
{
  "description": "Switching to WebSocket."
}
Response: 401
{
  "description": "Missing, expired or foreign ticket."
}
Response: 403
{
  "description": "Not an administrator, for example an API token."
}

nodes

POST/api/nodes/{uuid}/actions/disableDisable a node
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "id": {
                "type": "number"
              },
              "name": {
                "type": "string"
              },
              "address": {
                "type": "string"
              },
              "port": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "proxyUrl": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "isConnected": {
                "type": "boolean"
              },
              "isDisabled": {
                "type": "boolean"
              },
              "isConnecting": {
                "type": "boolean"
              },
              "lastStatusChange": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "lastStatusMessage": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "isTrafficTrackingActive": {
                "type": "boolean"
              },
              "trafficResetDay": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "trafficLimitBytes": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "trafficUsedBytes": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "notifyPercent": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "viewPosition": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "countryCode": {
                "type": "string"
              },
              "consumptionMultiplier": {
                "type": "number"
              },
              "nodeConsumptionMultiplier": {
                "type": "number"
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "integrationUuids": {
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                }
              },
              "ips": {
                "maxItems": 64,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "ip": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "ipv4",
                          "pattern": "^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$"
                        },
                        {
                          "type": "string",
                          "format": "ipv6",
                          "pattern": "^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$"
                        }
                      ]
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "INBOUND",
                        "OUTBOUND",
                        "MANAGEMENT",
                        "TRANSIT",
                        "MONITORING",
                        "RESERVE",
                        "BLOCKED",
                        "FLAGGED",
                        "DEPRECATED",
                        "UNKNOWN"
                      ]
                    }
                  },
                  "required": [
                    "ip",
                    "status"
                  ],
                  "additionalProperties": false
                }
              },
              "createdAt": {},
              "updatedAt": {},
              "configProfile": {
                "type": "object",
                "properties": {
                  "activeConfigProfileUuid": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "activeInbounds": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "uuid": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        "profileUuid": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        "tag": {
                          "type": "string"
                        },
                        "type": {
                          "type": "string"
                        },
                        "network": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "security": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "port": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "rawInbound": {
                          "anyOf": [
                            {},
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "uuid",
                        "profileUuid",
                        "tag",
                        "type",
                        "network",
                        "security",
                        "port",
                        "rawInbound"
                      ],
                      "additionalProperties": false
                    }
                  }
                },
                "required": [
                  "activeConfigProfileUuid",
                  "activeInbounds"
                ],
                "additionalProperties": false
              },
              "providerUuid": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "provider": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "uuid": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      "name": {
                        "type": "string"
                      },
                      "faviconLink": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "loginUrl": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "createdAt": {},
                      "updatedAt": {}
                    },
                    "required": [
                      "uuid",
                      "name",
                      "faviconLink",
                      "loginUrl",
                      "createdAt",
                      "updatedAt"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "activePluginUuid": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "system": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "info": {
                        "type": "object",
                        "properties": {
                          "arch": {
                            "type": "string"
                          },
                          "cpus": {
                            "type": "integer",
                            "minimum": -9007199254740991,
                            "maximum": 9007199254740991
                          },
                          "cpuModel": {
                            "type": "string"
                          },
                          "memoryTotal": {
                            "type": "number"
                          },
                          "hostname": {
                            "type": "string"
                          },
                          "platform": {
                            "type": "string"
                          },
                          "release": {
                            "type": "string"
                          },
                          "type": {
                            "type": "string"
                          },
                          "version": {
                            "type": "string"
                          },
                          "networkInterfaces": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          }
                        },
                        "required": [
                          "arch",
                          "cpus",
                          "cpuModel",
                          "memoryTotal",
                          "hostname",
                          "platform",
                          "release",
                          "type",
                          "version",
                          "networkInterfaces"
                        ],
                        "additionalProperties": false
                      },
                      "stats": {
                        "type": "object",
                        "properties": {
                          "memoryFree": {
                            "type": "number"
                          },
                          "memoryUsed": {
                            "type": "number"
                          },
                          "uptime": {
                            "type": "number"
                          },
                          "loadAvg": {
                            "type": "array",
                            "items": {
                              "type": "number"
                            }
                          },
                          "interface": {
                            "anyOf": [
                              {
                                "type": "object",
                                "properties": {
                                  "interface": {
                                    "type": "string"
                                  },
                                  "rxBytesPerSec": {
                                    "type": "number"
                                  },
                                  "txBytesPerSec": {
                                    "type": "number"
                                  },
                                  "rxTotal": {
                                    "type": "number"
                                  },
                                  "txTotal": {
                                    "type": "number"
                                  }
                                },
                                "required": [
                                  "interface",
                                  "rxBytesPerSec",
                                  "txBytesPerSec",
                                  "rxTotal",
                                  "txTotal"
                                ],
                                "additionalProperties": false
                              },
                              {
                                "type": "null"
                              }
                            ]
                          }
                        },
                        "required": [
                          "memoryFree",
                          "memoryUsed",
                          "uptime",
                          "loadAvg",
                          "interface"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "info",
                      "stats"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "versions": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "xray": {
                        "type": "string"
                      },
                      "node": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "xray",
                      "node"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "xrayUptime": {
                "type": "number"
              },
              "usersOnline": {
                "type": "number"
              },
              "note": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "uuid",
              "id",
              "name",
              "address",
              "port",
              "proxyUrl",
              "isConnected",
              "isDisabled",
              "isConnecting",
              "lastStatusChange",
              "lastStatusMessage",
              "isTrafficTrackingActive",
              "trafficResetDay",
              "trafficLimitBytes",
              "trafficUsedBytes",
              "notifyPercent",
              "viewPosition",
              "countryCode",
              "consumptionMultiplier",
              "nodeConsumptionMultiplier",
              "tags",
              "integrationUuids",
              "ips",
              "createdAt",
              "updatedAt",
              "configProfile",
              "providerUuid",
              "provider",
              "activePluginUuid",
              "system",
              "versions",
              "xrayUptime",
              "usersOnline",
              "note"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/nodes/{uuid}/actions/enableEnable a node
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "id": {
                "type": "number"
              },
              "name": {
                "type": "string"
              },
              "address": {
                "type": "string"
              },
              "port": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "proxyUrl": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "isConnected": {
                "type": "boolean"
              },
              "isDisabled": {
                "type": "boolean"
              },
              "isConnecting": {
                "type": "boolean"
              },
              "lastStatusChange": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "lastStatusMessage": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "isTrafficTrackingActive": {
                "type": "boolean"
              },
              "trafficResetDay": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "trafficLimitBytes": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "trafficUsedBytes": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "notifyPercent": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "viewPosition": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "countryCode": {
                "type": "string"
              },
              "consumptionMultiplier": {
                "type": "number"
              },
              "nodeConsumptionMultiplier": {
                "type": "number"
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "integrationUuids": {
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                }
              },
              "ips": {
                "maxItems": 64,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "ip": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "ipv4",
                          "pattern": "^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$"
                        },
                        {
                          "type": "string",
                          "format": "ipv6",
                          "pattern": "^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$"
                        }
                      ]
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "INBOUND",
                        "OUTBOUND",
                        "MANAGEMENT",
                        "TRANSIT",
                        "MONITORING",
                        "RESERVE",
                        "BLOCKED",
                        "FLAGGED",
                        "DEPRECATED",
                        "UNKNOWN"
                      ]
                    }
                  },
                  "required": [
                    "ip",
                    "status"
                  ],
                  "additionalProperties": false
                }
              },
              "createdAt": {},
              "updatedAt": {},
              "configProfile": {
                "type": "object",
                "properties": {
                  "activeConfigProfileUuid": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "activeInbounds": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "uuid": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        "profileUuid": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        "tag": {
                          "type": "string"
                        },
                        "type": {
                          "type": "string"
                        },
                        "network": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "security": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "port": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "rawInbound": {
                          "anyOf": [
                            {},
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "uuid",
                        "profileUuid",
                        "tag",
                        "type",
                        "network",
                        "security",
                        "port",
                        "rawInbound"
                      ],
                      "additionalProperties": false
                    }
                  }
                },
                "required": [
                  "activeConfigProfileUuid",
                  "activeInbounds"
                ],
                "additionalProperties": false
              },
              "providerUuid": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "provider": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "uuid": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      "name": {
                        "type": "string"
                      },
                      "faviconLink": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "loginUrl": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "createdAt": {},
                      "updatedAt": {}
                    },
                    "required": [
                      "uuid",
                      "name",
                      "faviconLink",
                      "loginUrl",
                      "createdAt",
                      "updatedAt"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "activePluginUuid": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "system": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "info": {
                        "type": "object",
                        "properties": {
                          "arch": {
                            "type": "string"
                          },
                          "cpus": {
                            "type": "integer",
                            "minimum": -9007199254740991,
                            "maximum": 9007199254740991
                          },
                          "cpuModel": {
                            "type": "string"
                          },
                          "memoryTotal": {
                            "type": "number"
                          },
                          "hostname": {
                            "type": "string"
                          },
                          "platform": {
                            "type": "string"
                          },
                          "release": {
                            "type": "string"
                          },
                          "type": {
                            "type": "string"
                          },
                          "version": {
                            "type": "string"
                          },
                          "networkInterfaces": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          }
                        },
                        "required": [
                          "arch",
                          "cpus",
                          "cpuModel",
                          "memoryTotal",
                          "hostname",
                          "platform",
                          "release",
                          "type",
                          "version",
                          "networkInterfaces"
                        ],
                        "additionalProperties": false
                      },
                      "stats": {
                        "type": "object",
                        "properties": {
                          "memoryFree": {
                            "type": "number"
                          },
                          "memoryUsed": {
                            "type": "number"
                          },
                          "uptime": {
                            "type": "number"
                          },
                          "loadAvg": {
                            "type": "array",
                            "items": {
                              "type": "number"
                            }
                          },
                          "interface": {
                            "anyOf": [
                              {
                                "type": "object",
                                "properties": {
                                  "interface": {
                                    "type": "string"
                                  },
                                  "rxBytesPerSec": {
                                    "type": "number"
                                  },
                                  "txBytesPerSec": {
                                    "type": "number"
                                  },
                                  "rxTotal": {
                                    "type": "number"
                                  },
                                  "txTotal": {
                                    "type": "number"
                                  }
                                },
                                "required": [
                                  "interface",
                                  "rxBytesPerSec",
                                  "txBytesPerSec",
                                  "rxTotal",
                                  "txTotal"
                                ],
                                "additionalProperties": false
                              },
                              {
                                "type": "null"
                              }
                            ]
                          }
                        },
                        "required": [
                          "memoryFree",
                          "memoryUsed",
                          "uptime",
                          "loadAvg",
                          "interface"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "info",
                      "stats"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "versions": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "xray": {
                        "type": "string"
                      },
                      "node": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "xray",
                      "node"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "xrayUptime": {
                "type": "number"
              },
              "usersOnline": {
                "type": "number"
              },
              "note": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "uuid",
              "id",
              "name",
              "address",
              "port",
              "proxyUrl",
              "isConnected",
              "isDisabled",
              "isConnecting",
              "lastStatusChange",
              "lastStatusMessage",
              "isTrafficTrackingActive",
              "trafficResetDay",
              "trafficLimitBytes",
              "trafficUsedBytes",
              "notifyPercent",
              "viewPosition",
              "countryCode",
              "consumptionMultiplier",
              "nodeConsumptionMultiplier",
              "tags",
              "integrationUuids",
              "ips",
              "createdAt",
              "updatedAt",
              "configProfile",
              "providerUuid",
              "provider",
              "activePluginUuid",
              "system",
              "versions",
              "xrayUptime",
              "usersOnline",
              "note"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/nodes/{uuid}/actions/reset-trafficReset Node Traffic
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success"
}
POST/api/nodes/{uuid}/actions/restartRestart node
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "forceRestart": {
            "type": "boolean"
          }
        },
        "required": [
          "forceRestart"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success"
}
GET/api/nodes/{uuid}Get node by UUID
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "id": {
                "type": "number"
              },
              "name": {
                "type": "string"
              },
              "address": {
                "type": "string"
              },
              "port": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "proxyUrl": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "isConnected": {
                "type": "boolean"
              },
              "isDisabled": {
                "type": "boolean"
              },
              "isConnecting": {
                "type": "boolean"
              },
              "lastStatusChange": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "lastStatusMessage": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "isTrafficTrackingActive": {
                "type": "boolean"
              },
              "trafficResetDay": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "trafficLimitBytes": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "trafficUsedBytes": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "notifyPercent": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "viewPosition": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "countryCode": {
                "type": "string"
              },
              "consumptionMultiplier": {
                "type": "number"
              },
              "nodeConsumptionMultiplier": {
                "type": "number"
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "integrationUuids": {
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                }
              },
              "ips": {
                "maxItems": 64,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "ip": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "ipv4",
                          "pattern": "^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$"
                        },
                        {
                          "type": "string",
                          "format": "ipv6",
                          "pattern": "^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$"
                        }
                      ]
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "INBOUND",
                        "OUTBOUND",
                        "MANAGEMENT",
                        "TRANSIT",
                        "MONITORING",
                        "RESERVE",
                        "BLOCKED",
                        "FLAGGED",
                        "DEPRECATED",
                        "UNKNOWN"
                      ]
                    }
                  },
                  "required": [
                    "ip",
                    "status"
                  ],
                  "additionalProperties": false
                }
              },
              "createdAt": {},
              "updatedAt": {},
              "configProfile": {
                "type": "object",
                "properties": {
                  "activeConfigProfileUuid": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "activeInbounds": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "uuid": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        "profileUuid": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        "tag": {
                          "type": "string"
                        },
                        "type": {
                          "type": "string"
                        },
                        "network": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "security": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "port": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "rawInbound": {
                          "anyOf": [
                            {},
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "uuid",
                        "profileUuid",
                        "tag",
                        "type",
                        "network",
                        "security",
                        "port",
                        "rawInbound"
                      ],
                      "additionalProperties": false
                    }
                  }
                },
                "required": [
                  "activeConfigProfileUuid",
                  "activeInbounds"
                ],
                "additionalProperties": false
              },
              "providerUuid": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "provider": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "uuid": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      "name": {
                        "type": "string"
                      },
                      "faviconLink": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "loginUrl": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "createdAt": {},
                      "updatedAt": {}
                    },
                    "required": [
                      "uuid",
                      "name",
                      "faviconLink",
                      "loginUrl",
                      "createdAt",
                      "updatedAt"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "activePluginUuid": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "system": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "info": {
                        "type": "object",
                        "properties": {
                          "arch": {
                            "type": "string"
                          },
                          "cpus": {
                            "type": "integer",
                            "minimum": -9007199254740991,
                            "maximum": 9007199254740991
                          },
                          "cpuModel": {
                            "type": "string"
                          },
                          "memoryTotal": {
                            "type": "number"
                          },
                          "hostname": {
                            "type": "string"
                          },
                          "platform": {
                            "type": "string"
                          },
                          "release": {
                            "type": "string"
                          },
                          "type": {
                            "type": "string"
                          },
                          "version": {
                            "type": "string"
                          },
                          "networkInterfaces": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          }
                        },
                        "required": [
                          "arch",
                          "cpus",
                          "cpuModel",
                          "memoryTotal",
                          "hostname",
                          "platform",
                          "release",
                          "type",
                          "version",
                          "networkInterfaces"
                        ],
                        "additionalProperties": false
                      },
                      "stats": {
                        "type": "object",
                        "properties": {
                          "memoryFree": {
                            "type": "number"
                          },
                          "memoryUsed": {
                            "type": "number"
                          },
                          "uptime": {
                            "type": "number"
                          },
                          "loadAvg": {
                            "type": "array",
                            "items": {
                              "type": "number"
                            }
                          },
                          "interface": {
                            "anyOf": [
                              {
                                "type": "object",
                                "properties": {
                                  "interface": {
                                    "type": "string"
                                  },
                                  "rxBytesPerSec": {
                                    "type": "number"
                                  },
                                  "txBytesPerSec": {
                                    "type": "number"
                                  },
                                  "rxTotal": {
                                    "type": "number"
                                  },
                                  "txTotal": {
                                    "type": "number"
                                  }
                                },
                                "required": [
                                  "interface",
                                  "rxBytesPerSec",
                                  "txBytesPerSec",
                                  "rxTotal",
                                  "txTotal"
                                ],
                                "additionalProperties": false
                              },
                              {
                                "type": "null"
                              }
                            ]
                          }
                        },
                        "required": [
                          "memoryFree",
                          "memoryUsed",
                          "uptime",
                          "loadAvg",
                          "interface"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "info",
                      "stats"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "versions": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "xray": {
                        "type": "string"
                      },
                      "node": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "xray",
                      "node"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "xrayUptime": {
                "type": "number"
              },
              "usersOnline": {
                "type": "number"
              },
              "note": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "uuid",
              "id",
              "name",
              "address",
              "port",
              "proxyUrl",
              "isConnected",
              "isDisabled",
              "isConnecting",
              "lastStatusChange",
              "lastStatusMessage",
              "isTrafficTrackingActive",
              "trafficResetDay",
              "trafficLimitBytes",
              "trafficUsedBytes",
              "notifyPercent",
              "viewPosition",
              "countryCode",
              "consumptionMultiplier",
              "nodeConsumptionMultiplier",
              "tags",
              "integrationUuids",
              "ips",
              "createdAt",
              "updatedAt",
              "configProfile",
              "providerUuid",
              "provider",
              "activePluginUuid",
              "system",
              "versions",
              "xrayUptime",
              "usersOnline",
              "note"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
DELETE/api/nodes/{uuid}Delete a node
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success"
}
POST/api/nodes/actions/reorderReorder nodes
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "nodes": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "viewPosition": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "uuid": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                }
              },
              "required": [
                "viewPosition",
                "uuid"
              ]
            }
          }
        },
        "required": [
          "nodes"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "uuid": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                "id": {
                  "type": "number"
                },
                "name": {
                  "type": "string"
                },
                "address": {
                  "type": "string"
                },
                "port": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "proxyUrl": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "isConnected": {
                  "type": "boolean"
                },
                "isDisabled": {
                  "type": "boolean"
                },
                "isConnecting": {
                  "type": "boolean"
                },
                "lastStatusChange": {
                  "anyOf": [
                    {},
                    {
                      "type": "null"
                    }
                  ]
                },
                "lastStatusMessage": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "isTrafficTrackingActive": {
                  "type": "boolean"
                },
                "trafficResetDay": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "trafficLimitBytes": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "trafficUsedBytes": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "notifyPercent": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "viewPosition": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "countryCode": {
                  "type": "string"
                },
                "consumptionMultiplier": {
                  "type": "number"
                },
                "nodeConsumptionMultiplier": {
                  "type": "number"
                },
                "tags": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "integrationUuids": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  }
                },
                "ips": {
                  "maxItems": 64,
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "ip": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "ipv4",
                            "pattern": "^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$"
                          },
                          {
                            "type": "string",
                            "format": "ipv6",
                            "pattern": "^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$"
                          }
                        ]
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "INBOUND",
                          "OUTBOUND",
                          "MANAGEMENT",
                          "TRANSIT",
                          "MONITORING",
                          "RESERVE",
                          "BLOCKED",
                          "FLAGGED",
                          "DEPRECATED",
                          "UNKNOWN"
                        ]
                      }
                    },
                    "required": [
                      "ip",
                      "status"
                    ],
                    "additionalProperties": false
                  }
                },
                "createdAt": {},
                "updatedAt": {},
                "configProfile": {
                  "type": "object",
                  "properties": {
                    "activeConfigProfileUuid": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "activeInbounds": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "uuid": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                          },
                          "profileUuid": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                          },
                          "tag": {
                            "type": "string"
                          },
                          "type": {
                            "type": "string"
                          },
                          "network": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "security": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "port": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "rawInbound": {
                            "anyOf": [
                              {},
                              {
                                "type": "null"
                              }
                            ]
                          }
                        },
                        "required": [
                          "uuid",
                          "profileUuid",
                          "tag",
                          "type",
                          "network",
                          "security",
                          "port",
                          "rawInbound"
                        ],
                        "additionalProperties": false
                      }
                    }
                  },
                  "required": [
                    "activeConfigProfileUuid",
                    "activeInbounds"
                  ],
                  "additionalProperties": false
                },
                "providerUuid": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "provider": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "uuid": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        "name": {
                          "type": "string"
                        },
                        "faviconLink": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "loginUrl": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "createdAt": {},
                        "updatedAt": {}
                      },
                      "required": [
                        "uuid",
                        "name",
                        "faviconLink",
                        "loginUrl",
                        "createdAt",
                        "updatedAt"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "activePluginUuid": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "system": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "info": {
                          "type": "object",
                          "properties": {
                            "arch": {
                              "type": "string"
                            },
                            "cpus": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991
                            },
                            "cpuModel": {
                              "type": "string"
                            },
                            "memoryTotal": {
                              "type": "number"
                            },
                            "hostname": {
                              "type": "string"
                            },
                            "platform": {
                              "type": "string"
                            },
                            "release": {
                              "type": "string"
                            },
                            "type": {
                              "type": "string"
                            },
                            "version": {
                              "type": "string"
                            },
                            "networkInterfaces": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            }
                          },
                          "required": [
                            "arch",
                            "cpus",
                            "cpuModel",
                            "memoryTotal",
                            "hostname",
                            "platform",
                            "release",
                            "type",
                            "version",
                            "networkInterfaces"
                          ],
                          "additionalProperties": false
                        },
                        "stats": {
                          "type": "object",
                          "properties": {
                            "memoryFree": {
                              "type": "number"
                            },
                            "memoryUsed": {
                              "type": "number"
                            },
                            "uptime": {
                              "type": "number"
                            },
                            "loadAvg": {
                              "type": "array",
                              "items": {
                                "type": "number"
                              }
                            },
                            "interface": {
                              "anyOf": [
                                {
                                  "type": "object",
                                  "properties": {
                                    "interface": {
                                      "type": "string"
                                    },
                                    "rxBytesPerSec": {
                                      "type": "number"
                                    },
                                    "txBytesPerSec": {
                                      "type": "number"
                                    },
                                    "rxTotal": {
                                      "type": "number"
                                    },
                                    "txTotal": {
                                      "type": "number"
                                    }
                                  },
                                  "required": [
                                    "interface",
                                    "rxBytesPerSec",
                                    "txBytesPerSec",
                                    "rxTotal",
                                    "txTotal"
                                  ],
                                  "additionalProperties": false
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            }
                          },
                          "required": [
                            "memoryFree",
                            "memoryUsed",
                            "uptime",
                            "loadAvg",
                            "interface"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "required": [
                        "info",
                        "stats"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "versions": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "xray": {
                          "type": "string"
                        },
                        "node": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "xray",
                        "node"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "xrayUptime": {
                  "type": "number"
                },
                "usersOnline": {
                  "type": "number"
                },
                "note": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "required": [
                "uuid",
                "id",
                "name",
                "address",
                "port",
                "proxyUrl",
                "isConnected",
                "isDisabled",
                "isConnecting",
                "lastStatusChange",
                "lastStatusMessage",
                "isTrafficTrackingActive",
                "trafficResetDay",
                "trafficLimitBytes",
                "trafficUsedBytes",
                "notifyPercent",
                "viewPosition",
                "countryCode",
                "consumptionMultiplier",
                "nodeConsumptionMultiplier",
                "tags",
                "integrationUuids",
                "ips",
                "createdAt",
                "updatedAt",
                "configProfile",
                "providerUuid",
                "provider",
                "activePluginUuid",
                "system",
                "versions",
                "xrayUptime",
                "usersOnline",
                "note"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/nodes/actions/restart-allRestart all nodes
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "forceRestart": {
            "type": "boolean"
          }
        },
        "required": [
          "forceRestart"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success"
}
POST/api/nodes/bulk-actions/profile-modificationModify Inbounds & Profile for many nodes
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "uuids": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            }
          },
          "configProfile": {
            "type": "object",
            "properties": {
              "activeConfigProfileUuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "activeInbounds": {
                "minItems": 1,
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                }
              }
            },
            "required": [
              "activeConfigProfileUuid",
              "activeInbounds"
            ]
          }
        },
        "required": [
          "uuids",
          "configProfile"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success"
}
POST/api/nodes/bulk-actions/updateUpdate many nodes
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "uuids": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            }
          },
          "fields": {
            "type": "object",
            "properties": {
              "countryCode": {
                "type": "string",
                "maxLength": 2
              },
              "consumptionMultiplier": {
                "type": "number",
                "minimum": 0,
                "maximum": 100
              },
              "nodeConsumptionMultiplier": {
                "type": "number",
                "minimum": 0,
                "maximum": 100
              },
              "providerUuid": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "tags": {
                "maxItems": 10,
                "type": "array",
                "items": {
                  "type": "string",
                  "maxLength": 36,
                  "pattern": "^[A-Z0-9_:]+$"
                }
              },
              "activePluginUuid": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "integrationUuids": {
                "maxItems": 20,
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                }
              },
              "note": {
                "anyOf": [
                  {
                    "type": "string",
                    "maxLength": 255
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            }
          }
        },
        "required": [
          "uuids",
          "fields"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success"
}
POST/api/nodes/bulk-actionsPerform actions for many nodes
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "uuids": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            }
          },
          "action": {
            "type": "string",
            "enum": [
              "ENABLE",
              "DISABLE",
              "RESTART",
              "RESET_TRAFFIC"
            ]
          }
        },
        "required": [
          "uuids",
          "action"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success"
}
GET/api/nodes/tagsGet nodes tags
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "required": [
              "tags"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/nodesGet nodes
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "uuid": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                },
                "id": {
                  "type": "number"
                },
                "name": {
                  "type": "string"
                },
                "address": {
                  "type": "string"
                },
                "port": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "proxyUrl": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "isConnected": {
                  "type": "boolean"
                },
                "isDisabled": {
                  "type": "boolean"
                },
                "isConnecting": {
                  "type": "boolean"
                },
                "lastStatusChange": {
                  "anyOf": [
                    {},
                    {
                      "type": "null"
                    }
                  ]
                },
                "lastStatusMessage": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "isTrafficTrackingActive": {
                  "type": "boolean"
                },
                "trafficResetDay": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "trafficLimitBytes": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "trafficUsedBytes": {
                  "type": [
                    "number",
                    "null"
                  ]
                },
                "notifyPercent": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "viewPosition": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "countryCode": {
                  "type": "string"
                },
                "consumptionMultiplier": {
                  "type": "number"
                },
                "nodeConsumptionMultiplier": {
                  "type": "number"
                },
                "tags": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "integrationUuids": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  }
                },
                "ips": {
                  "maxItems": 64,
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "ip": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "ipv4",
                            "pattern": "^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$"
                          },
                          {
                            "type": "string",
                            "format": "ipv6",
                            "pattern": "^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$"
                          }
                        ]
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "INBOUND",
                          "OUTBOUND",
                          "MANAGEMENT",
                          "TRANSIT",
                          "MONITORING",
                          "RESERVE",
                          "BLOCKED",
                          "FLAGGED",
                          "DEPRECATED",
                          "UNKNOWN"
                        ]
                      }
                    },
                    "required": [
                      "ip",
                      "status"
                    ],
                    "additionalProperties": false
                  }
                },
                "createdAt": {},
                "updatedAt": {},
                "configProfile": {
                  "type": "object",
                  "properties": {
                    "activeConfigProfileUuid": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "activeInbounds": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "uuid": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                          },
                          "profileUuid": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                          },
                          "tag": {
                            "type": "string"
                          },
                          "type": {
                            "type": "string"
                          },
                          "network": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "security": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "port": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "rawInbound": {
                            "anyOf": [
                              {},
                              {
                                "type": "null"
                              }
                            ]
                          }
                        },
                        "required": [
                          "uuid",
                          "profileUuid",
                          "tag",
                          "type",
                          "network",
                          "security",
                          "port",
                          "rawInbound"
                        ],
                        "additionalProperties": false
                      }
                    }
                  },
                  "required": [
                    "activeConfigProfileUuid",
                    "activeInbounds"
                  ],
                  "additionalProperties": false
                },
                "providerUuid": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "provider": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "uuid": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        "name": {
                          "type": "string"
                        },
                        "faviconLink": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "loginUrl": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "createdAt": {},
                        "updatedAt": {}
                      },
                      "required": [
                        "uuid",
                        "name",
                        "faviconLink",
                        "loginUrl",
                        "createdAt",
                        "updatedAt"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "activePluginUuid": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "system": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "info": {
                          "type": "object",
                          "properties": {
                            "arch": {
                              "type": "string"
                            },
                            "cpus": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991
                            },
                            "cpuModel": {
                              "type": "string"
                            },
                            "memoryTotal": {
                              "type": "number"
                            },
                            "hostname": {
                              "type": "string"
                            },
                            "platform": {
                              "type": "string"
                            },
                            "release": {
                              "type": "string"
                            },
                            "type": {
                              "type": "string"
                            },
                            "version": {
                              "type": "string"
                            },
                            "networkInterfaces": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            }
                          },
                          "required": [
                            "arch",
                            "cpus",
                            "cpuModel",
                            "memoryTotal",
                            "hostname",
                            "platform",
                            "release",
                            "type",
                            "version",
                            "networkInterfaces"
                          ],
                          "additionalProperties": false
                        },
                        "stats": {
                          "type": "object",
                          "properties": {
                            "memoryFree": {
                              "type": "number"
                            },
                            "memoryUsed": {
                              "type": "number"
                            },
                            "uptime": {
                              "type": "number"
                            },
                            "loadAvg": {
                              "type": "array",
                              "items": {
                                "type": "number"
                              }
                            },
                            "interface": {
                              "anyOf": [
                                {
                                  "type": "object",
                                  "properties": {
                                    "interface": {
                                      "type": "string"
                                    },
                                    "rxBytesPerSec": {
                                      "type": "number"
                                    },
                                    "txBytesPerSec": {
                                      "type": "number"
                                    },
                                    "rxTotal": {
                                      "type": "number"
                                    },
                                    "txTotal": {
                                      "type": "number"
                                    }
                                  },
                                  "required": [
                                    "interface",
                                    "rxBytesPerSec",
                                    "txBytesPerSec",
                                    "rxTotal",
                                    "txTotal"
                                  ],
                                  "additionalProperties": false
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            }
                          },
                          "required": [
                            "memoryFree",
                            "memoryUsed",
                            "uptime",
                            "loadAvg",
                            "interface"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "required": [
                        "info",
                        "stats"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "versions": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "xray": {
                          "type": "string"
                        },
                        "node": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "xray",
                        "node"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "xrayUptime": {
                  "type": "number"
                },
                "usersOnline": {
                  "type": "number"
                },
                "note": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "required": [
                "uuid",
                "id",
                "name",
                "address",
                "port",
                "proxyUrl",
                "isConnected",
                "isDisabled",
                "isConnecting",
                "lastStatusChange",
                "lastStatusMessage",
                "isTrafficTrackingActive",
                "trafficResetDay",
                "trafficLimitBytes",
                "trafficUsedBytes",
                "notifyPercent",
                "viewPosition",
                "countryCode",
                "consumptionMultiplier",
                "nodeConsumptionMultiplier",
                "tags",
                "integrationUuids",
                "ips",
                "createdAt",
                "updatedAt",
                "configProfile",
                "providerUuid",
                "provider",
                "activePluginUuid",
                "system",
                "versions",
                "xrayUptime",
                "usersOnline",
                "note"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/nodesCreate a new node
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 3,
            "maxLength": 30
          },
          "address": {
            "type": "string",
            "minLength": 2
          },
          "port": {
            "type": "integer",
            "minimum": 1,
            "maximum": 65535
          },
          "proxyUrl": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^socks5:\\/\\/(?:[^:@/\\s]+(?::[^@/\\s]*)?@)?[^:@/\\s]+:\\d{1,5}$"
              },
              {
                "type": "null"
              }
            ]
          },
          "isTrafficTrackingActive": {
            "default": false,
            "type": "boolean"
          },
          "trafficLimitBytes": {
            "type": "number",
            "minimum": 0
          },
          "notifyPercent": {
            "type": "integer",
            "minimum": 0,
            "maximum": 100
          },
          "trafficResetDay": {
            "type": "integer",
            "minimum": 1,
            "maximum": 31
          },
          "countryCode": {
            "default": "XX",
            "type": "string",
            "maxLength": 2
          },
          "consumptionMultiplier": {
            "type": "number",
            "minimum": 0,
            "maximum": 100
          },
          "nodeConsumptionMultiplier": {
            "type": "number",
            "minimum": 0,
            "maximum": 100
          },
          "configProfile": {
            "type": "object",
            "properties": {
              "activeConfigProfileUuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "activeInbounds": {
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                }
              }
            },
            "required": [
              "activeConfigProfileUuid",
              "activeInbounds"
            ]
          },
          "providerUuid": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              {
                "type": "null"
              }
            ]
          },
          "tags": {
            "maxItems": 10,
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 36,
              "pattern": "^[A-Z0-9_:]+$"
            }
          },
          "activePluginUuid": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              {
                "type": "null"
              }
            ]
          },
          "integrationUuids": {
            "maxItems": 20,
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            }
          },
          "note": {
            "type": "string",
            "maxLength": 255
          },
          "ips": {
            "maxItems": 64,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "ip": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "ipv4",
                      "pattern": "^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$"
                    },
                    {
                      "type": "string",
                      "format": "ipv6",
                      "pattern": "^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$"
                    }
                  ]
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "INBOUND",
                    "OUTBOUND",
                    "MANAGEMENT",
                    "TRANSIT",
                    "MONITORING",
                    "RESERVE",
                    "BLOCKED",
                    "FLAGGED",
                    "DEPRECATED",
                    "UNKNOWN"
                  ]
                }
              },
              "required": [
                "ip",
                "status"
              ]
            }
          }
        },
        "required": [
          "name",
          "address",
          "configProfile"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "id": {
                "type": "number"
              },
              "name": {
                "type": "string"
              },
              "address": {
                "type": "string"
              },
              "port": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "proxyUrl": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "isConnected": {
                "type": "boolean"
              },
              "isDisabled": {
                "type": "boolean"
              },
              "isConnecting": {
                "type": "boolean"
              },
              "lastStatusChange": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "lastStatusMessage": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "isTrafficTrackingActive": {
                "type": "boolean"
              },
              "trafficResetDay": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "trafficLimitBytes": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "trafficUsedBytes": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "notifyPercent": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "viewPosition": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "countryCode": {
                "type": "string"
              },
              "consumptionMultiplier": {
                "type": "number"
              },
              "nodeConsumptionMultiplier": {
                "type": "number"
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "integrationUuids": {
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                }
              },
              "ips": {
                "maxItems": 64,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "ip": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "ipv4",
                          "pattern": "^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$"
                        },
                        {
                          "type": "string",
                          "format": "ipv6",
                          "pattern": "^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$"
                        }
                      ]
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "INBOUND",
                        "OUTBOUND",
                        "MANAGEMENT",
                        "TRANSIT",
                        "MONITORING",
                        "RESERVE",
                        "BLOCKED",
                        "FLAGGED",
                        "DEPRECATED",
                        "UNKNOWN"
                      ]
                    }
                  },
                  "required": [
                    "ip",
                    "status"
                  ],
                  "additionalProperties": false
                }
              },
              "createdAt": {},
              "updatedAt": {},
              "configProfile": {
                "type": "object",
                "properties": {
                  "activeConfigProfileUuid": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "activeInbounds": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "uuid": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        "profileUuid": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        "tag": {
                          "type": "string"
                        },
                        "type": {
                          "type": "string"
                        },
                        "network": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "security": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "port": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "rawInbound": {
                          "anyOf": [
                            {},
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "uuid",
                        "profileUuid",
                        "tag",
                        "type",
                        "network",
                        "security",
                        "port",
                        "rawInbound"
                      ],
                      "additionalProperties": false
                    }
                  }
                },
                "required": [
                  "activeConfigProfileUuid",
                  "activeInbounds"
                ],
                "additionalProperties": false
              },
              "providerUuid": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "provider": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "uuid": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      "name": {
                        "type": "string"
                      },
                      "faviconLink": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "loginUrl": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "createdAt": {},
                      "updatedAt": {}
                    },
                    "required": [
                      "uuid",
                      "name",
                      "faviconLink",
                      "loginUrl",
                      "createdAt",
                      "updatedAt"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "activePluginUuid": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "system": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "info": {
                        "type": "object",
                        "properties": {
                          "arch": {
                            "type": "string"
                          },
                          "cpus": {
                            "type": "integer",
                            "minimum": -9007199254740991,
                            "maximum": 9007199254740991
                          },
                          "cpuModel": {
                            "type": "string"
                          },
                          "memoryTotal": {
                            "type": "number"
                          },
                          "hostname": {
                            "type": "string"
                          },
                          "platform": {
                            "type": "string"
                          },
                          "release": {
                            "type": "string"
                          },
                          "type": {
                            "type": "string"
                          },
                          "version": {
                            "type": "string"
                          },
                          "networkInterfaces": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          }
                        },
                        "required": [
                          "arch",
                          "cpus",
                          "cpuModel",
                          "memoryTotal",
                          "hostname",
                          "platform",
                          "release",
                          "type",
                          "version",
                          "networkInterfaces"
                        ],
                        "additionalProperties": false
                      },
                      "stats": {
                        "type": "object",
                        "properties": {
                          "memoryFree": {
                            "type": "number"
                          },
                          "memoryUsed": {
                            "type": "number"
                          },
                          "uptime": {
                            "type": "number"
                          },
                          "loadAvg": {
                            "type": "array",
                            "items": {
                              "type": "number"
                            }
                          },
                          "interface": {
                            "anyOf": [
                              {
                                "type": "object",
                                "properties": {
                                  "interface": {
                                    "type": "string"
                                  },
                                  "rxBytesPerSec": {
                                    "type": "number"
                                  },
                                  "txBytesPerSec": {
                                    "type": "number"
                                  },
                                  "rxTotal": {
                                    "type": "number"
                                  },
                                  "txTotal": {
                                    "type": "number"
                                  }
                                },
                                "required": [
                                  "interface",
                                  "rxBytesPerSec",
                                  "txBytesPerSec",
                                  "rxTotal",
                                  "txTotal"
                                ],
                                "additionalProperties": false
                              },
                              {
                                "type": "null"
                              }
                            ]
                          }
                        },
                        "required": [
                          "memoryFree",
                          "memoryUsed",
                          "uptime",
                          "loadAvg",
                          "interface"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "info",
                      "stats"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "versions": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "xray": {
                        "type": "string"
                      },
                      "node": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "xray",
                      "node"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "xrayUptime": {
                "type": "number"
              },
              "usersOnline": {
                "type": "number"
              },
              "note": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "uuid",
              "id",
              "name",
              "address",
              "port",
              "proxyUrl",
              "isConnected",
              "isDisabled",
              "isConnecting",
              "lastStatusChange",
              "lastStatusMessage",
              "isTrafficTrackingActive",
              "trafficResetDay",
              "trafficLimitBytes",
              "trafficUsedBytes",
              "notifyPercent",
              "viewPosition",
              "countryCode",
              "consumptionMultiplier",
              "nodeConsumptionMultiplier",
              "tags",
              "integrationUuids",
              "ips",
              "createdAt",
              "updatedAt",
              "configProfile",
              "providerUuid",
              "provider",
              "activePluginUuid",
              "system",
              "versions",
              "xrayUptime",
              "usersOnline",
              "note"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
PATCH/api/nodesUpdate node
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "name": {
            "type": "string",
            "minLength": 3,
            "maxLength": 30
          },
          "address": {
            "type": "string",
            "minLength": 2
          },
          "port": {
            "type": "number",
            "minimum": 1,
            "maximum": 65535
          },
          "proxyUrl": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^socks5:\\/\\/(?:[^:@/\\s]+(?::[^@/\\s]*)?@)?[^:@/\\s]+:\\d{1,5}$"
              },
              {
                "type": "null"
              }
            ]
          },
          "isTrafficTrackingActive": {
            "type": "boolean"
          },
          "trafficLimitBytes": {
            "type": "number",
            "minimum": 0
          },
          "notifyPercent": {
            "type": "number",
            "minimum": 0,
            "maximum": 100
          },
          "trafficResetDay": {
            "type": "number",
            "minimum": 1,
            "maximum": 31
          },
          "countryCode": {
            "type": "string",
            "maxLength": 2
          },
          "consumptionMultiplier": {
            "type": "number",
            "minimum": 0,
            "maximum": 100
          },
          "nodeConsumptionMultiplier": {
            "type": "number",
            "minimum": 0,
            "maximum": 100
          },
          "configProfile": {
            "type": "object",
            "properties": {
              "activeConfigProfileUuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "activeInbounds": {
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                }
              }
            },
            "required": [
              "activeConfigProfileUuid",
              "activeInbounds"
            ]
          },
          "providerUuid": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              {
                "type": "null"
              }
            ]
          },
          "tags": {
            "maxItems": 10,
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 36,
              "pattern": "^[A-Z0-9_:]+$"
            }
          },
          "activePluginUuid": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              {
                "type": "null"
              }
            ]
          },
          "integrationUuids": {
            "maxItems": 20,
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            }
          },
          "note": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 255
              },
              {
                "type": "null"
              }
            ]
          },
          "ips": {
            "maxItems": 64,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "ip": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "ipv4",
                      "pattern": "^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$"
                    },
                    {
                      "type": "string",
                      "format": "ipv6",
                      "pattern": "^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$"
                    }
                  ]
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "INBOUND",
                    "OUTBOUND",
                    "MANAGEMENT",
                    "TRANSIT",
                    "MONITORING",
                    "RESERVE",
                    "BLOCKED",
                    "FLAGGED",
                    "DEPRECATED",
                    "UNKNOWN"
                  ]
                }
              },
              "required": [
                "ip",
                "status"
              ]
            }
          },
          "trafficTrackingStart": {
            "type": "string",
            "enum": [
              "keep",
              "zero",
              "period"
            ],
            "description": "GoWave extension. Applies when this update turns `isTrafficTrackingActive` on: `keep` keeps the bytes counted since the last reset (the default, as upstream), `zero` starts from nothing, `period` counts the current period from the usage history."
          }
        },
        "required": [
          "uuid"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "id": {
                "type": "number"
              },
              "name": {
                "type": "string"
              },
              "address": {
                "type": "string"
              },
              "port": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "proxyUrl": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "isConnected": {
                "type": "boolean"
              },
              "isDisabled": {
                "type": "boolean"
              },
              "isConnecting": {
                "type": "boolean"
              },
              "lastStatusChange": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "lastStatusMessage": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "isTrafficTrackingActive": {
                "type": "boolean"
              },
              "trafficResetDay": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "trafficLimitBytes": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "trafficUsedBytes": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "notifyPercent": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "viewPosition": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "countryCode": {
                "type": "string"
              },
              "consumptionMultiplier": {
                "type": "number"
              },
              "nodeConsumptionMultiplier": {
                "type": "number"
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "integrationUuids": {
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                }
              },
              "ips": {
                "maxItems": 64,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "ip": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "ipv4",
                          "pattern": "^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$"
                        },
                        {
                          "type": "string",
                          "format": "ipv6",
                          "pattern": "^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$"
                        }
                      ]
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "INBOUND",
                        "OUTBOUND",
                        "MANAGEMENT",
                        "TRANSIT",
                        "MONITORING",
                        "RESERVE",
                        "BLOCKED",
                        "FLAGGED",
                        "DEPRECATED",
                        "UNKNOWN"
                      ]
                    }
                  },
                  "required": [
                    "ip",
                    "status"
                  ],
                  "additionalProperties": false
                }
              },
              "createdAt": {},
              "updatedAt": {},
              "configProfile": {
                "type": "object",
                "properties": {
                  "activeConfigProfileUuid": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "activeInbounds": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "uuid": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        "profileUuid": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        "tag": {
                          "type": "string"
                        },
                        "type": {
                          "type": "string"
                        },
                        "network": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "security": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "port": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "rawInbound": {
                          "anyOf": [
                            {},
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "uuid",
                        "profileUuid",
                        "tag",
                        "type",
                        "network",
                        "security",
                        "port",
                        "rawInbound"
                      ],
                      "additionalProperties": false
                    }
                  }
                },
                "required": [
                  "activeConfigProfileUuid",
                  "activeInbounds"
                ],
                "additionalProperties": false
              },
              "providerUuid": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "provider": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "uuid": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      "name": {
                        "type": "string"
                      },
                      "faviconLink": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "loginUrl": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "createdAt": {},
                      "updatedAt": {}
                    },
                    "required": [
                      "uuid",
                      "name",
                      "faviconLink",
                      "loginUrl",
                      "createdAt",
                      "updatedAt"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "activePluginUuid": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "system": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "info": {
                        "type": "object",
                        "properties": {
                          "arch": {
                            "type": "string"
                          },
                          "cpus": {
                            "type": "integer",
                            "minimum": -9007199254740991,
                            "maximum": 9007199254740991
                          },
                          "cpuModel": {
                            "type": "string"
                          },
                          "memoryTotal": {
                            "type": "number"
                          },
                          "hostname": {
                            "type": "string"
                          },
                          "platform": {
                            "type": "string"
                          },
                          "release": {
                            "type": "string"
                          },
                          "type": {
                            "type": "string"
                          },
                          "version": {
                            "type": "string"
                          },
                          "networkInterfaces": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          }
                        },
                        "required": [
                          "arch",
                          "cpus",
                          "cpuModel",
                          "memoryTotal",
                          "hostname",
                          "platform",
                          "release",
                          "type",
                          "version",
                          "networkInterfaces"
                        ],
                        "additionalProperties": false
                      },
                      "stats": {
                        "type": "object",
                        "properties": {
                          "memoryFree": {
                            "type": "number"
                          },
                          "memoryUsed": {
                            "type": "number"
                          },
                          "uptime": {
                            "type": "number"
                          },
                          "loadAvg": {
                            "type": "array",
                            "items": {
                              "type": "number"
                            }
                          },
                          "interface": {
                            "anyOf": [
                              {
                                "type": "object",
                                "properties": {
                                  "interface": {
                                    "type": "string"
                                  },
                                  "rxBytesPerSec": {
                                    "type": "number"
                                  },
                                  "txBytesPerSec": {
                                    "type": "number"
                                  },
                                  "rxTotal": {
                                    "type": "number"
                                  },
                                  "txTotal": {
                                    "type": "number"
                                  }
                                },
                                "required": [
                                  "interface",
                                  "rxBytesPerSec",
                                  "txBytesPerSec",
                                  "rxTotal",
                                  "txTotal"
                                ],
                                "additionalProperties": false
                              },
                              {
                                "type": "null"
                              }
                            ]
                          }
                        },
                        "required": [
                          "memoryFree",
                          "memoryUsed",
                          "uptime",
                          "loadAvg",
                          "interface"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "info",
                      "stats"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "versions": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "xray": {
                        "type": "string"
                      },
                      "node": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "xray",
                      "node"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "xrayUptime": {
                "type": "number"
              },
              "usersOnline": {
                "type": "number"
              },
              "note": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "uuid",
              "id",
              "name",
              "address",
              "port",
              "proxyUrl",
              "isConnected",
              "isDisabled",
              "isConnecting",
              "lastStatusChange",
              "lastStatusMessage",
              "isTrafficTrackingActive",
              "trafficResetDay",
              "trafficLimitBytes",
              "trafficUsedBytes",
              "notifyPercent",
              "viewPosition",
              "countryCode",
              "consumptionMultiplier",
              "nodeConsumptionMultiplier",
              "tags",
              "integrationUuids",
              "ips",
              "createdAt",
              "updatedAt",
              "configProfile",
              "providerUuid",
              "provider",
              "activePluginUuid",
              "system",
              "versions",
              "xrayUptime",
              "usersOnline",
              "note"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}

passkeys

GET/api/passkeys/registration/optionsGet registration options for passkey
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {}
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/passkeys/registration/verifyVerify registration for passkey
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {}
        },
        "required": [
          "response"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "verified": {
                "type": "boolean"
              }
            },
            "required": [
              "verified"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/passkeysGet passkeys
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "passkeys": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "createdAt": {
                      "description": "Created date. Format: 2025-01-17T15:38:45.065Z"
                    },
                    "lastUsedAt": {
                      "description": "Last used date. Format: 2025-01-17T15:38:45.065Z"
                    }
                  },
                  "required": [
                    "id",
                    "name",
                    "createdAt",
                    "lastUsedAt"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "passkeys"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
PATCH/api/passkeysUpdate passkey
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "minLength": 2,
            "maxLength": 30,
            "pattern": "^[A-Za-z0-9_\\s-]+$"
          }
        },
        "required": [
          "id",
          "name"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "passkeys": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "createdAt": {
                      "description": "Created date. Format: 2025-01-17T15:38:45.065Z"
                    },
                    "lastUsedAt": {
                      "description": "Last used date. Format: 2025-01-17T15:38:45.065Z"
                    }
                  },
                  "required": [
                    "id",
                    "name",
                    "createdAt",
                    "lastUsedAt"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "passkeys"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
DELETE/api/passkeysDelete a passkey by ID
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          }
        },
        "required": [
          "id"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success"
}

remnawave-settings

GET/api/remnawave-settingsGet Remnawave settings
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "passkeySettings": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "enabled": {
                        "type": "boolean"
                      },
                      "rpId": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "origin": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "enabled",
                      "rpId",
                      "origin"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "oauth2Settings": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "github": {
                        "type": "object",
                        "properties": {
                          "enabled": {
                            "type": "boolean"
                          },
                          "clientId": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "clientSecret": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "allowedEmails": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          }
                        },
                        "required": [
                          "enabled",
                          "clientId",
                          "clientSecret",
                          "allowedEmails"
                        ],
                        "additionalProperties": false
                      },
                      "pocketid": {
                        "type": "object",
                        "properties": {
                          "enabled": {
                            "type": "boolean"
                          },
                          "clientId": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "clientSecret": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "frontendDomain": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "plainDomain": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "allowedEmails": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          }
                        },
                        "required": [
                          "enabled",
                          "clientId",
                          "clientSecret",
                          "frontendDomain",
                          "plainDomain",
                          "allowedEmails"
                        ],
                        "additionalProperties": false
                      },
                      "yandex": {
                        "type": "object",
                        "properties": {
                          "enabled": {
                            "type": "boolean"
                          },
                          "clientId": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "clientSecret": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "allowedEmails": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          }
                        },
                        "required": [
                          "enabled",
                          "clientId",
                          "clientSecret",
                          "allowedEmails"
                        ],
                        "additionalProperties": false,
                        "description": "Not supported by GoWave: Yandex sign-in is removed. The provider is always disabled and saved settings are discarded."
                      },
                      "keycloak": {
                        "default": {
                          "enabled": false,
                          "realm": null,
                          "frontendDomain": null,
                          "keycloakDomain": null,
                          "clientId": null,
                          "clientSecret": null,
                          "allowedEmails": []
                        },
                        "type": "object",
                        "properties": {
                          "enabled": {
                            "type": "boolean"
                          },
                          "realm": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "clientId": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "clientSecret": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "frontendDomain": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "keycloakDomain": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "allowedEmails": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          }
                        },
                        "required": [
                          "enabled",
                          "realm",
                          "clientId",
                          "clientSecret",
                          "frontendDomain",
                          "keycloakDomain",
                          "allowedEmails"
                        ],
                        "additionalProperties": false
                      },
                      "generic": {
                        "default": {
                          "enabled": false,
                          "frontendDomain": null,
                          "tokenUrl": null,
                          "clientId": null,
                          "clientSecret": null,
                          "withPkce": false,
                          "authorizationUrl": null,
                          "allowedEmails": []
                        },
                        "type": "object",
                        "properties": {
                          "enabled": {
                            "type": "boolean"
                          },
                          "clientId": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "clientSecret": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "withPkce": {
                            "type": "boolean"
                          },
                          "authorizationUrl": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "tokenUrl": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "frontendDomain": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "allowedEmails": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          }
                        },
                        "required": [
                          "enabled",
                          "clientId",
                          "clientSecret",
                          "withPkce",
                          "authorizationUrl",
                          "tokenUrl",
                          "frontendDomain",
                          "allowedEmails"
                        ],
                        "additionalProperties": false
                      },
                      "telegram": {
                        "default": {
                          "enabled": false,
                          "clientId": null,
                          "clientSecret": null,
                          "allowedIds": [],
                          "frontendDomain": null
                        },
                        "type": "object",
                        "properties": {
                          "enabled": {
                            "type": "boolean"
                          },
                          "clientId": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "clientSecret": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "allowedIds": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "frontendDomain": {
                            "type": [
                              "string",
                              "null"
                            ]
                          }
                        },
                        "required": [
                          "enabled",
                          "clientId",
                          "clientSecret",
                          "allowedIds",
                          "frontendDomain"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "github",
                      "pocketid",
                      "yandex",
                      "keycloak",
                      "generic",
                      "telegram"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "passwordSettings": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "enabled": {
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "enabled"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "brandingSettings": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "title": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "logoUrl": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "uri"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "title",
                      "logoUrl"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "passkeySettings",
              "oauth2Settings",
              "passwordSettings",
              "brandingSettings"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
PATCH/api/remnawave-settingsUpdate Remnawave settings
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "passkeySettings": {
            "type": "object",
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "rpId": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "origin": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "enabled",
              "rpId",
              "origin"
            ]
          },
          "oauth2Settings": {
            "type": "object",
            "properties": {
              "github": {
                "type": "object",
                "properties": {
                  "enabled": {
                    "type": "boolean"
                  },
                  "clientId": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "clientSecret": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "allowedEmails": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "required": [
                  "enabled",
                  "clientId",
                  "clientSecret",
                  "allowedEmails"
                ]
              },
              "pocketid": {
                "type": "object",
                "properties": {
                  "enabled": {
                    "type": "boolean"
                  },
                  "clientId": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "clientSecret": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "frontendDomain": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "plainDomain": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "allowedEmails": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "required": [
                  "enabled",
                  "clientId",
                  "clientSecret",
                  "frontendDomain",
                  "plainDomain",
                  "allowedEmails"
                ]
              },
              "yandex": {
                "type": "object",
                "properties": {
                  "enabled": {
                    "type": "boolean"
                  },
                  "clientId": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "clientSecret": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "allowedEmails": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "required": [
                  "enabled",
                  "clientId",
                  "clientSecret",
                  "allowedEmails"
                ],
                "description": "Not supported by GoWave: Yandex sign-in is removed. The provider is always disabled and saved settings are discarded."
              },
              "keycloak": {
                "default": {
                  "enabled": false,
                  "realm": null,
                  "frontendDomain": null,
                  "keycloakDomain": null,
                  "clientId": null,
                  "clientSecret": null,
                  "allowedEmails": []
                },
                "type": "object",
                "properties": {
                  "enabled": {
                    "type": "boolean"
                  },
                  "realm": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "clientId": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "clientSecret": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "frontendDomain": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "keycloakDomain": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "allowedEmails": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "required": [
                  "enabled",
                  "realm",
                  "clientId",
                  "clientSecret",
                  "frontendDomain",
                  "keycloakDomain",
                  "allowedEmails"
                ]
              },
              "generic": {
                "default": {
                  "enabled": false,
                  "frontendDomain": null,
                  "tokenUrl": null,
                  "clientId": null,
                  "clientSecret": null,
                  "withPkce": false,
                  "authorizationUrl": null,
                  "allowedEmails": []
                },
                "type": "object",
                "properties": {
                  "enabled": {
                    "type": "boolean"
                  },
                  "clientId": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "clientSecret": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "withPkce": {
                    "type": "boolean"
                  },
                  "authorizationUrl": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "tokenUrl": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "frontendDomain": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "allowedEmails": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "required": [
                  "enabled",
                  "clientId",
                  "clientSecret",
                  "withPkce",
                  "authorizationUrl",
                  "tokenUrl",
                  "frontendDomain",
                  "allowedEmails"
                ]
              },
              "telegram": {
                "default": {
                  "enabled": false,
                  "clientId": null,
                  "clientSecret": null,
                  "allowedIds": [],
                  "frontendDomain": null
                },
                "type": "object",
                "properties": {
                  "enabled": {
                    "type": "boolean"
                  },
                  "clientId": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "clientSecret": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "allowedIds": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "frontendDomain": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                },
                "required": [
                  "enabled",
                  "clientId",
                  "clientSecret",
                  "allowedIds",
                  "frontendDomain"
                ]
              }
            },
            "required": [
              "github",
              "pocketid",
              "yandex"
            ]
          },
          "passwordSettings": {
            "type": "object",
            "properties": {
              "enabled": {
                "type": "boolean"
              }
            },
            "required": [
              "enabled"
            ]
          },
          "brandingSettings": {
            "type": "object",
            "properties": {
              "title": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "logoUrl": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uri"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "title",
              "logoUrl"
            ]
          }
        }
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "passkeySettings": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "enabled": {
                        "type": "boolean"
                      },
                      "rpId": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "origin": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "enabled",
                      "rpId",
                      "origin"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "oauth2Settings": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "github": {
                        "type": "object",
                        "properties": {
                          "enabled": {
                            "type": "boolean"
                          },
                          "clientId": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "clientSecret": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "allowedEmails": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          }
                        },
                        "required": [
                          "enabled",
                          "clientId",
                          "clientSecret",
                          "allowedEmails"
                        ],
                        "additionalProperties": false
                      },
                      "pocketid": {
                        "type": "object",
                        "properties": {
                          "enabled": {
                            "type": "boolean"
                          },
                          "clientId": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "clientSecret": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "frontendDomain": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "plainDomain": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "allowedEmails": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          }
                        },
                        "required": [
                          "enabled",
                          "clientId",
                          "clientSecret",
                          "frontendDomain",
                          "plainDomain",
                          "allowedEmails"
                        ],
                        "additionalProperties": false
                      },
                      "yandex": {
                        "type": "object",
                        "properties": {
                          "enabled": {
                            "type": "boolean"
                          },
                          "clientId": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "clientSecret": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "allowedEmails": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          }
                        },
                        "required": [
                          "enabled",
                          "clientId",
                          "clientSecret",
                          "allowedEmails"
                        ],
                        "additionalProperties": false,
                        "description": "Not supported by GoWave: Yandex sign-in is removed. The provider is always disabled and saved settings are discarded."
                      },
                      "keycloak": {
                        "default": {
                          "enabled": false,
                          "realm": null,
                          "frontendDomain": null,
                          "keycloakDomain": null,
                          "clientId": null,
                          "clientSecret": null,
                          "allowedEmails": []
                        },
                        "type": "object",
                        "properties": {
                          "enabled": {
                            "type": "boolean"
                          },
                          "realm": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "clientId": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "clientSecret": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "frontendDomain": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "keycloakDomain": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "allowedEmails": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          }
                        },
                        "required": [
                          "enabled",
                          "realm",
                          "clientId",
                          "clientSecret",
                          "frontendDomain",
                          "keycloakDomain",
                          "allowedEmails"
                        ],
                        "additionalProperties": false
                      },
                      "generic": {
                        "default": {
                          "enabled": false,
                          "frontendDomain": null,
                          "tokenUrl": null,
                          "clientId": null,
                          "clientSecret": null,
                          "withPkce": false,
                          "authorizationUrl": null,
                          "allowedEmails": []
                        },
                        "type": "object",
                        "properties": {
                          "enabled": {
                            "type": "boolean"
                          },
                          "clientId": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "clientSecret": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "withPkce": {
                            "type": "boolean"
                          },
                          "authorizationUrl": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "tokenUrl": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "frontendDomain": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "allowedEmails": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          }
                        },
                        "required": [
                          "enabled",
                          "clientId",
                          "clientSecret",
                          "withPkce",
                          "authorizationUrl",
                          "tokenUrl",
                          "frontendDomain",
                          "allowedEmails"
                        ],
                        "additionalProperties": false
                      },
                      "telegram": {
                        "default": {
                          "enabled": false,
                          "clientId": null,
                          "clientSecret": null,
                          "allowedIds": [],
                          "frontendDomain": null
                        },
                        "type": "object",
                        "properties": {
                          "enabled": {
                            "type": "boolean"
                          },
                          "clientId": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "clientSecret": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "allowedIds": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "frontendDomain": {
                            "type": [
                              "string",
                              "null"
                            ]
                          }
                        },
                        "required": [
                          "enabled",
                          "clientId",
                          "clientSecret",
                          "allowedIds",
                          "frontendDomain"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "github",
                      "pocketid",
                      "yandex",
                      "keycloak",
                      "generic",
                      "telegram"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "passwordSettings": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "enabled": {
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "enabled"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "brandingSettings": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "title": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "logoUrl": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "uri"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "title",
                      "logoUrl"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "passkeySettings",
              "oauth2Settings",
              "passwordSettings",
              "brandingSettings"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}

snippets

POST/api/snippets/actions/syncSync snippet to affected config profiles

Trigger the sync of a snippet to all config profiles that reference it. Nodes which use affected config profiles will be restarted.

Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 2,
            "maxLength": 255,
            "pattern": "^[A-Za-z0-9_ -]+(\\/[A-Za-z0-9_ -]+)*$"
          }
        },
        "required": [
          "name"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success"
}
GET/api/snippetsGet snippets
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "total": {
                "type": "number"
              },
              "snippets": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "snippet": {}
                  },
                  "required": [
                    "name",
                    "snippet"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "total",
              "snippets"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/snippetsCreate snippet
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 2,
            "maxLength": 255,
            "pattern": "^[A-Za-z0-9_ -]+(\\/[A-Za-z0-9_ -]+)*$"
          },
          "snippet": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {},
              "additionalProperties": {}
            }
          }
        },
        "required": [
          "name",
          "snippet"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "total": {
                "type": "number"
              },
              "snippets": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "snippet": {}
                  },
                  "required": [
                    "name",
                    "snippet"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "total",
              "snippets"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
PATCH/api/snippetsUpdate snippet
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 2,
            "maxLength": 255,
            "pattern": "^[A-Za-z0-9_ -]+(\\/[A-Za-z0-9_ -]+)*$"
          },
          "snippet": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {},
              "additionalProperties": {}
            }
          }
        },
        "required": [
          "name",
          "snippet"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "total": {
                "type": "number"
              },
              "snippets": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "snippet": {}
                  },
                  "required": [
                    "name",
                    "snippet"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "total",
              "snippets"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
DELETE/api/snippetsDelete snippet
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 2,
            "maxLength": 255,
            "pattern": "^[A-Za-z0-9_ -]+(\\/[A-Za-z0-9_ -]+)*$"
          }
        },
        "required": [
          "name"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success"
}

sub

GET/api/sub/{shortUuid}/infoGet Subscription Info by Short UUID
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "shortUuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "isFound": {
                "type": "boolean"
              },
              "user": {
                "type": "object",
                "properties": {
                  "shortUuid": {
                    "type": "string"
                  },
                  "daysLeft": {
                    "type": "number"
                  },
                  "trafficUsed": {
                    "type": "string"
                  },
                  "trafficLimit": {
                    "type": "string"
                  },
                  "lifetimeTrafficUsed": {
                    "type": "string"
                  },
                  "trafficUsedBytes": {
                    "type": "string"
                  },
                  "trafficLimitBytes": {
                    "type": "string"
                  },
                  "lifetimeTrafficUsedBytes": {
                    "type": "string"
                  },
                  "username": {
                    "type": "string"
                  },
                  "expiresAt": {},
                  "isActive": {
                    "type": "boolean"
                  },
                  "userStatus": {
                    "type": "string",
                    "enum": [
                      "ACTIVE",
                      "DISABLED",
                      "LIMITED",
                      "EXPIRED"
                    ]
                  },
                  "trafficLimitStrategy": {
                    "type": "string",
                    "enum": [
                      "NO_RESET",
                      "DAY",
                      "WEEK",
                      "MONTH",
                      "MONTH_ROLLING"
                    ]
                  }
                },
                "required": [
                  "shortUuid",
                  "daysLeft",
                  "trafficUsed",
                  "trafficLimit",
                  "lifetimeTrafficUsed",
                  "trafficUsedBytes",
                  "trafficLimitBytes",
                  "lifetimeTrafficUsedBytes",
                  "username",
                  "expiresAt",
                  "isActive",
                  "userStatus",
                  "trafficLimitStrategy"
                ],
                "additionalProperties": false
              },
              "links": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "ssConfLinks": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "type": "string"
                }
              },
              "subscriptionUrl": {
                "type": "string"
              }
            },
            "required": [
              "isFound",
              "user",
              "links",
              "ssConfLinks",
              "subscriptionUrl"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/sub/{shortUuid}Get subscription

Public subscription link, no token. The format is picked by the subscription response rules from User-Agent and other request headers: base64 links, Xray JSON, Mihomo, Stash, Clash or sing-box. A rule can also answer 403, 404, 451 or drop the connection. Traffic and expiry come in subscription-userinfo, the next traffic reset in subscription-refill-date; headers from the subscription settings and the matched rule are added on top. Served by the upstream backend too, but outside the contract package.

Authentication: public endpoint.

Path, query and header parameters
[
  {
    "name": "shortUuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: 200
{
  "description": "Subscription body. `Content-Type` depends on the client: `text/plain` for base64, `application/json` for Xray JSON and sing-box, `text/yaml` for Mihomo, Stash and Clash.",
  "content": {
    "text/plain": {
      "schema": {
        "type": "string"
      }
    },
    "application/json": {
      "schema": {
        "type": "object"
      }
    },
    "text/yaml": {
      "schema": {
        "type": "string"
      }
    }
  }
}
Response: 403
{
  "description": "No `User-Agent`, no matching rule, or the rule answers `BLOCK`."
}
Response: 404
{
  "description": "User not found, or the rule answers `STATUS_CODE_404`."
}
Response: 451
{
  "description": "The rule answers `STATUS_CODE_451`."
}
GET/api/sub/{shortUuid}/{clientType}Get subscription for a client type

Same as GET /api/sub/{shortUuid}, but the format comes from the path and the response rules are not checked. Any other clientType answers 403. disableSubscriptionAccessByPath: true in the response rules settings turns these links off (403).

Authentication: public endpoint.

Path, query and header parameters
[
  {
    "name": "shortUuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  },
  {
    "name": "clientType",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string",
      "enum": [
        "json",
        "v2ray-json",
        "mihomo",
        "stash",
        "clash",
        "singbox"
      ]
    }
  }
]

Responses

Response: 200
{
  "description": "Subscription body in the requested format.",
  "content": {
    "application/json": {
      "schema": {
        "type": "object"
      }
    },
    "text/yaml": {
      "schema": {
        "type": "string"
      }
    }
  }
}
Response: 403
{
  "description": "Unknown client type, or links with a type in the path are disabled."
}
Response: 404
{
  "description": "User not found."
}

subscription-page-configs

GET/api/subscription-page-configs/{uuid}Get subscription page config by uuid
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "viewPosition": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "name": {
                "type": "string"
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "config": {}
            },
            "required": [
              "uuid",
              "viewPosition",
              "name",
              "tags",
              "config"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
DELETE/api/subscription-page-configs/{uuid}Delete subscription page config
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success"
}
POST/api/subscription-page-configs/actions/cloneClone subscription page config
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "cloneFromUuid": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          }
        },
        "required": [
          "cloneFromUuid"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "viewPosition": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "name": {
                "type": "string"
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "config": {}
            },
            "required": [
              "uuid",
              "viewPosition",
              "name",
              "tags",
              "config"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/subscription-page-configs/actions/reorderReorder subscription page configs
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "viewPosition": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "uuid": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                }
              },
              "required": [
                "viewPosition",
                "uuid"
              ]
            }
          }
        },
        "required": [
          "items"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "total": {
                "type": "number"
              },
              "configs": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "viewPosition": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "name": {
                      "type": "string"
                    },
                    "tags": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "config": {
                      "anyOf": [
                        {},
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "uuid",
                    "viewPosition",
                    "name",
                    "tags",
                    "config"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "total",
              "configs"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/subscription-page-configs/tagsGet tags of Subpage Configs
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "required": [
              "tags"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
PATCH/api/subscription-page-configs/tagsSet tags of Subpage Config
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "tags": {
            "maxItems": 10,
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 36,
              "pattern": "^[A-Z0-9_:]+$"
            }
          }
        },
        "required": [
          "uuid",
          "tags"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "required": [
              "uuid",
              "tags"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/subscription-page-configsGet all subscription page configs
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "total": {
                "type": "number"
              },
              "configs": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "viewPosition": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "name": {
                      "type": "string"
                    },
                    "tags": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "config": {
                      "anyOf": [
                        {},
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "uuid",
                    "viewPosition",
                    "name",
                    "tags",
                    "config"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "total",
              "configs"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/subscription-page-configsCreate subscription page config
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 2,
            "maxLength": 30,
            "pattern": "^[A-Za-z0-9_\\s-]+$"
          }
        },
        "required": [
          "name"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "viewPosition": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "name": {
                "type": "string"
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "config": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "uuid",
              "viewPosition",
              "name",
              "tags",
              "config"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
PATCH/api/subscription-page-configsUpdate subscription page config
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "name": {
            "type": "string",
            "minLength": 2,
            "maxLength": 30,
            "pattern": "^[A-Za-z0-9_\\s-]+$"
          },
          "config": {}
        },
        "required": [
          "uuid"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "viewPosition": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "name": {
                "type": "string"
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "config": {}
            },
            "required": [
              "uuid",
              "viewPosition",
              "name",
              "tags",
              "config"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}

subscription-request-history

GET/api/subscription-request-history/statsGet subscription request history stats
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "byParsedApp": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "app": {
                      "type": "string"
                    },
                    "count": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "app",
                    "count"
                  ],
                  "additionalProperties": false
                }
              },
              "hourlyRequestStats": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "dateTime": {},
                    "requestCount": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "dateTime",
                    "requestCount"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "byParsedApp",
              "hourlyRequestStats"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/subscription-request-historyGet all subscription request history

Please note that the filters here are primarily intended for use by the frontend and rely on expensive operators such as LIKE under the hood. Misusing these filters may negatively impact the performance of your database.

Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "start",
    "in": "query",
    "required": false,
    "schema": {
      "default": 0,
      "description": "Start index (offset) of the results to return, default is 0",
      "type": "number"
    }
  },
  {
    "name": "size",
    "in": "query",
    "required": false,
    "schema": {
      "default": 25,
      "type": "number",
      "minimum": 1,
      "maximum": 1000,
      "description": "Number of results to return, no more than 1000"
    }
  },
  {
    "name": "filters",
    "in": "query",
    "required": false,
    "schema": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "value": {}
        },
        "required": [
          "id",
          "value"
        ]
      }
    }
  },
  {
    "name": "filterModes",
    "in": "query",
    "required": false,
    "schema": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "type": "string"
      }
    }
  },
  {
    "name": "globalFilterMode",
    "in": "query",
    "required": false,
    "schema": {
      "type": "string"
    }
  },
  {
    "name": "sorting",
    "in": "query",
    "required": false,
    "schema": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "desc": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "desc"
        ]
      }
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "records": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "number"
                    },
                    "userId": {
                      "type": "number"
                    },
                    "srrResponseType": {
                      "type": "string"
                    },
                    "srrRuleName": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "requestIp": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "userAgent": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "requestAt": {}
                  },
                  "required": [
                    "id",
                    "userId",
                    "srrResponseType",
                    "srrRuleName",
                    "requestIp",
                    "userAgent",
                    "requestAt"
                  ],
                  "additionalProperties": false
                }
              },
              "total": {
                "type": "number"
              }
            },
            "required": [
              "records",
              "total"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}

subscription-settings

GET/api/subscription-settingsGet subscription settings
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "serveJsonAtBaseSubscription": {
                "type": "boolean"
              },
              "isShowCustomRemarks": {
                "type": "boolean"
              },
              "customRemarks": {
                "type": "object",
                "properties": {
                  "expiredUsers": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "limitedUsers": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "disabledUsers": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "emptyHosts": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "HWIDMaxDevicesExceeded": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "HWIDNotSupported": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "required": [
                  "expiredUsers",
                  "limitedUsers",
                  "disabledUsers",
                  "emptyHosts",
                  "HWIDMaxDevicesExceeded",
                  "HWIDNotSupported"
                ],
                "additionalProperties": false
              },
              "customResponseHeaders": {
                "anyOf": [
                  {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {
                      "type": "string"
                    }
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "randomizeHosts": {
                "type": "boolean"
              },
              "responseRules": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "version": {
                        "type": "string",
                        "enum": [
                          "1"
                        ],
                        "title": "Response Rules Config Version",
                        "markdownDescription": "Version of the **response rules** config. Currently supported version is **1**."
                      },
                      "settings": {
                        "title": "Response Rule Settings",
                        "markdownDescription": "Settings for the **response rules** config. Optional.",
                        "type": "object",
                        "properties": {
                          "disableSubscriptionAccessByPath": {
                            "title": "Disable Subscription Access by Path",
                            "markdownDescription": "Usually, a user's subscription may also be available via additional paths such as **/json**, **/stash**, or **/mihomo**. If this flag is set to **true**, access via these additional paths will be disabled.",
                            "type": "boolean"
                          }
                        },
                        "additionalProperties": false
                      },
                      "rules": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "name": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 50,
                              "title": "Name",
                              "markdownDescription": "Name of the response rule."
                            },
                            "description": {
                              "title": "Description",
                              "markdownDescription": "Description of the response rule. Optional.",
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 250
                            },
                            "enabled": {
                              "type": "boolean",
                              "title": "Enabled",
                              "markdownDescription": "Control whether the response rule is enabled or disabled. \n\n - `true` the rule will be applied. \n\n - `false` the rule will be always ignored."
                            },
                            "operator": {
                              "type": "string",
                              "enum": [
                                "AND",
                                "OR"
                              ],
                              "markdownDescription": "Operator to use for combining conditions in the rule."
                            },
                            "conditions": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "headerName": {
                                    "type": "string",
                                    "pattern": "^[!#$%&'*+\\-.0-9A-Z^_`a-z|~]+$",
                                    "title": "Header Name",
                                    "markdownDescription": "**Name** of the HTTP header to check. Must comply with RFC 7230."
                                  },
                                  "operator": {
                                    "type": "string",
                                    "enum": [
                                      "EQUALS",
                                      "NOT_EQUALS",
                                      "CONTAINS",
                                      "NOT_CONTAINS",
                                      "STARTS_WITH",
                                      "NOT_STARTS_WITH",
                                      "ENDS_WITH",
                                      "NOT_ENDS_WITH",
                                      "REGEX",
                                      "NOT_REGEX"
                                    ],
                                    "errorMessage": "Invalid operator. Please select a valid operator.",
                                    "markdownDescription": "Operator to use for comparing the `headerName` with `value`.",
                                    "markdownEnumDescriptions": [
                                      "Performs an exact, comparison between the header value and specified string. `string === value`",
                                      "Ensures the header value does not exactly match the specified string. `string !== value`",
                                      "Checks if the header value contains the specified string as a substring. `string.includes()`",
                                      "Verifies the header value does not contain the specified string as a substring. `!string.includes()`",
                                      "Validates that the header value begins with the specified string. `string.startsWith()`",
                                      "Validates that the header value does not begin with the specified string. `!string.startsWith()`",
                                      "Confirms the header value ends with the specified string. `string.endsWith()`",
                                      "Confirms the header value does not end with the specified string. `!string.endsWith()`",
                                      "Evaluates if the header value matches the specified regular expression pattern. `regex.test()`",
                                      "Evaluates if the header value does not match the specified regular expression pattern. `!regex.test()`"
                                    ]
                                  },
                                  "value": {
                                    "type": "string",
                                    "minLength": 1,
                                    "maxLength": 255,
                                    "markdownDescription": "**Value** to check against the **headerName**."
                                  },
                                  "caseSensitive": {
                                    "type": "boolean",
                                    "markdownDescription": "Whether the value is **case sensitive**. \n\n - `true`: the value will be compared as is. \n\n - `false`: the value will be lowercased **before** comparison."
                                  }
                                },
                                "required": [
                                  "headerName",
                                  "operator",
                                  "value",
                                  "caseSensitive"
                                ],
                                "additionalProperties": false,
                                "markdownDescription": "Condition to check against the **headerName**.",
                                "defaultSnippets": [
                                  {
                                    "label": "Examples: Check if header contains \"text/html\"",
                                    "markdownDescription": "Condition to check if **headerName** contains \"text/html\"",
                                    "body": {
                                      "headerName": "accept",
                                      "operator": "CONTAINS",
                                      "value": "text/html",
                                      "caseSensitive": true
                                    }
                                  }
                                ]
                              },
                              "title": "Conditions",
                              "markdownDescription": "Array of conditions to check against the request headers. Conditions are applied with **operator**. If conditions are empty, the rule will be matched."
                            },
                            "responseType": {
                              "type": "string",
                              "enum": [
                                "XRAY_JSON",
                                "XRAY_BASE64",
                                "MIHOMO",
                                "STASH",
                                "CLASH",
                                "SINGBOX",
                                "BROWSER",
                                "BLOCK",
                                "STATUS_CODE_404",
                                "STATUS_CODE_451",
                                "SOCKET_DROP"
                              ],
                              "errorMessage": "Invalid response type. Please select a valid response type.",
                              "markdownDescription": "Type of the response. Determines the type of **response** to be returned when the rule is matched.",
                              "markdownEnumDescriptions": [
                                "Return **subscription** in XRAY-JSON format. (Using `Xray Json` template)",
                                "Return **subscription** in BASE64 encoded string. Compatible with most client application with Xray core.",
                                "Return **subscription** in Mihomo format. (Using `Mihomo` template)",
                                "Return **subscription** in Stash format. (Using `Stash` template)",
                                "Return **subscription** in Clash format. (Using `Clash` template) Useful for client application that use Legacy Clash core.",
                                "Return **subscription** in Singbox format. (Using `Singbox` template) Format which is used by Singbox client application.",
                                "Return **subscription** as browser format. The same as on `/info` route.",
                                "**Drop** request and return `403` status code.",
                                "**Drop** request and return `404` status code.",
                                "**Drop** request and return `451` status code.",
                                "**Drop** the socket connection."
                              ]
                            },
                            "responseModifications": {
                              "title": "Response Modifications",
                              "examples": [
                                {
                                  "headers": [
                                    {
                                      "key": "X-Custom-Header",
                                      "value": "CustomValue"
                                    }
                                  ]
                                }
                              ],
                              "markdownDescription": "Response modifications to be applied when the rule is matched. Optional.",
                              "type": "object",
                              "properties": {
                                "headers": {
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "properties": {
                                      "key": {
                                        "type": "string",
                                        "pattern": "^[!#$%&'*+\\-.0-9A-Z^_`a-z|~]+$",
                                        "title": "Header Key",
                                        "markdownDescription": "Key of the response header. Must comply with RFC 7230."
                                      },
                                      "value": {
                                        "type": "string",
                                        "minLength": 1,
                                        "title": "Header Value",
                                        "markdownDescription": "Value of the response header."
                                      }
                                    },
                                    "required": [
                                      "key",
                                      "value"
                                    ],
                                    "additionalProperties": false,
                                    "title": "Headers",
                                    "markdownDescription": "**Key** and **value** of the response header will be added to the response."
                                  },
                                  "defaultSnippets": [
                                    {
                                      "label": "Examples: Add custom header",
                                      "markdownDescription": "Add a custom header to the response",
                                      "body": [
                                        {
                                          "key": "X-Custom-Header",
                                          "value": "CustomValue"
                                        }
                                      ]
                                    }
                                  ],
                                  "markdownDescription": "Array of headers to be added when the rule is matched."
                                },
                                "applyHeadersToEnd": {
                                  "title": "Apply Headers to End",
                                  "markdownDescription": "By default, headers are added when forming the response. In some cases, headers set in SRR may be overridden by headers from other parts of the system. If you set this flag to **true**, headers from SRR will be added at the very end, just before the response is sent. In this case, SRR headers may override headers from other sections.",
                                  "type": "boolean"
                                },
                                "subscriptionTemplate": {
                                  "title": "Subscription Template",
                                  "markdownDescription": "Override the subscription template with the given name. If not provided, the default subscription template will be used. If the template name is not found, the default subscription template for this type will be used. **This modification have higher priority than settings from External Squads.**",
                                  "type": "string",
                                  "minLength": 1
                                },
                                "ignoreHostXrayJsonTemplate": {
                                  "title": "Ignore Host Xray Json Template",
                                  "markdownDescription": "Each Host may have its own Xray Json Template. If you set this flag to **true**, the Xray Json Template defined by the SRR will be used. **The Host's Xray Json Template will be ignored.**",
                                  "type": "boolean"
                                },
                                "ignoreServeJsonAtBaseSubscription": {
                                  "title": "Ignore Serve Json at Base Subscription",
                                  "markdownDescription": "If you set this flag to **true**, the **Serve JSON at Base Subscription** setting will be ignored (set to **false**).",
                                  "type": "boolean"
                                },
                                "additionalExtendedClientsRegex": {
                                  "markdownDescription": "Additional regex patterns to match extended clients. Matched clients will receive `serverDescription` in the subscription response.\n\n**Default Mihomo extended clients:**\n- `^FlClash ?X/`\n- `^Flowvy/`\n- `^prizrak-box/`\n- `^koala-clash/`\n\n**Default Xray extended clients:**\n- `^Happ/`\n- `^INCY/`\n\n**Example:** `[\"^MyClient/\", \"^CustomApp\\\\/v2\"]`",
                                  "type": "array",
                                  "items": {
                                    "type": "string",
                                    "minLength": 1
                                  }
                                },
                                "disableHwidCheck": {
                                  "title": "Disable HWID Check",
                                  "markdownDescription": "If you set this flag to **true**, the HWID check will be disabled. **This modification have higher priority than settings from Subscription Settings.**",
                                  "type": "boolean"
                                },
                                "encryption": {
                                  "title": "Encryption",
                                  "markdownDescription": "Encrypt response body with given parameters. Generate keypairs with Rescue CLI: `docker exec -it remnawave cli`, select \"Generate keypairs\".",
                                  "type": "object",
                                  "properties": {
                                    "method": {
                                      "type": "string",
                                      "enum": [
                                        "age1",
                                        "age1pq1"
                                      ]
                                    },
                                    "key": {
                                      "type": "string"
                                    }
                                  },
                                  "required": [
                                    "method",
                                    "key"
                                  ],
                                  "additionalProperties": false
                                },
                                "excludeHostsByTags": {
                                  "title": "Exclude Hosts by Tags",
                                  "markdownDescription": "Excludes hosts from the subscription output if at least one tag in the host matches the given tags.",
                                  "minItems": 1,
                                  "type": "array",
                                  "items": {
                                    "type": "string",
                                    "maxLength": 36,
                                    "pattern": "^[A-Z0-9_:]+$"
                                  }
                                },
                                "respondWithRemarks": {
                                  "title": "Respond With Remarks",
                                  "markdownDescription": "Replaces the response body with the provided remarks. If this array contains more than one element, actual hosts will not be sent.",
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              },
                              "additionalProperties": false
                            }
                          },
                          "required": [
                            "name",
                            "enabled",
                            "operator",
                            "conditions",
                            "responseType"
                          ],
                          "additionalProperties": false,
                          "title": "Response Rule",
                          "markdownDescription": "Response rule configuration.\n\n**Fields:**\n- **name**: Name of the response rule.\n- **description**: Description of the response rule. Optional.\n- **enabled**: Control whether the response rule is enabled or disabled. \n\n - `true` the rule will be applied. \n\n - `false` the rule will be always ignored.\n- **operator**: Operator to use for combining conditions in the rule.\n- **conditions**: Array of conditions to check against the request headers. Conditions are applied with **operator**. If conditions are empty, the rule will be matched.\n- **responseType**: Type of the response. Determines the type of **response** to be returned when the rule is matched.\n- **responseModifications**: Response modifications to be applied when the rule is matched. Optional.\n\n**Example:**\n```json\n{\n  \"name\": \"Block Legacy Clients\",\n  \"description\": \"Block requests from legacy clients\",\n  \"enabled\": true,\n  \"operator\": \"OR\",\n  \"conditions\": [\n    {\n      \"headerName\": \"user-agent\",\n      \"operator\": \"CONTAINS\",\n      \"value\": \"Hiddify\",\n      \"caseSensitive\": true\n    },\n    {\n      \"headerName\": \"user-agent\",\n      \"operator\": \"CONTAINS\",\n      \"value\": \"FoxRay\",\n      \"caseSensitive\": true\n    }\n  ],\n  \"responseType\": \"BLOCK\"\n}\n```",
                          "defaultSnippets": [
                            {
                              "label": "Examples: Blank rule",
                              "markdownDescription": "Simple blank rule with no conditions or modifications.\n```json\n{\n  \"name\": \"Blank rule\",\n  \"description\": \"Blank rule\",\n  \"operator\": \"AND\",\n  \"enabled\": true,\n  \"conditions\": [],\n  \"responseType\": \"BLOCK\",\n  \"responseModifications\": {\n    \"headers\": []\n  }\n}\n```",
                              "body": {
                                "name": "Blank rule",
                                "description": "Blank rule",
                                "operator": "AND",
                                "enabled": true,
                                "conditions": [],
                                "responseType": "BLOCK",
                                "responseModifications": {
                                  "headers": []
                                }
                              }
                            },
                            {
                              "label": "Examples: Block Legacy Clients",
                              "markdownDescription": "Block requests from legacy clients\n```json\n{\n  \"name\": \"Block Legacy Clients\",\n  \"description\": \"Block requests from legacy clients\",\n  \"enabled\": true,\n  \"operator\": \"OR\",\n  \"conditions\": [\n    {\n      \"headerName\": \"user-agent\",\n      \"operator\": \"CONTAINS\",\n      \"value\": \"Hiddify\",\n      \"caseSensitive\": true\n    },\n    {\n      \"headerName\": \"user-agent\",\n      \"operator\": \"CONTAINS\",\n      \"value\": \"FoxRay\",\n      \"caseSensitive\": true\n    }\n  ],\n  \"responseType\": \"BLOCK\"\n}\n```",
                              "body": {
                                "name": "Block Legacy Clients",
                                "description": "Block requests from legacy clients",
                                "enabled": true,
                                "operator": "OR",
                                "conditions": [
                                  {
                                    "headerName": "user-agent",
                                    "operator": "CONTAINS",
                                    "value": "Hiddify",
                                    "caseSensitive": true
                                  },
                                  {
                                    "headerName": "user-agent",
                                    "operator": "CONTAINS",
                                    "value": "FoxRay",
                                    "caseSensitive": true
                                  }
                                ],
                                "responseType": "BLOCK"
                              }
                            }
                          ]
                        },
                        "title": "Response Rules",
                        "markdownDescription": "Array of **response rules**. Rules are evaluated in order and the first rule that matches is applied. If no rule matches, request will be blocked by default.\n\n**Example:**\n```json\n[\n  {\n    \"name\": \"Blank rule\",\n    \"description\": \"Blank rule\",\n    \"operator\": \"AND\",\n    \"enabled\": true,\n    \"conditions\": [],\n    \"responseType\": \"BLOCK\",\n    \"responseModifications\": {\n      \"headers\": []\n    }\n  }\n]\n```",
                        "defaultSnippets": []
                      }
                    },
                    "required": [
                      "version",
                      "rules"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "hwidSettings": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "enabled": {
                        "type": "boolean"
                      },
                      "fallbackDeviceLimit": {
                        "type": "number"
                      },
                      "maxDevicesAnnounce": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 200
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "enabled",
                      "fallbackDeviceLimit",
                      "maxDevicesAnnounce"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "createdAt": {},
              "updatedAt": {}
            },
            "required": [
              "uuid",
              "serveJsonAtBaseSubscription",
              "isShowCustomRemarks",
              "customRemarks",
              "customResponseHeaders",
              "randomizeHosts",
              "responseRules",
              "hwidSettings",
              "createdAt",
              "updatedAt"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
PATCH/api/subscription-settingsUpdate subscription settings
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "serveJsonAtBaseSubscription": {
            "type": "boolean"
          },
          "isShowCustomRemarks": {
            "type": "boolean"
          },
          "customRemarks": {
            "type": "object",
            "properties": {
              "expiredUsers": {
                "minItems": 1,
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "limitedUsers": {
                "minItems": 1,
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "disabledUsers": {
                "minItems": 1,
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "emptyHosts": {
                "minItems": 1,
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "HWIDMaxDevicesExceeded": {
                "minItems": 1,
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "HWIDNotSupported": {
                "minItems": 1,
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "required": [
              "expiredUsers",
              "limitedUsers",
              "disabledUsers",
              "emptyHosts",
              "HWIDMaxDevicesExceeded",
              "HWIDNotSupported"
            ]
          },
          "customResponseHeaders": {
            "type": "object",
            "propertyNames": {
              "type": "string",
              "pattern": "^[a-zA-Z0-9_-]+$"
            },
            "additionalProperties": {
              "type": "string"
            }
          },
          "randomizeHosts": {
            "type": "boolean"
          },
          "responseRules": {
            "type": "object",
            "properties": {
              "version": {
                "type": "string",
                "enum": [
                  "1"
                ],
                "title": "Response Rules Config Version",
                "markdownDescription": "Version of the **response rules** config. Currently supported version is **1**."
              },
              "settings": {
                "title": "Response Rule Settings",
                "markdownDescription": "Settings for the **response rules** config. Optional.",
                "type": "object",
                "properties": {
                  "disableSubscriptionAccessByPath": {
                    "title": "Disable Subscription Access by Path",
                    "markdownDescription": "Usually, a user's subscription may also be available via additional paths such as **/json**, **/stash**, or **/mihomo**. If this flag is set to **true**, access via these additional paths will be disabled.",
                    "type": "boolean"
                  }
                }
              },
              "rules": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 50,
                      "title": "Name",
                      "markdownDescription": "Name of the response rule."
                    },
                    "description": {
                      "title": "Description",
                      "markdownDescription": "Description of the response rule. Optional.",
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 250
                    },
                    "enabled": {
                      "type": "boolean",
                      "title": "Enabled",
                      "markdownDescription": "Control whether the response rule is enabled or disabled. \n\n - `true` the rule will be applied. \n\n - `false` the rule will be always ignored."
                    },
                    "operator": {
                      "type": "string",
                      "enum": [
                        "AND",
                        "OR"
                      ],
                      "markdownDescription": "Operator to use for combining conditions in the rule."
                    },
                    "conditions": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "headerName": {
                            "type": "string",
                            "pattern": "^[!#$%&'*+\\-.0-9A-Z^_`a-z|~]+$",
                            "title": "Header Name",
                            "markdownDescription": "**Name** of the HTTP header to check. Must comply with RFC 7230."
                          },
                          "operator": {
                            "type": "string",
                            "enum": [
                              "EQUALS",
                              "NOT_EQUALS",
                              "CONTAINS",
                              "NOT_CONTAINS",
                              "STARTS_WITH",
                              "NOT_STARTS_WITH",
                              "ENDS_WITH",
                              "NOT_ENDS_WITH",
                              "REGEX",
                              "NOT_REGEX"
                            ],
                            "errorMessage": "Invalid operator. Please select a valid operator.",
                            "markdownDescription": "Operator to use for comparing the `headerName` with `value`.",
                            "markdownEnumDescriptions": [
                              "Performs an exact, comparison between the header value and specified string. `string === value`",
                              "Ensures the header value does not exactly match the specified string. `string !== value`",
                              "Checks if the header value contains the specified string as a substring. `string.includes()`",
                              "Verifies the header value does not contain the specified string as a substring. `!string.includes()`",
                              "Validates that the header value begins with the specified string. `string.startsWith()`",
                              "Validates that the header value does not begin with the specified string. `!string.startsWith()`",
                              "Confirms the header value ends with the specified string. `string.endsWith()`",
                              "Confirms the header value does not end with the specified string. `!string.endsWith()`",
                              "Evaluates if the header value matches the specified regular expression pattern. `regex.test()`",
                              "Evaluates if the header value does not match the specified regular expression pattern. `!regex.test()`"
                            ]
                          },
                          "value": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 255,
                            "markdownDescription": "**Value** to check against the **headerName**."
                          },
                          "caseSensitive": {
                            "type": "boolean",
                            "markdownDescription": "Whether the value is **case sensitive**. \n\n - `true`: the value will be compared as is. \n\n - `false`: the value will be lowercased **before** comparison."
                          }
                        },
                        "required": [
                          "headerName",
                          "operator",
                          "value",
                          "caseSensitive"
                        ],
                        "markdownDescription": "Condition to check against the **headerName**.",
                        "defaultSnippets": [
                          {
                            "label": "Examples: Check if header contains \"text/html\"",
                            "markdownDescription": "Condition to check if **headerName** contains \"text/html\"",
                            "body": {
                              "headerName": "accept",
                              "operator": "CONTAINS",
                              "value": "text/html",
                              "caseSensitive": true
                            }
                          }
                        ]
                      },
                      "title": "Conditions",
                      "markdownDescription": "Array of conditions to check against the request headers. Conditions are applied with **operator**. If conditions are empty, the rule will be matched."
                    },
                    "responseType": {
                      "type": "string",
                      "enum": [
                        "XRAY_JSON",
                        "XRAY_BASE64",
                        "MIHOMO",
                        "STASH",
                        "CLASH",
                        "SINGBOX",
                        "BROWSER",
                        "BLOCK",
                        "STATUS_CODE_404",
                        "STATUS_CODE_451",
                        "SOCKET_DROP"
                      ],
                      "errorMessage": "Invalid response type. Please select a valid response type.",
                      "markdownDescription": "Type of the response. Determines the type of **response** to be returned when the rule is matched.",
                      "markdownEnumDescriptions": [
                        "Return **subscription** in XRAY-JSON format. (Using `Xray Json` template)",
                        "Return **subscription** in BASE64 encoded string. Compatible with most client application with Xray core.",
                        "Return **subscription** in Mihomo format. (Using `Mihomo` template)",
                        "Return **subscription** in Stash format. (Using `Stash` template)",
                        "Return **subscription** in Clash format. (Using `Clash` template) Useful for client application that use Legacy Clash core.",
                        "Return **subscription** in Singbox format. (Using `Singbox` template) Format which is used by Singbox client application.",
                        "Return **subscription** as browser format. The same as on `/info` route.",
                        "**Drop** request and return `403` status code.",
                        "**Drop** request and return `404` status code.",
                        "**Drop** request and return `451` status code.",
                        "**Drop** the socket connection."
                      ]
                    },
                    "responseModifications": {
                      "title": "Response Modifications",
                      "examples": [
                        {
                          "headers": [
                            {
                              "key": "X-Custom-Header",
                              "value": "CustomValue"
                            }
                          ]
                        }
                      ],
                      "markdownDescription": "Response modifications to be applied when the rule is matched. Optional.",
                      "type": "object",
                      "properties": {
                        "headers": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "key": {
                                "type": "string",
                                "pattern": "^[!#$%&'*+\\-.0-9A-Z^_`a-z|~]+$",
                                "title": "Header Key",
                                "markdownDescription": "Key of the response header. Must comply with RFC 7230."
                              },
                              "value": {
                                "type": "string",
                                "minLength": 1,
                                "title": "Header Value",
                                "markdownDescription": "Value of the response header."
                              }
                            },
                            "required": [
                              "key",
                              "value"
                            ],
                            "title": "Headers",
                            "markdownDescription": "**Key** and **value** of the response header will be added to the response."
                          },
                          "defaultSnippets": [
                            {
                              "label": "Examples: Add custom header",
                              "markdownDescription": "Add a custom header to the response",
                              "body": [
                                {
                                  "key": "X-Custom-Header",
                                  "value": "CustomValue"
                                }
                              ]
                            }
                          ],
                          "markdownDescription": "Array of headers to be added when the rule is matched."
                        },
                        "applyHeadersToEnd": {
                          "title": "Apply Headers to End",
                          "markdownDescription": "By default, headers are added when forming the response. In some cases, headers set in SRR may be overridden by headers from other parts of the system. If you set this flag to **true**, headers from SRR will be added at the very end, just before the response is sent. In this case, SRR headers may override headers from other sections.",
                          "type": "boolean"
                        },
                        "subscriptionTemplate": {
                          "title": "Subscription Template",
                          "markdownDescription": "Override the subscription template with the given name. If not provided, the default subscription template will be used. If the template name is not found, the default subscription template for this type will be used. **This modification have higher priority than settings from External Squads.**",
                          "type": "string",
                          "minLength": 1
                        },
                        "ignoreHostXrayJsonTemplate": {
                          "title": "Ignore Host Xray Json Template",
                          "markdownDescription": "Each Host may have its own Xray Json Template. If you set this flag to **true**, the Xray Json Template defined by the SRR will be used. **The Host's Xray Json Template will be ignored.**",
                          "type": "boolean"
                        },
                        "ignoreServeJsonAtBaseSubscription": {
                          "title": "Ignore Serve Json at Base Subscription",
                          "markdownDescription": "If you set this flag to **true**, the **Serve JSON at Base Subscription** setting will be ignored (set to **false**).",
                          "type": "boolean"
                        },
                        "additionalExtendedClientsRegex": {
                          "markdownDescription": "Additional regex patterns to match extended clients. Matched clients will receive `serverDescription` in the subscription response.\n\n**Default Mihomo extended clients:**\n- `^FlClash ?X/`\n- `^Flowvy/`\n- `^prizrak-box/`\n- `^koala-clash/`\n\n**Default Xray extended clients:**\n- `^Happ/`\n- `^INCY/`\n\n**Example:** `[\"^MyClient/\", \"^CustomApp\\\\/v2\"]`",
                          "type": "array",
                          "items": {
                            "type": "string",
                            "minLength": 1
                          }
                        },
                        "disableHwidCheck": {
                          "title": "Disable HWID Check",
                          "markdownDescription": "If you set this flag to **true**, the HWID check will be disabled. **This modification have higher priority than settings from Subscription Settings.**",
                          "type": "boolean"
                        },
                        "encryption": {
                          "title": "Encryption",
                          "markdownDescription": "Encrypt response body with given parameters. Generate keypairs with Rescue CLI: `docker exec -it remnawave cli`, select \"Generate keypairs\".",
                          "type": "object",
                          "properties": {
                            "method": {
                              "type": "string",
                              "enum": [
                                "age1",
                                "age1pq1"
                              ]
                            },
                            "key": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "method",
                            "key"
                          ]
                        },
                        "excludeHostsByTags": {
                          "title": "Exclude Hosts by Tags",
                          "markdownDescription": "Excludes hosts from the subscription output if at least one tag in the host matches the given tags.",
                          "minItems": 1,
                          "type": "array",
                          "items": {
                            "type": "string",
                            "maxLength": 36,
                            "pattern": "^[A-Z0-9_:]+$"
                          }
                        },
                        "respondWithRemarks": {
                          "title": "Respond With Remarks",
                          "markdownDescription": "Replaces the response body with the provided remarks. If this array contains more than one element, actual hosts will not be sent.",
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  },
                  "required": [
                    "name",
                    "enabled",
                    "operator",
                    "conditions",
                    "responseType"
                  ],
                  "title": "Response Rule",
                  "markdownDescription": "Response rule configuration.\n\n**Fields:**\n- **name**: Name of the response rule.\n- **description**: Description of the response rule. Optional.\n- **enabled**: Control whether the response rule is enabled or disabled. \n\n - `true` the rule will be applied. \n\n - `false` the rule will be always ignored.\n- **operator**: Operator to use for combining conditions in the rule.\n- **conditions**: Array of conditions to check against the request headers. Conditions are applied with **operator**. If conditions are empty, the rule will be matched.\n- **responseType**: Type of the response. Determines the type of **response** to be returned when the rule is matched.\n- **responseModifications**: Response modifications to be applied when the rule is matched. Optional.\n\n**Example:**\n```json\n{\n  \"name\": \"Block Legacy Clients\",\n  \"description\": \"Block requests from legacy clients\",\n  \"enabled\": true,\n  \"operator\": \"OR\",\n  \"conditions\": [\n    {\n      \"headerName\": \"user-agent\",\n      \"operator\": \"CONTAINS\",\n      \"value\": \"Hiddify\",\n      \"caseSensitive\": true\n    },\n    {\n      \"headerName\": \"user-agent\",\n      \"operator\": \"CONTAINS\",\n      \"value\": \"FoxRay\",\n      \"caseSensitive\": true\n    }\n  ],\n  \"responseType\": \"BLOCK\"\n}\n```",
                  "defaultSnippets": [
                    {
                      "label": "Examples: Blank rule",
                      "markdownDescription": "Simple blank rule with no conditions or modifications.\n```json\n{\n  \"name\": \"Blank rule\",\n  \"description\": \"Blank rule\",\n  \"operator\": \"AND\",\n  \"enabled\": true,\n  \"conditions\": [],\n  \"responseType\": \"BLOCK\",\n  \"responseModifications\": {\n    \"headers\": []\n  }\n}\n```",
                      "body": {
                        "name": "Blank rule",
                        "description": "Blank rule",
                        "operator": "AND",
                        "enabled": true,
                        "conditions": [],
                        "responseType": "BLOCK",
                        "responseModifications": {
                          "headers": []
                        }
                      }
                    },
                    {
                      "label": "Examples: Block Legacy Clients",
                      "markdownDescription": "Block requests from legacy clients\n```json\n{\n  \"name\": \"Block Legacy Clients\",\n  \"description\": \"Block requests from legacy clients\",\n  \"enabled\": true,\n  \"operator\": \"OR\",\n  \"conditions\": [\n    {\n      \"headerName\": \"user-agent\",\n      \"operator\": \"CONTAINS\",\n      \"value\": \"Hiddify\",\n      \"caseSensitive\": true\n    },\n    {\n      \"headerName\": \"user-agent\",\n      \"operator\": \"CONTAINS\",\n      \"value\": \"FoxRay\",\n      \"caseSensitive\": true\n    }\n  ],\n  \"responseType\": \"BLOCK\"\n}\n```",
                      "body": {
                        "name": "Block Legacy Clients",
                        "description": "Block requests from legacy clients",
                        "enabled": true,
                        "operator": "OR",
                        "conditions": [
                          {
                            "headerName": "user-agent",
                            "operator": "CONTAINS",
                            "value": "Hiddify",
                            "caseSensitive": true
                          },
                          {
                            "headerName": "user-agent",
                            "operator": "CONTAINS",
                            "value": "FoxRay",
                            "caseSensitive": true
                          }
                        ],
                        "responseType": "BLOCK"
                      }
                    }
                  ]
                },
                "title": "Response Rules",
                "markdownDescription": "Array of **response rules**. Rules are evaluated in order and the first rule that matches is applied. If no rule matches, request will be blocked by default.\n\n**Example:**\n```json\n[\n  {\n    \"name\": \"Blank rule\",\n    \"description\": \"Blank rule\",\n    \"operator\": \"AND\",\n    \"enabled\": true,\n    \"conditions\": [],\n    \"responseType\": \"BLOCK\",\n    \"responseModifications\": {\n      \"headers\": []\n    }\n  }\n]\n```",
                "defaultSnippets": []
              }
            },
            "required": [
              "version",
              "rules"
            ]
          },
          "hwidSettings": {
            "type": "object",
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "fallbackDeviceLimit": {
                "type": "number"
              },
              "maxDevicesAnnounce": {
                "anyOf": [
                  {
                    "type": "string",
                    "maxLength": 200
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "enabled",
              "fallbackDeviceLimit",
              "maxDevicesAnnounce"
            ]
          }
        },
        "required": [
          "uuid"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "serveJsonAtBaseSubscription": {
                "type": "boolean"
              },
              "isShowCustomRemarks": {
                "type": "boolean"
              },
              "customRemarks": {
                "type": "object",
                "properties": {
                  "expiredUsers": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "limitedUsers": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "disabledUsers": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "emptyHosts": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "HWIDMaxDevicesExceeded": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "HWIDNotSupported": {
                    "minItems": 1,
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "required": [
                  "expiredUsers",
                  "limitedUsers",
                  "disabledUsers",
                  "emptyHosts",
                  "HWIDMaxDevicesExceeded",
                  "HWIDNotSupported"
                ],
                "additionalProperties": false
              },
              "customResponseHeaders": {
                "anyOf": [
                  {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {
                      "type": "string"
                    }
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "randomizeHosts": {
                "type": "boolean"
              },
              "responseRules": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "version": {
                        "type": "string",
                        "enum": [
                          "1"
                        ],
                        "title": "Response Rules Config Version",
                        "markdownDescription": "Version of the **response rules** config. Currently supported version is **1**."
                      },
                      "settings": {
                        "title": "Response Rule Settings",
                        "markdownDescription": "Settings for the **response rules** config. Optional.",
                        "type": "object",
                        "properties": {
                          "disableSubscriptionAccessByPath": {
                            "title": "Disable Subscription Access by Path",
                            "markdownDescription": "Usually, a user's subscription may also be available via additional paths such as **/json**, **/stash**, or **/mihomo**. If this flag is set to **true**, access via these additional paths will be disabled.",
                            "type": "boolean"
                          }
                        },
                        "additionalProperties": false
                      },
                      "rules": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "name": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 50,
                              "title": "Name",
                              "markdownDescription": "Name of the response rule."
                            },
                            "description": {
                              "title": "Description",
                              "markdownDescription": "Description of the response rule. Optional.",
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 250
                            },
                            "enabled": {
                              "type": "boolean",
                              "title": "Enabled",
                              "markdownDescription": "Control whether the response rule is enabled or disabled. \n\n - `true` the rule will be applied. \n\n - `false` the rule will be always ignored."
                            },
                            "operator": {
                              "type": "string",
                              "enum": [
                                "AND",
                                "OR"
                              ],
                              "markdownDescription": "Operator to use for combining conditions in the rule."
                            },
                            "conditions": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "headerName": {
                                    "type": "string",
                                    "pattern": "^[!#$%&'*+\\-.0-9A-Z^_`a-z|~]+$",
                                    "title": "Header Name",
                                    "markdownDescription": "**Name** of the HTTP header to check. Must comply with RFC 7230."
                                  },
                                  "operator": {
                                    "type": "string",
                                    "enum": [
                                      "EQUALS",
                                      "NOT_EQUALS",
                                      "CONTAINS",
                                      "NOT_CONTAINS",
                                      "STARTS_WITH",
                                      "NOT_STARTS_WITH",
                                      "ENDS_WITH",
                                      "NOT_ENDS_WITH",
                                      "REGEX",
                                      "NOT_REGEX"
                                    ],
                                    "errorMessage": "Invalid operator. Please select a valid operator.",
                                    "markdownDescription": "Operator to use for comparing the `headerName` with `value`.",
                                    "markdownEnumDescriptions": [
                                      "Performs an exact, comparison between the header value and specified string. `string === value`",
                                      "Ensures the header value does not exactly match the specified string. `string !== value`",
                                      "Checks if the header value contains the specified string as a substring. `string.includes()`",
                                      "Verifies the header value does not contain the specified string as a substring. `!string.includes()`",
                                      "Validates that the header value begins with the specified string. `string.startsWith()`",
                                      "Validates that the header value does not begin with the specified string. `!string.startsWith()`",
                                      "Confirms the header value ends with the specified string. `string.endsWith()`",
                                      "Confirms the header value does not end with the specified string. `!string.endsWith()`",
                                      "Evaluates if the header value matches the specified regular expression pattern. `regex.test()`",
                                      "Evaluates if the header value does not match the specified regular expression pattern. `!regex.test()`"
                                    ]
                                  },
                                  "value": {
                                    "type": "string",
                                    "minLength": 1,
                                    "maxLength": 255,
                                    "markdownDescription": "**Value** to check against the **headerName**."
                                  },
                                  "caseSensitive": {
                                    "type": "boolean",
                                    "markdownDescription": "Whether the value is **case sensitive**. \n\n - `true`: the value will be compared as is. \n\n - `false`: the value will be lowercased **before** comparison."
                                  }
                                },
                                "required": [
                                  "headerName",
                                  "operator",
                                  "value",
                                  "caseSensitive"
                                ],
                                "additionalProperties": false,
                                "markdownDescription": "Condition to check against the **headerName**.",
                                "defaultSnippets": [
                                  {
                                    "label": "Examples: Check if header contains \"text/html\"",
                                    "markdownDescription": "Condition to check if **headerName** contains \"text/html\"",
                                    "body": {
                                      "headerName": "accept",
                                      "operator": "CONTAINS",
                                      "value": "text/html",
                                      "caseSensitive": true
                                    }
                                  }
                                ]
                              },
                              "title": "Conditions",
                              "markdownDescription": "Array of conditions to check against the request headers. Conditions are applied with **operator**. If conditions are empty, the rule will be matched."
                            },
                            "responseType": {
                              "type": "string",
                              "enum": [
                                "XRAY_JSON",
                                "XRAY_BASE64",
                                "MIHOMO",
                                "STASH",
                                "CLASH",
                                "SINGBOX",
                                "BROWSER",
                                "BLOCK",
                                "STATUS_CODE_404",
                                "STATUS_CODE_451",
                                "SOCKET_DROP"
                              ],
                              "errorMessage": "Invalid response type. Please select a valid response type.",
                              "markdownDescription": "Type of the response. Determines the type of **response** to be returned when the rule is matched.",
                              "markdownEnumDescriptions": [
                                "Return **subscription** in XRAY-JSON format. (Using `Xray Json` template)",
                                "Return **subscription** in BASE64 encoded string. Compatible with most client application with Xray core.",
                                "Return **subscription** in Mihomo format. (Using `Mihomo` template)",
                                "Return **subscription** in Stash format. (Using `Stash` template)",
                                "Return **subscription** in Clash format. (Using `Clash` template) Useful for client application that use Legacy Clash core.",
                                "Return **subscription** in Singbox format. (Using `Singbox` template) Format which is used by Singbox client application.",
                                "Return **subscription** as browser format. The same as on `/info` route.",
                                "**Drop** request and return `403` status code.",
                                "**Drop** request and return `404` status code.",
                                "**Drop** request and return `451` status code.",
                                "**Drop** the socket connection."
                              ]
                            },
                            "responseModifications": {
                              "title": "Response Modifications",
                              "examples": [
                                {
                                  "headers": [
                                    {
                                      "key": "X-Custom-Header",
                                      "value": "CustomValue"
                                    }
                                  ]
                                }
                              ],
                              "markdownDescription": "Response modifications to be applied when the rule is matched. Optional.",
                              "type": "object",
                              "properties": {
                                "headers": {
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "properties": {
                                      "key": {
                                        "type": "string",
                                        "pattern": "^[!#$%&'*+\\-.0-9A-Z^_`a-z|~]+$",
                                        "title": "Header Key",
                                        "markdownDescription": "Key of the response header. Must comply with RFC 7230."
                                      },
                                      "value": {
                                        "type": "string",
                                        "minLength": 1,
                                        "title": "Header Value",
                                        "markdownDescription": "Value of the response header."
                                      }
                                    },
                                    "required": [
                                      "key",
                                      "value"
                                    ],
                                    "additionalProperties": false,
                                    "title": "Headers",
                                    "markdownDescription": "**Key** and **value** of the response header will be added to the response."
                                  },
                                  "defaultSnippets": [
                                    {
                                      "label": "Examples: Add custom header",
                                      "markdownDescription": "Add a custom header to the response",
                                      "body": [
                                        {
                                          "key": "X-Custom-Header",
                                          "value": "CustomValue"
                                        }
                                      ]
                                    }
                                  ],
                                  "markdownDescription": "Array of headers to be added when the rule is matched."
                                },
                                "applyHeadersToEnd": {
                                  "title": "Apply Headers to End",
                                  "markdownDescription": "By default, headers are added when forming the response. In some cases, headers set in SRR may be overridden by headers from other parts of the system. If you set this flag to **true**, headers from SRR will be added at the very end, just before the response is sent. In this case, SRR headers may override headers from other sections.",
                                  "type": "boolean"
                                },
                                "subscriptionTemplate": {
                                  "title": "Subscription Template",
                                  "markdownDescription": "Override the subscription template with the given name. If not provided, the default subscription template will be used. If the template name is not found, the default subscription template for this type will be used. **This modification have higher priority than settings from External Squads.**",
                                  "type": "string",
                                  "minLength": 1
                                },
                                "ignoreHostXrayJsonTemplate": {
                                  "title": "Ignore Host Xray Json Template",
                                  "markdownDescription": "Each Host may have its own Xray Json Template. If you set this flag to **true**, the Xray Json Template defined by the SRR will be used. **The Host's Xray Json Template will be ignored.**",
                                  "type": "boolean"
                                },
                                "ignoreServeJsonAtBaseSubscription": {
                                  "title": "Ignore Serve Json at Base Subscription",
                                  "markdownDescription": "If you set this flag to **true**, the **Serve JSON at Base Subscription** setting will be ignored (set to **false**).",
                                  "type": "boolean"
                                },
                                "additionalExtendedClientsRegex": {
                                  "markdownDescription": "Additional regex patterns to match extended clients. Matched clients will receive `serverDescription` in the subscription response.\n\n**Default Mihomo extended clients:**\n- `^FlClash ?X/`\n- `^Flowvy/`\n- `^prizrak-box/`\n- `^koala-clash/`\n\n**Default Xray extended clients:**\n- `^Happ/`\n- `^INCY/`\n\n**Example:** `[\"^MyClient/\", \"^CustomApp\\\\/v2\"]`",
                                  "type": "array",
                                  "items": {
                                    "type": "string",
                                    "minLength": 1
                                  }
                                },
                                "disableHwidCheck": {
                                  "title": "Disable HWID Check",
                                  "markdownDescription": "If you set this flag to **true**, the HWID check will be disabled. **This modification have higher priority than settings from Subscription Settings.**",
                                  "type": "boolean"
                                },
                                "encryption": {
                                  "title": "Encryption",
                                  "markdownDescription": "Encrypt response body with given parameters. Generate keypairs with Rescue CLI: `docker exec -it remnawave cli`, select \"Generate keypairs\".",
                                  "type": "object",
                                  "properties": {
                                    "method": {
                                      "type": "string",
                                      "enum": [
                                        "age1",
                                        "age1pq1"
                                      ]
                                    },
                                    "key": {
                                      "type": "string"
                                    }
                                  },
                                  "required": [
                                    "method",
                                    "key"
                                  ],
                                  "additionalProperties": false
                                },
                                "excludeHostsByTags": {
                                  "title": "Exclude Hosts by Tags",
                                  "markdownDescription": "Excludes hosts from the subscription output if at least one tag in the host matches the given tags.",
                                  "minItems": 1,
                                  "type": "array",
                                  "items": {
                                    "type": "string",
                                    "maxLength": 36,
                                    "pattern": "^[A-Z0-9_:]+$"
                                  }
                                },
                                "respondWithRemarks": {
                                  "title": "Respond With Remarks",
                                  "markdownDescription": "Replaces the response body with the provided remarks. If this array contains more than one element, actual hosts will not be sent.",
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                }
                              },
                              "additionalProperties": false
                            }
                          },
                          "required": [
                            "name",
                            "enabled",
                            "operator",
                            "conditions",
                            "responseType"
                          ],
                          "additionalProperties": false,
                          "title": "Response Rule",
                          "markdownDescription": "Response rule configuration.\n\n**Fields:**\n- **name**: Name of the response rule.\n- **description**: Description of the response rule. Optional.\n- **enabled**: Control whether the response rule is enabled or disabled. \n\n - `true` the rule will be applied. \n\n - `false` the rule will be always ignored.\n- **operator**: Operator to use for combining conditions in the rule.\n- **conditions**: Array of conditions to check against the request headers. Conditions are applied with **operator**. If conditions are empty, the rule will be matched.\n- **responseType**: Type of the response. Determines the type of **response** to be returned when the rule is matched.\n- **responseModifications**: Response modifications to be applied when the rule is matched. Optional.\n\n**Example:**\n```json\n{\n  \"name\": \"Block Legacy Clients\",\n  \"description\": \"Block requests from legacy clients\",\n  \"enabled\": true,\n  \"operator\": \"OR\",\n  \"conditions\": [\n    {\n      \"headerName\": \"user-agent\",\n      \"operator\": \"CONTAINS\",\n      \"value\": \"Hiddify\",\n      \"caseSensitive\": true\n    },\n    {\n      \"headerName\": \"user-agent\",\n      \"operator\": \"CONTAINS\",\n      \"value\": \"FoxRay\",\n      \"caseSensitive\": true\n    }\n  ],\n  \"responseType\": \"BLOCK\"\n}\n```",
                          "defaultSnippets": [
                            {
                              "label": "Examples: Blank rule",
                              "markdownDescription": "Simple blank rule with no conditions or modifications.\n```json\n{\n  \"name\": \"Blank rule\",\n  \"description\": \"Blank rule\",\n  \"operator\": \"AND\",\n  \"enabled\": true,\n  \"conditions\": [],\n  \"responseType\": \"BLOCK\",\n  \"responseModifications\": {\n    \"headers\": []\n  }\n}\n```",
                              "body": {
                                "name": "Blank rule",
                                "description": "Blank rule",
                                "operator": "AND",
                                "enabled": true,
                                "conditions": [],
                                "responseType": "BLOCK",
                                "responseModifications": {
                                  "headers": []
                                }
                              }
                            },
                            {
                              "label": "Examples: Block Legacy Clients",
                              "markdownDescription": "Block requests from legacy clients\n```json\n{\n  \"name\": \"Block Legacy Clients\",\n  \"description\": \"Block requests from legacy clients\",\n  \"enabled\": true,\n  \"operator\": \"OR\",\n  \"conditions\": [\n    {\n      \"headerName\": \"user-agent\",\n      \"operator\": \"CONTAINS\",\n      \"value\": \"Hiddify\",\n      \"caseSensitive\": true\n    },\n    {\n      \"headerName\": \"user-agent\",\n      \"operator\": \"CONTAINS\",\n      \"value\": \"FoxRay\",\n      \"caseSensitive\": true\n    }\n  ],\n  \"responseType\": \"BLOCK\"\n}\n```",
                              "body": {
                                "name": "Block Legacy Clients",
                                "description": "Block requests from legacy clients",
                                "enabled": true,
                                "operator": "OR",
                                "conditions": [
                                  {
                                    "headerName": "user-agent",
                                    "operator": "CONTAINS",
                                    "value": "Hiddify",
                                    "caseSensitive": true
                                  },
                                  {
                                    "headerName": "user-agent",
                                    "operator": "CONTAINS",
                                    "value": "FoxRay",
                                    "caseSensitive": true
                                  }
                                ],
                                "responseType": "BLOCK"
                              }
                            }
                          ]
                        },
                        "title": "Response Rules",
                        "markdownDescription": "Array of **response rules**. Rules are evaluated in order and the first rule that matches is applied. If no rule matches, request will be blocked by default.\n\n**Example:**\n```json\n[\n  {\n    \"name\": \"Blank rule\",\n    \"description\": \"Blank rule\",\n    \"operator\": \"AND\",\n    \"enabled\": true,\n    \"conditions\": [],\n    \"responseType\": \"BLOCK\",\n    \"responseModifications\": {\n      \"headers\": []\n    }\n  }\n]\n```",
                        "defaultSnippets": []
                      }
                    },
                    "required": [
                      "version",
                      "rules"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "hwidSettings": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "enabled": {
                        "type": "boolean"
                      },
                      "fallbackDeviceLimit": {
                        "type": "number"
                      },
                      "maxDevicesAnnounce": {
                        "anyOf": [
                          {
                            "type": "string",
                            "maxLength": 200
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "enabled",
                      "fallbackDeviceLimit",
                      "maxDevicesAnnounce"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "createdAt": {},
              "updatedAt": {}
            },
            "required": [
              "uuid",
              "serveJsonAtBaseSubscription",
              "isShowCustomRemarks",
              "customRemarks",
              "customResponseHeaders",
              "randomizeHosts",
              "responseRules",
              "hwidSettings",
              "createdAt",
              "updatedAt"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}

subscription-templates

GET/api/subscription-templates/{uuid}Get subscription template by uuid
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "viewPosition": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "name": {
                "type": "string"
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "templateType": {
                "type": "string",
                "enum": [
                  "XRAY_JSON",
                  "XRAY_BASE64",
                  "MIHOMO",
                  "STASH",
                  "CLASH",
                  "SINGBOX"
                ]
              },
              "templateJson": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "encodedTemplateYaml": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "uuid",
              "viewPosition",
              "name",
              "tags",
              "templateType",
              "templateJson",
              "encodedTemplateYaml"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
DELETE/api/subscription-templates/{uuid}Delete subscription template
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success"
}
POST/api/subscription-templates/actions/reorderReorder subscription templates
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "viewPosition": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "uuid": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                }
              },
              "required": [
                "viewPosition",
                "uuid"
              ]
            }
          }
        },
        "required": [
          "items"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "total": {
                "type": "number"
              },
              "templates": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "viewPosition": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "name": {
                      "type": "string"
                    },
                    "tags": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "templateType": {
                      "type": "string",
                      "enum": [
                        "XRAY_JSON",
                        "XRAY_BASE64",
                        "MIHOMO",
                        "STASH",
                        "CLASH",
                        "SINGBOX"
                      ]
                    },
                    "templateJson": {
                      "anyOf": [
                        {},
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "encodedTemplateYaml": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  },
                  "required": [
                    "uuid",
                    "viewPosition",
                    "name",
                    "tags",
                    "templateType",
                    "templateJson",
                    "encodedTemplateYaml"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "total",
              "templates"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/subscription-templates/tagsGet tags of Subscription Templates
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "required": [
              "tags"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
PATCH/api/subscription-templates/tagsSet tags of Subscription Template
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "tags": {
            "maxItems": 10,
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 36,
              "pattern": "^[A-Z0-9_:]+$"
            }
          }
        },
        "required": [
          "uuid",
          "tags"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "required": [
              "uuid",
              "tags"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/subscription-templatesGet all subscription templates (wihout content)
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "total": {
                "type": "number"
              },
              "templates": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "viewPosition": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "name": {
                      "type": "string"
                    },
                    "tags": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "templateType": {
                      "type": "string",
                      "enum": [
                        "XRAY_JSON",
                        "XRAY_BASE64",
                        "MIHOMO",
                        "STASH",
                        "CLASH",
                        "SINGBOX"
                      ]
                    },
                    "templateJson": {
                      "anyOf": [
                        {},
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "encodedTemplateYaml": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  },
                  "required": [
                    "uuid",
                    "viewPosition",
                    "name",
                    "tags",
                    "templateType",
                    "templateJson",
                    "encodedTemplateYaml"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "total",
              "templates"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/subscription-templatesCreate subscription template
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 2,
            "maxLength": 255,
            "pattern": "^[A-Za-z0-9_\\s-]+$"
          },
          "templateType": {
            "type": "string",
            "enum": [
              "XRAY_JSON",
              "XRAY_BASE64",
              "MIHOMO",
              "STASH",
              "CLASH",
              "SINGBOX"
            ]
          }
        },
        "required": [
          "name",
          "templateType"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "viewPosition": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "name": {
                "type": "string"
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "templateType": {
                "type": "string",
                "enum": [
                  "XRAY_JSON",
                  "XRAY_BASE64",
                  "MIHOMO",
                  "STASH",
                  "CLASH",
                  "SINGBOX"
                ]
              },
              "templateJson": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "encodedTemplateYaml": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "uuid",
              "viewPosition",
              "name",
              "tags",
              "templateType",
              "templateJson",
              "encodedTemplateYaml"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
PATCH/api/subscription-templatesUpdate subscription template
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
          },
          "name": {
            "type": "string",
            "minLength": 2,
            "maxLength": 255,
            "pattern": "^[A-Za-z0-9_\\s-]+$"
          },
          "templateJson": {
            "type": "object",
            "properties": {},
            "additionalProperties": {}
          },
          "encodedTemplateYaml": {
            "type": "string"
          }
        },
        "required": [
          "uuid"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "viewPosition": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "name": {
                "type": "string"
              },
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "templateType": {
                "type": "string",
                "enum": [
                  "XRAY_JSON",
                  "XRAY_BASE64",
                  "MIHOMO",
                  "STASH",
                  "CLASH",
                  "SINGBOX"
                ]
              },
              "templateJson": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "encodedTemplateYaml": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "uuid",
              "viewPosition",
              "name",
              "tags",
              "templateType",
              "templateJson",
              "encodedTemplateYaml"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}

subscriptions

GET/api/subscriptions/by-id/{userId}Get subscription by User ID
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "userId",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "isFound": {
                "type": "boolean"
              },
              "user": {
                "type": "object",
                "properties": {
                  "shortUuid": {
                    "type": "string"
                  },
                  "daysLeft": {
                    "type": "number"
                  },
                  "trafficUsed": {
                    "type": "string"
                  },
                  "trafficLimit": {
                    "type": "string"
                  },
                  "lifetimeTrafficUsed": {
                    "type": "string"
                  },
                  "trafficUsedBytes": {
                    "type": "string"
                  },
                  "trafficLimitBytes": {
                    "type": "string"
                  },
                  "lifetimeTrafficUsedBytes": {
                    "type": "string"
                  },
                  "username": {
                    "type": "string"
                  },
                  "expiresAt": {},
                  "isActive": {
                    "type": "boolean"
                  },
                  "userStatus": {
                    "type": "string",
                    "enum": [
                      "ACTIVE",
                      "DISABLED",
                      "LIMITED",
                      "EXPIRED"
                    ]
                  },
                  "trafficLimitStrategy": {
                    "type": "string",
                    "enum": [
                      "NO_RESET",
                      "DAY",
                      "WEEK",
                      "MONTH",
                      "MONTH_ROLLING"
                    ]
                  }
                },
                "required": [
                  "shortUuid",
                  "daysLeft",
                  "trafficUsed",
                  "trafficLimit",
                  "lifetimeTrafficUsed",
                  "trafficUsedBytes",
                  "trafficLimitBytes",
                  "lifetimeTrafficUsedBytes",
                  "username",
                  "expiresAt",
                  "isActive",
                  "userStatus",
                  "trafficLimitStrategy"
                ],
                "additionalProperties": false
              },
              "links": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "ssConfLinks": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "type": "string"
                }
              },
              "subscriptionUrl": {
                "type": "string"
              }
            },
            "required": [
              "isFound",
              "user",
              "links",
              "ssConfLinks",
              "subscriptionUrl"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/subscriptions/by-short-uuid/{shortUuid}/rawGet Raw Subscription by Short UUID
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "shortUuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  },
  {
    "name": "withDisabledHosts",
    "in": "query",
    "required": false,
    "schema": {
      "default": "false",
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "user": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "number"
                  },
                  "shortUuid": {
                    "type": "string"
                  },
                  "username": {
                    "type": "string"
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "ACTIVE",
                      "DISABLED",
                      "LIMITED",
                      "EXPIRED"
                    ]
                  },
                  "trafficLimitBytes": {
                    "type": "number"
                  },
                  "trafficLimitStrategy": {
                    "type": "string",
                    "enum": [
                      "NO_RESET",
                      "DAY",
                      "WEEK",
                      "MONTH",
                      "MONTH_ROLLING"
                    ],
                    "description": "Available reset periods"
                  },
                  "expireAt": {},
                  "telegramId": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "email": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "email",
                        "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "description": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "tag": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "hwidDeviceLimit": {
                    "anyOf": [
                      {
                        "type": "integer",
                        "minimum": -9007199254740991,
                        "maximum": 9007199254740991
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "externalSquadUuid": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "trojanPassword": {
                    "type": "string"
                  },
                  "vlessUuid": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
                  },
                  "ssPassword": {
                    "type": "string"
                  },
                  "lastTriggeredThreshold": {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "subRevokedAt": {
                    "anyOf": [
                      {},
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "lastTrafficResetAt": {
                    "anyOf": [
                      {},
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "createdAt": {},
                  "updatedAt": {},
                  "subscriptionUrl": {
                    "type": "string"
                  },
                  "activeInternalSquads": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "uuid": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        "name": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "uuid",
                        "name"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "userTraffic": {
                    "type": "object",
                    "properties": {
                      "usedTrafficBytes": {
                        "type": "number"
                      },
                      "lifetimeUsedTrafficBytes": {
                        "type": "number"
                      },
                      "onlineAt": {
                        "anyOf": [
                          {},
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "firstConnectedAt": {
                        "anyOf": [
                          {},
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "lastConnectedNodeUuid": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "usedTrafficBytes",
                      "lifetimeUsedTrafficBytes",
                      "onlineAt",
                      "firstConnectedAt",
                      "lastConnectedNodeUuid"
                    ],
                    "additionalProperties": false
                  }
                },
                "required": [
                  "id",
                  "shortUuid",
                  "username",
                  "status",
                  "trafficLimitBytes",
                  "trafficLimitStrategy",
                  "expireAt",
                  "telegramId",
                  "email",
                  "description",
                  "tag",
                  "hwidDeviceLimit",
                  "externalSquadUuid",
                  "trojanPassword",
                  "vlessUuid",
                  "ssPassword",
                  "lastTriggeredThreshold",
                  "subRevokedAt",
                  "lastTrafficResetAt",
                  "createdAt",
                  "updatedAt",
                  "subscriptionUrl",
                  "activeInternalSquads",
                  "userTraffic"
                ],
                "additionalProperties": false
              },
              "convertedUserInfo": {
                "type": "object",
                "properties": {
                  "daysLeft": {
                    "type": "number"
                  },
                  "trafficLimit": {
                    "type": "string"
                  },
                  "trafficUsed": {
                    "type": "string"
                  },
                  "lifetimeTrafficUsed": {
                    "type": "string"
                  },
                  "hwidCheckup": {
                    "anyOf": [
                      {
                        "type": "object",
                        "properties": {
                          "subscriptionAllowed": {
                            "type": "boolean"
                          },
                          "maxDeviceReached": {
                            "type": "boolean"
                          },
                          "hwidNotSupported": {
                            "type": "boolean"
                          },
                          "limitBypassed": {
                            "type": "boolean"
                          }
                        },
                        "required": [
                          "subscriptionAllowed",
                          "maxDeviceReached",
                          "hwidNotSupported",
                          "limitBypassed"
                        ],
                        "additionalProperties": false
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "daysLeft",
                  "trafficLimit",
                  "trafficUsed",
                  "lifetimeTrafficUsed",
                  "hwidCheckup"
                ],
                "additionalProperties": false
              },
              "headers": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "type": "string"
                }
              },
              "resolvedProxyConfigs": {
                "type": "array",
                "items": {
                  "allOf": [
                    {
                      "type": "object",
                      "properties": {
                        "finalRemark": {
                          "type": "string"
                        },
                        "address": {
                          "type": "string"
                        },
                        "port": {
                          "type": "integer",
                          "exclusiveMinimum": 0,
                          "maximum": 9007199254740991
                        },
                        "streamOverrides": {
                          "type": "object",
                          "properties": {
                            "finalMask": {
                              "anyOf": [
                                {},
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "sockopt": {
                              "anyOf": [
                                {},
                                {
                                  "type": "null"
                                }
                              ]
                            }
                          },
                          "required": [
                            "finalMask",
                            "sockopt"
                          ],
                          "additionalProperties": false
                        },
                        "mux": {
                          "anyOf": [
                            {},
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "clientOverrides": {
                          "type": "object",
                          "properties": {
                            "shuffleHost": {
                              "type": "boolean"
                            },
                            "mihomoX25519": {
                              "type": "boolean"
                            },
                            "mihomoIpVersion": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "enum": [
                                    "dual",
                                    "ipv4",
                                    "ipv6",
                                    "ipv4-prefer",
                                    "ipv6-prefer"
                                  ]
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "serverDescription": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "xrayJsonTemplate": {
                              "anyOf": [
                                {},
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "mapper": {
                              "type": "object",
                              "properties": {
                                "xrayJson": {
                                  "title": "Xray JSON",
                                  "markdownDescription": "Operations applied to the **outbound** generated for this host in the Xray JSON subscription. Paths are counted from the root of the outbound.\n\n```json\n[\n  {\n    \"op\": \"copy\",\n    \"from\": \"streamSettings.tlsSettings.cipherSuites\",\n    \"to\": \"streamSettings.tlsSettings.cipherSuites\"\n  },\n  {\n    \"op\": \"unset\",\n    \"to\": \"mux\"\n  }\n]\n```",
                                  "type": "array",
                                  "items": {
                                    "oneOf": [
                                      {
                                        "type": "object",
                                        "properties": {
                                          "op": {
                                            "type": "string",
                                            "const": "copy",
                                            "title": "Copy",
                                            "markdownDescription": "Take a value from the raw inbound."
                                          },
                                          "from": {
                                            "type": "string",
                                            "minLength": 1,
                                            "maxLength": 512,
                                            "title": "Source path",
                                            "markdownDescription": "Dot-separated path inside the **raw inbound** of the config profile this host belongs to. Array items are addressed by index.\n\nWith a `$host.` prefix the value is read from the **host** itself, after overrides have been resolved – `$host.securityOptions.serverName` holds the SNI that actually went into the config.\n\nOnly a part of the host is readable. Each entry below also opens everything nested under it:\n\n`address`, `port`, `finalRemark`, `protocol`, `transport`, `security`, `protocolOptions`, `transportOptions`, `securityOptions`, `mux`, `streamOverrides.finalMask`, `streamOverrides.sockopt`, `clientOverrides.serverDescription`, `metadata.remark`, `metadata.tags`, `metadata.inboundTag`\n\n> If the path resolves to nothing – or points outside the list above – the operation is skipped and the target key is **not** created.",
                                            "examples": [
                                              "streamSettings.tlsSettings.cipherSuites",
                                              "streamSettings.tlsSettings.alpn",
                                              "streamSettings.realitySettings.serverNames.0",
                                              "$host.address",
                                              "$host.securityOptions.serverName",
                                              "$host.transportOptions.path",
                                              "$host.mux.smux"
                                            ]
                                          },
                                          "to": {
                                            "type": "string",
                                            "minLength": 1,
                                            "maxLength": 512,
                                            "title": "Target path",
                                            "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                                            "examples": [
                                              "streamSettings.tlsSettings.enableSessionResumption",
                                              "streamSettings.tlsSettings.cipherSuites"
                                            ]
                                          }
                                        },
                                        "required": [
                                          "op",
                                          "from",
                                          "to"
                                        ],
                                        "additionalProperties": false,
                                        "title": "Copy from the inbound",
                                        "markdownDescription": "Reads a value from the raw inbound and writes it into the generated config.\n\n```json\n{\n  \"op\": \"copy\",\n  \"from\": \"streamSettings.tlsSettings.cipherSuites\",\n  \"to\": \"streamSettings.tlsSettings.cipherSuites\"\n}\n```",
                                        "defaultSnippets": [
                                          {
                                            "label": "copy",
                                            "description": "Copy a value from the raw inbound",
                                            "body": {
                                              "op": "copy",
                                              "from": "$1",
                                              "to": "$2"
                                            }
                                          }
                                        ]
                                      },
                                      {
                                        "type": "object",
                                        "properties": {
                                          "op": {
                                            "type": "string",
                                            "const": "set",
                                            "title": "Set",
                                            "markdownDescription": "Write a fixed value."
                                          },
                                          "value": {
                                            "anyOf": [
                                              {
                                                "type": "string"
                                              },
                                              {
                                                "type": "number"
                                              },
                                              {
                                                "type": "boolean"
                                              },
                                              {
                                                "type": "array",
                                                "items": {
                                                  "$ref": "#/$defs/__schema0"
                                                }
                                              },
                                              {
                                                "type": "object",
                                                "propertyNames": {
                                                  "type": "string"
                                                },
                                                "additionalProperties": {
                                                  "$ref": "#/$defs/__schema1"
                                                }
                                              }
                                            ],
                                            "title": "Value",
                                            "markdownDescription": "The value to write. Strings, numbers, booleans, arrays and objects are allowed."
                                          },
                                          "to": {
                                            "type": "string",
                                            "minLength": 1,
                                            "maxLength": 512,
                                            "title": "Target path",
                                            "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                                            "examples": [
                                              "streamSettings.tlsSettings.enableSessionResumption",
                                              "streamSettings.tlsSettings.cipherSuites"
                                            ]
                                          }
                                        },
                                        "required": [
                                          "op",
                                          "value",
                                          "to"
                                        ],
                                        "additionalProperties": false,
                                        "title": "Set a fixed value",
                                        "markdownDescription": "Writes a literal value into the generated config, creating the key if it is missing.\n\n```json\n{\n  \"op\": \"set\",\n  \"to\": \"streamSettings.tlsSettings.enableSessionResumption\",\n  \"value\": true\n}\n```",
                                        "defaultSnippets": [
                                          {
                                            "label": "set",
                                            "description": "Write a fixed value",
                                            "body": {
                                              "op": "set",
                                              "to": "$1",
                                              "value": "$2"
                                            }
                                          }
                                        ]
                                      },
                                      {
                                        "type": "object",
                                        "properties": {
                                          "op": {
                                            "type": "string",
                                            "const": "unset",
                                            "title": "Unset",
                                            "markdownDescription": "Remove a field."
                                          },
                                          "to": {
                                            "type": "string",
                                            "minLength": 1,
                                            "maxLength": 512,
                                            "title": "Target path",
                                            "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                                            "examples": [
                                              "streamSettings.tlsSettings.enableSessionResumption",
                                              "streamSettings.tlsSettings.cipherSuites"
                                            ]
                                          }
                                        },
                                        "required": [
                                          "op",
                                          "to"
                                        ],
                                        "additionalProperties": false,
                                        "title": "Remove a field",
                                        "markdownDescription": "Removes a field the generator produced by itself.\n\n```json\n{\n  \"op\": \"unset\",\n  \"to\": \"mux\"\n}\n```\n\n> Only the field itself is removed. A parent object left empty stays in the config as `{}`.",
                                        "defaultSnippets": [
                                          {
                                            "label": "unset",
                                            "description": "Remove a field",
                                            "body": {
                                              "op": "unset",
                                              "to": "$1"
                                            }
                                          }
                                        ]
                                      }
                                    ],
                                    "title": "Operation",
                                    "markdownDescription": "Operations run one after another, in the order they are listed.\n\nA later operation sees what the previous ones wrote, so an `unset` can remove a key an earlier `set` added."
                                  }
                                },
                                "mihomo": {
                                  "title": "Mihomo",
                                  "markdownDescription": "Operations applied to the **proxy node** generated for this host in the Mihomo subscription.\n\nPaths are counted from the root of the node, where Mihomo keys are written in kebab-case.\n\n```json\n[\n  {\n    \"op\": \"set\",\n    \"to\": \"ip-version\",\n    \"value\": \"ipv4\"\n  }\n]\n```",
                                  "type": "array",
                                  "items": {
                                    "oneOf": [
                                      {
                                        "type": "object",
                                        "properties": {
                                          "op": {
                                            "type": "string",
                                            "const": "copy",
                                            "title": "Copy",
                                            "markdownDescription": "Take a value from the raw inbound."
                                          },
                                          "from": {
                                            "type": "string",
                                            "minLength": 1,
                                            "maxLength": 512,
                                            "title": "Source path",
                                            "markdownDescription": "Dot-separated path inside the **raw inbound** of the config profile this host belongs to. Array items are addressed by index.\n\nWith a `$host.` prefix the value is read from the **host** itself, after overrides have been resolved – `$host.securityOptions.serverName` holds the SNI that actually went into the config.\n\nOnly a part of the host is readable. Each entry below also opens everything nested under it:\n\n`address`, `port`, `finalRemark`, `protocol`, `transport`, `security`, `protocolOptions`, `transportOptions`, `securityOptions`, `mux`, `streamOverrides.finalMask`, `streamOverrides.sockopt`, `clientOverrides.serverDescription`, `metadata.remark`, `metadata.tags`, `metadata.inboundTag`\n\n> If the path resolves to nothing – or points outside the list above – the operation is skipped and the target key is **not** created.",
                                            "examples": [
                                              "streamSettings.tlsSettings.cipherSuites",
                                              "streamSettings.tlsSettings.alpn",
                                              "streamSettings.realitySettings.serverNames.0",
                                              "$host.address",
                                              "$host.securityOptions.serverName",
                                              "$host.transportOptions.path",
                                              "$host.mux.smux"
                                            ]
                                          },
                                          "to": {
                                            "type": "string",
                                            "minLength": 1,
                                            "maxLength": 512,
                                            "title": "Target path",
                                            "markdownDescription": "Dot-separated path inside the generated **proxy node**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                                            "examples": [
                                              "ip-version",
                                              "client-fingerprint",
                                              "tfo",
                                              "reality-opts.support-x25519mlkem768"
                                            ]
                                          }
                                        },
                                        "required": [
                                          "op",
                                          "from",
                                          "to"
                                        ],
                                        "additionalProperties": false,
                                        "title": "Copy from the inbound",
                                        "markdownDescription": "Reads a value from the raw inbound and writes it into the generated config.\n\n```json\n{\n  \"op\": \"copy\",\n  \"from\": \"streamSettings.realitySettings.serverNames.0\",\n  \"to\": \"servername\"\n}\n```",
                                        "defaultSnippets": [
                                          {
                                            "label": "copy",
                                            "description": "Copy a value from the raw inbound",
                                            "body": {
                                              "op": "copy",
                                              "from": "$1",
                                              "to": "$2"
                                            }
                                          }
                                        ]
                                      },
                                      {
                                        "type": "object",
                                        "properties": {
                                          "op": {
                                            "type": "string",
                                            "const": "set",
                                            "title": "Set",
                                            "markdownDescription": "Write a fixed value."
                                          },
                                          "value": {
                                            "anyOf": [
                                              {
                                                "type": "string"
                                              },
                                              {
                                                "type": "number"
                                              },
                                              {
                                                "type": "boolean"
                                              },
                                              {
                                                "type": "array",
                                                "items": {
                                                  "$ref": "#/$defs/__schema2"
                                                }
                                              },
                                              {
                                                "type": "object",
                                                "propertyNames": {
                                                  "type": "string"
                                                },
                                                "additionalProperties": {
                                                  "$ref": "#/$defs/__schema3"
                                                }
                                              }
                                            ],
                                            "title": "Value",
                                            "markdownDescription": "The value to write. Strings, numbers, booleans, arrays and objects are allowed."
                                          },
                                          "to": {
                                            "type": "string",
                                            "minLength": 1,
                                            "maxLength": 512,
                                            "title": "Target path",
                                            "markdownDescription": "Dot-separated path inside the generated **proxy node**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                                            "examples": [
                                              "ip-version",
                                              "client-fingerprint",
                                              "tfo",
                                              "reality-opts.support-x25519mlkem768"
                                            ]
                                          }
                                        },
                                        "required": [
                                          "op",
                                          "value",
                                          "to"
                                        ],
                                        "additionalProperties": false,
                                        "title": "Set a fixed value",
                                        "markdownDescription": "Writes a literal value into the generated config, creating the key if it is missing.\n\n```json\n{\n  \"op\": \"set\",\n  \"to\": \"reality-opts.support-x25519mlkem768\",\n  \"value\": true\n}\n```",
                                        "defaultSnippets": [
                                          {
                                            "label": "set",
                                            "description": "Write a fixed value",
                                            "body": {
                                              "op": "set",
                                              "to": "$1",
                                              "value": "$2"
                                            }
                                          }
                                        ]
                                      },
                                      {
                                        "type": "object",
                                        "properties": {
                                          "op": {
                                            "type": "string",
                                            "const": "unset",
                                            "title": "Unset",
                                            "markdownDescription": "Remove a field."
                                          },
                                          "to": {
                                            "type": "string",
                                            "minLength": 1,
                                            "maxLength": 512,
                                            "title": "Target path",
                                            "markdownDescription": "Dot-separated path inside the generated **proxy node**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                                            "examples": [
                                              "ip-version",
                                              "client-fingerprint",
                                              "tfo",
                                              "reality-opts.support-x25519mlkem768"
                                            ]
                                          }
                                        },
                                        "required": [
                                          "op",
                                          "to"
                                        ],
                                        "additionalProperties": false,
                                        "title": "Remove a field",
                                        "markdownDescription": "Removes a field the generator produced by itself.\n\n```json\n{\n  \"op\": \"unset\",\n  \"to\": \"smux\"\n}\n```\n\n> Only the field itself is removed. A parent object left empty stays in the config as `{}`.",
                                        "defaultSnippets": [
                                          {
                                            "label": "unset",
                                            "description": "Remove a field",
                                            "body": {
                                              "op": "unset",
                                              "to": "$1"
                                            }
                                          }
                                        ]
                                      }
                                    ],
                                    "title": "Operation",
                                    "markdownDescription": "Operations run one after another, in the order they are listed.\n\nA later operation sees what the previous ones wrote, so an `unset` can remove a key an earlier `set` added."
                                  }
                                },
                                "base64": {
                                  "title": "Base64",
                                  "markdownDescription": "Operations applied to the share link generated for this host in the Base64 subscription.\n\n`to` is a plain query parameter name, not a path – dots carry no meaning here.\n\nWith a `$link.` prefix the operation rewrites the link itself instead of its query string. Writable parts: `$link.address`, `$link.port`, `$link.password`, `$link.remark`, and `$link.method` for Shadowsocks. `$link.password` is the credential of the protocol.\n\n> A value that cannot make a valid link – an empty address, a port outside 1-65535 – is ignored, and the generated one is kept.\n\n```json\n[\n  {\n    \"op\": \"set\",\n    \"to\": \"fp\",\n    \"value\": \"chrome\"\n  },\n  {\n    \"op\": \"unset\",\n    \"to\": \"fm\"\n  },\n  {\n    \"op\": \"set\",\n    \"to\": \"$link.port\",\n    \"value\": 2053\n  },\n  {\n    \"op\": \"copy\",\n    \"from\": \"$host.securityOptions.serverName\",\n    \"to\": \"$link.address\"\n  }\n]\n```",
                                  "type": "array",
                                  "items": {
                                    "oneOf": [
                                      {
                                        "type": "object",
                                        "properties": {
                                          "op": {
                                            "type": "string",
                                            "const": "copy",
                                            "title": "Copy",
                                            "markdownDescription": "Take a value from the raw inbound."
                                          },
                                          "from": {
                                            "type": "string",
                                            "minLength": 1,
                                            "maxLength": 512,
                                            "title": "Source path",
                                            "markdownDescription": "Dot-separated path inside the **raw inbound** of the config profile this host belongs to. Array items are addressed by index.\n\nWith a `$host.` prefix the value is read from the **host** itself, after overrides have been resolved – `$host.securityOptions.serverName` holds the SNI that actually went into the config.\n\nOnly a part of the host is readable. Each entry below also opens everything nested under it:\n\n`address`, `port`, `finalRemark`, `protocol`, `transport`, `security`, `protocolOptions`, `transportOptions`, `securityOptions`, `mux`, `streamOverrides.finalMask`, `streamOverrides.sockopt`, `clientOverrides.serverDescription`, `metadata.remark`, `metadata.tags`, `metadata.inboundTag`\n\n> If the path resolves to nothing – or points outside the list above – the operation is skipped and the target key is **not** created.",
                                            "examples": [
                                              "streamSettings.tlsSettings.cipherSuites",
                                              "streamSettings.tlsSettings.alpn",
                                              "streamSettings.realitySettings.serverNames.0",
                                              "$host.address",
                                              "$host.securityOptions.serverName",
                                              "$host.transportOptions.path",
                                              "$host.mux.smux"
                                            ]
                                          },
                                          "to": {
                                            "type": "string",
                                            "minLength": 1,
                                            "maxLength": 512,
                                            "title": "Target path",
                                            "markdownDescription": "Dot-separated path inside the query string of the generated **share link**, or the link itself with a `$link.` prefix, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                                            "examples": [
                                              "$link.address",
                                              "$link.port",
                                              "$link.password",
                                              "$link.remark",
                                              "$link.method",
                                              "alpn",
                                              "authority",
                                              "cs",
                                              "encryption",
                                              "extra",
                                              "flow",
                                              "fm",
                                              "fp",
                                              "headerType",
                                              "heartbeatPeriod",
                                              "host",
                                              "mode",
                                              "mtu",
                                              "obfs",
                                              "obfs-password",
                                              "path",
                                              "pbk",
                                              "pcs",
                                              "pinSHA256",
                                              "pqv",
                                              "security",
                                              "serviceName",
                                              "sid",
                                              "sni",
                                              "spx",
                                              "tti",
                                              "type",
                                              "vcn"
                                            ]
                                          }
                                        },
                                        "required": [
                                          "op",
                                          "from",
                                          "to"
                                        ],
                                        "additionalProperties": false,
                                        "title": "Copy from the inbound",
                                        "markdownDescription": "Reads a value from the raw inbound and writes it into the generated config.\n\n```json\n{\n  \"op\": \"copy\",\n  \"from\": \"streamSettings.realitySettings.serverNames.0\",\n  \"to\": \"sni\"\n}\n```",
                                        "defaultSnippets": [
                                          {
                                            "label": "copy",
                                            "description": "Copy a value from the raw inbound",
                                            "body": {
                                              "op": "copy",
                                              "from": "$1",
                                              "to": "$2"
                                            }
                                          }
                                        ]
                                      },
                                      {
                                        "type": "object",
                                        "properties": {
                                          "op": {
                                            "type": "string",
                                            "const": "set",
                                            "title": "Set",
                                            "markdownDescription": "Write a fixed value."
                                          },
                                          "value": {
                                            "anyOf": [
                                              {
                                                "type": "string"
                                              },
                                              {
                                                "type": "number"
                                              },
                                              {
                                                "type": "boolean"
                                              },
                                              {
                                                "type": "array",
                                                "items": {
                                                  "$ref": "#/$defs/__schema4"
                                                }
                                              },
                                              {
                                                "type": "object",
                                                "propertyNames": {
                                                  "type": "string"
                                                },
                                                "additionalProperties": {
                                                  "$ref": "#/$defs/__schema5"
                                                }
                                              }
                                            ],
                                            "title": "Value",
                                            "markdownDescription": "The value to write. Strings, numbers, booleans, arrays and objects are allowed."
                                          },
                                          "to": {
                                            "type": "string",
                                            "minLength": 1,
                                            "maxLength": 512,
                                            "title": "Target path",
                                            "markdownDescription": "Dot-separated path inside the query string of the generated **share link**, or the link itself with a `$link.` prefix, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                                            "examples": [
                                              "$link.address",
                                              "$link.port",
                                              "$link.password",
                                              "$link.remark",
                                              "$link.method",
                                              "alpn",
                                              "authority",
                                              "cs",
                                              "encryption",
                                              "extra",
                                              "flow",
                                              "fm",
                                              "fp",
                                              "headerType",
                                              "heartbeatPeriod",
                                              "host",
                                              "mode",
                                              "mtu",
                                              "obfs",
                                              "obfs-password",
                                              "path",
                                              "pbk",
                                              "pcs",
                                              "pinSHA256",
                                              "pqv",
                                              "security",
                                              "serviceName",
                                              "sid",
                                              "sni",
                                              "spx",
                                              "tti",
                                              "type",
                                              "vcn"
                                            ]
                                          }
                                        },
                                        "required": [
                                          "op",
                                          "value",
                                          "to"
                                        ],
                                        "additionalProperties": false,
                                        "title": "Set a fixed value",
                                        "markdownDescription": "Writes a literal value into the generated config, creating the key if it is missing.\n\n```json\n{\n  \"op\": \"set\",\n  \"to\": \"fp\",\n  \"value\": \"chrome\"\n}\n```",
                                        "defaultSnippets": [
                                          {
                                            "label": "set",
                                            "description": "Write a fixed value",
                                            "body": {
                                              "op": "set",
                                              "to": "$1",
                                              "value": "$2"
                                            }
                                          }
                                        ]
                                      },
                                      {
                                        "type": "object",
                                        "properties": {
                                          "op": {
                                            "type": "string",
                                            "const": "unset",
                                            "title": "Unset",
                                            "markdownDescription": "Remove a field."
                                          },
                                          "to": {
                                            "type": "string",
                                            "minLength": 1,
                                            "maxLength": 512,
                                            "title": "Target path",
                                            "markdownDescription": "Dot-separated path inside the query string of the generated **share link**, or the link itself with a `$link.` prefix, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                                            "examples": [
                                              "$link.address",
                                              "$link.port",
                                              "$link.password",
                                              "$link.remark",
                                              "$link.method",
                                              "alpn",
                                              "authority",
                                              "cs",
                                              "encryption",
                                              "extra",
                                              "flow",
                                              "fm",
                                              "fp",
                                              "headerType",
                                              "heartbeatPeriod",
                                              "host",
                                              "mode",
                                              "mtu",
                                              "obfs",
                                              "obfs-password",
                                              "path",
                                              "pbk",
                                              "pcs",
                                              "pinSHA256",
                                              "pqv",
                                              "security",
                                              "serviceName",
                                              "sid",
                                              "sni",
                                              "spx",
                                              "tti",
                                              "type",
                                              "vcn"
                                            ]
                                          }
                                        },
                                        "required": [
                                          "op",
                                          "to"
                                        ],
                                        "additionalProperties": false,
                                        "title": "Remove a field",
                                        "markdownDescription": "Removes a field the generator produced by itself.\n\n```json\n{\n  \"op\": \"unset\",\n  \"to\": \"fm\"\n}\n```\n\n> Only the field itself is removed. A parent object left empty stays in the config as `{}`.",
                                        "defaultSnippets": [
                                          {
                                            "label": "unset",
                                            "description": "Remove a field",
                                            "body": {
                                              "op": "unset",
                                              "to": "$1"
                                            }
                                          }
                                        ]
                                      }
                                    ],
                                    "title": "Operation",
                                    "markdownDescription": "Operations run one after another, in the order they are listed.\n\nA later operation sees what the previous ones wrote, so an `unset` can remove a key an earlier `set` added."
                                  }
                                },
                                "singbox": {
                                  "title": "sing-box",
                                  "markdownDescription": "Operations applied to the **outbound** generated for this host in the sing-box subscription. Paths are counted from the root of the outbound.\n\nsing-box keys are written in snake_case, and the outbound of a Hysteria2 host has a shape of its own.\n\n```json\n[\n  {\n    \"op\": \"set\",\n    \"to\": \"tls.utls.fingerprint\",\n    \"value\": \"chrome\"\n  },\n  {\n    \"op\": \"unset\",\n    \"to\": \"multiplex\"\n  }\n]\n```",
                                  "type": "array",
                                  "items": {
                                    "oneOf": [
                                      {
                                        "type": "object",
                                        "properties": {
                                          "op": {
                                            "type": "string",
                                            "const": "copy",
                                            "title": "Copy",
                                            "markdownDescription": "Take a value from the raw inbound."
                                          },
                                          "from": {
                                            "type": "string",
                                            "minLength": 1,
                                            "maxLength": 512,
                                            "title": "Source path",
                                            "markdownDescription": "Dot-separated path inside the **raw inbound** of the config profile this host belongs to. Array items are addressed by index.\n\nWith a `$host.` prefix the value is read from the **host** itself, after overrides have been resolved – `$host.securityOptions.serverName` holds the SNI that actually went into the config.\n\nOnly a part of the host is readable. Each entry below also opens everything nested under it:\n\n`address`, `port`, `finalRemark`, `protocol`, `transport`, `security`, `protocolOptions`, `transportOptions`, `securityOptions`, `mux`, `streamOverrides.finalMask`, `streamOverrides.sockopt`, `clientOverrides.serverDescription`, `metadata.remark`, `metadata.tags`, `metadata.inboundTag`\n\n> If the path resolves to nothing – or points outside the list above – the operation is skipped and the target key is **not** created.",
                                            "examples": [
                                              "streamSettings.tlsSettings.cipherSuites",
                                              "streamSettings.tlsSettings.alpn",
                                              "streamSettings.realitySettings.serverNames.0",
                                              "$host.address",
                                              "$host.securityOptions.serverName",
                                              "$host.transportOptions.path",
                                              "$host.mux.smux"
                                            ]
                                          },
                                          "to": {
                                            "type": "string",
                                            "minLength": 1,
                                            "maxLength": 512,
                                            "title": "Target path",
                                            "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                                            "examples": [
                                              "domain_resolver",
                                              "multiplex.protocol",
                                              "packet_encoding",
                                              "tcp_fast_open",
                                              "tls.insecure",
                                              "tls.utls.fingerprint"
                                            ]
                                          }
                                        },
                                        "required": [
                                          "op",
                                          "from",
                                          "to"
                                        ],
                                        "additionalProperties": false,
                                        "title": "Copy from the inbound",
                                        "markdownDescription": "Reads a value from the raw inbound and writes it into the generated config.\n\n```json\n{\n  \"op\": \"copy\",\n  \"from\": \"streamSettings.realitySettings.serverNames.0\",\n  \"to\": \"tls.server_name\"\n}\n```",
                                        "defaultSnippets": [
                                          {
                                            "label": "copy",
                                            "description": "Copy a value from the raw inbound",
                                            "body": {
                                              "op": "copy",
                                              "from": "$1",
                                              "to": "$2"
                                            }
                                          }
                                        ]
                                      },
                                      {
                                        "type": "object",
                                        "properties": {
                                          "op": {
                                            "type": "string",
                                            "const": "set",
                                            "title": "Set",
                                            "markdownDescription": "Write a fixed value."
                                          },
                                          "value": {
                                            "anyOf": [
                                              {
                                                "type": "string"
                                              },
                                              {
                                                "type": "number"
                                              },
                                              {
                                                "type": "boolean"
                                              },
                                              {
                                                "type": "array",
                                                "items": {
                                                  "$ref": "#/$defs/__schema6"
                                                }
                                              },
                                              {
                                                "type": "object",
                                                "propertyNames": {
                                                  "type": "string"
                                                },
                                                "additionalProperties": {
                                                  "$ref": "#/$defs/__schema7"
                                                }
                                              }
                                            ],
                                            "title": "Value",
                                            "markdownDescription": "The value to write. Strings, numbers, booleans, arrays and objects are allowed."
                                          },
                                          "to": {
                                            "type": "string",
                                            "minLength": 1,
                                            "maxLength": 512,
                                            "title": "Target path",
                                            "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                                            "examples": [
                                              "domain_resolver",
                                              "multiplex.protocol",
                                              "packet_encoding",
                                              "tcp_fast_open",
                                              "tls.insecure",
                                              "tls.utls.fingerprint"
                                            ]
                                          }
                                        },
                                        "required": [
                                          "op",
                                          "value",
                                          "to"
                                        ],
                                        "additionalProperties": false,
                                        "title": "Set a fixed value",
                                        "markdownDescription": "Writes a literal value into the generated config, creating the key if it is missing.\n\n```json\n{\n  \"op\": \"set\",\n  \"to\": \"tls.utls.fingerprint\",\n  \"value\": \"chrome\"\n}\n```",
                                        "defaultSnippets": [
                                          {
                                            "label": "set",
                                            "description": "Write a fixed value",
                                            "body": {
                                              "op": "set",
                                              "to": "$1",
                                              "value": "$2"
                                            }
                                          }
                                        ]
                                      },
                                      {
                                        "type": "object",
                                        "properties": {
                                          "op": {
                                            "type": "string",
                                            "const": "unset",
                                            "title": "Unset",
                                            "markdownDescription": "Remove a field."
                                          },
                                          "to": {
                                            "type": "string",
                                            "minLength": 1,
                                            "maxLength": 512,
                                            "title": "Target path",
                                            "markdownDescription": "Dot-separated path inside the generated **outbound**, counted from its root.\n\nMissing objects along the path are created. Array items are addressed by index, and keys with dashes are written as is (`ip-version`).\n\n> A path running through a value that is not an object – for example `path.foo`, where `path` holds a string – is refused, so an existing value is never destroyed.",
                                            "examples": [
                                              "domain_resolver",
                                              "multiplex.protocol",
                                              "packet_encoding",
                                              "tcp_fast_open",
                                              "tls.insecure",
                                              "tls.utls.fingerprint"
                                            ]
                                          }
                                        },
                                        "required": [
                                          "op",
                                          "to"
                                        ],
                                        "additionalProperties": false,
                                        "title": "Remove a field",
                                        "markdownDescription": "Removes a field the generator produced by itself.\n\n```json\n{\n  \"op\": \"unset\",\n  \"to\": \"multiplex\"\n}\n```\n\n> Only the field itself is removed. A parent object left empty stays in the config as `{}`.",
                                        "defaultSnippets": [
                                          {
                                            "label": "unset",
                                            "description": "Remove a field",
                                            "body": {
                                              "op": "unset",
                                              "to": "$1"
                                            }
                                          }
                                        ]
                                      }
                                    ],
                                    "title": "Operation",
                                    "markdownDescription": "Operations run one after another, in the order they are listed.\n\nA later operation sees what the previous ones wrote, so an `unset` can remove a key an earlier `set` added."
                                  }
                                }
                              },
                              "additionalProperties": false,
                              "title": "Host Mapper",
                              "markdownDescription": "Rewrites the config generated for this host, per client type.\n\nOperations run **after** the generator has finished, so they can change or remove anything it produced.\n\nThe source for `copy` is the raw inbound of the config profile this host belongs to, or the host itself when the path starts with `$host.`.\n\n> `to` is never checked against the target client. A misspelled key is written exactly like a real one."
                            }
                          },
                          "required": [
                            "shuffleHost",
                            "mihomoX25519",
                            "mihomoIpVersion",
                            "serverDescription",
                            "xrayJsonTemplate",
                            "mapper"
                          ],
                          "additionalProperties": false
                        },
                        "metadata": {
                          "type": "object",
                          "properties": {
                            "uuid": {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                            },
                            "tags": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            },
                            "excludeFromSubscriptionTypes": {
                              "type": "array",
                              "items": {
                                "type": "string",
                                "enum": [
                                  "XRAY_JSON",
                                  "XRAY_BASE64",
                                  "MIHOMO",
                                  "STASH",
                                  "CLASH",
                                  "SINGBOX"
                                ]
                              }
                            },
                            "inboundTag": {
                              "type": "string"
                            },
                            "configProfileUuid": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "format": "uuid",
                                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "configProfileInboundUuid": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "format": "uuid",
                                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "isDisabled": {
                              "type": "boolean"
                            },
                            "isHidden": {
                              "type": "boolean"
                            },
                            "viewPosition": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991
                            },
                            "remark": {
                              "type": "string"
                            },
                            "vlessRouteId": {
                              "anyOf": [
                                {
                                  "type": "integer",
                                  "minimum": -9007199254740991,
                                  "maximum": 9007199254740991
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "rawInbound": {
                              "anyOf": [
                                {},
                                {
                                  "type": "null"
                                }
                              ]
                            }
                          },
                          "required": [
                            "uuid",
                            "tags",
                            "excludeFromSubscriptionTypes",
                            "inboundTag",
                            "configProfileUuid",
                            "configProfileInboundUuid",
                            "isDisabled",
                            "isHidden",
                            "viewPosition",
                            "remark",
                            "vlessRouteId",
                            "rawInbound"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "required": [
                        "finalRemark",
                        "address",
                        "port",
                        "streamOverrides",
                        "mux",
                        "clientOverrides",
                        "metadata"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "oneOf": [
                        {
                          "type": "object",
                          "properties": {
                            "protocol": {
                              "type": "string",
                              "const": "vless"
                            },
                            "protocolOptions": {
                              "type": "object",
                              "properties": {
                                "encryption": {
                                  "type": "string"
                                },
                                "id": {
                                  "type": "string"
                                },
                                "flow": {
                                  "type": "string",
                                  "enum": [
                                    "",
                                    "xtls-rprx-vision",
                                    "xtls-rprx-vision-udp443"
                                  ]
                                }
                              },
                              "required": [
                                "encryption",
                                "id",
                                "flow"
                              ],
                              "additionalProperties": false
                            }
                          },
                          "required": [
                            "protocol",
                            "protocolOptions"
                          ],
                          "additionalProperties": false,
                          "title": "vless"
                        },
                        {
                          "type": "object",
                          "properties": {
                            "protocol": {
                              "type": "string",
                              "const": "trojan"
                            },
                            "protocolOptions": {
                              "type": "object",
                              "properties": {
                                "password": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "password"
                              ],
                              "additionalProperties": false
                            }
                          },
                          "required": [
                            "protocol",
                            "protocolOptions"
                          ],
                          "additionalProperties": false,
                          "title": "trojan"
                        },
                        {
                          "type": "object",
                          "properties": {
                            "protocol": {
                              "type": "string",
                              "const": "shadowsocks"
                            },
                            "protocolOptions": {
                              "type": "object",
                              "properties": {
                                "method": {
                                  "type": "string"
                                },
                                "password": {
                                  "type": "string"
                                },
                                "uot": {
                                  "type": "boolean"
                                },
                                "uotVersion": {
                                  "type": "integer",
                                  "minimum": -9007199254740991,
                                  "maximum": 9007199254740991
                                }
                              },
                              "required": [
                                "method",
                                "password",
                                "uot",
                                "uotVersion"
                              ],
                              "additionalProperties": false
                            }
                          },
                          "required": [
                            "protocol",
                            "protocolOptions"
                          ],
                          "additionalProperties": false,
                          "title": "shadowsocks"
                        },
                        {
                          "type": "object",
                          "properties": {
                            "protocol": {
                              "type": "string",
                              "const": "hysteria"
                            },
                            "protocolOptions": {
                              "type": "object",
                              "properties": {
                                "version": {
                                  "type": "integer",
                                  "minimum": -9007199254740991,
                                  "maximum": 9007199254740991
                                }
                              },
                              "required": [
                                "version"
                              ],
                              "additionalProperties": false
                            }
                          },
                          "required": [
                            "protocol",
                            "protocolOptions"
                          ],
                          "additionalProperties": false,
                          "title": "hysteria"
                        }
                      ]
                    },
                    {
                      "oneOf": [
                        {
                          "type": "object",
                          "properties": {
                            "transport": {
                              "type": "string",
                              "const": "tcp"
                            },
                            "transportOptions": {
                              "type": "object",
                              "properties": {
                                "header": {
                                  "anyOf": [
                                    {
                                      "oneOf": [
                                        {
                                          "type": "object",
                                          "properties": {
                                            "type": {
                                              "type": "string",
                                              "const": "none"
                                            }
                                          },
                                          "required": [
                                            "type"
                                          ],
                                          "additionalProperties": false
                                        },
                                        {
                                          "type": "object",
                                          "properties": {
                                            "type": {
                                              "type": "string",
                                              "const": "http"
                                            },
                                            "request": {
                                              "type": "object",
                                              "properties": {
                                                "version": {
                                                  "type": "string"
                                                },
                                                "method": {
                                                  "type": "string"
                                                },
                                                "path": {
                                                  "type": "array",
                                                  "items": {
                                                    "type": "string"
                                                  }
                                                },
                                                "headers": {
                                                  "type": "object",
                                                  "propertyNames": {
                                                    "type": "string"
                                                  },
                                                  "additionalProperties": {}
                                                }
                                              },
                                              "additionalProperties": false
                                            },
                                            "response": {
                                              "type": "object",
                                              "properties": {
                                                "version": {
                                                  "type": "string"
                                                },
                                                "status": {
                                                  "type": "string"
                                                },
                                                "reason": {
                                                  "type": "string"
                                                },
                                                "headers": {
                                                  "type": "object",
                                                  "propertyNames": {
                                                    "type": "string"
                                                  },
                                                  "additionalProperties": {}
                                                }
                                              },
                                              "additionalProperties": false
                                            }
                                          },
                                          "required": [
                                            "type"
                                          ],
                                          "additionalProperties": false
                                        }
                                      ]
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                }
                              },
                              "required": [
                                "header"
                              ],
                              "additionalProperties": false
                            }
                          },
                          "required": [
                            "transport",
                            "transportOptions"
                          ],
                          "additionalProperties": false,
                          "title": "tcp"
                        },
                        {
                          "type": "object",
                          "properties": {
                            "transport": {
                              "type": "string",
                              "const": "xhttp"
                            },
                            "transportOptions": {
                              "type": "object",
                              "properties": {
                                "path": {
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "host": {
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "mode": {
                                  "type": "string",
                                  "enum": [
                                    "auto",
                                    "packet-up",
                                    "stream-up",
                                    "stream-one"
                                  ]
                                },
                                "extra": {
                                  "anyOf": [
                                    {
                                      "type": "object",
                                      "propertyNames": {
                                        "type": "string"
                                      },
                                      "additionalProperties": {}
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                }
                              },
                              "required": [
                                "path",
                                "host",
                                "mode",
                                "extra"
                              ],
                              "additionalProperties": false
                            }
                          },
                          "required": [
                            "transport",
                            "transportOptions"
                          ],
                          "additionalProperties": false,
                          "title": "xhttp"
                        },
                        {
                          "type": "object",
                          "properties": {
                            "transport": {
                              "type": "string",
                              "const": "ws"
                            },
                            "transportOptions": {
                              "type": "object",
                              "properties": {
                                "path": {
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "host": {
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "headers": {
                                  "anyOf": [
                                    {
                                      "type": "object",
                                      "propertyNames": {
                                        "type": "string"
                                      },
                                      "additionalProperties": {
                                        "type": "string"
                                      }
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "heartbeatPeriod": {
                                  "type": [
                                    "number",
                                    "null"
                                  ]
                                }
                              },
                              "required": [
                                "path",
                                "host",
                                "headers",
                                "heartbeatPeriod"
                              ],
                              "additionalProperties": false
                            }
                          },
                          "required": [
                            "transport",
                            "transportOptions"
                          ],
                          "additionalProperties": false,
                          "title": "ws"
                        },
                        {
                          "type": "object",
                          "properties": {
                            "transport": {
                              "type": "string",
                              "const": "httpupgrade"
                            },
                            "transportOptions": {
                              "type": "object",
                              "properties": {
                                "path": {
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "host": {
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "headers": {
                                  "anyOf": [
                                    {
                                      "type": "object",
                                      "propertyNames": {
                                        "type": "string"
                                      },
                                      "additionalProperties": {
                                        "type": "string"
                                      }
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                }
                              },
                              "required": [
                                "path",
                                "host",
                                "headers"
                              ],
                              "additionalProperties": false
                            }
                          },
                          "required": [
                            "transport",
                            "transportOptions"
                          ],
                          "additionalProperties": false,
                          "title": "httpupgrade"
                        },
                        {
                          "type": "object",
                          "properties": {
                            "transport": {
                              "type": "string",
                              "const": "grpc"
                            },
                            "transportOptions": {
                              "type": "object",
                              "properties": {
                                "authority": {
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "serviceName": {
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "multiMode": {
                                  "type": "boolean"
                                }
                              },
                              "required": [
                                "authority",
                                "serviceName",
                                "multiMode"
                              ],
                              "additionalProperties": false
                            }
                          },
                          "required": [
                            "transport",
                            "transportOptions"
                          ],
                          "additionalProperties": false,
                          "title": "grpc"
                        },
                        {
                          "type": "object",
                          "properties": {
                            "transport": {
                              "type": "string",
                              "const": "kcp"
                            },
                            "transportOptions": {
                              "type": "object",
                              "properties": {
                                "clientMtu": {
                                  "type": "integer",
                                  "minimum": -9007199254740991,
                                  "maximum": 9007199254740991
                                },
                                "clientTti": {
                                  "type": "integer",
                                  "minimum": -9007199254740991,
                                  "maximum": 9007199254740991
                                },
                                "congestion": {
                                  "type": "boolean"
                                }
                              },
                              "required": [
                                "clientMtu",
                                "clientTti",
                                "congestion"
                              ],
                              "additionalProperties": false
                            }
                          },
                          "required": [
                            "transport",
                            "transportOptions"
                          ],
                          "additionalProperties": false,
                          "title": "kcp"
                        },
                        {
                          "type": "object",
                          "properties": {
                            "transport": {
                              "type": "string",
                              "const": "hysteria"
                            },
                            "transportOptions": {
                              "type": "object",
                              "properties": {
                                "version": {
                                  "type": "integer",
                                  "minimum": -9007199254740991,
                                  "maximum": 9007199254740991
                                },
                                "auth": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "version",
                                "auth"
                              ],
                              "additionalProperties": false
                            }
                          },
                          "required": [
                            "transport",
                            "transportOptions"
                          ],
                          "additionalProperties": false,
                          "title": "hysteria"
                        }
                      ]
                    },
                    {
                      "oneOf": [
                        {
                          "type": "object",
                          "properties": {
                            "security": {
                              "type": "string",
                              "const": "tls"
                            },
                            "securityOptions": {
                              "type": "object",
                              "properties": {
                                "pinnedPeerCertSha256": {
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "verifyPeerCertByName": {
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "alpn": {
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "enableSessionResumption": {
                                  "type": "boolean"
                                },
                                "fingerprint": {
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "serverName": {
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "echConfigList": {
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "echForceQuery": {
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "echSockopt": {
                                  "anyOf": [
                                    {},
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "cipherSuites": {
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                }
                              },
                              "required": [
                                "pinnedPeerCertSha256",
                                "verifyPeerCertByName",
                                "alpn",
                                "enableSessionResumption",
                                "fingerprint",
                                "serverName",
                                "echConfigList",
                                "echForceQuery",
                                "echSockopt",
                                "cipherSuites"
                              ],
                              "additionalProperties": false
                            }
                          },
                          "required": [
                            "security",
                            "securityOptions"
                          ],
                          "additionalProperties": false,
                          "title": "tls"
                        },
                        {
                          "type": "object",
                          "properties": {
                            "security": {
                              "type": "string",
                              "const": "reality"
                            },
                            "securityOptions": {
                              "type": "object",
                              "properties": {
                                "fingerprint": {
                                  "type": "string"
                                },
                                "publicKey": {
                                  "type": "string"
                                },
                                "shortId": {
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "serverName": {
                                  "type": "string"
                                },
                                "spiderX": {
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "mldsa65Verify": {
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                }
                              },
                              "required": [
                                "fingerprint",
                                "publicKey",
                                "shortId",
                                "serverName",
                                "spiderX",
                                "mldsa65Verify"
                              ],
                              "additionalProperties": false
                            }
                          },
                          "required": [
                            "security",
                            "securityOptions"
                          ],
                          "additionalProperties": false,
                          "title": "reality"
                        },
                        {
                          "type": "object",
                          "properties": {
                            "security": {
                              "type": "string",
                              "const": "none"
                            }
                          },
                          "required": [
                            "security"
                          ],
                          "additionalProperties": false,
                          "title": "none"
                        }
                      ]
                    }
                  ]
                }
              }
            },
            "required": [
              "user",
              "convertedUserInfo",
              "headers",
              "resolvedProxyConfigs"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false,
        "$defs": {
          "__schema0": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema0"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema0"
                }
              }
            ]
          },
          "__schema1": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema1"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema1"
                }
              }
            ]
          },
          "__schema2": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema2"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema2"
                }
              }
            ]
          },
          "__schema3": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema3"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema3"
                }
              }
            ]
          },
          "__schema4": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema4"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema4"
                }
              }
            ]
          },
          "__schema5": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema5"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema5"
                }
              }
            ]
          },
          "__schema6": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema6"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema6"
                }
              }
            ]
          },
          "__schema7": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/__schema7"
                }
              },
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "$ref": "#/$defs/__schema7"
                }
              }
            ]
          }
        }
      }
    }
  }
}
GET/api/subscriptions/by-short-uuid/{shortUuid}Get subscription by short uuid (protected route)
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "shortUuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "isFound": {
                "type": "boolean"
              },
              "user": {
                "type": "object",
                "properties": {
                  "shortUuid": {
                    "type": "string"
                  },
                  "daysLeft": {
                    "type": "number"
                  },
                  "trafficUsed": {
                    "type": "string"
                  },
                  "trafficLimit": {
                    "type": "string"
                  },
                  "lifetimeTrafficUsed": {
                    "type": "string"
                  },
                  "trafficUsedBytes": {
                    "type": "string"
                  },
                  "trafficLimitBytes": {
                    "type": "string"
                  },
                  "lifetimeTrafficUsedBytes": {
                    "type": "string"
                  },
                  "username": {
                    "type": "string"
                  },
                  "expiresAt": {},
                  "isActive": {
                    "type": "boolean"
                  },
                  "userStatus": {
                    "type": "string",
                    "enum": [
                      "ACTIVE",
                      "DISABLED",
                      "LIMITED",
                      "EXPIRED"
                    ]
                  },
                  "trafficLimitStrategy": {
                    "type": "string",
                    "enum": [
                      "NO_RESET",
                      "DAY",
                      "WEEK",
                      "MONTH",
                      "MONTH_ROLLING"
                    ]
                  }
                },
                "required": [
                  "shortUuid",
                  "daysLeft",
                  "trafficUsed",
                  "trafficLimit",
                  "lifetimeTrafficUsed",
                  "trafficUsedBytes",
                  "trafficLimitBytes",
                  "lifetimeTrafficUsedBytes",
                  "username",
                  "expiresAt",
                  "isActive",
                  "userStatus",
                  "trafficLimitStrategy"
                ],
                "additionalProperties": false
              },
              "links": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "ssConfLinks": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "type": "string"
                }
              },
              "subscriptionUrl": {
                "type": "string"
              }
            },
            "required": [
              "isFound",
              "user",
              "links",
              "ssConfLinks",
              "subscriptionUrl"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/subscriptions/by-username/{username}Get subscription by username
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "username",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "isFound": {
                "type": "boolean"
              },
              "user": {
                "type": "object",
                "properties": {
                  "shortUuid": {
                    "type": "string"
                  },
                  "daysLeft": {
                    "type": "number"
                  },
                  "trafficUsed": {
                    "type": "string"
                  },
                  "trafficLimit": {
                    "type": "string"
                  },
                  "lifetimeTrafficUsed": {
                    "type": "string"
                  },
                  "trafficUsedBytes": {
                    "type": "string"
                  },
                  "trafficLimitBytes": {
                    "type": "string"
                  },
                  "lifetimeTrafficUsedBytes": {
                    "type": "string"
                  },
                  "username": {
                    "type": "string"
                  },
                  "expiresAt": {},
                  "isActive": {
                    "type": "boolean"
                  },
                  "userStatus": {
                    "type": "string",
                    "enum": [
                      "ACTIVE",
                      "DISABLED",
                      "LIMITED",
                      "EXPIRED"
                    ]
                  },
                  "trafficLimitStrategy": {
                    "type": "string",
                    "enum": [
                      "NO_RESET",
                      "DAY",
                      "WEEK",
                      "MONTH",
                      "MONTH_ROLLING"
                    ]
                  }
                },
                "required": [
                  "shortUuid",
                  "daysLeft",
                  "trafficUsed",
                  "trafficLimit",
                  "lifetimeTrafficUsed",
                  "trafficUsedBytes",
                  "trafficLimitBytes",
                  "lifetimeTrafficUsedBytes",
                  "username",
                  "expiresAt",
                  "isActive",
                  "userStatus",
                  "trafficLimitStrategy"
                ],
                "additionalProperties": false
              },
              "links": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "ssConfLinks": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "type": "string"
                }
              },
              "subscriptionUrl": {
                "type": "string"
              }
            },
            "required": [
              "isFound",
              "user",
              "links",
              "ssConfLinks",
              "subscriptionUrl"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/subscriptions/connection-keys/{userId}Get connection keys (base64 format) by user id
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "userId",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "enabledKeys": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "hiddenKeys": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "disabledKeys": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "required": [
              "enabledKeys",
              "hiddenKeys",
              "disabledKeys"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/subscriptions/subpage-config/{shortUuid}Get Subpage Config by Short UUID
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "shortUuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "requestHeaders": {
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {
              "type": "string"
            }
          }
        },
        "required": [
          "requestHeaders"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "subpageConfigUuid": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "webpageAllowed": {
                "type": "boolean"
              }
            },
            "required": [
              "subpageConfigUuid",
              "webpageAllowed"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/subscriptionsGet all subscriptions
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "start",
    "in": "query",
    "required": false,
    "schema": {
      "default": 0,
      "description": "Start index (offset) of the users to return, default is 0",
      "type": "number"
    }
  },
  {
    "name": "size",
    "in": "query",
    "required": false,
    "schema": {
      "default": 25,
      "type": "number",
      "minimum": 1,
      "maximum": 500,
      "description": "Number of subscriptions to return, no more than 500"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "subscriptions": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "isFound": {
                      "type": "boolean"
                    },
                    "user": {
                      "type": "object",
                      "properties": {
                        "shortUuid": {
                          "type": "string"
                        },
                        "daysLeft": {
                          "type": "number"
                        },
                        "trafficUsed": {
                          "type": "string"
                        },
                        "trafficLimit": {
                          "type": "string"
                        },
                        "lifetimeTrafficUsed": {
                          "type": "string"
                        },
                        "trafficUsedBytes": {
                          "type": "string"
                        },
                        "trafficLimitBytes": {
                          "type": "string"
                        },
                        "lifetimeTrafficUsedBytes": {
                          "type": "string"
                        },
                        "username": {
                          "type": "string"
                        },
                        "expiresAt": {},
                        "isActive": {
                          "type": "boolean"
                        },
                        "userStatus": {
                          "type": "string",
                          "enum": [
                            "ACTIVE",
                            "DISABLED",
                            "LIMITED",
                            "EXPIRED"
                          ]
                        },
                        "trafficLimitStrategy": {
                          "type": "string",
                          "enum": [
                            "NO_RESET",
                            "DAY",
                            "WEEK",
                            "MONTH",
                            "MONTH_ROLLING"
                          ]
                        }
                      },
                      "required": [
                        "shortUuid",
                        "daysLeft",
                        "trafficUsed",
                        "trafficLimit",
                        "lifetimeTrafficUsed",
                        "trafficUsedBytes",
                        "trafficLimitBytes",
                        "lifetimeTrafficUsedBytes",
                        "username",
                        "expiresAt",
                        "isActive",
                        "userStatus",
                        "trafficLimitStrategy"
                      ],
                      "additionalProperties": false
                    },
                    "links": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "ssConfLinks": {
                      "type": "object",
                      "propertyNames": {
                        "type": "string"
                      },
                      "additionalProperties": {
                        "type": "string"
                      }
                    },
                    "subscriptionUrl": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "isFound",
                    "user",
                    "links",
                    "ssConfLinks",
                    "subscriptionUrl"
                  ],
                  "additionalProperties": false
                }
              },
              "total": {
                "type": "number"
              }
            },
            "required": [
              "subscriptions",
              "total"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}

system

GET/api/system/configurationGet Remnawave Configuration

Returns some of the configuration values.

Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "notifications": {
                "type": "object",
                "properties": {
                  "webhook": {
                    "type": "boolean",
                    "description": "WEBHOOK_ENABLED"
                  },
                  "bandwidthUsage": {
                    "anyOf": [
                      {
                        "type": "array",
                        "items": {
                          "type": "number"
                        }
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "BANDWIDTH_USAGE_NOTIFICATIONS_THRESHOLD"
                  },
                  "notConnectedAfter": {
                    "anyOf": [
                      {
                        "type": "array",
                        "items": {
                          "type": "number"
                        }
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "NOT_CONNECTED_USERS_NOTIFICATIONS_AFTER_HOURS"
                  },
                  "expirationNotifications": {
                    "anyOf": [
                      {
                        "type": "array",
                        "items": {
                          "type": "number"
                        }
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "EXPIRATION_NOTIFICATIONS"
                  }
                },
                "required": [
                  "webhook",
                  "bandwidthUsage",
                  "notConnectedAfter",
                  "expirationNotifications"
                ],
                "additionalProperties": false
              },
              "service": {
                "type": "object",
                "properties": {
                  "cleanUsageHistory": {
                    "type": "boolean",
                    "description": "SERVICE_CLEAN_USAGE_HISTORY"
                  },
                  "disableUserUsageRecords": {
                    "type": "boolean",
                    "description": "SERVICE_DISABLE_USER_USAGE_RECORDS"
                  },
                  "disableSrhRecords": {
                    "type": "boolean",
                    "description": "SERVICE_DISABLE_SRH_RECORDS"
                  },
                  "exportToRedisStream": {
                    "type": "boolean",
                    "description": "EXPORT_TO_STREAM_ENABLED"
                  }
                },
                "required": [
                  "cleanUsageHistory",
                  "disableUserUsageRecords",
                  "disableSrhRecords",
                  "exportToRedisStream"
                ],
                "additionalProperties": false
              },
              "misc": {
                "type": "object",
                "properties": {
                  "shortUuidLength": {
                    "type": "number",
                    "description": "SHORT_UUID_LENGTH"
                  },
                  "subPublicDomain": {
                    "type": "string"
                  },
                  "userUsageIgnoreBelowBytes": {
                    "type": "number",
                    "description": "USER_USAGE_IGNORE_BELOW_BYTES"
                  }
                },
                "required": [
                  "shortUuidLength",
                  "subPublicDomain",
                  "userUsageIgnoreBelowBytes"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "notifications",
              "service",
              "misc"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/system/healthGet Remnawave Health
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "runtimeMetrics": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "rss": {
                      "type": "number"
                    },
                    "heapUsed": {
                      "type": "number"
                    },
                    "heapTotal": {
                      "type": "number"
                    },
                    "external": {
                      "type": "number"
                    },
                    "arrayBuffers": {
                      "type": "number"
                    },
                    "eventLoopDelayMs": {
                      "type": "number"
                    },
                    "eventLoopP99Ms": {
                      "type": "number"
                    },
                    "activeHandles": {
                      "type": "number"
                    },
                    "uptime": {
                      "type": "number"
                    },
                    "pid": {
                      "type": "number"
                    },
                    "timestamp": {
                      "type": "number"
                    },
                    "instanceId": {
                      "type": "string"
                    },
                    "instanceType": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "rss",
                    "heapUsed",
                    "heapTotal",
                    "external",
                    "arrayBuffers",
                    "eventLoopDelayMs",
                    "eventLoopP99Ms",
                    "activeHandles",
                    "uptime",
                    "pid",
                    "timestamp",
                    "instanceId",
                    "instanceType"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "runtimeMetrics"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/system/metadataGet Remnawave Information
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "version": {
                "type": "string"
              },
              "build": {
                "type": "object",
                "properties": {
                  "time": {
                    "type": "string"
                  },
                  "number": {
                    "type": "string"
                  }
                },
                "required": [
                  "time",
                  "number"
                ],
                "additionalProperties": false
              },
              "git": {
                "type": "object",
                "properties": {
                  "backend": {
                    "type": "object",
                    "properties": {
                      "commitSha": {
                        "type": "string"
                      },
                      "branch": {
                        "type": "string"
                      },
                      "commitUrl": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "commitSha",
                      "branch",
                      "commitUrl"
                    ],
                    "additionalProperties": false
                  },
                  "frontend": {
                    "type": "object",
                    "properties": {
                      "commitSha": {
                        "type": "string"
                      },
                      "commitUrl": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "commitSha",
                      "commitUrl"
                    ],
                    "additionalProperties": false
                  }
                },
                "required": [
                  "backend",
                  "frontend"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "version",
              "build",
              "git"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/system/nodes/metricsGet Nodes Metrics
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "nodes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "nodeUuid": {
                      "type": "string"
                    },
                    "nodeName": {
                      "type": "string"
                    },
                    "countryEmoji": {
                      "type": "string"
                    },
                    "providerName": {
                      "type": "string"
                    },
                    "usersOnline": {
                      "type": "number"
                    },
                    "inboundsStats": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "tag": {
                            "type": "string"
                          },
                          "upload": {
                            "type": "string"
                          },
                          "download": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "tag",
                          "upload",
                          "download"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "outboundsStats": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "tag": {
                            "type": "string"
                          },
                          "upload": {
                            "type": "string"
                          },
                          "download": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "tag",
                          "upload",
                          "download"
                        ],
                        "additionalProperties": false
                      }
                    }
                  },
                  "required": [
                    "nodeUuid",
                    "nodeName",
                    "countryEmoji",
                    "providerName",
                    "usersOnline",
                    "inboundsStats",
                    "outboundsStats"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "nodes"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/system/stats/bandwidthGet Bandwidth Stats
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "tz",
    "in": "query",
    "required": false,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "bandwidthLastTwoDays": {
                "type": "object",
                "properties": {
                  "current": {
                    "type": "string"
                  },
                  "previous": {
                    "type": "string"
                  },
                  "difference": {
                    "type": "string"
                  }
                },
                "required": [
                  "current",
                  "previous",
                  "difference"
                ],
                "additionalProperties": false
              },
              "bandwidthLastSevenDays": {
                "type": "object",
                "properties": {
                  "current": {
                    "type": "string"
                  },
                  "previous": {
                    "type": "string"
                  },
                  "difference": {
                    "type": "string"
                  }
                },
                "required": [
                  "current",
                  "previous",
                  "difference"
                ],
                "additionalProperties": false
              },
              "bandwidthLast30Days": {
                "type": "object",
                "properties": {
                  "current": {
                    "type": "string"
                  },
                  "previous": {
                    "type": "string"
                  },
                  "difference": {
                    "type": "string"
                  }
                },
                "required": [
                  "current",
                  "previous",
                  "difference"
                ],
                "additionalProperties": false
              },
              "bandwidthCalendarMonth": {
                "type": "object",
                "properties": {
                  "current": {
                    "type": "string"
                  },
                  "previous": {
                    "type": "string"
                  },
                  "difference": {
                    "type": "string"
                  }
                },
                "required": [
                  "current",
                  "previous",
                  "difference"
                ],
                "additionalProperties": false
              },
              "bandwidthCurrentYear": {
                "type": "object",
                "properties": {
                  "current": {
                    "type": "string"
                  },
                  "previous": {
                    "type": "string"
                  },
                  "difference": {
                    "type": "string"
                  }
                },
                "required": [
                  "current",
                  "previous",
                  "difference"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "bandwidthLastTwoDays",
              "bandwidthLastSevenDays",
              "bandwidthLast30Days",
              "bandwidthCalendarMonth",
              "bandwidthCurrentYear"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/system/stats/digestGet Stats Digest

Aggregated statistics for a datetime range [start, end): created and expired users, total traffic, traffic spent by users created within the range and new HWID devices. Per-user traffic history is stored with daily granularity (UTC), so the "traffic by new users" metric snaps to whole days at the range edges.

Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "start",
    "in": "query",
    "required": true,
    "schema": {
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
      "description": "Start of the range, ISO 8601 datetime with timezone (e.g. 2026-07-15T00:00:00Z). Inclusive."
    }
  },
  {
    "name": "end",
    "in": "query",
    "required": true,
    "schema": {
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
      "description": "End of the range, ISO 8601 datetime with timezone (e.g. 2026-07-16T00:00:00Z). Exclusive."
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "users": {
                "type": "object",
                "properties": {
                  "createdCount": {
                    "type": "number"
                  },
                  "expiredCount": {
                    "type": "number"
                  }
                },
                "required": [
                  "createdCount",
                  "expiredCount"
                ],
                "additionalProperties": false
              },
              "traffic": {
                "type": "object",
                "properties": {
                  "totalBytes": {
                    "type": "string"
                  },
                  "byUsersCreatedInRangeBytes": {
                    "type": "string"
                  }
                },
                "required": [
                  "totalBytes",
                  "byUsersCreatedInRangeBytes"
                ],
                "additionalProperties": false
              },
              "hwidDevices": {
                "type": "object",
                "properties": {
                  "createdCount": {
                    "type": "number"
                  }
                },
                "required": [
                  "createdCount"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "users",
              "traffic",
              "hwidDevices"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/system/stats/httpGet HTTP Stats
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "routes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "method": {
                      "type": "string"
                    },
                    "route": {
                      "type": "string"
                    },
                    "count": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 2147483647
                    }
                  },
                  "required": [
                    "method",
                    "route",
                    "count"
                  ],
                  "additionalProperties": false
                }
              },
              "total": {
                "type": "integer",
                "minimum": 0,
                "maximum": 2147483647
              }
            },
            "required": [
              "routes",
              "total"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/system/stats/nodesGet Nodes Statistics
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "tz",
    "in": "query",
    "required": false,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "lastSevenDays": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "nodeName": {
                      "type": "string"
                    },
                    "date": {
                      "type": "string"
                    },
                    "totalBytes": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "nodeName",
                    "date",
                    "totalBytes"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "lastSevenDays"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/system/stats/recapGet Recap
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "thisMonth": {
                "type": "object",
                "properties": {
                  "users": {
                    "type": "number"
                  },
                  "traffic": {
                    "type": "string"
                  }
                },
                "required": [
                  "users",
                  "traffic"
                ],
                "additionalProperties": false
              },
              "total": {
                "type": "object",
                "properties": {
                  "users": {
                    "type": "number"
                  },
                  "nodes": {
                    "type": "number"
                  },
                  "traffic": {
                    "type": "string"
                  },
                  "nodesRam": {
                    "type": "string"
                  },
                  "nodesCpuCores": {
                    "type": "number"
                  },
                  "distinctCountries": {
                    "type": "number"
                  }
                },
                "required": [
                  "users",
                  "nodes",
                  "traffic",
                  "nodesRam",
                  "nodesCpuCores",
                  "distinctCountries"
                ],
                "additionalProperties": false
              },
              "version": {
                "type": "string"
              },
              "initDate": {}
            },
            "required": [
              "thisMonth",
              "total",
              "version",
              "initDate"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/system/statsGet Stats
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "tz",
    "in": "query",
    "required": false,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "cpu": {
                "type": "object",
                "properties": {
                  "cores": {
                    "type": "number"
                  }
                },
                "required": [
                  "cores"
                ],
                "additionalProperties": false
              },
              "memory": {
                "type": "object",
                "properties": {
                  "total": {
                    "type": "number"
                  },
                  "free": {
                    "type": "number"
                  },
                  "used": {
                    "type": "number"
                  }
                },
                "required": [
                  "total",
                  "free",
                  "used"
                ],
                "additionalProperties": false
              },
              "uptime": {
                "type": "number"
              },
              "timestamp": {
                "type": "number"
              },
              "users": {
                "type": "object",
                "properties": {
                  "statusCounts": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string",
                      "enum": [
                        "ACTIVE",
                        "DISABLED",
                        "LIMITED",
                        "EXPIRED"
                      ]
                    },
                    "additionalProperties": {
                      "type": "number"
                    },
                    "required": [
                      "ACTIVE",
                      "DISABLED",
                      "LIMITED",
                      "EXPIRED"
                    ]
                  },
                  "totalUsers": {
                    "type": "number"
                  }
                },
                "required": [
                  "statusCounts",
                  "totalUsers"
                ],
                "additionalProperties": false
              },
              "onlineStats": {
                "type": "object",
                "properties": {
                  "lastDay": {
                    "type": "number"
                  },
                  "lastWeek": {
                    "type": "number"
                  },
                  "neverOnline": {
                    "type": "number"
                  },
                  "onlineNow": {
                    "type": "number"
                  }
                },
                "required": [
                  "lastDay",
                  "lastWeek",
                  "neverOnline",
                  "onlineNow"
                ],
                "additionalProperties": false
              },
              "nodes": {
                "type": "object",
                "properties": {
                  "totalOnline": {
                    "type": "number"
                  },
                  "totalBytesLifetime": {
                    "type": "string"
                  }
                },
                "required": [
                  "totalOnline",
                  "totalBytesLifetime"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "cpu",
              "memory",
              "uptime",
              "timestamp",
              "users",
              "onlineStats",
              "nodes"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/system/testers/srr-matcherTest SRR Matcher
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "responseRules": {
            "type": "object",
            "properties": {
              "version": {
                "type": "string",
                "enum": [
                  "1"
                ],
                "title": "Response Rules Config Version",
                "markdownDescription": "Version of the **response rules** config. Currently supported version is **1**."
              },
              "settings": {
                "title": "Response Rule Settings",
                "markdownDescription": "Settings for the **response rules** config. Optional.",
                "type": "object",
                "properties": {
                  "disableSubscriptionAccessByPath": {
                    "title": "Disable Subscription Access by Path",
                    "markdownDescription": "Usually, a user's subscription may also be available via additional paths such as **/json**, **/stash**, or **/mihomo**. If this flag is set to **true**, access via these additional paths will be disabled.",
                    "type": "boolean"
                  }
                }
              },
              "rules": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 50,
                      "title": "Name",
                      "markdownDescription": "Name of the response rule."
                    },
                    "description": {
                      "title": "Description",
                      "markdownDescription": "Description of the response rule. Optional.",
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 250
                    },
                    "enabled": {
                      "type": "boolean",
                      "title": "Enabled",
                      "markdownDescription": "Control whether the response rule is enabled or disabled. \n\n - `true` the rule will be applied. \n\n - `false` the rule will be always ignored."
                    },
                    "operator": {
                      "type": "string",
                      "enum": [
                        "AND",
                        "OR"
                      ],
                      "markdownDescription": "Operator to use for combining conditions in the rule."
                    },
                    "conditions": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "headerName": {
                            "type": "string",
                            "pattern": "^[!#$%&'*+\\-.0-9A-Z^_`a-z|~]+$",
                            "title": "Header Name",
                            "markdownDescription": "**Name** of the HTTP header to check. Must comply with RFC 7230."
                          },
                          "operator": {
                            "type": "string",
                            "enum": [
                              "EQUALS",
                              "NOT_EQUALS",
                              "CONTAINS",
                              "NOT_CONTAINS",
                              "STARTS_WITH",
                              "NOT_STARTS_WITH",
                              "ENDS_WITH",
                              "NOT_ENDS_WITH",
                              "REGEX",
                              "NOT_REGEX"
                            ],
                            "errorMessage": "Invalid operator. Please select a valid operator.",
                            "markdownDescription": "Operator to use for comparing the `headerName` with `value`.",
                            "markdownEnumDescriptions": [
                              "Performs an exact, comparison between the header value and specified string. `string === value`",
                              "Ensures the header value does not exactly match the specified string. `string !== value`",
                              "Checks if the header value contains the specified string as a substring. `string.includes()`",
                              "Verifies the header value does not contain the specified string as a substring. `!string.includes()`",
                              "Validates that the header value begins with the specified string. `string.startsWith()`",
                              "Validates that the header value does not begin with the specified string. `!string.startsWith()`",
                              "Confirms the header value ends with the specified string. `string.endsWith()`",
                              "Confirms the header value does not end with the specified string. `!string.endsWith()`",
                              "Evaluates if the header value matches the specified regular expression pattern. `regex.test()`",
                              "Evaluates if the header value does not match the specified regular expression pattern. `!regex.test()`"
                            ]
                          },
                          "value": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 255,
                            "markdownDescription": "**Value** to check against the **headerName**."
                          },
                          "caseSensitive": {
                            "type": "boolean",
                            "markdownDescription": "Whether the value is **case sensitive**. \n\n - `true`: the value will be compared as is. \n\n - `false`: the value will be lowercased **before** comparison."
                          }
                        },
                        "required": [
                          "headerName",
                          "operator",
                          "value",
                          "caseSensitive"
                        ],
                        "markdownDescription": "Condition to check against the **headerName**.",
                        "defaultSnippets": [
                          {
                            "label": "Examples: Check if header contains \"text/html\"",
                            "markdownDescription": "Condition to check if **headerName** contains \"text/html\"",
                            "body": {
                              "headerName": "accept",
                              "operator": "CONTAINS",
                              "value": "text/html",
                              "caseSensitive": true
                            }
                          }
                        ]
                      },
                      "title": "Conditions",
                      "markdownDescription": "Array of conditions to check against the request headers. Conditions are applied with **operator**. If conditions are empty, the rule will be matched."
                    },
                    "responseType": {
                      "type": "string",
                      "enum": [
                        "XRAY_JSON",
                        "XRAY_BASE64",
                        "MIHOMO",
                        "STASH",
                        "CLASH",
                        "SINGBOX",
                        "BROWSER",
                        "BLOCK",
                        "STATUS_CODE_404",
                        "STATUS_CODE_451",
                        "SOCKET_DROP"
                      ],
                      "errorMessage": "Invalid response type. Please select a valid response type.",
                      "markdownDescription": "Type of the response. Determines the type of **response** to be returned when the rule is matched.",
                      "markdownEnumDescriptions": [
                        "Return **subscription** in XRAY-JSON format. (Using `Xray Json` template)",
                        "Return **subscription** in BASE64 encoded string. Compatible with most client application with Xray core.",
                        "Return **subscription** in Mihomo format. (Using `Mihomo` template)",
                        "Return **subscription** in Stash format. (Using `Stash` template)",
                        "Return **subscription** in Clash format. (Using `Clash` template) Useful for client application that use Legacy Clash core.",
                        "Return **subscription** in Singbox format. (Using `Singbox` template) Format which is used by Singbox client application.",
                        "Return **subscription** as browser format. The same as on `/info` route.",
                        "**Drop** request and return `403` status code.",
                        "**Drop** request and return `404` status code.",
                        "**Drop** request and return `451` status code.",
                        "**Drop** the socket connection."
                      ]
                    },
                    "responseModifications": {
                      "title": "Response Modifications",
                      "examples": [
                        {
                          "headers": [
                            {
                              "key": "X-Custom-Header",
                              "value": "CustomValue"
                            }
                          ]
                        }
                      ],
                      "markdownDescription": "Response modifications to be applied when the rule is matched. Optional.",
                      "type": "object",
                      "properties": {
                        "headers": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "key": {
                                "type": "string",
                                "pattern": "^[!#$%&'*+\\-.0-9A-Z^_`a-z|~]+$",
                                "title": "Header Key",
                                "markdownDescription": "Key of the response header. Must comply with RFC 7230."
                              },
                              "value": {
                                "type": "string",
                                "minLength": 1,
                                "title": "Header Value",
                                "markdownDescription": "Value of the response header."
                              }
                            },
                            "required": [
                              "key",
                              "value"
                            ],
                            "title": "Headers",
                            "markdownDescription": "**Key** and **value** of the response header will be added to the response."
                          },
                          "defaultSnippets": [
                            {
                              "label": "Examples: Add custom header",
                              "markdownDescription": "Add a custom header to the response",
                              "body": [
                                {
                                  "key": "X-Custom-Header",
                                  "value": "CustomValue"
                                }
                              ]
                            }
                          ],
                          "markdownDescription": "Array of headers to be added when the rule is matched."
                        },
                        "applyHeadersToEnd": {
                          "title": "Apply Headers to End",
                          "markdownDescription": "By default, headers are added when forming the response. In some cases, headers set in SRR may be overridden by headers from other parts of the system. If you set this flag to **true**, headers from SRR will be added at the very end, just before the response is sent. In this case, SRR headers may override headers from other sections.",
                          "type": "boolean"
                        },
                        "subscriptionTemplate": {
                          "title": "Subscription Template",
                          "markdownDescription": "Override the subscription template with the given name. If not provided, the default subscription template will be used. If the template name is not found, the default subscription template for this type will be used. **This modification have higher priority than settings from External Squads.**",
                          "type": "string",
                          "minLength": 1
                        },
                        "ignoreHostXrayJsonTemplate": {
                          "title": "Ignore Host Xray Json Template",
                          "markdownDescription": "Each Host may have its own Xray Json Template. If you set this flag to **true**, the Xray Json Template defined by the SRR will be used. **The Host's Xray Json Template will be ignored.**",
                          "type": "boolean"
                        },
                        "ignoreServeJsonAtBaseSubscription": {
                          "title": "Ignore Serve Json at Base Subscription",
                          "markdownDescription": "If you set this flag to **true**, the **Serve JSON at Base Subscription** setting will be ignored (set to **false**).",
                          "type": "boolean"
                        },
                        "additionalExtendedClientsRegex": {
                          "markdownDescription": "Additional regex patterns to match extended clients. Matched clients will receive `serverDescription` in the subscription response.\n\n**Default Mihomo extended clients:**\n- `^FlClash ?X/`\n- `^Flowvy/`\n- `^prizrak-box/`\n- `^koala-clash/`\n\n**Default Xray extended clients:**\n- `^Happ/`\n- `^INCY/`\n\n**Example:** `[\"^MyClient/\", \"^CustomApp\\\\/v2\"]`",
                          "type": "array",
                          "items": {
                            "type": "string",
                            "minLength": 1
                          }
                        },
                        "disableHwidCheck": {
                          "title": "Disable HWID Check",
                          "markdownDescription": "If you set this flag to **true**, the HWID check will be disabled. **This modification have higher priority than settings from Subscription Settings.**",
                          "type": "boolean"
                        },
                        "encryption": {
                          "title": "Encryption",
                          "markdownDescription": "Encrypt response body with given parameters. Generate keypairs with Rescue CLI: `docker exec -it remnawave cli`, select \"Generate keypairs\".",
                          "type": "object",
                          "properties": {
                            "method": {
                              "type": "string",
                              "enum": [
                                "age1",
                                "age1pq1"
                              ]
                            },
                            "key": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "method",
                            "key"
                          ]
                        },
                        "excludeHostsByTags": {
                          "title": "Exclude Hosts by Tags",
                          "markdownDescription": "Excludes hosts from the subscription output if at least one tag in the host matches the given tags.",
                          "minItems": 1,
                          "type": "array",
                          "items": {
                            "type": "string",
                            "maxLength": 36,
                            "pattern": "^[A-Z0-9_:]+$"
                          }
                        },
                        "respondWithRemarks": {
                          "title": "Respond With Remarks",
                          "markdownDescription": "Replaces the response body with the provided remarks. If this array contains more than one element, actual hosts will not be sent.",
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  },
                  "required": [
                    "name",
                    "enabled",
                    "operator",
                    "conditions",
                    "responseType"
                  ],
                  "title": "Response Rule",
                  "markdownDescription": "Response rule configuration.\n\n**Fields:**\n- **name**: Name of the response rule.\n- **description**: Description of the response rule. Optional.\n- **enabled**: Control whether the response rule is enabled or disabled. \n\n - `true` the rule will be applied. \n\n - `false` the rule will be always ignored.\n- **operator**: Operator to use for combining conditions in the rule.\n- **conditions**: Array of conditions to check against the request headers. Conditions are applied with **operator**. If conditions are empty, the rule will be matched.\n- **responseType**: Type of the response. Determines the type of **response** to be returned when the rule is matched.\n- **responseModifications**: Response modifications to be applied when the rule is matched. Optional.\n\n**Example:**\n```json\n{\n  \"name\": \"Block Legacy Clients\",\n  \"description\": \"Block requests from legacy clients\",\n  \"enabled\": true,\n  \"operator\": \"OR\",\n  \"conditions\": [\n    {\n      \"headerName\": \"user-agent\",\n      \"operator\": \"CONTAINS\",\n      \"value\": \"Hiddify\",\n      \"caseSensitive\": true\n    },\n    {\n      \"headerName\": \"user-agent\",\n      \"operator\": \"CONTAINS\",\n      \"value\": \"FoxRay\",\n      \"caseSensitive\": true\n    }\n  ],\n  \"responseType\": \"BLOCK\"\n}\n```",
                  "defaultSnippets": [
                    {
                      "label": "Examples: Blank rule",
                      "markdownDescription": "Simple blank rule with no conditions or modifications.\n```json\n{\n  \"name\": \"Blank rule\",\n  \"description\": \"Blank rule\",\n  \"operator\": \"AND\",\n  \"enabled\": true,\n  \"conditions\": [],\n  \"responseType\": \"BLOCK\",\n  \"responseModifications\": {\n    \"headers\": []\n  }\n}\n```",
                      "body": {
                        "name": "Blank rule",
                        "description": "Blank rule",
                        "operator": "AND",
                        "enabled": true,
                        "conditions": [],
                        "responseType": "BLOCK",
                        "responseModifications": {
                          "headers": []
                        }
                      }
                    },
                    {
                      "label": "Examples: Block Legacy Clients",
                      "markdownDescription": "Block requests from legacy clients\n```json\n{\n  \"name\": \"Block Legacy Clients\",\n  \"description\": \"Block requests from legacy clients\",\n  \"enabled\": true,\n  \"operator\": \"OR\",\n  \"conditions\": [\n    {\n      \"headerName\": \"user-agent\",\n      \"operator\": \"CONTAINS\",\n      \"value\": \"Hiddify\",\n      \"caseSensitive\": true\n    },\n    {\n      \"headerName\": \"user-agent\",\n      \"operator\": \"CONTAINS\",\n      \"value\": \"FoxRay\",\n      \"caseSensitive\": true\n    }\n  ],\n  \"responseType\": \"BLOCK\"\n}\n```",
                      "body": {
                        "name": "Block Legacy Clients",
                        "description": "Block requests from legacy clients",
                        "enabled": true,
                        "operator": "OR",
                        "conditions": [
                          {
                            "headerName": "user-agent",
                            "operator": "CONTAINS",
                            "value": "Hiddify",
                            "caseSensitive": true
                          },
                          {
                            "headerName": "user-agent",
                            "operator": "CONTAINS",
                            "value": "FoxRay",
                            "caseSensitive": true
                          }
                        ],
                        "responseType": "BLOCK"
                      }
                    }
                  ]
                },
                "title": "Response Rules",
                "markdownDescription": "Array of **response rules**. Rules are evaluated in order and the first rule that matches is applied. If no rule matches, request will be blocked by default.\n\n**Example:**\n```json\n[\n  {\n    \"name\": \"Blank rule\",\n    \"description\": \"Blank rule\",\n    \"operator\": \"AND\",\n    \"enabled\": true,\n    \"conditions\": [],\n    \"responseType\": \"BLOCK\",\n    \"responseModifications\": {\n      \"headers\": []\n    }\n  }\n]\n```",
                "defaultSnippets": []
              }
            },
            "required": [
              "version",
              "rules"
            ]
          }
        },
        "required": [
          "responseRules"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "matched": {
                "type": "boolean"
              },
              "responseType": {
                "type": "string",
                "enum": [
                  "XRAY_JSON",
                  "XRAY_BASE64",
                  "MIHOMO",
                  "STASH",
                  "CLASH",
                  "SINGBOX",
                  "BROWSER",
                  "BLOCK",
                  "STATUS_CODE_404",
                  "STATUS_CODE_451",
                  "SOCKET_DROP"
                ]
              },
              "matchedRule": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "name": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 50,
                        "title": "Name",
                        "markdownDescription": "Name of the response rule."
                      },
                      "description": {
                        "title": "Description",
                        "markdownDescription": "Description of the response rule. Optional.",
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 250
                      },
                      "enabled": {
                        "type": "boolean",
                        "title": "Enabled",
                        "markdownDescription": "Control whether the response rule is enabled or disabled. \n\n - `true` the rule will be applied. \n\n - `false` the rule will be always ignored."
                      },
                      "operator": {
                        "type": "string",
                        "enum": [
                          "AND",
                          "OR"
                        ],
                        "markdownDescription": "Operator to use for combining conditions in the rule."
                      },
                      "conditions": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "headerName": {
                              "type": "string",
                              "pattern": "^[!#$%&'*+\\-.0-9A-Z^_`a-z|~]+$",
                              "title": "Header Name",
                              "markdownDescription": "**Name** of the HTTP header to check. Must comply with RFC 7230."
                            },
                            "operator": {
                              "type": "string",
                              "enum": [
                                "EQUALS",
                                "NOT_EQUALS",
                                "CONTAINS",
                                "NOT_CONTAINS",
                                "STARTS_WITH",
                                "NOT_STARTS_WITH",
                                "ENDS_WITH",
                                "NOT_ENDS_WITH",
                                "REGEX",
                                "NOT_REGEX"
                              ],
                              "errorMessage": "Invalid operator. Please select a valid operator.",
                              "markdownDescription": "Operator to use for comparing the `headerName` with `value`.",
                              "markdownEnumDescriptions": [
                                "Performs an exact, comparison between the header value and specified string. `string === value`",
                                "Ensures the header value does not exactly match the specified string. `string !== value`",
                                "Checks if the header value contains the specified string as a substring. `string.includes()`",
                                "Verifies the header value does not contain the specified string as a substring. `!string.includes()`",
                                "Validates that the header value begins with the specified string. `string.startsWith()`",
                                "Validates that the header value does not begin with the specified string. `!string.startsWith()`",
                                "Confirms the header value ends with the specified string. `string.endsWith()`",
                                "Confirms the header value does not end with the specified string. `!string.endsWith()`",
                                "Evaluates if the header value matches the specified regular expression pattern. `regex.test()`",
                                "Evaluates if the header value does not match the specified regular expression pattern. `!regex.test()`"
                              ]
                            },
                            "value": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 255,
                              "markdownDescription": "**Value** to check against the **headerName**."
                            },
                            "caseSensitive": {
                              "type": "boolean",
                              "markdownDescription": "Whether the value is **case sensitive**. \n\n - `true`: the value will be compared as is. \n\n - `false`: the value will be lowercased **before** comparison."
                            }
                          },
                          "required": [
                            "headerName",
                            "operator",
                            "value",
                            "caseSensitive"
                          ],
                          "additionalProperties": false,
                          "markdownDescription": "Condition to check against the **headerName**.",
                          "defaultSnippets": [
                            {
                              "label": "Examples: Check if header contains \"text/html\"",
                              "markdownDescription": "Condition to check if **headerName** contains \"text/html\"",
                              "body": {
                                "headerName": "accept",
                                "operator": "CONTAINS",
                                "value": "text/html",
                                "caseSensitive": true
                              }
                            }
                          ]
                        },
                        "title": "Conditions",
                        "markdownDescription": "Array of conditions to check against the request headers. Conditions are applied with **operator**. If conditions are empty, the rule will be matched."
                      },
                      "responseType": {
                        "type": "string",
                        "enum": [
                          "XRAY_JSON",
                          "XRAY_BASE64",
                          "MIHOMO",
                          "STASH",
                          "CLASH",
                          "SINGBOX",
                          "BROWSER",
                          "BLOCK",
                          "STATUS_CODE_404",
                          "STATUS_CODE_451",
                          "SOCKET_DROP"
                        ],
                        "errorMessage": "Invalid response type. Please select a valid response type.",
                        "markdownDescription": "Type of the response. Determines the type of **response** to be returned when the rule is matched.",
                        "markdownEnumDescriptions": [
                          "Return **subscription** in XRAY-JSON format. (Using `Xray Json` template)",
                          "Return **subscription** in BASE64 encoded string. Compatible with most client application with Xray core.",
                          "Return **subscription** in Mihomo format. (Using `Mihomo` template)",
                          "Return **subscription** in Stash format. (Using `Stash` template)",
                          "Return **subscription** in Clash format. (Using `Clash` template) Useful for client application that use Legacy Clash core.",
                          "Return **subscription** in Singbox format. (Using `Singbox` template) Format which is used by Singbox client application.",
                          "Return **subscription** as browser format. The same as on `/info` route.",
                          "**Drop** request and return `403` status code.",
                          "**Drop** request and return `404` status code.",
                          "**Drop** request and return `451` status code.",
                          "**Drop** the socket connection."
                        ]
                      },
                      "responseModifications": {
                        "title": "Response Modifications",
                        "examples": [
                          {
                            "headers": [
                              {
                                "key": "X-Custom-Header",
                                "value": "CustomValue"
                              }
                            ]
                          }
                        ],
                        "markdownDescription": "Response modifications to be applied when the rule is matched. Optional.",
                        "type": "object",
                        "properties": {
                          "headers": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "key": {
                                  "type": "string",
                                  "pattern": "^[!#$%&'*+\\-.0-9A-Z^_`a-z|~]+$",
                                  "title": "Header Key",
                                  "markdownDescription": "Key of the response header. Must comply with RFC 7230."
                                },
                                "value": {
                                  "type": "string",
                                  "minLength": 1,
                                  "title": "Header Value",
                                  "markdownDescription": "Value of the response header."
                                }
                              },
                              "required": [
                                "key",
                                "value"
                              ],
                              "additionalProperties": false,
                              "title": "Headers",
                              "markdownDescription": "**Key** and **value** of the response header will be added to the response."
                            },
                            "defaultSnippets": [
                              {
                                "label": "Examples: Add custom header",
                                "markdownDescription": "Add a custom header to the response",
                                "body": [
                                  {
                                    "key": "X-Custom-Header",
                                    "value": "CustomValue"
                                  }
                                ]
                              }
                            ],
                            "markdownDescription": "Array of headers to be added when the rule is matched."
                          },
                          "applyHeadersToEnd": {
                            "title": "Apply Headers to End",
                            "markdownDescription": "By default, headers are added when forming the response. In some cases, headers set in SRR may be overridden by headers from other parts of the system. If you set this flag to **true**, headers from SRR will be added at the very end, just before the response is sent. In this case, SRR headers may override headers from other sections.",
                            "type": "boolean"
                          },
                          "subscriptionTemplate": {
                            "title": "Subscription Template",
                            "markdownDescription": "Override the subscription template with the given name. If not provided, the default subscription template will be used. If the template name is not found, the default subscription template for this type will be used. **This modification have higher priority than settings from External Squads.**",
                            "type": "string",
                            "minLength": 1
                          },
                          "ignoreHostXrayJsonTemplate": {
                            "title": "Ignore Host Xray Json Template",
                            "markdownDescription": "Each Host may have its own Xray Json Template. If you set this flag to **true**, the Xray Json Template defined by the SRR will be used. **The Host's Xray Json Template will be ignored.**",
                            "type": "boolean"
                          },
                          "ignoreServeJsonAtBaseSubscription": {
                            "title": "Ignore Serve Json at Base Subscription",
                            "markdownDescription": "If you set this flag to **true**, the **Serve JSON at Base Subscription** setting will be ignored (set to **false**).",
                            "type": "boolean"
                          },
                          "additionalExtendedClientsRegex": {
                            "markdownDescription": "Additional regex patterns to match extended clients. Matched clients will receive `serverDescription` in the subscription response.\n\n**Default Mihomo extended clients:**\n- `^FlClash ?X/`\n- `^Flowvy/`\n- `^prizrak-box/`\n- `^koala-clash/`\n\n**Default Xray extended clients:**\n- `^Happ/`\n- `^INCY/`\n\n**Example:** `[\"^MyClient/\", \"^CustomApp\\\\/v2\"]`",
                            "type": "array",
                            "items": {
                              "type": "string",
                              "minLength": 1
                            }
                          },
                          "disableHwidCheck": {
                            "title": "Disable HWID Check",
                            "markdownDescription": "If you set this flag to **true**, the HWID check will be disabled. **This modification have higher priority than settings from Subscription Settings.**",
                            "type": "boolean"
                          },
                          "encryption": {
                            "title": "Encryption",
                            "markdownDescription": "Encrypt response body with given parameters. Generate keypairs with Rescue CLI: `docker exec -it remnawave cli`, select \"Generate keypairs\".",
                            "type": "object",
                            "properties": {
                              "method": {
                                "type": "string",
                                "enum": [
                                  "age1",
                                  "age1pq1"
                                ]
                              },
                              "key": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "method",
                              "key"
                            ],
                            "additionalProperties": false
                          },
                          "excludeHostsByTags": {
                            "title": "Exclude Hosts by Tags",
                            "markdownDescription": "Excludes hosts from the subscription output if at least one tag in the host matches the given tags.",
                            "minItems": 1,
                            "type": "array",
                            "items": {
                              "type": "string",
                              "maxLength": 36,
                              "pattern": "^[A-Z0-9_:]+$"
                            }
                          },
                          "respondWithRemarks": {
                            "title": "Respond With Remarks",
                            "markdownDescription": "Replaces the response body with the provided remarks. If this array contains more than one element, actual hosts will not be sent.",
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          }
                        },
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "name",
                      "enabled",
                      "operator",
                      "conditions",
                      "responseType"
                    ],
                    "additionalProperties": false,
                    "title": "Response Rule",
                    "markdownDescription": "Response rule configuration.\n\n**Fields:**\n- **name**: Name of the response rule.\n- **description**: Description of the response rule. Optional.\n- **enabled**: Control whether the response rule is enabled or disabled. \n\n - `true` the rule will be applied. \n\n - `false` the rule will be always ignored.\n- **operator**: Operator to use for combining conditions in the rule.\n- **conditions**: Array of conditions to check against the request headers. Conditions are applied with **operator**. If conditions are empty, the rule will be matched.\n- **responseType**: Type of the response. Determines the type of **response** to be returned when the rule is matched.\n- **responseModifications**: Response modifications to be applied when the rule is matched. Optional.\n\n**Example:**\n```json\n{\n  \"name\": \"Block Legacy Clients\",\n  \"description\": \"Block requests from legacy clients\",\n  \"enabled\": true,\n  \"operator\": \"OR\",\n  \"conditions\": [\n    {\n      \"headerName\": \"user-agent\",\n      \"operator\": \"CONTAINS\",\n      \"value\": \"Hiddify\",\n      \"caseSensitive\": true\n    },\n    {\n      \"headerName\": \"user-agent\",\n      \"operator\": \"CONTAINS\",\n      \"value\": \"FoxRay\",\n      \"caseSensitive\": true\n    }\n  ],\n  \"responseType\": \"BLOCK\"\n}\n```",
                    "defaultSnippets": [
                      {
                        "label": "Examples: Blank rule",
                        "markdownDescription": "Simple blank rule with no conditions or modifications.\n```json\n{\n  \"name\": \"Blank rule\",\n  \"description\": \"Blank rule\",\n  \"operator\": \"AND\",\n  \"enabled\": true,\n  \"conditions\": [],\n  \"responseType\": \"BLOCK\",\n  \"responseModifications\": {\n    \"headers\": []\n  }\n}\n```",
                        "body": {
                          "name": "Blank rule",
                          "description": "Blank rule",
                          "operator": "AND",
                          "enabled": true,
                          "conditions": [],
                          "responseType": "BLOCK",
                          "responseModifications": {
                            "headers": []
                          }
                        }
                      },
                      {
                        "label": "Examples: Block Legacy Clients",
                        "markdownDescription": "Block requests from legacy clients\n```json\n{\n  \"name\": \"Block Legacy Clients\",\n  \"description\": \"Block requests from legacy clients\",\n  \"enabled\": true,\n  \"operator\": \"OR\",\n  \"conditions\": [\n    {\n      \"headerName\": \"user-agent\",\n      \"operator\": \"CONTAINS\",\n      \"value\": \"Hiddify\",\n      \"caseSensitive\": true\n    },\n    {\n      \"headerName\": \"user-agent\",\n      \"operator\": \"CONTAINS\",\n      \"value\": \"FoxRay\",\n      \"caseSensitive\": true\n    }\n  ],\n  \"responseType\": \"BLOCK\"\n}\n```",
                        "body": {
                          "name": "Block Legacy Clients",
                          "description": "Block requests from legacy clients",
                          "enabled": true,
                          "operator": "OR",
                          "conditions": [
                            {
                              "headerName": "user-agent",
                              "operator": "CONTAINS",
                              "value": "Hiddify",
                              "caseSensitive": true
                            },
                            {
                              "headerName": "user-agent",
                              "operator": "CONTAINS",
                              "value": "FoxRay",
                              "caseSensitive": true
                            }
                          ],
                          "responseType": "BLOCK"
                        }
                      }
                    ]
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "inputHeaders": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "type": "string"
                }
              },
              "outputHeaders": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "type": "string"
                }
              }
            },
            "required": [
              "matched",
              "responseType",
              "matchedRule",
              "inputHeaders",
              "outputHeaders"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/system/tools/x25519/generateGenerate 30 X25519 keypairs
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "keypairs": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "publicKey": {
                      "type": "string"
                    },
                    "privateKey": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "publicKey",
                    "privateKey"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "keypairs"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}

tokens

DELETE/api/tokens/{uuid}Delete API token

This endpoint is forbidden to use via "API-key". It can be used only with an admin JWT-token.

Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "uuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success"
}
POST/api/tokens/ottGet short-lived token for accessing backend tools (Swagger, Scalar, Bull Board)
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "ott": {
                "type": "string"
              }
            },
            "required": [
              "ott"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/tokens/scopesGet available API token scopes

Returns the catalog of scopes that can be granted to an API token, grouped by resource. Forbidden via "API-key", admin JWT only.

Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "wildcard": {
                "type": "string"
              },
              "resources": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "resource": {
                      "type": "string"
                    },
                    "resourceScopes": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "endpoints": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "key": {
                            "type": "string"
                          },
                          "kind": {
                            "type": "string",
                            "enum": [
                              "read",
                              "write"
                            ]
                          },
                          "method": {
                            "type": "string"
                          },
                          "path": {
                            "type": "string"
                          },
                          "description": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "key",
                          "kind",
                          "method",
                          "path",
                          "description"
                        ],
                        "additionalProperties": false
                      }
                    }
                  },
                  "required": [
                    "resource",
                    "resourceScopes",
                    "endpoints"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "wildcard",
              "resources"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/tokensGet all API tokens

This endpoint is forbidden to use via "API-key". It can only be used with admin JWT-token.

Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "tokens": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "name": {
                      "type": "string"
                    },
                    "expireAt": {},
                    "scopes": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "createdAt": {},
                    "updatedAt": {}
                  },
                  "required": [
                    "uuid",
                    "name",
                    "expireAt",
                    "scopes",
                    "createdAt",
                    "updatedAt"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "tokens"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/tokensCreate a new API token

This endpoint is forbidden to use via "API-key". It can only be used with an admin JWT-token.

Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 2,
            "maxLength": 30,
            "description": "Name of the API token"
          },
          "expiresInDays": {
            "type": "number",
            "minimum": 1,
            "description": "Expiration days of the API token"
          },
          "scopes": {
            "default": [
              "*"
            ],
            "description": "Scopes of the API token",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "name",
          "expiresInDays"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "uuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "name": {
                "type": "string"
              },
              "expireAt": {},
              "scopes": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "createdAt": {},
              "updatedAt": {},
              "token": {
                "type": "string"
              }
            },
            "required": [
              "uuid",
              "name",
              "expireAt",
              "scopes",
              "createdAt",
              "updatedAt",
              "token"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}

users

GET/api/users/{userId}/accessible-nodesGet user accessible nodes
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "userId",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "userId": {
                "type": "number"
              },
              "activeNodes": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "nodeName": {
                      "type": "string"
                    },
                    "countryCode": {
                      "type": "string"
                    },
                    "configProfileUuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "configProfileName": {
                      "type": "string"
                    },
                    "activeSquads": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "squadName": {
                            "type": "string"
                          },
                          "activeInbounds": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          }
                        },
                        "required": [
                          "squadName",
                          "activeInbounds"
                        ],
                        "additionalProperties": false
                      }
                    }
                  },
                  "required": [
                    "uuid",
                    "nodeName",
                    "countryCode",
                    "configProfileUuid",
                    "configProfileName",
                    "activeSquads"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "userId",
              "activeNodes"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/users/{userId}/actions/disableDisable user
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "userId",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "id": {
                "type": "number"
              },
              "shortUuid": {
                "type": "string"
              },
              "username": {
                "type": "string"
              },
              "status": {
                "type": "string",
                "enum": [
                  "ACTIVE",
                  "DISABLED",
                  "LIMITED",
                  "EXPIRED"
                ]
              },
              "trafficLimitBytes": {
                "type": "number"
              },
              "trafficLimitStrategy": {
                "type": "string",
                "enum": [
                  "NO_RESET",
                  "DAY",
                  "WEEK",
                  "MONTH",
                  "MONTH_ROLLING"
                ],
                "description": "Available reset periods"
              },
              "expireAt": {},
              "telegramId": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "email": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "email",
                    "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "description": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "tag": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "hwidDeviceLimit": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "externalSquadUuid": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "trojanPassword": {
                "type": "string"
              },
              "vlessUuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
              },
              "ssPassword": {
                "type": "string"
              },
              "lastTriggeredThreshold": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "subRevokedAt": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "lastTrafficResetAt": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "createdAt": {},
              "updatedAt": {},
              "subscriptionUrl": {
                "type": "string"
              },
              "activeInternalSquads": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "name": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "uuid",
                    "name"
                  ],
                  "additionalProperties": false
                }
              },
              "userTraffic": {
                "type": "object",
                "properties": {
                  "usedTrafficBytes": {
                    "type": "number"
                  },
                  "lifetimeUsedTrafficBytes": {
                    "type": "number"
                  },
                  "onlineAt": {
                    "anyOf": [
                      {},
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "firstConnectedAt": {
                    "anyOf": [
                      {},
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "lastConnectedNodeUuid": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "usedTrafficBytes",
                  "lifetimeUsedTrafficBytes",
                  "onlineAt",
                  "firstConnectedAt",
                  "lastConnectedNodeUuid"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "id",
              "shortUuid",
              "username",
              "status",
              "trafficLimitBytes",
              "trafficLimitStrategy",
              "expireAt",
              "telegramId",
              "email",
              "description",
              "tag",
              "hwidDeviceLimit",
              "externalSquadUuid",
              "trojanPassword",
              "vlessUuid",
              "ssPassword",
              "lastTriggeredThreshold",
              "subRevokedAt",
              "lastTrafficResetAt",
              "createdAt",
              "updatedAt",
              "subscriptionUrl",
              "activeInternalSquads",
              "userTraffic"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/users/{userId}/actions/enableEnable user
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "userId",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "id": {
                "type": "number"
              },
              "shortUuid": {
                "type": "string"
              },
              "username": {
                "type": "string"
              },
              "status": {
                "type": "string",
                "enum": [
                  "ACTIVE",
                  "DISABLED",
                  "LIMITED",
                  "EXPIRED"
                ]
              },
              "trafficLimitBytes": {
                "type": "number"
              },
              "trafficLimitStrategy": {
                "type": "string",
                "enum": [
                  "NO_RESET",
                  "DAY",
                  "WEEK",
                  "MONTH",
                  "MONTH_ROLLING"
                ],
                "description": "Available reset periods"
              },
              "expireAt": {},
              "telegramId": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "email": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "email",
                    "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "description": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "tag": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "hwidDeviceLimit": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "externalSquadUuid": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "trojanPassword": {
                "type": "string"
              },
              "vlessUuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
              },
              "ssPassword": {
                "type": "string"
              },
              "lastTriggeredThreshold": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "subRevokedAt": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "lastTrafficResetAt": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "createdAt": {},
              "updatedAt": {},
              "subscriptionUrl": {
                "type": "string"
              },
              "activeInternalSquads": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "name": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "uuid",
                    "name"
                  ],
                  "additionalProperties": false
                }
              },
              "userTraffic": {
                "type": "object",
                "properties": {
                  "usedTrafficBytes": {
                    "type": "number"
                  },
                  "lifetimeUsedTrafficBytes": {
                    "type": "number"
                  },
                  "onlineAt": {
                    "anyOf": [
                      {},
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "firstConnectedAt": {
                    "anyOf": [
                      {},
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "lastConnectedNodeUuid": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "usedTrafficBytes",
                  "lifetimeUsedTrafficBytes",
                  "onlineAt",
                  "firstConnectedAt",
                  "lastConnectedNodeUuid"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "id",
              "shortUuid",
              "username",
              "status",
              "trafficLimitBytes",
              "trafficLimitStrategy",
              "expireAt",
              "telegramId",
              "email",
              "description",
              "tag",
              "hwidDeviceLimit",
              "externalSquadUuid",
              "trojanPassword",
              "vlessUuid",
              "ssPassword",
              "lastTriggeredThreshold",
              "subRevokedAt",
              "lastTrafficResetAt",
              "createdAt",
              "updatedAt",
              "subscriptionUrl",
              "activeInternalSquads",
              "userTraffic"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/users/{userId}/actions/extendExtend user expiration date

If user status is EXPIRED, the new expiration date is calculated from the current date and the user becomes ACTIVE. If user status is ACTIVE, the given number of days is added to the existing expiration date. DISABLED and LIMITED users will be extended, but their status will not change.

Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "userId",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "days": {
            "type": "number",
            "minimum": 1,
            "description": "The number of days to extend the expiration date."
          }
        },
        "required": [
          "days"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "id": {
                "type": "number"
              },
              "shortUuid": {
                "type": "string"
              },
              "username": {
                "type": "string"
              },
              "status": {
                "type": "string",
                "enum": [
                  "ACTIVE",
                  "DISABLED",
                  "LIMITED",
                  "EXPIRED"
                ]
              },
              "trafficLimitBytes": {
                "type": "number"
              },
              "trafficLimitStrategy": {
                "type": "string",
                "enum": [
                  "NO_RESET",
                  "DAY",
                  "WEEK",
                  "MONTH",
                  "MONTH_ROLLING"
                ],
                "description": "Available reset periods"
              },
              "expireAt": {},
              "telegramId": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "email": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "email",
                    "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "description": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "tag": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "hwidDeviceLimit": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "externalSquadUuid": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "trojanPassword": {
                "type": "string"
              },
              "vlessUuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
              },
              "ssPassword": {
                "type": "string"
              },
              "lastTriggeredThreshold": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "subRevokedAt": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "lastTrafficResetAt": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "createdAt": {},
              "updatedAt": {},
              "subscriptionUrl": {
                "type": "string"
              },
              "activeInternalSquads": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "name": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "uuid",
                    "name"
                  ],
                  "additionalProperties": false
                }
              },
              "userTraffic": {
                "type": "object",
                "properties": {
                  "usedTrafficBytes": {
                    "type": "number"
                  },
                  "lifetimeUsedTrafficBytes": {
                    "type": "number"
                  },
                  "onlineAt": {
                    "anyOf": [
                      {},
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "firstConnectedAt": {
                    "anyOf": [
                      {},
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "lastConnectedNodeUuid": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "usedTrafficBytes",
                  "lifetimeUsedTrafficBytes",
                  "onlineAt",
                  "firstConnectedAt",
                  "lastConnectedNodeUuid"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "id",
              "shortUuid",
              "username",
              "status",
              "trafficLimitBytes",
              "trafficLimitStrategy",
              "expireAt",
              "telegramId",
              "email",
              "description",
              "tag",
              "hwidDeviceLimit",
              "externalSquadUuid",
              "trojanPassword",
              "vlessUuid",
              "ssPassword",
              "lastTriggeredThreshold",
              "subRevokedAt",
              "lastTrafficResetAt",
              "createdAt",
              "updatedAt",
              "subscriptionUrl",
              "activeInternalSquads",
              "userTraffic"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/users/{userId}/actions/reset-trafficReset user traffic
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "userId",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "id": {
                "type": "number"
              },
              "shortUuid": {
                "type": "string"
              },
              "username": {
                "type": "string"
              },
              "status": {
                "type": "string",
                "enum": [
                  "ACTIVE",
                  "DISABLED",
                  "LIMITED",
                  "EXPIRED"
                ]
              },
              "trafficLimitBytes": {
                "type": "number"
              },
              "trafficLimitStrategy": {
                "type": "string",
                "enum": [
                  "NO_RESET",
                  "DAY",
                  "WEEK",
                  "MONTH",
                  "MONTH_ROLLING"
                ],
                "description": "Available reset periods"
              },
              "expireAt": {},
              "telegramId": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "email": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "email",
                    "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "description": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "tag": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "hwidDeviceLimit": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "externalSquadUuid": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "trojanPassword": {
                "type": "string"
              },
              "vlessUuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
              },
              "ssPassword": {
                "type": "string"
              },
              "lastTriggeredThreshold": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "subRevokedAt": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "lastTrafficResetAt": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "createdAt": {},
              "updatedAt": {},
              "subscriptionUrl": {
                "type": "string"
              },
              "activeInternalSquads": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "name": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "uuid",
                    "name"
                  ],
                  "additionalProperties": false
                }
              },
              "userTraffic": {
                "type": "object",
                "properties": {
                  "usedTrafficBytes": {
                    "type": "number"
                  },
                  "lifetimeUsedTrafficBytes": {
                    "type": "number"
                  },
                  "onlineAt": {
                    "anyOf": [
                      {},
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "firstConnectedAt": {
                    "anyOf": [
                      {},
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "lastConnectedNodeUuid": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "usedTrafficBytes",
                  "lifetimeUsedTrafficBytes",
                  "onlineAt",
                  "firstConnectedAt",
                  "lastConnectedNodeUuid"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "id",
              "shortUuid",
              "username",
              "status",
              "trafficLimitBytes",
              "trafficLimitStrategy",
              "expireAt",
              "telegramId",
              "email",
              "description",
              "tag",
              "hwidDeviceLimit",
              "externalSquadUuid",
              "trojanPassword",
              "vlessUuid",
              "ssPassword",
              "lastTriggeredThreshold",
              "subRevokedAt",
              "lastTrafficResetAt",
              "createdAt",
              "updatedAt",
              "subscriptionUrl",
              "activeInternalSquads",
              "userTraffic"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/users/{userId}/actions/revokeRevoke user subscription
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "userId",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "revokeOnlyPasswords": {
            "default": false,
            "description": "Optional. If true, only passwords will be revoked, without changing the short UUID (Subscription URL).",
            "type": "boolean"
          },
          "shortUuid": {
            "type": "string",
            "minLength": 16,
            "maxLength": 64,
            "description": "Optional. If not provided, a new short UUID will be generated by Remnawave. Please note that it is strongly recommended to allow Remnawave to generate the short UUID."
          }
        }
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "id": {
                "type": "number"
              },
              "shortUuid": {
                "type": "string"
              },
              "username": {
                "type": "string"
              },
              "status": {
                "type": "string",
                "enum": [
                  "ACTIVE",
                  "DISABLED",
                  "LIMITED",
                  "EXPIRED"
                ]
              },
              "trafficLimitBytes": {
                "type": "number"
              },
              "trafficLimitStrategy": {
                "type": "string",
                "enum": [
                  "NO_RESET",
                  "DAY",
                  "WEEK",
                  "MONTH",
                  "MONTH_ROLLING"
                ],
                "description": "Available reset periods"
              },
              "expireAt": {},
              "telegramId": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "email": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "email",
                    "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "description": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "tag": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "hwidDeviceLimit": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "externalSquadUuid": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "trojanPassword": {
                "type": "string"
              },
              "vlessUuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
              },
              "ssPassword": {
                "type": "string"
              },
              "lastTriggeredThreshold": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "subRevokedAt": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "lastTrafficResetAt": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "createdAt": {},
              "updatedAt": {},
              "subscriptionUrl": {
                "type": "string"
              },
              "activeInternalSquads": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "name": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "uuid",
                    "name"
                  ],
                  "additionalProperties": false
                }
              },
              "userTraffic": {
                "type": "object",
                "properties": {
                  "usedTrafficBytes": {
                    "type": "number"
                  },
                  "lifetimeUsedTrafficBytes": {
                    "type": "number"
                  },
                  "onlineAt": {
                    "anyOf": [
                      {},
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "firstConnectedAt": {
                    "anyOf": [
                      {},
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "lastConnectedNodeUuid": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "usedTrafficBytes",
                  "lifetimeUsedTrafficBytes",
                  "onlineAt",
                  "firstConnectedAt",
                  "lastConnectedNodeUuid"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "id",
              "shortUuid",
              "username",
              "status",
              "trafficLimitBytes",
              "trafficLimitStrategy",
              "expireAt",
              "telegramId",
              "email",
              "description",
              "tag",
              "hwidDeviceLimit",
              "externalSquadUuid",
              "trojanPassword",
              "vlessUuid",
              "ssPassword",
              "lastTriggeredThreshold",
              "subRevokedAt",
              "lastTrafficResetAt",
              "createdAt",
              "updatedAt",
              "subscriptionUrl",
              "activeInternalSquads",
              "userTraffic"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/users/{userId}/subscription-request-historyGet user subscription request history, recent 24 records
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "userId",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "total": {
                "type": "number"
              },
              "records": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "number"
                    },
                    "userId": {
                      "type": "number"
                    },
                    "requestAt": {},
                    "srrResponseType": {
                      "type": "string"
                    },
                    "requestIp": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "userAgent": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "srrRuleName": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "userId",
                    "requestAt",
                    "srrResponseType"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "total",
              "records"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/users/{userId}Get user by ID
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "userId",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "id": {
                "type": "number"
              },
              "shortUuid": {
                "type": "string"
              },
              "username": {
                "type": "string"
              },
              "status": {
                "type": "string",
                "enum": [
                  "ACTIVE",
                  "DISABLED",
                  "LIMITED",
                  "EXPIRED"
                ]
              },
              "trafficLimitBytes": {
                "type": "number"
              },
              "trafficLimitStrategy": {
                "type": "string",
                "enum": [
                  "NO_RESET",
                  "DAY",
                  "WEEK",
                  "MONTH",
                  "MONTH_ROLLING"
                ],
                "description": "Available reset periods"
              },
              "expireAt": {},
              "telegramId": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "email": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "email",
                    "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "description": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "tag": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "hwidDeviceLimit": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "externalSquadUuid": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "trojanPassword": {
                "type": "string"
              },
              "vlessUuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
              },
              "ssPassword": {
                "type": "string"
              },
              "lastTriggeredThreshold": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "subRevokedAt": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "lastTrafficResetAt": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "createdAt": {},
              "updatedAt": {},
              "subscriptionUrl": {
                "type": "string"
              },
              "activeInternalSquads": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "name": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "uuid",
                    "name"
                  ],
                  "additionalProperties": false
                }
              },
              "userTraffic": {
                "type": "object",
                "properties": {
                  "usedTrafficBytes": {
                    "type": "number"
                  },
                  "lifetimeUsedTrafficBytes": {
                    "type": "number"
                  },
                  "onlineAt": {
                    "anyOf": [
                      {},
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "firstConnectedAt": {
                    "anyOf": [
                      {},
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "lastConnectedNodeUuid": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "usedTrafficBytes",
                  "lifetimeUsedTrafficBytes",
                  "onlineAt",
                  "firstConnectedAt",
                  "lastConnectedNodeUuid"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "id",
              "shortUuid",
              "username",
              "status",
              "trafficLimitBytes",
              "trafficLimitStrategy",
              "expireAt",
              "telegramId",
              "email",
              "description",
              "tag",
              "hwidDeviceLimit",
              "externalSquadUuid",
              "trojanPassword",
              "vlessUuid",
              "ssPassword",
              "lastTriggeredThreshold",
              "subRevokedAt",
              "lastTrafficResetAt",
              "createdAt",
              "updatedAt",
              "subscriptionUrl",
              "activeInternalSquads",
              "userTraffic"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
DELETE/api/users/{userId}Delete user
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "userId",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success"
}
POST/api/users/bulk/all/extend-expiration-dateExtend expiration date for all users by days
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "extendDays": {
            "type": "integer",
            "minimum": 1,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "extendDays"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success"
}
POST/api/users/bulk/all/reset-trafficReset user used traffic for all users
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success"
}
POST/api/users/bulk/all/updateBulk update all users
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "ACTIVE",
              "DISABLED",
              "LIMITED",
              "EXPIRED"
            ]
          },
          "trafficLimitBytes": {
            "type": "number",
            "minimum": 0,
            "description": "Traffic limit in bytes. 0 - unlimited"
          },
          "trafficLimitStrategy": {
            "type": "string",
            "enum": [
              "NO_RESET",
              "DAY",
              "WEEK",
              "MONTH",
              "MONTH_ROLLING"
            ],
            "description": "Available reset periods"
          },
          "expireAt": {
            "description": "Expiration date: 2025-01-17T15:38:45.065Z",
            "type": "string",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d))|(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?)$"
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "telegramId": {
            "type": [
              "number",
              "null"
            ]
          },
          "email": {
            "anyOf": [
              {
                "type": "string",
                "format": "email",
                "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
              },
              {
                "type": "null"
              }
            ]
          },
          "tag": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 16,
                "pattern": "^[A-Z0-9_]+$"
              },
              {
                "type": "null"
              }
            ]
          },
          "hwidDeviceLimit": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              {
                "type": "null"
              }
            ]
          }
        }
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success"
}
POST/api/users/bulk/delete-by-statusBulk delete users by status
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "ACTIVE",
              "DISABLED",
              "LIMITED",
              "EXPIRED"
            ]
          }
        },
        "required": [
          "status"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success"
}
POST/api/users/bulk/deleteBulk delete users by User IDs
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "userIds": {
            "minItems": 1,
            "maxItems": 500,
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "userIds"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success"
}
POST/api/users/bulk/extend-expiration-dateExtend expiration date for specified users by days
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "userIds": {
            "minItems": 1,
            "maxItems": 500,
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "extendDays": {
            "type": "integer",
            "minimum": 1,
            "maximum": 9999
          }
        },
        "required": [
          "userIds",
          "extendDays"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success"
}
POST/api/users/bulk/reset-trafficBulk reset traffic users by User IDs
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "userIds": {
            "minItems": 1,
            "maxItems": 500,
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "userIds"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success"
}
POST/api/users/bulk/revoke-subscriptionRevoke users subscription by User IDs
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "userIds": {
            "minItems": 1,
            "maxItems": 500,
            "type": "array",
            "items": {
              "type": "number"
            }
          }
        },
        "required": [
          "userIds"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success"
}
POST/api/users/bulk/update-squadsBulk update users internal squads by User IDs
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "userIds": {
            "minItems": 1,
            "maxItems": 500,
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "activeInternalSquads": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            }
          }
        },
        "required": [
          "userIds",
          "activeInternalSquads"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success"
}
POST/api/users/bulk/updateBulk update users by User IDs
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "userIds": {
            "minItems": 1,
            "maxItems": 500,
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "fields": {
            "type": "object",
            "properties": {
              "status": {
                "type": "string",
                "enum": [
                  "ACTIVE",
                  "DISABLED",
                  "LIMITED",
                  "EXPIRED"
                ]
              },
              "trafficLimitBytes": {
                "type": "number",
                "minimum": 0,
                "description": "Traffic limit in bytes. 0 - unlimited"
              },
              "trafficLimitStrategy": {
                "type": "string",
                "enum": [
                  "NO_RESET",
                  "DAY",
                  "WEEK",
                  "MONTH",
                  "MONTH_ROLLING"
                ],
                "description": "Available reset periods"
              },
              "expireAt": {
                "description": "Expiration date: 2025-01-17T15:38:45.065Z",
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d))|(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?)$"
              },
              "description": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "telegramId": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "email": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "email",
                    "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "tag": {
                "anyOf": [
                  {
                    "type": "string",
                    "maxLength": 16,
                    "pattern": "^[A-Z0-9_]+$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "hwidDeviceLimit": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "externalSquadUuid": {
                "description": "Optional. External squad UUID.",
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            }
          }
        },
        "required": [
          "userIds",
          "fields"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success"
}
GET/api/users/by-short-uuid/{shortUuid}Get user by Short UUID
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "shortUuid",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "id": {
                "type": "number"
              },
              "shortUuid": {
                "type": "string"
              },
              "username": {
                "type": "string"
              },
              "status": {
                "type": "string",
                "enum": [
                  "ACTIVE",
                  "DISABLED",
                  "LIMITED",
                  "EXPIRED"
                ]
              },
              "trafficLimitBytes": {
                "type": "number"
              },
              "trafficLimitStrategy": {
                "type": "string",
                "enum": [
                  "NO_RESET",
                  "DAY",
                  "WEEK",
                  "MONTH",
                  "MONTH_ROLLING"
                ],
                "description": "Available reset periods"
              },
              "expireAt": {},
              "telegramId": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "email": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "email",
                    "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "description": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "tag": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "hwidDeviceLimit": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "externalSquadUuid": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "trojanPassword": {
                "type": "string"
              },
              "vlessUuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
              },
              "ssPassword": {
                "type": "string"
              },
              "lastTriggeredThreshold": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "subRevokedAt": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "lastTrafficResetAt": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "createdAt": {},
              "updatedAt": {},
              "subscriptionUrl": {
                "type": "string"
              },
              "activeInternalSquads": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "name": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "uuid",
                    "name"
                  ],
                  "additionalProperties": false
                }
              },
              "userTraffic": {
                "type": "object",
                "properties": {
                  "usedTrafficBytes": {
                    "type": "number"
                  },
                  "lifetimeUsedTrafficBytes": {
                    "type": "number"
                  },
                  "onlineAt": {
                    "anyOf": [
                      {},
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "firstConnectedAt": {
                    "anyOf": [
                      {},
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "lastConnectedNodeUuid": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "usedTrafficBytes",
                  "lifetimeUsedTrafficBytes",
                  "onlineAt",
                  "firstConnectedAt",
                  "lastConnectedNodeUuid"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "id",
              "shortUuid",
              "username",
              "status",
              "trafficLimitBytes",
              "trafficLimitStrategy",
              "expireAt",
              "telegramId",
              "email",
              "description",
              "tag",
              "hwidDeviceLimit",
              "externalSquadUuid",
              "trojanPassword",
              "vlessUuid",
              "ssPassword",
              "lastTriggeredThreshold",
              "subRevokedAt",
              "lastTrafficResetAt",
              "createdAt",
              "updatedAt",
              "subscriptionUrl",
              "activeInternalSquads",
              "userTraffic"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/users/by-username/{username}Get user by username
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "username",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "id": {
                "type": "number"
              },
              "shortUuid": {
                "type": "string"
              },
              "username": {
                "type": "string"
              },
              "status": {
                "type": "string",
                "enum": [
                  "ACTIVE",
                  "DISABLED",
                  "LIMITED",
                  "EXPIRED"
                ]
              },
              "trafficLimitBytes": {
                "type": "number"
              },
              "trafficLimitStrategy": {
                "type": "string",
                "enum": [
                  "NO_RESET",
                  "DAY",
                  "WEEK",
                  "MONTH",
                  "MONTH_ROLLING"
                ],
                "description": "Available reset periods"
              },
              "expireAt": {},
              "telegramId": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "email": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "email",
                    "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "description": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "tag": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "hwidDeviceLimit": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "externalSquadUuid": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "trojanPassword": {
                "type": "string"
              },
              "vlessUuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
              },
              "ssPassword": {
                "type": "string"
              },
              "lastTriggeredThreshold": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "subRevokedAt": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "lastTrafficResetAt": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "createdAt": {},
              "updatedAt": {},
              "subscriptionUrl": {
                "type": "string"
              },
              "activeInternalSquads": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "name": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "uuid",
                    "name"
                  ],
                  "additionalProperties": false
                }
              },
              "userTraffic": {
                "type": "object",
                "properties": {
                  "usedTrafficBytes": {
                    "type": "number"
                  },
                  "lifetimeUsedTrafficBytes": {
                    "type": "number"
                  },
                  "onlineAt": {
                    "anyOf": [
                      {},
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "firstConnectedAt": {
                    "anyOf": [
                      {},
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "lastConnectedNodeUuid": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "usedTrafficBytes",
                  "lifetimeUsedTrafficBytes",
                  "onlineAt",
                  "firstConnectedAt",
                  "lastConnectedNodeUuid"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "id",
              "shortUuid",
              "username",
              "status",
              "trafficLimitBytes",
              "trafficLimitStrategy",
              "expireAt",
              "telegramId",
              "email",
              "description",
              "tag",
              "hwidDeviceLimit",
              "externalSquadUuid",
              "trojanPassword",
              "vlessUuid",
              "ssPassword",
              "lastTriggeredThreshold",
              "subRevokedAt",
              "lastTrafficResetAt",
              "createdAt",
              "updatedAt",
              "subscriptionUrl",
              "activeInternalSquads",
              "userTraffic"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/users/resolveResolve a user

Resolve a user by ID, Short UUID or username. Exactly one of the fields must be provided.

Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number"
          },
          "shortUuid": {
            "type": "string"
          },
          "username": {
            "type": "string"
          }
        }
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "id": {
                "type": "number"
              },
              "username": {
                "type": "string"
              },
              "shortUuid": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "username",
              "shortUuid"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/users/streamGet all users using cursor-based (keyset) pagination with filtering options
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "cursor",
    "in": "query",
    "required": false,
    "schema": {
      "description": "Cursor for pagination — pass the nextCursor from the previous response. Omit on the first request.",
      "type": "number"
    }
  },
  {
    "name": "size",
    "in": "query",
    "required": false,
    "schema": {
      "default": 250,
      "type": "number",
      "minimum": 1,
      "maximum": 1000,
      "description": "Number of results to return, no more than 1000"
    }
  },
  {
    "name": "status",
    "in": "query",
    "required": false,
    "schema": {
      "description": "Status to filter users by",
      "type": "string",
      "enum": [
        "ACTIVE",
        "DISABLED",
        "LIMITED",
        "EXPIRED"
      ]
    }
  },
  {
    "name": "trafficLimitStrategy",
    "in": "query",
    "required": false,
    "schema": {
      "description": "Traffic limit strategy to filter users by",
      "type": "string",
      "enum": [
        "NO_RESET",
        "DAY",
        "WEEK",
        "MONTH",
        "MONTH_ROLLING"
      ]
    }
  },
  {
    "name": "telegramId",
    "in": "query",
    "required": false,
    "schema": {
      "description": "Telegram ID to filter users by",
      "type": "string"
    }
  },
  {
    "name": "email",
    "in": "query",
    "required": false,
    "schema": {
      "description": "Email to filter users by",
      "type": "string",
      "format": "email",
      "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    }
  },
  {
    "name": "tag",
    "in": "query",
    "required": false,
    "schema": {
      "description": "Tag to filter users by",
      "type": "string"
    }
  },
  {
    "name": "externalSquadUuid",
    "in": "query",
    "required": false,
    "schema": {
      "description": "External squad UUID to filter users by",
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "users": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "number"
                    },
                    "shortUuid": {
                      "type": "string"
                    },
                    "username": {
                      "type": "string"
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "ACTIVE",
                        "DISABLED",
                        "LIMITED",
                        "EXPIRED"
                      ]
                    },
                    "trafficLimitBytes": {
                      "type": "number"
                    },
                    "trafficLimitStrategy": {
                      "type": "string",
                      "enum": [
                        "NO_RESET",
                        "DAY",
                        "WEEK",
                        "MONTH",
                        "MONTH_ROLLING"
                      ],
                      "description": "Available reset periods"
                    },
                    "expireAt": {},
                    "telegramId": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "email": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "email",
                          "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "description": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "tag": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "hwidDeviceLimit": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "externalSquadUuid": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "trojanPassword": {
                      "type": "string"
                    },
                    "vlessUuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
                    },
                    "ssPassword": {
                      "type": "string"
                    },
                    "lastTriggeredThreshold": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "subRevokedAt": {
                      "anyOf": [
                        {},
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "lastTrafficResetAt": {
                      "anyOf": [
                        {},
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "createdAt": {},
                    "updatedAt": {},
                    "subscriptionUrl": {
                      "type": "string"
                    },
                    "activeInternalSquads": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "uuid": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                          },
                          "name": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "uuid",
                          "name"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "userTraffic": {
                      "type": "object",
                      "properties": {
                        "usedTrafficBytes": {
                          "type": "number"
                        },
                        "lifetimeUsedTrafficBytes": {
                          "type": "number"
                        },
                        "onlineAt": {
                          "anyOf": [
                            {},
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "firstConnectedAt": {
                          "anyOf": [
                            {},
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "lastConnectedNodeUuid": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "usedTrafficBytes",
                        "lifetimeUsedTrafficBytes",
                        "onlineAt",
                        "firstConnectedAt",
                        "lastConnectedNodeUuid"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "id",
                    "shortUuid",
                    "username",
                    "status",
                    "trafficLimitBytes",
                    "trafficLimitStrategy",
                    "expireAt",
                    "telegramId",
                    "email",
                    "description",
                    "tag",
                    "hwidDeviceLimit",
                    "externalSquadUuid",
                    "trojanPassword",
                    "vlessUuid",
                    "ssPassword",
                    "lastTriggeredThreshold",
                    "subRevokedAt",
                    "lastTrafficResetAt",
                    "createdAt",
                    "updatedAt",
                    "subscriptionUrl",
                    "activeInternalSquads",
                    "userTraffic"
                  ],
                  "additionalProperties": false
                }
              },
              "nextCursor": {
                "description": "Cursor to fetch the next page, or null if there are no more results",
                "type": [
                  "string",
                  "null"
                ]
              },
              "hasMore": {
                "type": "boolean",
                "description": "Whether there are more results to fetch"
              }
            },
            "required": [
              "users",
              "nextCursor",
              "hasMore"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/users/tagsGet users tags
Authentication requirements
[
  {
    "bearerAuth": []
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "tags": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "required": [
              "tags"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
GET/api/usersGet all users using offset-based pagination

Please note that the filters here are primarily intended for use by the frontend and rely on expensive operators such as LIKE under the hood. Misusing these filters may negatively impact the performance of your database.

Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Path, query and header parameters
[
  {
    "name": "start",
    "in": "query",
    "required": false,
    "schema": {
      "default": 0,
      "description": "Start index (offset) of the results to return, default is 0",
      "type": "number"
    }
  },
  {
    "name": "size",
    "in": "query",
    "required": false,
    "schema": {
      "default": 25,
      "type": "number",
      "minimum": 1,
      "maximum": 1000,
      "description": "Number of results to return, no more than 1000"
    }
  },
  {
    "name": "filters",
    "in": "query",
    "required": false,
    "schema": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "value": {}
        },
        "required": [
          "id",
          "value"
        ]
      }
    }
  },
  {
    "name": "filterModes",
    "in": "query",
    "required": false,
    "schema": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "type": "string"
      }
    }
  },
  {
    "name": "globalFilterMode",
    "in": "query",
    "required": false,
    "schema": {
      "type": "string"
    }
  },
  {
    "name": "sorting",
    "in": "query",
    "required": false,
    "schema": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "desc": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "desc"
        ]
      }
    }
  }
]

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "users": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "number"
                    },
                    "shortUuid": {
                      "type": "string"
                    },
                    "username": {
                      "type": "string"
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "ACTIVE",
                        "DISABLED",
                        "LIMITED",
                        "EXPIRED"
                      ]
                    },
                    "trafficLimitBytes": {
                      "type": "number"
                    },
                    "trafficLimitStrategy": {
                      "type": "string",
                      "enum": [
                        "NO_RESET",
                        "DAY",
                        "WEEK",
                        "MONTH",
                        "MONTH_ROLLING"
                      ],
                      "description": "Available reset periods"
                    },
                    "expireAt": {},
                    "telegramId": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "email": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "email",
                          "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "description": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "tag": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "hwidDeviceLimit": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "externalSquadUuid": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "trojanPassword": {
                      "type": "string"
                    },
                    "vlessUuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
                    },
                    "ssPassword": {
                      "type": "string"
                    },
                    "lastTriggeredThreshold": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "subRevokedAt": {
                      "anyOf": [
                        {},
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "lastTrafficResetAt": {
                      "anyOf": [
                        {},
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "createdAt": {},
                    "updatedAt": {},
                    "subscriptionUrl": {
                      "type": "string"
                    },
                    "activeInternalSquads": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "uuid": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                          },
                          "name": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "uuid",
                          "name"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "userTraffic": {
                      "type": "object",
                      "properties": {
                        "usedTrafficBytes": {
                          "type": "number"
                        },
                        "lifetimeUsedTrafficBytes": {
                          "type": "number"
                        },
                        "onlineAt": {
                          "anyOf": [
                            {},
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "firstConnectedAt": {
                          "anyOf": [
                            {},
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "lastConnectedNodeUuid": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "usedTrafficBytes",
                        "lifetimeUsedTrafficBytes",
                        "onlineAt",
                        "firstConnectedAt",
                        "lastConnectedNodeUuid"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "id",
                    "shortUuid",
                    "username",
                    "status",
                    "trafficLimitBytes",
                    "trafficLimitStrategy",
                    "expireAt",
                    "telegramId",
                    "email",
                    "description",
                    "tag",
                    "hwidDeviceLimit",
                    "externalSquadUuid",
                    "trojanPassword",
                    "vlessUuid",
                    "ssPassword",
                    "lastTriggeredThreshold",
                    "subRevokedAt",
                    "lastTrafficResetAt",
                    "createdAt",
                    "updatedAt",
                    "subscriptionUrl",
                    "activeInternalSquads",
                    "userTraffic"
                  ],
                  "additionalProperties": false
                }
              },
              "total": {
                "type": "number"
              }
            },
            "required": [
              "users",
              "total"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
POST/api/usersCreate a new user
Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "minLength": 3,
            "maxLength": 36,
            "pattern": "^[a-zA-Z0-9_-]+$",
            "description": "Unique username for the user. Required. Must be 3-36 characters long and contain only letters, numbers, underscores and dashes."
          },
          "status": {
            "description": "Optional. User account status. Defaults to ACTIVE.",
            "default": "ACTIVE",
            "type": "string",
            "enum": [
              "ACTIVE",
              "DISABLED",
              "LIMITED",
              "EXPIRED"
            ]
          },
          "shortUuid": {
            "description": "Optional. Short UUID identifier for the user.",
            "type": "string"
          },
          "trojanPassword": {
            "description": "Optional. Password for Trojan protocol. Must be 8-32 characters.",
            "type": "string",
            "minLength": 8,
            "maxLength": 32
          },
          "vlessUuid": {
            "description": "Optional. UUID for VLESS protocol. Must be a valid UUID format.",
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
          },
          "ssPassword": {
            "description": "Optional. Password for Shadowsocks protocol. Must be 8-32 characters.",
            "type": "string",
            "minLength": 8,
            "maxLength": 32
          },
          "trafficLimitBytes": {
            "description": "Optional. Traffic limit in bytes. Set to 0 for unlimited traffic.",
            "type": "number",
            "minimum": 0
          },
          "trafficLimitStrategy": {
            "default": "NO_RESET",
            "description": "Available reset periods",
            "type": "string",
            "enum": [
              "NO_RESET",
              "DAY",
              "WEEK",
              "MONTH",
              "MONTH_ROLLING"
            ]
          },
          "expireAt": {
            "description": "Account expiration date. Required. Format: 2025-01-17T15:38:45.065Z",
            "type": "string",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d))|(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?)$"
          },
          "createdAt": {
            "description": "Optional. Account creation date. Format: 2025-01-17T15:38:45.065Z",
            "type": "string",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d))|(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?)$"
          },
          "lastTrafficResetAt": {
            "description": "Optional. Date of last traffic reset. Format: 2025-01-17T15:38:45.065Z",
            "type": "string",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d))|(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?)$"
          },
          "description": {
            "description": "Optional. Additional notes or description for the user account.",
            "type": "string"
          },
          "tag": {
            "description": "Optional. User tag for categorization. Max 16 characters, uppercase letters, numbers and underscores only.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 16,
                "pattern": "^[A-Z0-9_]+$"
              },
              {
                "type": "null"
              }
            ]
          },
          "telegramId": {
            "description": "Optional. Telegram user ID for notifications. Must be an integer.",
            "type": [
              "number",
              "null"
            ]
          },
          "email": {
            "description": "Optional. User email address. Must be a valid email format.",
            "anyOf": [
              {
                "type": "string",
                "format": "email",
                "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
              },
              {
                "type": "null"
              }
            ]
          },
          "hwidDeviceLimit": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "Optional. Maximum number of hardware devices allowed. Must be a positive integer."
          },
          "activeInternalSquads": {
            "description": "Optional. Array of UUIDs representing enabled internal squads.",
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            }
          },
          "externalSquadUuid": {
            "description": "Optional. External squad UUID.",
            "anyOf": [
              {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "username",
          "expireAt"
        ]
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "id": {
                "type": "number"
              },
              "shortUuid": {
                "type": "string"
              },
              "username": {
                "type": "string"
              },
              "status": {
                "type": "string",
                "enum": [
                  "ACTIVE",
                  "DISABLED",
                  "LIMITED",
                  "EXPIRED"
                ]
              },
              "trafficLimitBytes": {
                "type": "number"
              },
              "trafficLimitStrategy": {
                "type": "string",
                "enum": [
                  "NO_RESET",
                  "DAY",
                  "WEEK",
                  "MONTH",
                  "MONTH_ROLLING"
                ],
                "description": "Available reset periods"
              },
              "expireAt": {},
              "telegramId": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "email": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "email",
                    "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "description": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "tag": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "hwidDeviceLimit": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "externalSquadUuid": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "trojanPassword": {
                "type": "string"
              },
              "vlessUuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
              },
              "ssPassword": {
                "type": "string"
              },
              "lastTriggeredThreshold": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "subRevokedAt": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "lastTrafficResetAt": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "createdAt": {},
              "updatedAt": {},
              "subscriptionUrl": {
                "type": "string"
              },
              "activeInternalSquads": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "name": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "uuid",
                    "name"
                  ],
                  "additionalProperties": false
                }
              },
              "userTraffic": {
                "type": "object",
                "properties": {
                  "usedTrafficBytes": {
                    "type": "number"
                  },
                  "lifetimeUsedTrafficBytes": {
                    "type": "number"
                  },
                  "onlineAt": {
                    "anyOf": [
                      {},
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "firstConnectedAt": {
                    "anyOf": [
                      {},
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "lastConnectedNodeUuid": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "usedTrafficBytes",
                  "lifetimeUsedTrafficBytes",
                  "onlineAt",
                  "firstConnectedAt",
                  "lastConnectedNodeUuid"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "id",
              "shortUuid",
              "username",
              "status",
              "trafficLimitBytes",
              "trafficLimitStrategy",
              "expireAt",
              "telegramId",
              "email",
              "description",
              "tag",
              "hwidDeviceLimit",
              "externalSquadUuid",
              "trojanPassword",
              "vlessUuid",
              "ssPassword",
              "lastTriggeredThreshold",
              "subRevokedAt",
              "lastTrafficResetAt",
              "createdAt",
              "updatedAt",
              "subscriptionUrl",
              "activeInternalSquads",
              "userTraffic"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}
PATCH/api/usersUpdate a user

Update a user by ID or username. Exactly one of the fields must be provided.

Authentication requirements
[
  {
    "bearerAuth": []
  }
]
Request body
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "username": {
            "type": "string",
            "description": "Username of the user"
          },
          "id": {
            "type": "number",
            "description": "ID of the user"
          },
          "status": {
            "type": "string",
            "enum": [
              "ACTIVE",
              "DISABLED"
            ]
          },
          "trafficLimitBytes": {
            "type": "number",
            "minimum": 0,
            "description": "Traffic limit in bytes. 0 - unlimited"
          },
          "trafficLimitStrategy": {
            "type": "string",
            "enum": [
              "NO_RESET",
              "DAY",
              "WEEK",
              "MONTH",
              "MONTH_ROLLING"
            ],
            "description": "Traffic limit reset strategy"
          },
          "expireAt": {
            "description": "Expiration date: 2025-01-17T15:38:45.065Z",
            "type": "string",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d))|(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?)$"
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "tag": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 16,
                "pattern": "^[A-Z0-9_]+$"
              },
              {
                "type": "null"
              }
            ]
          },
          "telegramId": {
            "type": [
              "number",
              "null"
            ]
          },
          "email": {
            "anyOf": [
              {
                "type": "string",
                "format": "email",
                "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
              },
              {
                "type": "null"
              }
            ]
          },
          "hwidDeviceLimit": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              {
                "type": "null"
              }
            ]
          },
          "activeInternalSquads": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            }
          },
          "externalSquadUuid": {
            "description": "Optional. External squad UUID.",
            "anyOf": [
              {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      }
    }
  }
}

Responses

Response: default
{
  "description": "Success",
  "content": {
    "application/json": {
      "schema": {
        "type": "object",
        "properties": {
          "response": {
            "type": "object",
            "properties": {
              "id": {
                "type": "number"
              },
              "shortUuid": {
                "type": "string"
              },
              "username": {
                "type": "string"
              },
              "status": {
                "type": "string",
                "enum": [
                  "ACTIVE",
                  "DISABLED",
                  "LIMITED",
                  "EXPIRED"
                ]
              },
              "trafficLimitBytes": {
                "type": "number"
              },
              "trafficLimitStrategy": {
                "type": "string",
                "enum": [
                  "NO_RESET",
                  "DAY",
                  "WEEK",
                  "MONTH",
                  "MONTH_ROLLING"
                ],
                "description": "Available reset periods"
              },
              "expireAt": {},
              "telegramId": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "email": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "email",
                    "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "description": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "tag": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "hwidDeviceLimit": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "externalSquadUuid": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "trojanPassword": {
                "type": "string"
              },
              "vlessUuid": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
              },
              "ssPassword": {
                "type": "string"
              },
              "lastTriggeredThreshold": {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              "subRevokedAt": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "lastTrafficResetAt": {
                "anyOf": [
                  {},
                  {
                    "type": "null"
                  }
                ]
              },
              "createdAt": {},
              "updatedAt": {},
              "subscriptionUrl": {
                "type": "string"
              },
              "activeInternalSquads": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "uuid": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                    },
                    "name": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "uuid",
                    "name"
                  ],
                  "additionalProperties": false
                }
              },
              "userTraffic": {
                "type": "object",
                "properties": {
                  "usedTrafficBytes": {
                    "type": "number"
                  },
                  "lifetimeUsedTrafficBytes": {
                    "type": "number"
                  },
                  "onlineAt": {
                    "anyOf": [
                      {},
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "firstConnectedAt": {
                    "anyOf": [
                      {},
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "lastConnectedNodeUuid": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "usedTrafficBytes",
                  "lifetimeUsedTrafficBytes",
                  "onlineAt",
                  "firstConnectedAt",
                  "lastConnectedNodeUuid"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "id",
              "shortUuid",
              "username",
              "status",
              "trafficLimitBytes",
              "trafficLimitStrategy",
              "expireAt",
              "telegramId",
              "email",
              "description",
              "tag",
              "hwidDeviceLimit",
              "externalSquadUuid",
              "trojanPassword",
              "vlessUuid",
              "ssPassword",
              "lastTriggeredThreshold",
              "subRevokedAt",
              "lastTrafficResetAt",
              "createdAt",
              "updatedAt",
              "subscriptionUrl",
              "activeInternalSquads",
              "userTraffic"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "response"
        ],
        "additionalProperties": false
      }
    }
  }
}

Shared schemas

GoWaveNodeRelease
{
  "type": "object",
  "properties": {
    "tag_name": {
      "type": "string"
    },
    "name": {
      "type": "string"
    },
    "prerelease": {
      "type": "boolean"
    },
    "published_at": {
      "type": "string",
      "format": "date-time"
    },
    "assets": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "digest": {
            "type": "string"
          },
          "browser_download_url": {
            "type": "string"
          },
          "size": {
            "type": "integer"
          }
        }
      }
    }
  }
}