{
  "openapi": "3.1.1",
  "info": {
    "title": "Scalar Galaxy",
    "description": "The Scalar Galaxy is an example OpenAPI document to test OpenAPI tools and libraries. It's a fictional universe with fictional planets and fictional data.\n\n## Resources\n\n* https://github.com/scalar/scalar\n* https://github.com/OAI/OpenAPI-Specification\n* https://scalar.com\n\n## Markdown Support\n\nAll descriptions *can* contain ~~tons of text~~ **Markdown**. [If GitHub supports the syntax](https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax), chances are we're supporting it, too.\n\n<details>\n  <summary>Examples</summary>\n\n  **Blockquotes**\n\n  > I love OpenAPI. <3\n\n  **Tables**\n\n  | Feature          | Availability |\n  | ---------------- | ------------ |\n  | Markdown Support | ✓            |\n\n  **Accordion**\n\n  ```html\n  <details>\n    <summary>Using Details Tags</summary>\n    <p>HTML Example</p>\n  </details>\n  ```\n\n  **Images**\n\n  Yes, there's support for images, too!\n\n  ![Empty placeholder image showing the width/height](https://images.placeholders.dev/?width=1280&height=720)\n\n  **Alerts**\n\n  > [!tip]\n  > You can use Markdown alerts in your descriptions.\n\n</details>\n",
    "version": "0.6.2",
    "contact": {
      "name": "Scalar Support",
      "url": "https://scalar.com",
      "email": "support@scalar.com"
    },
    "license": {
      "name": "MIT",
      "url": "https://opensource.org/license/MIT"
    }
  },
  "externalDocs": {
    "description": "Documentation",
    "url": "https://github.com/scalar/scalar"
  },
  "servers": [
    {
      "url": "https://galaxy.scalar.com"
    },
    {
      "url": "{protocol}://void.scalar.com/{path}",
      "description": "Responds with your request data",
      "variables": {
        "protocol": {
          "enum": [
            "https",
            "http"
          ],
          "default": "https"
        },
        "path": {
          "default": ""
        }
      }
    }
  ],
  "security": [
    {
      "bearerAuth": []
    },
    {
      "basicAuth": []
    },
    {
      "apiKeyQuery": []
    },
    {
      "apiKeyHeader": []
    },
    {
      "apiKeyHeader": [],
      "apiKeyQuery": []
    },
    {
      "apiKeyCookie": []
    },
    {
      "oAuth2": []
    },
    {
      "openIdConnect": []
    }
  ],
  "x-speakeasy-webhooks": {
    "security": {
      "type": "signature",
      "headerName": "x-signature",
      "signatureTextEncoding": "base64",
      "algorithm": "hmac-sha256"
    }
  },
  "tags": [
    {
      "name": "Authentication",
      "description": "Some endpoints are public, but some require authentication. We provide all the required endpoints to create an account and authorize yourself."
    },
    {
      "name": "Planets",
      "description": "Everything about planets"
    },
    {
      "name": "Celestial Bodies",
      "description": "Celestial bodies are the planets and satellites in the Scalar Galaxy."
    }
  ],
  "paths": {
    "/planets": {
      "get": {
        "tags": [
          "Planets"
        ],
        "summary": "Get all planets",
        "description": "It's easy to say you know them all, but do you really? Retrieve all the planets and check whether you missed one.",
        "operationId": "getAllData",
        "security": [
          {}
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/limit"
          },
          {
            "$ref": "#/components/parameters/offset"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "X-Pagination-Total": {
                "$ref": "#/components/headers/X-Pagination-Total"
              },
              "X-Pagination-Page": {
                "$ref": "#/components/headers/X-Pagination-Page"
              },
              "X-Pagination-Per-Page": {
                "$ref": "#/components/headers/X-Pagination-Per-Page"
              },
              "X-Cache-Control": {
                "$ref": "#/components/headers/X-Cache-Control"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "type": "object",
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/Planet"
                          }
                        }
                      }
                    },
                    {
                      "$ref": "#/components/schemas/PaginatedResource"
                    }
                  ]
                }
              },
              "application/xml": {
                "schema": {
                  "allOf": [
                    {
                      "type": "object",
                      "xml": {
                        "name": "planets"
                      },
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/Planet"
                          }
                        }
                      }
                    },
                    {
                      "$ref": "#/components/schemas/PaginatedResource"
                    }
                  ]
                }
              }
            }
          }
        },
        "x-post-response": "pm.test(\"Status code is 200\", () => {\n  pm.response.to.have.status(200);\n});\n\npm.test(\"Content-Type header is present\", () => {\n  pm.response.to.have.header(\"Content-Type\");\n});\n\npm.test(\"Response has data array and meta\", () => {\n  const jsonData = pm.response.json();\n  pm.expect(jsonData).to.have.property(\"data\");\n  pm.expect(jsonData.data).to.be.an(\"array\");\n  pm.expect(jsonData).to.have.property(\"meta\");\n});\n",
        "x-codeSamples": [
          {
            "label": "csharp",
            "lang": "csharp",
            "source": "using Scalar.GalaxyCsharp;\n\nvar sdk = new GalaxyCsharp();\n\nvar res = await sdk.Planets.GetAllDataAsync(\n    limit: 10,\n    offset: 0\n);\n\n// handle response"
          },
          {
            "label": "typescript",
            "lang": "typescript",
            "source": "import { GalaxyTypescript } from \"@scalar/galaxy-typescript\";\n\nconst galaxyTypescript = new GalaxyTypescript();\n\nasync function run() {\n  const result = await galaxyTypescript.planets.getAllData({});\n\n  console.log(result);\n}\n\nrun();"
          }
        ]
      },
      "post": {
        "tags": [
          "Planets"
        ],
        "summary": "Create a planet",
        "description": "Time to play god and create a new planet. What do you think? Ah, don't think too much. What could go wrong anyway?",
        "operationId": "createPlanet",
        "callbacks": {
          "planetCreated": {
            "{$request.body#/successCallbackUrl}": {
              "post": {
                "requestBody": {
                  "description": "Information about the newly created planet",
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/Planet"
                      }
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "Your server returns this code if it accepts the callback"
                  },
                  "204": {
                    "description": "Your server should return this HTTP status code if no longer interested in further updates"
                  }
                }
              }
            }
          },
          "planetCreationFailed": {
            "{$request.body#/failureCallbackUrl}": {
              "post": {
                "requestBody": {
                  "description": "Information about which fields failed to validate",
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/Planet"
                      }
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "Your server returns this code if it accepts the failure callback notification"
                  }
                }
              }
            }
          },
          "planetExploded": {
            "{$request.body#/successCallbackUrl}": {
              "post": {
                "requestBody": {
                  "description": "Information about the newly exploded planet",
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/Planet"
                      }
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "Your server returns this code if it accepts the planet explosion callback notification"
                  }
                }
              }
            }
          }
        },
        "requestBody": {
          "description": "Planet",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Planet"
              }
            },
            "application/xml": {
              "schema": {
                "$ref": "#/components/schemas/Planet"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-Processing-Time": {
                "$ref": "#/components/headers/X-Processing-Time"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Planet"
                }
              },
              "application/xml": {
                "schema": {
                  "$ref": "#/components/schemas/Planet"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-post-response": "pm.test(\"Status code is 201\", () => {\n  pm.response.to.have.status(201);\n});\n\npm.test(\"Content-Type header is present\", () => {\n  pm.response.to.have.header(\"Content-Type\");\n});\n\npm.test(\"Response is a planet with id and name\", () => {\n  const jsonData = pm.response.json();\n  pm.expect(jsonData).to.have.property(\"id\");\n  pm.expect(jsonData).to.have.property(\"name\");\n});\n",
        "x-codeSamples": [
          {
            "label": "csharp",
            "lang": "csharp",
            "source": "using Scalar.GalaxyCsharp;\nusing Scalar.GalaxyCsharp.Models.Components;\nusing System;\nusing System.Collections.Generic;\n\nvar sdk = new GalaxyCsharp();\n\nPlanetInput req = new PlanetInput() {\n    Name = \"Mars\",\n    Description = \"The red planet\",\n    Type = Scalar.GalaxyCsharp.Models.Components.Type.Terrestrial,\n    HabitabilityIndex = 0.68F,\n    PhysicalProperties = new PhysicalProperties() {\n        Mass = 0.107F,\n        Radius = 0.532F,\n        Gravity = 0.378F,\n        Temperature = new Temperature() {\n            Min = 130F,\n            Max = 308F,\n            Average = 210F,\n        },\n    },\n    Atmosphere = new List<Atmosphere>() {\n        new Atmosphere() {\n            Compound = \"CO2\",\n            Percentage = 95.3F,\n        },\n    },\n    DiscoveredAt = System.DateTime.Parse(\"1610-01-07T00:00:00Z\"),\n    Image = \"https://cdn.scalar.com/photos/mars.jpg\",\n    Satellites = new List<SatelliteInput>() {\n        new SatelliteInput() {\n            Name = \"Phobos\",\n            Description = \"Phobos is the larger and innermost of the two moons of Mars.\",\n            Diameter = 22.2F,\n            Type = SatelliteType.Moon,\n            Orbit = new Orbit() {\n                Planet = new Planet() {\n                    Id = 1,\n                    Name = \"Mars\",\n                    Description = \"The red planet\",\n                    Type = Scalar.GalaxyCsharp.Models.Components.Type.Terrestrial,\n                    HabitabilityIndex = 0.68F,\n                    PhysicalProperties = new PhysicalProperties() {\n                        Mass = 0.107F,\n                        Radius = 0.532F,\n                        Gravity = 0.378F,\n                        Temperature = new Temperature() {\n                            Min = 130F,\n                            Max = 308F,\n                            Average = 210F,\n                        },\n                    },\n                    Atmosphere = new List<Atmosphere>() {\n                        new Atmosphere() {\n                            Compound = \"CO2\",\n                            Percentage = 95.3F,\n                        },\n                    },\n                    DiscoveredAt = System.DateTime.Parse(\"1610-01-07T00:00:00Z\"),\n                    Image = \"https://cdn.scalar.com/photos/mars.jpg\",\n                    Satellites = new List<Satellite>() {\n                        new Satellite() {\n                            Id = 1,\n                            Name = \"Phobos\",\n                            Description = \"Phobos is the larger and innermost of the two moons of Mars.\",\n                            Diameter = 22.2F,\n                            Type = SatelliteType.Moon,\n                            Orbit = new Orbit() {\n                                Planet = new Planet() {\n                                    Id = 1,\n                                    Name = \"Mars\",\n                                    Description = \"The red planet\",\n                                    Type = Scalar.GalaxyCsharp.Models.Components.Type.Terrestrial,\n                                    HabitabilityIndex = 0.68F,\n                                    PhysicalProperties = new PhysicalProperties() {\n                                        Mass = 0.107F,\n                                        Radius = 0.532F,\n                                        Gravity = 0.378F,\n                                        Temperature = new Temperature() {\n                                            Min = 130F,\n                                            Max = 308F,\n                                            Average = 210F,\n                                        },\n                                    },\n                                    Atmosphere = new List<Atmosphere>() {\n                                        new Atmosphere() {\n                                            Compound = \"CO2\",\n                                            Percentage = 95.3F,\n                                        },\n                                    },\n                                    DiscoveredAt = System.DateTime.Parse(\"1610-01-07T00:00:00Z\"),\n                                    Image = \"https://cdn.scalar.com/photos/mars.jpg\",\n                                    Creator = new User() {\n                                        Id = 1,\n                                        Name = \"Marc\",\n                                    },\n                                    Tags = new List<string>() {\n                                        \"solar-system\",\n                                        \"rocky\",\n                                        \"explored\",\n                                    },\n                                    LastUpdated = System.DateTime.Parse(\"2024-01-15T14:30:00Z\"),\n                                    SuccessCallbackUrl = \"https://example.com/webhook\",\n                                    FailureCallbackUrl = \"https://example.com/webhook\",\n                                },\n                                OrbitalPeriod = 0.319F,\n                                Distance = 9376F,\n                            },\n                        },\n                    },\n                    Creator = new User() {\n                        Id = 1,\n                        Name = \"Marc\",\n                    },\n                    Tags = new List<string>() {\n                        \"solar-system\",\n                        \"rocky\",\n                        \"explored\",\n                    },\n                    LastUpdated = System.DateTime.Parse(\"2024-01-15T14:30:00Z\"),\n                    SuccessCallbackUrl = \"https://example.com/webhook\",\n                    FailureCallbackUrl = \"https://example.com/webhook\",\n                },\n                OrbitalPeriod = 0.319F,\n                Distance = 9376F,\n            },\n        },\n    },\n    Creator = new UserInput() {\n        Name = \"Marc\",\n    },\n    Tags = new List<string>() {\n        \"solar-system\",\n        \"rocky\",\n        \"explored\",\n    },\n    SuccessCallbackUrl = \"https://example.com/webhook\",\n    FailureCallbackUrl = \"https://example.com/webhook\",\n};\n\nvar res = await sdk.Planets.CreatePlanetJsonAsync(req);\n\n// handle response"
          },
          {
            "label": "typescript",
            "lang": "typescript",
            "source": "import { GalaxyTypescript } from \"@scalar/galaxy-typescript\";\n\nconst galaxyTypescript = new GalaxyTypescript();\n\nasync function run() {\n  const result = await galaxyTypescript.planets.createPlanetJson({\n    name: \"Mars\",\n    description: \"The red planet\",\n    type: \"terrestrial\",\n    habitabilityIndex: 0.68,\n    physicalProperties: {\n      mass: 0.107,\n      radius: 0.532,\n      gravity: 0.378,\n      temperature: {\n        min: 130,\n        max: 308,\n        average: 210,\n      },\n    },\n    atmosphere: [\n      {\n        compound: \"CO2\",\n        percentage: 95.3,\n      },\n    ],\n    discoveredAt: new Date(\"1610-01-07T00:00:00Z\"),\n    image: \"https://cdn.scalar.com/photos/mars.jpg\",\n    satellites: [\n      {\n        name: \"Phobos\",\n        description: \"Phobos is the larger and innermost of the two moons of Mars.\",\n        diameter: 22.2,\n        type: \"moon\",\n        orbit: {\n          planet: {\n            id: 1,\n            name: \"Mars\",\n            description: \"The red planet\",\n            type: \"terrestrial\",\n            habitabilityIndex: 0.68,\n            physicalProperties: {\n              mass: 0.107,\n              radius: 0.532,\n              gravity: 0.378,\n              temperature: {\n                min: 130,\n                max: 308,\n                average: 210,\n              },\n            },\n            atmosphere: [\n              {\n                compound: \"CO2\",\n                percentage: 95.3,\n              },\n            ],\n            discoveredAt: new Date(\"1610-01-07T00:00:00Z\"),\n            image: \"https://cdn.scalar.com/photos/mars.jpg\",\n            satellites: [\n              {\n                id: 1,\n                name: \"Phobos\",\n                description: \"Phobos is the larger and innermost of the two moons of Mars.\",\n                diameter: 22.2,\n                type: \"moon\",\n                orbit: {\n                  planet: {\n                    id: 1,\n                    name: \"Mars\",\n                    description: \"The red planet\",\n                    type: \"terrestrial\",\n                    habitabilityIndex: 0.68,\n                    physicalProperties: {\n                      mass: 0.107,\n                      radius: 0.532,\n                      gravity: 0.378,\n                      temperature: {\n                        min: 130,\n                        max: 308,\n                        average: 210,\n                      },\n                    },\n                    atmosphere: [\n                      {\n                        compound: \"CO2\",\n                        percentage: 95.3,\n                      },\n                    ],\n                    discoveredAt: new Date(\"1610-01-07T00:00:00Z\"),\n                    image: \"https://cdn.scalar.com/photos/mars.jpg\",\n                    creator: {\n                      id: 1,\n                      name: \"Marc\",\n                    },\n                    tags: [\n                      \"solar-system\",\n                      \"rocky\",\n                      \"explored\",\n                    ],\n                    lastUpdated: new Date(\"2024-01-15T14:30:00Z\"),\n                    successCallbackUrl: \"https://example.com/webhook\",\n                    failureCallbackUrl: \"https://example.com/webhook\",\n                  },\n                  orbitalPeriod: 0.319,\n                  distance: 9376,\n                },\n              },\n            ],\n            creator: {\n              id: 1,\n              name: \"Marc\",\n            },\n            tags: [\n              \"solar-system\",\n              \"rocky\",\n              \"explored\",\n            ],\n            lastUpdated: new Date(\"2024-01-15T14:30:00Z\"),\n            successCallbackUrl: \"https://example.com/webhook\",\n            failureCallbackUrl: \"https://example.com/webhook\",\n          },\n          orbitalPeriod: 0.319,\n          distance: 9376,\n        },\n      },\n    ],\n    creator: {\n      name: \"Marc\",\n    },\n    tags: [\n      \"solar-system\",\n      \"rocky\",\n      \"explored\",\n    ],\n    successCallbackUrl: \"https://example.com/webhook\",\n    failureCallbackUrl: \"https://example.com/webhook\",\n  });\n\n  console.log(result);\n}\n\nrun();"
          }
        ]
      }
    },
    "/planets/{planetId}": {
      "get": {
        "tags": [
          "Planets"
        ],
        "summary": "Get a planet",
        "description": "You'll better learn a little bit more about the planets. It might come in handy once space travel is available for everyone.",
        "operationId": "getPlanet",
        "security": [
          {}
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/planetId"
          }
        ],
        "responses": {
          "200": {
            "description": "Planet Found",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "ETag": {
                "$ref": "#/components/headers/ETag"
              },
              "Last-Modified": {
                "$ref": "#/components/headers/Last-Modified"
              },
              "X-Cache-Control": {
                "$ref": "#/components/headers/X-Cache-Control"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Planet"
                }
              },
              "application/xml": {
                "schema": {
                  "$ref": "#/components/schemas/Planet"
                }
              }
            }
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-post-response": "pm.test(\"Status code is 200\", () => {\n  pm.response.to.have.status(200);\n});\n\npm.test(\"Content-Type header is present\", () => {\n  pm.response.to.have.header(\"Content-Type\");\n});\n\npm.test(\"Response is a planet with id and name\", () => {\n  const jsonData = pm.response.json();\n  pm.expect(jsonData).to.have.property(\"id\");\n  pm.expect(jsonData).to.have.property(\"name\");\n});\n",
        "x-codeSamples": [
          {
            "label": "csharp",
            "lang": "csharp",
            "source": "using Scalar.GalaxyCsharp;\n\nvar sdk = new GalaxyCsharp();\n\nvar res = await sdk.Planets.GetPlanetAsync(planetId: 1);\n\n// handle response"
          },
          {
            "label": "typescript",
            "lang": "typescript",
            "source": "import { GalaxyTypescript } from \"@scalar/galaxy-typescript\";\n\nconst galaxyTypescript = new GalaxyTypescript();\n\nasync function run() {\n  const result = await galaxyTypescript.planets.getPlanet({\n    planetId: 1,\n  });\n\n  console.log(result);\n}\n\nrun();"
          }
        ]
      },
      "put": {
        "tags": [
          "Planets"
        ],
        "summary": "Update a planet",
        "description": "Sometimes you make mistakes, that's fine. No worries, you can update all planets.",
        "operationId": "updatePlanet",
        "requestBody": {
          "description": "New information about the planet",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Planet"
              }
            },
            "application/xml": {
              "schema": {
                "$ref": "#/components/schemas/Planet"
              }
            }
          }
        },
        "parameters": [
          {
            "$ref": "#/components/parameters/planetId"
          }
        ],
        "responses": {
          "200": {
            "description": "Planet updated successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Planet"
                }
              },
              "application/xml": {
                "schema": {
                  "$ref": "#/components/schemas/Planet"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-post-response": "pm.test(\"Status code is 200\", () => {\n  pm.response.to.have.status(200);\n});\n\npm.test(\"Content-Type header is present\", () => {\n  pm.response.to.have.header(\"Content-Type\");\n});\n\npm.test(\"Response is a planet with id and name\", () => {\n  const jsonData = pm.response.json();\n  pm.expect(jsonData).to.have.property(\"id\");\n  pm.expect(jsonData).to.have.property(\"name\");\n});\n",
        "x-codeSamples": [
          {
            "label": "csharp",
            "lang": "csharp",
            "source": "using Scalar.GalaxyCsharp;\nusing Scalar.GalaxyCsharp.Models.Components;\nusing System;\nusing System.Collections.Generic;\n\nvar sdk = new GalaxyCsharp();\n\nvar res = await sdk.Planets.UpdatePlanetJsonAsync(\n    planetId: 1,\n    planet: new PlanetInput() {\n        Name = \"Mars\",\n        Description = \"The red planet\",\n        Type = Scalar.GalaxyCsharp.Models.Components.Type.Terrestrial,\n        HabitabilityIndex = 0.68F,\n        PhysicalProperties = new PhysicalProperties() {\n            Mass = 0.107F,\n            Radius = 0.532F,\n            Gravity = 0.378F,\n            Temperature = new Temperature() {\n                Min = 130F,\n                Max = 308F,\n                Average = 210F,\n            },\n        },\n        Atmosphere = new List<Atmosphere>() {\n            new Atmosphere() {\n                Compound = \"CO2\",\n                Percentage = 95.3F,\n            },\n        },\n        DiscoveredAt = System.DateTime.Parse(\"1610-01-07T00:00:00Z\"),\n        Image = \"https://cdn.scalar.com/photos/mars.jpg\",\n        Satellites = new List<SatelliteInput>() {\n            new SatelliteInput() {\n                Name = \"Phobos\",\n                Description = \"Phobos is the larger and innermost of the two moons of Mars.\",\n                Diameter = 22.2F,\n                Type = SatelliteType.Moon,\n                Orbit = new Orbit() {\n                    Planet = new Planet() {\n                        Id = 1,\n                        Name = \"Mars\",\n                        Description = \"The red planet\",\n                        Type = Scalar.GalaxyCsharp.Models.Components.Type.Terrestrial,\n                        HabitabilityIndex = 0.68F,\n                        PhysicalProperties = new PhysicalProperties() {\n                            Mass = 0.107F,\n                            Radius = 0.532F,\n                            Gravity = 0.378F,\n                            Temperature = new Temperature() {\n                                Min = 130F,\n                                Max = 308F,\n                                Average = 210F,\n                            },\n                        },\n                        Atmosphere = new List<Atmosphere>() {\n                            new Atmosphere() {\n                                Compound = \"CO2\",\n                                Percentage = 95.3F,\n                            },\n                        },\n                        DiscoveredAt = System.DateTime.Parse(\"1610-01-07T00:00:00Z\"),\n                        Image = \"https://cdn.scalar.com/photos/mars.jpg\",\n                        Satellites = new List<Satellite>() {\n                            new Satellite() {\n                                Id = 1,\n                                Name = \"Phobos\",\n                                Description = \"Phobos is the larger and innermost of the two moons of Mars.\",\n                                Diameter = 22.2F,\n                                Type = SatelliteType.Moon,\n                                Orbit = new Orbit() {\n                                    Planet = new Planet() {\n                                        Id = 1,\n                                        Name = \"Mars\",\n                                        Description = \"The red planet\",\n                                        Type = Scalar.GalaxyCsharp.Models.Components.Type.Terrestrial,\n                                        HabitabilityIndex = 0.68F,\n                                        PhysicalProperties = new PhysicalProperties() {\n                                            Mass = 0.107F,\n                                            Radius = 0.532F,\n                                            Gravity = 0.378F,\n                                            Temperature = new Temperature() {\n                                                Min = 130F,\n                                                Max = 308F,\n                                                Average = 210F,\n                                            },\n                                        },\n                                        Atmosphere = new List<Atmosphere>() {\n                                            new Atmosphere() {\n                                                Compound = \"CO2\",\n                                                Percentage = 95.3F,\n                                            },\n                                        },\n                                        DiscoveredAt = System.DateTime.Parse(\"1610-01-07T00:00:00Z\"),\n                                        Image = \"https://cdn.scalar.com/photos/mars.jpg\",\n                                        Creator = new User() {\n                                            Id = 1,\n                                            Name = \"Marc\",\n                                        },\n                                        Tags = new List<string>() {\n                                            \"solar-system\",\n                                            \"rocky\",\n                                            \"explored\",\n                                        },\n                                        LastUpdated = System.DateTime.Parse(\"2024-01-15T14:30:00Z\"),\n                                        SuccessCallbackUrl = \"https://example.com/webhook\",\n                                        FailureCallbackUrl = \"https://example.com/webhook\",\n                                    },\n                                    OrbitalPeriod = 0.319F,\n                                    Distance = 9376F,\n                                },\n                            },\n                        },\n                        Creator = new User() {\n                            Id = 1,\n                            Name = \"Marc\",\n                        },\n                        Tags = new List<string>() {\n                            \"solar-system\",\n                            \"rocky\",\n                            \"explored\",\n                        },\n                        LastUpdated = System.DateTime.Parse(\"2024-01-15T14:30:00Z\"),\n                        SuccessCallbackUrl = \"https://example.com/webhook\",\n                        FailureCallbackUrl = \"https://example.com/webhook\",\n                    },\n                    OrbitalPeriod = 0.319F,\n                    Distance = 9376F,\n                },\n            },\n        },\n        Creator = new UserInput() {\n            Name = \"Marc\",\n        },\n        Tags = new List<string>() {\n            \"solar-system\",\n            \"rocky\",\n            \"explored\",\n        },\n        SuccessCallbackUrl = \"https://example.com/webhook\",\n        FailureCallbackUrl = \"https://example.com/webhook\",\n    }\n);\n\n// handle response"
          },
          {
            "label": "typescript",
            "lang": "typescript",
            "source": "import { GalaxyTypescript } from \"@scalar/galaxy-typescript\";\n\nconst galaxyTypescript = new GalaxyTypescript();\n\nasync function run() {\n  const result = await galaxyTypescript.planets.updatePlanetJson({\n    planetId: 1,\n    planet: {\n      name: \"Mars\",\n      description: \"The red planet\",\n      type: \"terrestrial\",\n      habitabilityIndex: 0.68,\n      physicalProperties: {\n        mass: 0.107,\n        radius: 0.532,\n        gravity: 0.378,\n        temperature: {\n          min: 130,\n          max: 308,\n          average: 210,\n        },\n      },\n      atmosphere: [\n        {\n          compound: \"CO2\",\n          percentage: 95.3,\n        },\n      ],\n      discoveredAt: new Date(\"1610-01-07T00:00:00Z\"),\n      image: \"https://cdn.scalar.com/photos/mars.jpg\",\n      satellites: [\n        {\n          name: \"Phobos\",\n          description: \"Phobos is the larger and innermost of the two moons of Mars.\",\n          diameter: 22.2,\n          type: \"moon\",\n          orbit: {\n            planet: {\n              id: 1,\n              name: \"Mars\",\n              description: \"The red planet\",\n              type: \"terrestrial\",\n              habitabilityIndex: 0.68,\n              physicalProperties: {\n                mass: 0.107,\n                radius: 0.532,\n                gravity: 0.378,\n                temperature: {\n                  min: 130,\n                  max: 308,\n                  average: 210,\n                },\n              },\n              atmosphere: [\n                {\n                  compound: \"CO2\",\n                  percentage: 95.3,\n                },\n              ],\n              discoveredAt: new Date(\"1610-01-07T00:00:00Z\"),\n              image: \"https://cdn.scalar.com/photos/mars.jpg\",\n              satellites: [\n                {\n                  id: 1,\n                  name: \"Phobos\",\n                  description: \"Phobos is the larger and innermost of the two moons of Mars.\",\n                  diameter: 22.2,\n                  type: \"moon\",\n                  orbit: {\n                    planet: {\n                      id: 1,\n                      name: \"Mars\",\n                      description: \"The red planet\",\n                      type: \"terrestrial\",\n                      habitabilityIndex: 0.68,\n                      physicalProperties: {\n                        mass: 0.107,\n                        radius: 0.532,\n                        gravity: 0.378,\n                        temperature: {\n                          min: 130,\n                          max: 308,\n                          average: 210,\n                        },\n                      },\n                      atmosphere: [\n                        {\n                          compound: \"CO2\",\n                          percentage: 95.3,\n                        },\n                      ],\n                      discoveredAt: new Date(\"1610-01-07T00:00:00Z\"),\n                      image: \"https://cdn.scalar.com/photos/mars.jpg\",\n                      creator: {\n                        id: 1,\n                        name: \"Marc\",\n                      },\n                      tags: [\n                        \"solar-system\",\n                        \"rocky\",\n                        \"explored\",\n                      ],\n                      lastUpdated: new Date(\"2024-01-15T14:30:00Z\"),\n                      successCallbackUrl: \"https://example.com/webhook\",\n                      failureCallbackUrl: \"https://example.com/webhook\",\n                    },\n                    orbitalPeriod: 0.319,\n                    distance: 9376,\n                  },\n                },\n              ],\n              creator: {\n                id: 1,\n                name: \"Marc\",\n              },\n              tags: [\n                \"solar-system\",\n                \"rocky\",\n                \"explored\",\n              ],\n              lastUpdated: new Date(\"2024-01-15T14:30:00Z\"),\n              successCallbackUrl: \"https://example.com/webhook\",\n              failureCallbackUrl: \"https://example.com/webhook\",\n            },\n            orbitalPeriod: 0.319,\n            distance: 9376,\n          },\n        },\n      ],\n      creator: {\n        name: \"Marc\",\n      },\n      tags: [\n        \"solar-system\",\n        \"rocky\",\n        \"explored\",\n      ],\n      successCallbackUrl: \"https://example.com/webhook\",\n      failureCallbackUrl: \"https://example.com/webhook\",\n    },\n  });\n\n  console.log(result);\n}\n\nrun();"
          }
        ]
      },
      "delete": {
        "tags": [
          "Planets"
        ],
        "summary": "Delete a planet",
        "operationId": "deletePlanet",
        "description": "This endpoint was used to delete planets. Unfortunately, that caused a lot of trouble for planets with life. So, this endpoint is now deprecated and should not be used anymore.",
        "x-scalar-stability": "experimental",
        "parameters": [
          {
            "$ref": "#/components/parameters/planetId"
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-post-response": "pm.test(\"Status code is 204\", () => {\n  pm.response.to.have.status(204);\n});\n",
        "x-codeSamples": [
          {
            "label": "csharp",
            "lang": "csharp",
            "source": "using Scalar.GalaxyCsharp;\n\nvar sdk = new GalaxyCsharp();\n\nvar res = await sdk.Planets.DeletePlanetAsync(planetId: 1);\n\n// handle response"
          },
          {
            "label": "typescript",
            "lang": "typescript",
            "source": "import { GalaxyTypescript } from \"@scalar/galaxy-typescript\";\n\nconst galaxyTypescript = new GalaxyTypescript();\n\nasync function run() {\n  await galaxyTypescript.planets.deletePlanet({\n    planetId: 1,\n  });\n\n\n}\n\nrun();"
          }
        ]
      }
    },
    "/planets/{planetId}/image": {
      "post": {
        "tags": [
          "Planets"
        ],
        "summary": "Upload an image to a planet",
        "description": "Got a crazy good photo of a planet? Share it with the world!",
        "operationId": "uploadImage",
        "parameters": [
          {
            "$ref": "#/components/parameters/planetId"
          }
        ],
        "requestBody": {
          "description": "Image to upload",
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "image": {
                    "type": "string",
                    "format": "binary",
                    "description": "The image file to upload",
                    "examples": [
                      "@mars.jpg",
                      "@jupiter.png"
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/ImageUploaded"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-post-response": "pm.test(\"Status code is 200\", () => {\n  pm.response.to.have.status(200);\n});\n\npm.test(\"Content-Type header is present\", () => {\n  pm.response.to.have.header(\"Content-Type\");\n});\n\npm.test(\"Response has message and imageUrl\", () => {\n  const jsonData = pm.response.json();\n  pm.expect(jsonData).to.have.property(\"message\");\n  pm.expect(jsonData).to.have.property(\"imageUrl\");\n});\n",
        "x-codeSamples": [
          {
            "label": "csharp",
            "lang": "csharp",
            "source": "using Scalar.GalaxyCsharp;\nusing Scalar.GalaxyCsharp.Models.Requests;\nusing System.IO;\n\nvar sdk = new GalaxyCsharp();\n\nvar res = await sdk.Planets.UploadImageAsync(\n    planetId: 1,\n    requestBody: new UploadImageRequestBody() {\n        Image = new Image() {\n            FileName = \"example.file\",\n            Content = File.ReadAllBytes(\"example.file\"),\n        },\n    }\n);\n\n// handle response"
          },
          {
            "label": "typescript",
            "lang": "typescript",
            "source": "import { GalaxyTypescript } from \"@scalar/galaxy-typescript\";\nimport { openAsBlob } from \"node:fs\";\n\nconst galaxyTypescript = new GalaxyTypescript();\n\nasync function run() {\n  const result = await galaxyTypescript.planets.uploadImage({\n    planetId: 1,\n    requestBody: {\n      image: await openAsBlob(\"example.file\"),\n    },\n  });\n\n  console.log(result);\n}\n\nrun();"
          }
        ]
      }
    },
    "/celestial-bodies": {
      "post": {
        "tags": [
          "Celestial Bodies"
        ],
        "summary": "Create a celestial body",
        "operationId": "createCelestialBody",
        "requestBody": {
          "description": "Celestial body to create",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CelestialBody"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Celestial body created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CelestialBody"
                }
              }
            }
          }
        },
        "x-post-response": "pm.test(\"Status code is 201\", () => {\n  pm.response.to.have.status(201);\n});\n\npm.test(\"Content-Type header is present\", () => {\n  pm.response.to.have.header(\"Content-Type\");\n});\n\npm.test(\"Response is a celestial body with id and name\", () => {\n  const jsonData = pm.response.json();\n  pm.expect(jsonData).to.have.property(\"id\");\n  pm.expect(jsonData).to.have.property(\"name\");\n});\n",
        "x-codeSamples": [
          {
            "label": "csharp",
            "lang": "csharp",
            "source": "using Scalar.GalaxyCsharp;\nusing Scalar.GalaxyCsharp.Models.Components;\n\nvar sdk = new GalaxyCsharp();\n\nCelestialBodyInput req = CelestialBodyInput.CreateMoon(\n    new SatelliteInput1() {\n        Name = \"Phobos\",\n        Type = SatelliteType.Moon,\n    }\n);\n\nvar res = await sdk.CelestialBodies.CreateCelestialBodyAsync(req);\n\n// handle response"
          },
          {
            "label": "typescript",
            "lang": "typescript",
            "source": "import { GalaxyTypescript } from \"@scalar/galaxy-typescript\";\n\nconst galaxyTypescript = new GalaxyTypescript();\n\nasync function run() {\n  const result = await galaxyTypescript.celestialBodies.createCelestialBody({\n    name: \"Phobos\",\n    type: \"moon\",\n  });\n\n  console.log(result);\n}\n\nrun();"
          }
        ]
      }
    },
    "/user/signup": {
      "post": {
        "tags": [
          "Authentication"
        ],
        "summary": "Create a user",
        "description": "Time to create a user account, eh?",
        "operationId": "createUser",
        "security": [
          {}
        ],
        "requestBody": {
          "description": "User to create",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/User"
                  },
                  {
                    "$ref": "#/components/schemas/Credentials"
                  }
                ]
              },
              "examples": {
                "Marc": {
                  "value": {
                    "name": "Marc",
                    "email": "marc@scalar.com",
                    "password": "i-love-scalar"
                  }
                },
                "Cam": {
                  "value": {
                    "name": "Cam",
                    "email": "cam@scalar.com",
                    "password": "scalar-is-cool"
                  }
                },
                "Hans": {
                  "value": {
                    "name": "Hans",
                    "email": "hans@scalar.com",
                    "password": "5c4l4r"
                  }
                }
              }
            },
            "application/xml": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/User"
                  },
                  {
                    "$ref": "#/components/schemas/Credentials"
                  }
                ]
              },
              "examples": {
                "Marc": {
                  "value": {
                    "name": "Marc",
                    "email": "marc@scalar.com",
                    "password": "i-love-scalar"
                  }
                },
                "Cam": {
                  "value": {
                    "name": "Cam",
                    "email": "cam@scalar.com",
                    "password": "scalar-is-cool"
                  }
                },
                "Hans": {
                  "value": {
                    "name": "Hans",
                    "email": "hans@scalar.com",
                    "password": "5c4l4r"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "User account created successfully",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-Processing-Time": {
                "$ref": "#/components/headers/X-Processing-Time"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/User"
                }
              },
              "application/xml": {
                "schema": {
                  "$ref": "#/components/schemas/User"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/UnprocessableEntity"
          }
        },
        "x-post-response": "pm.test(\"Status code is 201\", () => {\n  pm.response.to.have.status(201);\n});\n\npm.test(\"Content-Type header is present\", () => {\n  pm.response.to.have.header(\"Content-Type\");\n});\n\npm.test(\"Response is a user with id and name\", () => {\n  const jsonData = pm.response.json();\n  pm.expect(jsonData).to.have.property(\"id\");\n  pm.expect(jsonData).to.have.property(\"name\");\n});\n",
        "x-codeSamples": [
          {
            "label": "csharp",
            "lang": "csharp",
            "source": "using Scalar.GalaxyCsharp;\nusing Scalar.GalaxyCsharp.Models.Requests;\n\nvar sdk = new GalaxyCsharp();\n\nCreateUserJsonRequestBody req = new CreateUserJsonRequestBody() {\n    Name = \"Marc\",\n    Email = \"marc@scalar.com\",\n    Password = \"i-love-scalar\",\n};\n\nvar res = await sdk.Authentication.CreateUserJsonAsync(req);\n\n// handle response"
          },
          {
            "label": "typescript",
            "lang": "typescript",
            "source": "import { GalaxyTypescript } from \"@scalar/galaxy-typescript\";\n\nconst galaxyTypescript = new GalaxyTypescript();\n\nasync function run() {\n  const result = await galaxyTypescript.authentication.createUserJson({\n    name: \"Marc\",\n    email: \"marc@scalar.com\",\n    password: \"i-love-scalar\",\n  });\n\n  console.log(result);\n}\n\nrun();"
          }
        ]
      }
    },
    "/auth/token": {
      "post": {
        "tags": [
          "Authentication"
        ],
        "summary": "Get a token",
        "description": "Yeah, this is the boring security stuff. Just get your super secret token and move on.",
        "operationId": "getToken",
        "security": [
          {}
        ],
        "requestBody": {
          "description": "Body for credentials to authenticate a user",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Credentials"
              }
            },
            "application/xml": {
              "schema": {
                "$ref": "#/components/schemas/Credentials"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Token Created",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              },
              "X-RateLimit-Reset": {
                "$ref": "#/components/headers/X-RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Token"
                }
              },
              "application/xml": {
                "schema": {
                  "$ref": "#/components/schemas/Token"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-post-response": "pm.test(\"Status code is 201\", () => {\n  pm.response.to.have.status(201);\n});\n\npm.test(\"Content-Type header is present\", () => {\n  pm.response.to.have.header(\"Content-Type\");\n});\n\npm.test(\"Response contains token\", () => {\n  const jsonData = pm.response.json();\n  pm.expect(jsonData).to.have.property(\"token\");\n  pm.expect(jsonData.token).to.be.an(\"string\");\n});\n",
        "x-codeSamples": [
          {
            "label": "csharp",
            "lang": "csharp",
            "source": "using Scalar.GalaxyCsharp;\nusing Scalar.GalaxyCsharp.Models.Components;\n\nvar sdk = new GalaxyCsharp();\n\nCredentials req = new Credentials() {\n    Email = \"marc@scalar.com\",\n    Password = \"i-love-scalar\",\n};\n\nvar res = await sdk.Authentication.GetTokenJsonAsync(req);\n\n// handle response"
          },
          {
            "label": "typescript",
            "lang": "typescript",
            "source": "import { GalaxyTypescript } from \"@scalar/galaxy-typescript\";\n\nconst galaxyTypescript = new GalaxyTypescript();\n\nasync function run() {\n  const result = await galaxyTypescript.authentication.getTokenJson({\n    email: \"marc@scalar.com\",\n    password: \"i-love-scalar\",\n  });\n\n  console.log(result);\n}\n\nrun();"
          }
        ]
      }
    },
    "/me": {
      "get": {
        "tags": [
          "Authentication"
        ],
        "summary": "Get authenticated user",
        "description": "Find yourself they say. That's what you can do here.",
        "operationId": "getMe",
        "security": [
          {
            "basicAuth": []
          },
          {
            "oAuth2": [
              "read:account"
            ]
          },
          {
            "bearerAuth": []
          },
          {
            "apiKeyHeader": []
          },
          {
            "apiKeyQuery": []
          },
          {
            "apiKeyHeader": [],
            "apiKeyQuery": []
          }
        ],
        "responses": {
          "200": {
            "description": "Authenticated user information retrieved successfully",
            "headers": {
              "X-Request-ID": {
                "$ref": "#/components/headers/X-Request-ID"
              },
              "ETag": {
                "$ref": "#/components/headers/ETag"
              },
              "Last-Modified": {
                "$ref": "#/components/headers/Last-Modified"
              },
              "X-Cache-Control": {
                "$ref": "#/components/headers/X-Cache-Control"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/User"
                }
              },
              "application/xml": {
                "schema": {
                  "$ref": "#/components/schemas/User"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-post-response": "pm.test(\"Status code is 200\", () => {\n  pm.response.to.have.status(200);\n});\n\npm.test(\"Content-Type header is present\", () => {\n  pm.response.to.have.header(\"Content-Type\");\n});\n\npm.test(\"Response is a user with id and name\", () => {\n  const jsonData = pm.response.json();\n  pm.expect(jsonData).to.have.property(\"id\");\n  pm.expect(jsonData).to.have.property(\"name\");\n});\n",
        "x-codeSamples": [
          {
            "label": "csharp",
            "lang": "csharp",
            "source": "using Scalar.GalaxyCsharp;\n\nvar sdk = new GalaxyCsharp();\n\nvar res = await sdk.Authentication.GetMeAsync();\n\n// handle response"
          },
          {
            "label": "typescript",
            "lang": "typescript",
            "source": "import { GalaxyTypescript } from \"@scalar/galaxy-typescript\";\n\nconst galaxyTypescript = new GalaxyTypescript();\n\nasync function run() {\n  const result = await galaxyTypescript.authentication.getMe();\n\n  console.log(result);\n}\n\nrun();"
          }
        ]
      }
    }
  },
  "webhooks": {
    "newPlanet": {
      "post": {
        "tags": [
          "Planets"
        ],
        "requestBody": {
          "description": "Information about a new planet",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Planet"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return a 200 status to indicate that the data was received successfully"
          }
        },
        "x-post-response": "pm.test(\"Status code is 200\", () => {\n  pm.response.to.have.status(200);\n});\n"
      }
    }
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "description": "JWT Bearer token authentication"
      },
      "basicAuth": {
        "type": "http",
        "scheme": "basic",
        "description": "Basic HTTP authentication"
      },
      "apiKeyHeader": {
        "type": "apiKey",
        "in": "header",
        "name": "X-API-Key",
        "description": "API key request header"
      },
      "apiKeyQuery": {
        "type": "apiKey",
        "in": "query",
        "name": "api_key",
        "description": "API key query parameter"
      },
      "apiKeyCookie": {
        "type": "apiKey",
        "in": "cookie",
        "name": "api_key",
        "description": "API key browser cookie"
      },
      "oAuth2": {
        "type": "oauth2",
        "description": "OAuth 2.0 authentication",
        "flows": {
          "authorizationCode": {
            "authorizationUrl": "https://galaxy.scalar.com/oauth/authorize",
            "tokenUrl": "https://galaxy.scalar.com/oauth/token",
            "scopes": {
              "read:account": "read your account information",
              "write:planets": "modify planets in your account",
              "read:planets": "read your planets"
            }
          },
          "clientCredentials": {
            "tokenUrl": "https://galaxy.scalar.com/oauth/token",
            "scopes": {
              "read:account": "read your account information",
              "write:planets": "modify planets in your account",
              "read:planets": "read your planets"
            }
          },
          "implicit": {
            "authorizationUrl": "https://galaxy.scalar.com/oauth/authorize",
            "scopes": {
              "read:account": "read your account information",
              "write:planets": "modify planets in your account",
              "read:planets": "read your planets"
            }
          },
          "password": {
            "tokenUrl": "https://galaxy.scalar.com/oauth/token",
            "scopes": {
              "read:account": "read your account information",
              "write:planets": "modify planets in your account",
              "read:planets": "read your planets"
            }
          }
        }
      },
      "openIdConnect": {
        "type": "openIdConnect",
        "openIdConnectUrl": "https://galaxy.scalar.com/.well-known/openid-configuration",
        "description": "OpenID Connect Authentication"
      }
    },
    "parameters": {
      "planetId": {
        "name": "planetId",
        "description": "The ID of the planet to get",
        "in": "path",
        "required": true,
        "schema": {
          "type": "integer",
          "format": "int64",
          "examples": [
            1
          ]
        }
      },
      "limit": {
        "name": "limit",
        "description": "The number of items to return",
        "in": "query",
        "required": false,
        "schema": {
          "type": "integer",
          "format": "int64",
          "default": 10
        }
      },
      "offset": {
        "name": "offset",
        "description": "The number of items to skip before starting to collect the result set",
        "in": "query",
        "required": false,
        "schema": {
          "type": "integer",
          "format": "int64",
          "default": 0
        }
      }
    },
    "headers": {
      "X-RateLimit-Limit": {
        "description": "The number of allowed requests in the current period",
        "schema": {
          "type": "integer",
          "example": 100
        }
      },
      "X-RateLimit-Remaining": {
        "description": "The number of remaining requests in the current period",
        "schema": {
          "type": "integer",
          "example": 95
        }
      },
      "X-RateLimit-Reset": {
        "description": "The number of seconds left in the current period",
        "schema": {
          "type": "integer",
          "example": 3600
        }
      },
      "X-Request-ID": {
        "description": "Unique identifier for the request",
        "schema": {
          "type": "string",
          "format": "uuid",
          "example": "123e4567-e89b-12d3-a456-426614174000"
        }
      },
      "X-Pagination-Total": {
        "description": "Total number of items available",
        "schema": {
          "type": "integer",
          "example": 1000
        }
      },
      "X-Pagination-Page": {
        "description": "Current page number",
        "schema": {
          "type": "integer",
          "example": 1
        }
      },
      "X-Pagination-Per-Page": {
        "description": "Number of items per page",
        "schema": {
          "type": "integer",
          "example": 10
        }
      },
      "X-Cache-Control": {
        "description": "Cache control directives",
        "schema": {
          "type": "string",
          "example": "max-age=3600, public"
        }
      },
      "ETag": {
        "description": "Entity tag for caching",
        "schema": {
          "type": "string",
          "example": "\"33a64df551\""
        }
      },
      "Last-Modified": {
        "description": "The last modification date of the resource",
        "schema": {
          "type": "string",
          "format": "date-time",
          "example": "2023-12-01T12:00:00Z"
        }
      },
      "Location": {
        "description": "The URL of the newly created resource",
        "schema": {
          "type": "string",
          "format": "uri",
          "example": "https://galaxy.scalar.com/planets/123"
        }
      },
      "X-Processing-Time": {
        "description": "The time taken to process the request in milliseconds",
        "schema": {
          "type": "integer",
          "example": 150
        }
      }
    },
    "responses": {
      "ImageUploaded": {
        "description": "Image uploaded",
        "headers": {
          "X-Request-ID": {
            "$ref": "#/components/headers/X-Request-ID"
          },
          "X-Cache-Control": {
            "$ref": "#/components/headers/X-Cache-Control"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ImageUploadedMessage"
            }
          },
          "application/xml": {
            "schema": {
              "$ref": "#/components/schemas/ImageUploadedMessage"
            }
          }
        }
      },
      "BadRequest": {
        "description": "Bad Request",
        "headers": {
          "X-Request-ID": {
            "$ref": "#/components/headers/X-Request-ID"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/BadRequestError"
            }
          },
          "application/xml": {
            "schema": {
              "$ref": "#/components/schemas/BadRequestError"
            }
          }
        }
      },
      "Forbidden": {
        "description": "Forbidden",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ForbiddenError"
            }
          },
          "application/xml": {
            "schema": {
              "$ref": "#/components/schemas/ForbiddenError"
            }
          }
        }
      },
      "NotFound": {
        "description": "Not Found",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/NotFoundError"
            }
          },
          "application/xml": {
            "schema": {
              "$ref": "#/components/schemas/NotFoundError"
            }
          }
        }
      },
      "Unauthorized": {
        "description": "Unauthorized",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/UnauthorizedError"
            }
          },
          "application/xml": {
            "schema": {
              "$ref": "#/components/schemas/UnauthorizedError"
            }
          }
        }
      },
      "Conflict": {
        "description": "Conflict",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Conflict"
            }
          },
          "application/xml": {
            "schema": {
              "$ref": "#/components/schemas/Conflict"
            }
          }
        }
      },
      "UnprocessableEntity": {
        "description": "Unprocessable Entity",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/UnprocessableEntity"
            }
          },
          "application/xml": {
            "schema": {
              "$ref": "#/components/schemas/UnprocessableEntity"
            }
          }
        }
      },
      "TooManyRequests": {
        "description": "Too Many Requests",
        "headers": {
          "X-Request-ID": {
            "$ref": "#/components/headers/X-Request-ID"
          },
          "X-RateLimit-Limit": {
            "$ref": "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining": {
            "$ref": "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset": {
            "$ref": "#/components/headers/X-RateLimit-Reset"
          },
          "Retry-After": {
            "description": "The number of seconds to wait before retrying",
            "schema": {
              "type": "integer",
              "example": 60
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/TooManyRequestsError"
            }
          },
          "application/xml": {
            "schema": {
              "$ref": "#/components/schemas/TooManyRequestsError"
            }
          }
        }
      }
    },
    "schemas": {
      "User": {
        "description": "A user",
        "type": "object",
        "xml": {
          "name": "user"
        },
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64",
            "readOnly": true,
            "examples": [
              1
            ]
          },
          "name": {
            "type": "string",
            "examples": [
              "Marc",
              "Cam",
              "Hans"
            ]
          }
        }
      },
      "Credentials": {
        "description": "Credentials to authenticate a user",
        "type": "object",
        "required": [
          "email",
          "password"
        ],
        "properties": {
          "email": {
            "type": "string",
            "format": "email",
            "examples": [
              "marc@scalar.com",
              "cam@scalar.com",
              "hans@scalar.com"
            ]
          },
          "password": {
            "type": "string",
            "writeOnly": true,
            "examples": [
              "i-love-scalar",
              "i-love-oss",
              "qwerty123"
            ]
          }
        }
      },
      "Token": {
        "description": "A token to authenticate a user",
        "type": "object",
        "properties": {
          "token": {
            "type": "string",
            "examples": [
              "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
            ]
          }
        }
      },
      "CelestialBody": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/Planet"
          },
          {
            "$ref": "#/components/schemas/Satellite"
          }
        ],
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "terrestrial": "#/components/schemas/Planet",
            "gas_giant": "#/components/schemas/Planet",
            "ice_giant": "#/components/schemas/Planet",
            "dwarf": "#/components/schemas/Planet",
            "super_earth": "#/components/schemas/Planet",
            "moon": "#/components/schemas/Satellite",
            "asteroid": "#/components/schemas/Satellite",
            "comet": "#/components/schemas/Satellite"
          }
        },
        "description": "A celestial body which can be either a planet or a satellite"
      },
      "Planet": {
        "description": "A planet in the Scalar Galaxy",
        "type": "object",
        "required": [
          "id",
          "name"
        ],
        "additionalProperties": false,
        "xml": {
          "name": "planet"
        },
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64",
            "readOnly": true,
            "examples": [
              1
            ],
            "x-variable": "planetId"
          },
          "name": {
            "type": "string",
            "examples": [
              "Mars",
              "Jupiter",
              "HD 40307g"
            ]
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "examples": [
              "The red planet",
              "A gas giant with a great red spot"
            ]
          },
          "type": {
            "type": "string",
            "enum": [
              "terrestrial",
              "gas_giant",
              "ice_giant",
              "dwarf",
              "super_earth"
            ],
            "x-enum-varnames": [
              "Terrestrial",
              "GasGiant",
              "IceGiant",
              "Dwarf",
              "SuperEarth"
            ],
            "x-enum-descriptions": {
              "terrestrial": "Rocky planets with solid surfaces, like Earth and Mars",
              "gas_giant": "Large planets composed mainly of hydrogen and helium, like Jupiter and Saturn",
              "ice_giant": "Planets composed of water, ammonia, and methane ices, like Uranus and Neptune",
              "dwarf": "Small planetary bodies that don't meet full planet criteria, like Pluto",
              "super_earth": "Rocky planets larger than Earth but smaller than gas giants"
            },
            "examples": [
              "terrestrial"
            ]
          },
          "habitabilityIndex": {
            "type": "number",
            "format": "float",
            "minimum": 0,
            "maximum": 1,
            "description": "A score from 0 to 1 indicating potential habitability",
            "examples": [
              0.68
            ]
          },
          "physicalProperties": {
            "type": "object",
            "additionalProperties": {
              "x-additionalPropertiesName": "measurement",
              "type": "number",
              "format": "float",
              "description": "Additional physical measurements for the planet"
            },
            "properties": {
              "mass": {
                "type": "number",
                "format": "float",
                "exclusiveMinimum": 0,
                "description": "Mass in Earth masses (must be greater than 0)",
                "examples": [
                  0.107
                ]
              },
              "radius": {
                "type": "number",
                "format": "float",
                "exclusiveMinimum": 0,
                "description": "Radius in Earth radii (must be greater than 0)",
                "examples": [
                  0.532
                ]
              },
              "gravity": {
                "type": "number",
                "format": "float",
                "description": "Surface gravity in Earth g",
                "examples": [
                  0.378
                ]
              },
              "temperature": {
                "type": "object",
                "additionalProperties": {
                  "x-additionalPropertiesName": "temperatureMetric",
                  "type": "number",
                  "format": "float",
                  "description": "Additional temperature-related measurements in Kelvin"
                },
                "properties": {
                  "min": {
                    "type": "number",
                    "format": "float",
                    "description": "Minimum temperature in Kelvin",
                    "examples": [
                      130
                    ]
                  },
                  "max": {
                    "type": "number",
                    "format": "float",
                    "description": "Maximum temperature in Kelvin",
                    "examples": [
                      308
                    ]
                  },
                  "average": {
                    "type": "number",
                    "format": "float",
                    "description": "Average temperature in Kelvin",
                    "examples": [
                      210
                    ]
                  }
                }
              }
            }
          },
          "atmosphere": {
            "type": "array",
            "description": "Atmospheric composition",
            "items": {
              "type": "object",
              "additionalProperties": {
                "x-additionalPropertiesName": "atmosphericData",
                "type": "string",
                "description": "Additional atmospheric composition data"
              },
              "properties": {
                "compound": {
                  "type": "string",
                  "examples": [
                    "CO2",
                    "N2"
                  ]
                },
                "percentage": {
                  "type": "number",
                  "format": "float",
                  "exclusiveMaximum": 100,
                  "examples": [
                    95.3
                  ]
                }
              }
            }
          },
          "discoveredAt": {
            "type": "string",
            "format": "date-time",
            "examples": [
              "1610-01-07T00:00:00Z"
            ]
          },
          "image": {
            "type": [
              "string",
              "null"
            ],
            "examples": [
              "https://cdn.scalar.com/photos/mars.jpg"
            ]
          },
          "satellites": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Satellite"
            }
          },
          "creator": {
            "$ref": "#/components/schemas/User"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "examples": [
              [
                "solar-system",
                "rocky",
                "explored"
              ]
            ]
          },
          "lastUpdated": {
            "type": "string",
            "format": "date-time",
            "readOnly": true,
            "examples": [
              "2024-01-15T14:30:00Z"
            ]
          },
          "successCallbackUrl": {
            "type": "string",
            "format": "uri",
            "description": "URL which gets invoked upon a successful operation",
            "examples": [
              "https://example.com/webhook"
            ]
          },
          "failureCallbackUrl": {
            "type": "string",
            "format": "uri",
            "description": "URL which gets invoked upon a failed operation",
            "examples": [
              "https://example.com/webhook"
            ]
          }
        }
      },
      "Satellite": {
        "description": "Every satellite in the Scalar Galaxy",
        "type": "object",
        "required": [
          "name"
        ],
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64",
            "readOnly": true,
            "examples": [
              1
            ]
          },
          "name": {
            "type": "string",
            "examples": [
              "Phobos"
            ]
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "examples": [
              "Phobos is the larger and innermost of the two moons of Mars."
            ]
          },
          "diameter": {
            "type": "number",
            "format": "float",
            "description": "Diameter in kilometers",
            "examples": [
              22.2
            ]
          },
          "type": {
            "type": "string",
            "enum": [
              "moon",
              "asteroid",
              "comet"
            ],
            "x-enum-varnames": [
              "Moon",
              "Asteroid",
              "Comet"
            ],
            "x-enum-descriptions": {
              "moon": "Natural satellites that orbit planets",
              "asteroid": "Rocky objects that orbit the sun, typically found in the asteroid belt",
              "comet": "Icy bodies that release gas when approaching the sun, creating visible tails"
            },
            "examples": [
              "moon"
            ]
          },
          "orbit": {
            "type": "object",
            "properties": {
              "planet": {
                "$ref": "#/components/schemas/Planet"
              },
              "orbitalPeriod": {
                "type": "number",
                "format": "float",
                "description": "Orbital period in Earth days",
                "examples": [
                  0.319
                ]
              },
              "distance": {
                "type": "number",
                "format": "float",
                "description": "Average distance from the planet in kilometers",
                "examples": [
                  9376
                ]
              }
            }
          }
        }
      },
      "PaginatedResource": {
        "description": "A paginated resource",
        "type": "object",
        "properties": {
          "meta": {
            "type": "object",
            "properties": {
              "limit": {
                "type": "integer",
                "format": "int64",
                "examples": [
                  10
                ]
              },
              "offset": {
                "type": "integer",
                "format": "int64",
                "examples": [
                  0
                ]
              },
              "total": {
                "type": "integer",
                "format": "int64",
                "examples": [
                  100
                ]
              },
              "next": {
                "type": [
                  "string",
                  "null"
                ],
                "examples": [
                  "/planets?limit=10&offset=10"
                ]
              }
            }
          }
        }
      },
      "ImageUploadedMessage": {
        "x-scalar-ignore": true,
        "description": "Message about an image upload",
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "examples": [
              "Image uploaded successfully"
            ]
          },
          "imageUrl": {
            "type": "string",
            "description": "The URL where the uploaded image can be accessed",
            "examples": [
              "https://cdn.scalar.com/images/8f47c132-9d1f-4f83-b5a4-91db5ee757ab.jpg"
            ]
          },
          "uploadedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Timestamp when the image was uploaded",
            "examples": [
              "2024-01-15T14:30:00Z"
            ]
          },
          "fileSize": {
            "type": "integer",
            "description": "Size of the uploaded image in bytes",
            "examples": [
              1048576
            ]
          },
          "mimeType": {
            "type": "string",
            "description": "The content type of the uploaded image",
            "examples": [
              "image/jpeg",
              "image/png"
            ]
          }
        }
      },
      "BadRequestError": {
        "x-scalar-ignore": true,
        "description": "RFC 7807 (https://datatracker.ietf.org/doc/html/rfc7807)",
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "examples": [
              "https://example.com/errors/bad-request"
            ]
          },
          "title": {
            "type": "string",
            "examples": [
              "Bad Request"
            ]
          },
          "status": {
            "type": "integer",
            "format": "int64",
            "examples": [
              400
            ]
          },
          "detail": {
            "type": "string",
            "examples": [
              "The request was invalid."
            ]
          }
        }
      },
      "ForbiddenError": {
        "x-scalar-ignore": true,
        "description": "Error response for forbidden access (RFC 7807). Returned when the user does not have permission to access the requested resource.",
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "examples": [
              "https://example.com/errors/forbidden"
            ]
          },
          "title": {
            "type": "string",
            "examples": [
              "Forbidden"
            ]
          },
          "status": {
            "type": "integer",
            "format": "int64",
            "examples": [
              403
            ]
          },
          "detail": {
            "type": "string",
            "examples": [
              "You are not authorized to access this resource."
            ]
          }
        }
      },
      "NotFoundError": {
        "x-scalar-ignore": true,
        "description": "Error response for resource not found (RFC 7807). Returned when the requested resource does not exist.",
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "examples": [
              "https://example.com/errors/not-found"
            ]
          },
          "title": {
            "type": "string",
            "examples": [
              "Not Found"
            ]
          },
          "status": {
            "type": "integer",
            "format": "int64",
            "examples": [
              404
            ]
          },
          "detail": {
            "type": "string",
            "examples": [
              "The resource you are trying to access does not exist."
            ]
          }
        }
      },
      "UnauthorizedError": {
        "x-scalar-ignore": true,
        "description": "Error response for unauthorized access (RFC 7807). Returned when authentication is required or has failed.",
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "examples": [
              "https://example.com/errors/not-found"
            ]
          },
          "title": {
            "type": "string",
            "examples": [
              "Unauthorized"
            ]
          },
          "status": {
            "type": "integer",
            "format": "int64",
            "examples": [
              401
            ]
          },
          "detail": {
            "type": "string",
            "examples": [
              "You are not authorized to access this resource."
            ]
          }
        }
      },
      "Conflict": {
        "x-scalar-ignore": true,
        "description": "Error response for resource conflicts (RFC 7807). Returned when the request conflicts with the current state of the resource.",
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "examples": [
              "https://example.com/errors/conflict"
            ]
          },
          "title": {
            "type": "string",
            "examples": [
              "Conflict"
            ]
          },
          "status": {
            "type": "integer",
            "format": "int64",
            "examples": [
              409
            ]
          },
          "detail": {
            "type": "string",
            "examples": [
              "The resource you are trying to access is in conflict."
            ]
          }
        }
      },
      "UnprocessableEntity": {
        "x-scalar-ignore": true,
        "description": "Error response for unprocessable entity (RFC 7807). Returned when the request is well-formed but contains semantic errors.",
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "examples": [
              "https://example.com/errors/unprocessable-entity"
            ]
          },
          "title": {
            "type": "string",
            "examples": [
              "Unprocessable Entity"
            ]
          },
          "status": {
            "type": "integer",
            "format": "int64",
            "examples": [
              422
            ]
          },
          "detail": {
            "type": "string",
            "examples": [
              "The request was invalid."
            ]
          }
        }
      },
      "TooManyRequestsError": {
        "x-scalar-ignore": true,
        "description": "Error response for rate limiting (RFC 7807). Returned when the client has exceeded the rate limit for requests.",
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "examples": [
              "https://example.com/errors/too-many-requests"
            ]
          },
          "title": {
            "type": "string",
            "examples": [
              "Too Many Requests"
            ]
          },
          "status": {
            "type": "integer",
            "format": "int64",
            "examples": [
              429
            ]
          },
          "detail": {
            "type": "string",
            "examples": [
              "Rate limit exceeded. Please try again later."
            ]
          }
        }
      }
    }
  }
}