{
  "openapi": "3.1.0",
  "info": {
    "title": "SineBoot API",
    "version": "1.0.0",
    "summary": "Read-only access to a SineBoot customer account.",
    "description": "The SineBoot public REST API. Authentication is a bearer API key created by the account owner in the customer dashboard at /dashboard/account. Keys are scoped; a request without the required scope is rejected with 403 rather than silently returning less data.",
    "contact": {
      "name": "SineBoot Support",
      "email": "support@sineboot.in",
      "url": "https://sineboot.in/support"
    },
    "termsOfService": "https://sineboot.in/terms",
    "license": {
      "name": "Proprietary",
      "url": "https://sineboot.in/terms"
    }
  },
  "servers": [
    {
      "url": "https://sineboot.in/api/v1",
      "description": "Production"
    }
  ],
  "externalDocs": {
    "description": "Developer documentation",
    "url": "https://sineboot.in/developers"
  },
  "security": [
    {
      "apiKey": []
    }
  ],
  "tags": [
    {
      "name": "Services",
      "description": "Hosting services owned by the authenticated account."
    }
  ],
  "paths": {
    "/services": {
      "get": {
        "tags": [
          "Services"
        ],
        "operationId": "listServices",
        "summary": "List the services owned by the authenticated account",
        "description": "Returns every service (VPS, dedicated server, hosting account, domain) belonging to the API key’s owner, newest first. Requires the `services:read` scope.",
        "security": [
          {
            "apiKey": [
              "services:read"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "The account’s services.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "services"
                  ],
                  "properties": {
                    "services": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Service"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "apiKey": {
        "type": "http",
        "scheme": "bearer",
        "description": "An API key issued from the customer dashboard, sent as `Authorization: Bearer <key>`. Available scopes: services:read, invoices:read, domains:read."
      }
    },
    "schemas": {
      "Service": {
        "type": "object",
        "required": [
          "id",
          "productType",
          "status",
          "createdAt"
        ],
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "productType": {
            "type": "string",
            "description": "e.g. cloud_vps, managed_vps, dedicated, shared_hosting, domain."
          },
          "status": {
            "type": "string",
            "description": "e.g. active, suspended, terminated, pending."
          },
          "region": {
            "type": [
              "string",
              "null"
            ]
          },
          "label": {
            "type": [
              "string",
              "null"
            ],
            "description": "Customer-supplied name for the service."
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "Error": {
        "type": "object",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "string",
            "description": "Stable machine-readable error code."
          }
        }
      }
    },
    "responses": {
      "Unauthorized": {
        "description": "Missing or invalid API key (`missing_api_key`, `invalid_api_key`).",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "Forbidden": {
        "description": "The key is valid but lacks the required scope (`insufficient_scope`).",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "RateLimited": {
        "description": "Rate limit exceeded — 120 requests per 60 seconds per key.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      }
    }
  }
}