{
  "openapi": "3.1.0",
  "info": {
    "title": "NoctisNode API",
    "version": "1.0.0",
    "description": "Account, balance top-up, and support-ticket API for NoctisNode — anonymous VPS and dedicated servers. No KYC, crypto-only. Session-cookie auth."
  },
  "servers": [{ "url": "https://noctisnode.com" }],
  "paths": {
    "/api/auth/register": {
      "post": {
        "summary": "Create an account (no email verification)",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "type": "object", "properties": { "email": { "type": "string" }, "password": { "type": "string", "minLength": 8 } }, "required": ["email", "password"] }
            }
          }
        },
        "responses": { "200": { "description": "Account created and session cookie set" } }
      }
    },
    "/api/auth/login": {
      "post": {
        "summary": "Sign in",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "type": "object", "properties": { "email": { "type": "string" }, "password": { "type": "string" } }, "required": ["email", "password"] }
            }
          }
        },
        "responses": { "200": { "description": "Signed in" }, "401": { "description": "Bad credentials" } }
      }
    },
    "/api/auth/logout": {
      "post": {
        "summary": "Sign out",
        "responses": { "200": { "description": "Signed out" } }
      }
    },
    "/api/auth/password": {
      "post": {
        "summary": "Change password",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "type": "object", "properties": { "currentPassword": { "type": "string" }, "newPassword": { "type": "string", "minLength": 8 } }, "required": ["currentPassword", "newPassword"] }
            }
          }
        },
        "responses": { "200": { "description": "Password updated" } }
      }
    },
    "/api/me": {
      "get": {
        "summary": "Current account, balance, deposits and ledger",
        "responses": {
          "200": { "description": "Authenticated account data" },
          "401": { "description": "Not authenticated" }
        }
      }
    },
    "/api/topup": {
      "post": {
        "summary": "Create a deposit (one-time shared wallet address)",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "type": "object", "properties": { "coin": { "type": "string", "enum": ["XMR", "BTC", "LTC", "ETH", "USDT_ETH", "USDT_POL", "USDC_BASE", "USDT_SOL", "SOL", "TRX"] }, "amountCents": { "type": "integer", "minimum": 1000, "maximum": 1000000 } }, "required": ["coin", "amountCents"] }
            }
          }
        },
        "responses": { "200": { "description": "Deposit created with wallet address" }, "503": { "description": "Wallet not configured for coin" } }
      }
    },
    "/api/topup/claim": {
      "post": {
        "summary": "Submit a transaction hash (TXID) to claim a deposit",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "type": "object", "properties": { "depositId": { "type": "string" }, "txid": { "type": "string" } }, "required": ["depositId", "txid"] }
            }
          }
        },
        "responses": { "200": { "description": "TXID recorded, status pending" } }
      }
    },
    "/api/tickets": {
      "get": {
        "summary": "List my support tickets",
        "responses": { "200": { "description": "Tickets" } }
      },
      "post": {
        "summary": "Create a support ticket",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "type": "object", "properties": { "subject": { "type": "string" }, "message": { "type": "string" } }, "required": ["subject", "message"] }
            }
          }
        },
        "responses": { "200": { "description": "Ticket created" } }
      }
    },
    "/api/tickets/{id}/reply": {
      "post": {
        "summary": "Reply to a support ticket",
        "parameters": [{ "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "type": "object", "properties": { "text": { "type": "string" } }, "required": ["text"] }
            }
          }
        },
        "responses": { "200": { "description": "Reply added" } }
      }
    }
  }
}
