diff --git a/app/global.css b/app/global.css
index bc099e492..58d5f0646 100644
--- a/app/global.css
+++ b/app/global.css
@@ -1,4 +1,53 @@
@import 'tailwindcss';
@import 'fumadocs-ui/css/neutral.css';
@import 'fumadocs-ui/css/preset.css';
+@import 'fumadocs-openapi/css/preset.css';
+/* API sidebar method badges — scoped to leaf page links only (have padding-inline-start) */
+a[style*="padding-inline-start"][href*="/api/"][href*="/get-"]::before,
+a[style*="padding-inline-start"][href*="/api/"][href*="/post-"]::before,
+a[style*="padding-inline-start"][href*="/api/"][href*="/put-"]::before,
+a[style*="padding-inline-start"][href*="/api/"][href*="/patch-"]::before,
+a[style*="padding-inline-start"][href*="/api/"][href*="/delete-"]::before {
+ font-size: 0.625rem;
+ font-weight: 700;
+ line-height: 1;
+ padding: 2px 5px;
+ border-radius: 4px;
+ letter-spacing: 0.02em;
+ flex-shrink: 0;
+ position: static !important;
+ width: auto !important;
+ inset: unset !important;
+ background: unset !important;
+}
+
+a[style*="padding-inline-start"][href*="/api/"][href*="/get-"]::before {
+ content: "GET" !important;
+ background-color: color-mix(in srgb, #7d69cb 18%, transparent) !important;
+ color: #7d69cb;
+}
+
+a[style*="padding-inline-start"][href*="/api/"][href*="/post-"]::before {
+ content: "POST" !important;
+ background-color: color-mix(in srgb, #59a210 18%, transparent) !important;
+ color: #59a210;
+}
+
+a[style*="padding-inline-start"][href*="/api/"][href*="/put-"]::before {
+ content: "PUT" !important;
+ background-color: color-mix(in srgb, #ff9a1f 18%, transparent) !important;
+ color: #ff9a1f;
+}
+
+a[style*="padding-inline-start"][href*="/api/"][href*="/patch-"]::before {
+ content: "PATCH" !important;
+ background-color: color-mix(in srgb, #d07502 18%, transparent) !important;
+ color: #d07502;
+}
+
+a[style*="padding-inline-start"][href*="/api/"][href*="/delete-"]::before {
+ content: "DEL" !important;
+ background-color: color-mix(in srgb, #d04444 18%, transparent) !important;
+ color: #d04444;
+}
diff --git a/app/page.tsx b/app/page.tsx
new file mode 100644
index 000000000..4ddd9f5b9
--- /dev/null
+++ b/app/page.tsx
@@ -0,0 +1,125 @@
+import Link from 'next/link';
+import type { Metadata } from 'next';
+
+export const metadata: Metadata = {
+ title: 'Pterodactyl - Open Source Game Server Management',
+ description:
+ 'A free, open-source game server management panel built with PHP, React, and Go. Designed with security in mind, Pterodactyl runs all game servers in isolated Docker containers.',
+};
+
+const features = [
+ {
+ title: 'Security First',
+ description:
+ 'Built with security as a priority. All servers run in isolated Docker containers with bcrypt hashing, AES-256-CBC encryption, and HTTPS support out of the box.',
+ },
+ {
+ title: 'Modern Tooling',
+ description:
+ 'Built on a modern stack using React for the frontend and Go for the daemon, giving you a fast and responsive experience.',
+ },
+ {
+ title: 'Docker Powered',
+ description:
+ 'All game servers run in isolated Docker containers, limiting attack vectors and providing strict resource limits on CPU, memory, and IO.',
+ },
+ {
+ title: 'Free & Open Source',
+ description:
+ 'Pterodactyl is 100% free and licensed under the MIT license. All of our code is publicly available on GitHub.',
+ },
+ {
+ title: 'User Friendly',
+ description:
+ 'An intuitive and clean UI that makes managing your game servers easy, whether you run one server or hundreds.',
+ },
+ {
+ title: 'Scalable',
+ description:
+ 'Whether you are a hosting company, a large gaming network, or just some friends playing video games, Pterodactyl can scale to fit your needs.',
+ },
+];
+
+export default function LandingPage() {
+ return (
+
+
+
+
+
+
+
+ {/* eslint-disable-next-line @next/next/no-img-element */}
+
+
+ A free, open-source game server management panel built with PHP, React, and Go.
+ Designed with security in mind, Pterodactyl runs all game servers in isolated Docker
+ containers while exposing a beautiful and intuitive UI to end users.
+
+
+
+ Let's Get Started!
+
+
+
+
+
+
+ Why use Pterodactyl?
+
+
+ {features.map((feature) => (
+
+
+ {feature.title}
+
+
+ {feature.description}
+
+
+ ))}
+
+
+
+
+
+
+ );
+}
diff --git a/components/api-page.tsx b/components/api-page.tsx
new file mode 100644
index 000000000..534cfa01c
--- /dev/null
+++ b/components/api-page.tsx
@@ -0,0 +1,8 @@
+import { openapi } from '@/lib/openapi';
+import { createAPIPage } from 'fumadocs-openapi/ui';
+
+export const APIPage = createAPIPage(openapi, {
+ playground: {
+ enabled: false,
+ },
+});
diff --git a/content/docs/api/application-locations/delete-delete-location.mdx b/content/docs/api/application-locations/delete-delete-location.mdx
new file mode 100644
index 000000000..6281ce63f
--- /dev/null
+++ b/content/docs/api/application-locations/delete-delete-location.mdx
@@ -0,0 +1,17 @@
+---
+title: Delete location
+full: true
+_openapi:
+ method: DELETE
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Deletes the specified location
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Deletes the specified location
+
+
\ No newline at end of file
diff --git a/content/docs/api/application-locations/get-list-locations.mdx b/content/docs/api/application-locations/get-list-locations.mdx
new file mode 100644
index 000000000..a0ffd96fe
--- /dev/null
+++ b/content/docs/api/application-locations/get-list-locations.mdx
@@ -0,0 +1,30 @@
+---
+title: List locations
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: |-
+ Retrieves all locations
+
+ # Available include parameters
+ | Parameter | Description |
+ |-----------|----------------------------------------|
+ | nodes | List of nodes assigned to the location |
+ | servers | List of servers in the location |
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Retrieves all locations
+
+# Available include parameters
+| Parameter | Description |
+|-----------|----------------------------------------|
+| nodes | List of nodes assigned to the location |
+| servers | List of servers in the location |
+
+
\ No newline at end of file
diff --git a/content/docs/api/application-locations/get-location-details.mdx b/content/docs/api/application-locations/get-location-details.mdx
new file mode 100644
index 000000000..3fd40138e
--- /dev/null
+++ b/content/docs/api/application-locations/get-location-details.mdx
@@ -0,0 +1,30 @@
+---
+title: Location details
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: |-
+ Retrieves the specified location
+
+ # Available include parameters
+ | Parameter | Description |
+ |-----------|----------------------------------------|
+ | nodes | List of nodes assigned to the location |
+ | servers | List of servers in the location |
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Retrieves the specified location
+
+# Available include parameters
+| Parameter | Description |
+|-----------|----------------------------------------|
+| nodes | List of nodes assigned to the location |
+| servers | List of servers in the location |
+
+
\ No newline at end of file
diff --git a/content/docs/api/application-locations/patch-update-location.mdx b/content/docs/api/application-locations/patch-update-location.mdx
new file mode 100644
index 000000000..70fb3576f
--- /dev/null
+++ b/content/docs/api/application-locations/patch-update-location.mdx
@@ -0,0 +1,17 @@
+---
+title: Update location
+full: true
+_openapi:
+ method: PATCH
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Updates the specified location
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Updates the specified location
+
+
\ No newline at end of file
diff --git a/content/docs/api/application-locations/post-create-location.mdx b/content/docs/api/application-locations/post-create-location.mdx
new file mode 100644
index 000000000..63a7dce11
--- /dev/null
+++ b/content/docs/api/application-locations/post-create-location.mdx
@@ -0,0 +1,17 @@
+---
+title: Create location
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Creates a new location
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Creates a new location
+
+
\ No newline at end of file
diff --git a/content/docs/api/application-nests-eggs-management/get-egg-details.mdx b/content/docs/api/application-nests-eggs-management/get-egg-details.mdx
new file mode 100644
index 000000000..4b7b19436
--- /dev/null
+++ b/content/docs/api/application-nests-eggs-management/get-egg-details.mdx
@@ -0,0 +1,36 @@
+---
+title: Egg details
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: |-
+ Retrieves the specified egg
+
+ ## Available include parameters
+ | Parameter | Description |
+ |-----------|----------------------------------------------|
+ | nest | Information about the nest that owns the egg |
+ | servers | List of servers using the egg |
+ | config | Config options of the egg |
+ | script | Egg install script |
+ | variables | List of egg variables |
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Retrieves the specified egg
+
+## Available include parameters
+| Parameter | Description |
+|-----------|----------------------------------------------|
+| nest | Information about the nest that owns the egg |
+| servers | List of servers using the egg |
+| config | Config options of the egg |
+| script | Egg install script |
+| variables | List of egg variables |
+
+
\ No newline at end of file
diff --git a/content/docs/api/application-nests-eggs-management/get-list-eggs.mdx b/content/docs/api/application-nests-eggs-management/get-list-eggs.mdx
new file mode 100644
index 000000000..cc40bb15f
--- /dev/null
+++ b/content/docs/api/application-nests-eggs-management/get-list-eggs.mdx
@@ -0,0 +1,36 @@
+---
+title: List eggs
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: |-
+ Retrieves a list of eggs
+
+ ## Available include parameters
+ | Parameter | Description |
+ |-----------|----------------------------------------------|
+ | nest | Information about the nest that owns the egg |
+ | servers | List of servers using the egg |
+ | config | Config options of the egg |
+ | script | Egg install script |
+ | variables | List of egg variables |
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Retrieves a list of eggs
+
+## Available include parameters
+| Parameter | Description |
+|-----------|----------------------------------------------|
+| nest | Information about the nest that owns the egg |
+| servers | List of servers using the egg |
+| config | Config options of the egg |
+| script | Egg install script |
+| variables | List of egg variables |
+
+
\ No newline at end of file
diff --git a/content/docs/api/application-nests/get-list-nests.mdx b/content/docs/api/application-nests/get-list-nests.mdx
new file mode 100644
index 000000000..5dad18ed7
--- /dev/null
+++ b/content/docs/api/application-nests/get-list-nests.mdx
@@ -0,0 +1,30 @@
+---
+title: List nests
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: |-
+ Retrieves all nests
+
+ # Available include parameters
+ | Parameter | Description |
+ |-----------|---------------------------------|
+ | eggs | List of eggs in the location |
+ | servers | List of servers in the location |
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Retrieves all nests
+
+# Available include parameters
+| Parameter | Description |
+|-----------|---------------------------------|
+| eggs | List of eggs in the location |
+| servers | List of servers in the location |
+
+
\ No newline at end of file
diff --git a/content/docs/api/application-nests/get-nest-details.mdx b/content/docs/api/application-nests/get-nest-details.mdx
new file mode 100644
index 000000000..d391baa8a
--- /dev/null
+++ b/content/docs/api/application-nests/get-nest-details.mdx
@@ -0,0 +1,30 @@
+---
+title: Nest details
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: |-
+ Retrieves the specified nests
+
+ # Available include parameters
+ | Parameter | Description |
+ |-----------|---------------------------------|
+ | eggs | List of eggs in the location |
+ | servers | List of servers in the location |
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Retrieves the specified nests
+
+# Available include parameters
+| Parameter | Description |
+|-----------|---------------------------------|
+| eggs | List of eggs in the location |
+| servers | List of servers in the location |
+
+
\ No newline at end of file
diff --git a/content/docs/api/application-nodes-allocations/delete-delete-allocation.mdx b/content/docs/api/application-nodes-allocations/delete-delete-allocation.mdx
new file mode 100644
index 000000000..7d4df18ae
--- /dev/null
+++ b/content/docs/api/application-nodes-allocations/delete-delete-allocation.mdx
@@ -0,0 +1,17 @@
+---
+title: Delete allocation
+full: true
+_openapi:
+ method: DELETE
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Deletes the specified allocation
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Deletes the specified allocation
+
+
\ No newline at end of file
diff --git a/content/docs/api/application-nodes-allocations/get-list-allocations.mdx b/content/docs/api/application-nodes-allocations/get-list-allocations.mdx
new file mode 100644
index 000000000..7e5d119e8
--- /dev/null
+++ b/content/docs/api/application-nodes-allocations/get-list-allocations.mdx
@@ -0,0 +1,30 @@
+---
+title: List allocations
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: |-
+ Lists allocations added to the node
+
+ ## Available include parameters
+ | Parameter | Description |
+ |-----------|--------------------------------------------------------|
+ | node | Information about the node the allocation belongs to |
+ | server | Information about the server the allocation belongs to |
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Lists allocations added to the node
+
+## Available include parameters
+| Parameter | Description |
+|-----------|--------------------------------------------------------|
+| node | Information about the node the allocation belongs to |
+| server | Information about the server the allocation belongs to |
+
+
\ No newline at end of file
diff --git a/content/docs/api/application-nodes-allocations/post-create-allocations.mdx b/content/docs/api/application-nodes-allocations/post-create-allocations.mdx
new file mode 100644
index 000000000..da0826cd9
--- /dev/null
+++ b/content/docs/api/application-nodes-allocations/post-create-allocations.mdx
@@ -0,0 +1,17 @@
+---
+title: Create allocations
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Adds an allocation to the node
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Adds an allocation to the node
+
+
\ No newline at end of file
diff --git a/content/docs/api/application-nodes/delete-delete-node.mdx b/content/docs/api/application-nodes/delete-delete-node.mdx
new file mode 100644
index 000000000..df68ac1dd
--- /dev/null
+++ b/content/docs/api/application-nodes/delete-delete-node.mdx
@@ -0,0 +1,17 @@
+---
+title: Delete node
+full: true
+_openapi:
+ method: DELETE
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Deletes the specified node
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Deletes the specified node
+
+
\ No newline at end of file
diff --git a/content/docs/api/application-nodes/get-deployable-nodes.mdx b/content/docs/api/application-nodes/get-deployable-nodes.mdx
new file mode 100644
index 000000000..feb288cd1
--- /dev/null
+++ b/content/docs/api/application-nodes/get-deployable-nodes.mdx
@@ -0,0 +1,19 @@
+---
+title: List deployable nodes
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: >-
+ Returns nodes that have enough resources for a new server with the
+ given requirements
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Returns nodes that have enough resources for a new server with the given requirements
+
+
\ No newline at end of file
diff --git a/content/docs/api/application-nodes/get-list-nodes.mdx b/content/docs/api/application-nodes/get-list-nodes.mdx
new file mode 100644
index 000000000..86bd6a38a
--- /dev/null
+++ b/content/docs/api/application-nodes/get-list-nodes.mdx
@@ -0,0 +1,42 @@
+---
+title: List nodes
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: >-
+ Retrieves a list of nodes
+
+
+ ## Available include parameters
+
+ | Parameter | Description
+ |
+
+ |-------------|--------------------------------------------------------|
+
+ | allocations | List of allocations added to the node
+ |
+
+ | location | Information about the location the node is assigned to
+ |
+
+ | servers | List of servers on the node
+ |
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Retrieves a list of nodes
+
+## Available include parameters
+| Parameter | Description |
+|-------------|--------------------------------------------------------|
+| allocations | List of allocations added to the node |
+| location | Information about the location the node is assigned to |
+| servers | List of servers on the node |
+
+
\ No newline at end of file
diff --git a/content/docs/api/application-nodes/get-node-configuration.mdx b/content/docs/api/application-nodes/get-node-configuration.mdx
new file mode 100644
index 000000000..1930e4e7d
--- /dev/null
+++ b/content/docs/api/application-nodes/get-node-configuration.mdx
@@ -0,0 +1,17 @@
+---
+title: Node configuration
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Displays the Wings configuration
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Displays the Wings configuration
+
+
\ No newline at end of file
diff --git a/content/docs/api/application-nodes/get-node-details.mdx b/content/docs/api/application-nodes/get-node-details.mdx
new file mode 100644
index 000000000..791b88415
--- /dev/null
+++ b/content/docs/api/application-nodes/get-node-details.mdx
@@ -0,0 +1,42 @@
+---
+title: Node details
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: >-
+ Retrieves the specified node
+
+
+ ## Available include parameters
+
+ | Parameter | Description
+ |
+
+ |-------------|--------------------------------------------------------|
+
+ | allocations | List of allocations added to the node
+ |
+
+ | location | Information about the location the node is assigned to
+ |
+
+ | servers | List of servers on the node
+ |
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Retrieves the specified node
+
+## Available include parameters
+| Parameter | Description |
+|-------------|--------------------------------------------------------|
+| allocations | List of allocations added to the node |
+| location | Information about the location the node is assigned to |
+| servers | List of servers on the node |
+
+
\ No newline at end of file
diff --git a/content/docs/api/application-nodes/patch-update-node.mdx b/content/docs/api/application-nodes/patch-update-node.mdx
new file mode 100644
index 000000000..b65117b39
--- /dev/null
+++ b/content/docs/api/application-nodes/patch-update-node.mdx
@@ -0,0 +1,17 @@
+---
+title: Update node
+full: true
+_openapi:
+ method: PATCH
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Updates the node details
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Updates the node details
+
+
\ No newline at end of file
diff --git a/content/docs/api/application-nodes/post-create-node.mdx b/content/docs/api/application-nodes/post-create-node.mdx
new file mode 100644
index 000000000..46a14f7ba
--- /dev/null
+++ b/content/docs/api/application-nodes/post-create-node.mdx
@@ -0,0 +1,17 @@
+---
+title: Create node
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Creates a new node
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Creates a new node
+
+
\ No newline at end of file
diff --git a/content/docs/api/application-servers-database-management/delete-delete-database.mdx b/content/docs/api/application-servers-database-management/delete-delete-database.mdx
new file mode 100644
index 000000000..53326d5b0
--- /dev/null
+++ b/content/docs/api/application-servers-database-management/delete-delete-database.mdx
@@ -0,0 +1,17 @@
+---
+title: Delete database
+full: true
+_openapi:
+ method: DELETE
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Deletes the specified database
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Deletes the specified database
+
+
\ No newline at end of file
diff --git a/content/docs/api/application-servers-database-management/get-database-details.mdx b/content/docs/api/application-servers-database-management/get-database-details.mdx
new file mode 100644
index 000000000..635c159bf
--- /dev/null
+++ b/content/docs/api/application-servers-database-management/get-database-details.mdx
@@ -0,0 +1,30 @@
+---
+title: Database details
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: |-
+ Retrieves the specified database
+
+ ## Available include parameters
+ | Parameter | Description |
+ |-----------|-------------------------------------|
+ | password | Includes the database user password |
+ | host | Information about the database host |
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Retrieves the specified database
+
+## Available include parameters
+| Parameter | Description |
+|-----------|-------------------------------------|
+| password | Includes the database user password |
+| host | Information about the database host |
+
+
\ No newline at end of file
diff --git a/content/docs/api/application-servers-database-management/get-list-databases.mdx b/content/docs/api/application-servers-database-management/get-list-databases.mdx
new file mode 100644
index 000000000..70f31791c
--- /dev/null
+++ b/content/docs/api/application-servers-database-management/get-list-databases.mdx
@@ -0,0 +1,30 @@
+---
+title: List databases
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: |-
+ Retrieves all databases on a server
+
+ ## Available include parameters
+ | Parameter | Description |
+ |-----------|-------------------------------------|
+ | password | Includes the database user password |
+ | host | Information about the database host |
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Retrieves all databases on a server
+
+## Available include parameters
+| Parameter | Description |
+|-----------|-------------------------------------|
+| password | Includes the database user password |
+| host | Information about the database host |
+
+
\ No newline at end of file
diff --git a/content/docs/api/application-servers-database-management/post-create-database.mdx b/content/docs/api/application-servers-database-management/post-create-database.mdx
new file mode 100644
index 000000000..c2937fbac
--- /dev/null
+++ b/content/docs/api/application-servers-database-management/post-create-database.mdx
@@ -0,0 +1,17 @@
+---
+title: Create database
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Creates a new database on the specified server
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Creates a new database on the specified server
+
+
\ No newline at end of file
diff --git a/content/docs/api/application-servers-database-management/post-reset-password.mdx b/content/docs/api/application-servers-database-management/post-reset-password.mdx
new file mode 100644
index 000000000..77eb963c8
--- /dev/null
+++ b/content/docs/api/application-servers-database-management/post-reset-password.mdx
@@ -0,0 +1,17 @@
+---
+title: Reset password
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Rotates the password of the database
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Rotates the password of the database
+
+
\ No newline at end of file
diff --git a/content/docs/api/application-servers/delete-delete-server.mdx b/content/docs/api/application-servers/delete-delete-server.mdx
new file mode 100644
index 000000000..0feadf8e5
--- /dev/null
+++ b/content/docs/api/application-servers/delete-delete-server.mdx
@@ -0,0 +1,17 @@
+---
+title: Delete server
+full: true
+_openapi:
+ method: DELETE
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Deletes the specified server
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Deletes the specified server
+
+
\ No newline at end of file
diff --git a/content/docs/api/application-servers/delete-force-delete-server.mdx b/content/docs/api/application-servers/delete-force-delete-server.mdx
new file mode 100644
index 000000000..9cc965bdb
--- /dev/null
+++ b/content/docs/api/application-servers/delete-force-delete-server.mdx
@@ -0,0 +1,17 @@
+---
+title: Force delete server
+full: true
+_openapi:
+ method: DELETE
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Forcefully deletes the specified server
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Forcefully deletes the specified server
+
+
\ No newline at end of file
diff --git a/content/docs/api/application-servers/get-list-servers.mdx b/content/docs/api/application-servers/get-list-servers.mdx
new file mode 100644
index 000000000..4e2d86c7b
--- /dev/null
+++ b/content/docs/api/application-servers/get-list-servers.mdx
@@ -0,0 +1,17 @@
+---
+title: List servers
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Retrieves all servers
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Retrieves all servers
+
+
\ No newline at end of file
diff --git a/content/docs/api/application-servers/get-server-details.mdx b/content/docs/api/application-servers/get-server-details.mdx
new file mode 100644
index 000000000..b79f2582b
--- /dev/null
+++ b/content/docs/api/application-servers/get-server-details.mdx
@@ -0,0 +1,46 @@
+---
+title: Server details
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: |-
+ Retrieves a server by its external ID
+
+ ## Available include parameters
+ | Parameter | Description |
+ |-------------|--------------------------------------------|
+ | allocations | List of allocations assigned to the server |
+ | user | Information about the server owner |
+ | subusers | List of users added to the server |
+ | pack | Information about the server pack |
+ | nest | Information about the server's egg nest |
+ | egg | Information about the server's egg |
+ | variables | List of server variables |
+ | location | Information about server's node location |
+ | node | Information about the server's node |
+ | databases | List of databases on the server |
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Retrieves a server by its external ID
+
+## Available include parameters
+| Parameter | Description |
+|-------------|--------------------------------------------|
+| allocations | List of allocations assigned to the server |
+| user | Information about the server owner |
+| subusers | List of users added to the server |
+| pack | Information about the server pack |
+| nest | Information about the server's egg nest |
+| egg | Information about the server's egg |
+| variables | List of server variables |
+| location | Information about server's node location |
+| node | Information about the server's node |
+| databases | List of databases on the server |
+
+
\ No newline at end of file
diff --git a/content/docs/api/application-servers/patch-update-build.mdx b/content/docs/api/application-servers/patch-update-build.mdx
new file mode 100644
index 000000000..e83061976
--- /dev/null
+++ b/content/docs/api/application-servers/patch-update-build.mdx
@@ -0,0 +1,17 @@
+---
+title: Update build
+full: true
+_openapi:
+ method: PATCH
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Updates the server build information
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Updates the server build information
+
+
\ No newline at end of file
diff --git a/content/docs/api/application-servers/patch-update-details.mdx b/content/docs/api/application-servers/patch-update-details.mdx
new file mode 100644
index 000000000..34786c303
--- /dev/null
+++ b/content/docs/api/application-servers/patch-update-details.mdx
@@ -0,0 +1,17 @@
+---
+title: Update details
+full: true
+_openapi:
+ method: PATCH
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Updates the server details
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Updates the server details
+
+
\ No newline at end of file
diff --git a/content/docs/api/application-servers/patch-update-startup.mdx b/content/docs/api/application-servers/patch-update-startup.mdx
new file mode 100644
index 000000000..ba7678b2e
--- /dev/null
+++ b/content/docs/api/application-servers/patch-update-startup.mdx
@@ -0,0 +1,17 @@
+---
+title: Update startup
+full: true
+_openapi:
+ method: PATCH
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Updates the server startup information
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Updates the server startup information
+
+
\ No newline at end of file
diff --git a/content/docs/api/application-servers/post-create-server.mdx b/content/docs/api/application-servers/post-create-server.mdx
new file mode 100644
index 000000000..3d5343500
--- /dev/null
+++ b/content/docs/api/application-servers/post-create-server.mdx
@@ -0,0 +1,17 @@
+---
+title: Create server
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Creates a new server
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Creates a new server
+
+
\ No newline at end of file
diff --git a/content/docs/api/application-servers/post-reinstall-server.mdx b/content/docs/api/application-servers/post-reinstall-server.mdx
new file mode 100644
index 000000000..40da3e0aa
--- /dev/null
+++ b/content/docs/api/application-servers/post-reinstall-server.mdx
@@ -0,0 +1,17 @@
+---
+title: Reinstall server
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Reinstalls the specified server
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Reinstalls the specified server
+
+
\ No newline at end of file
diff --git a/content/docs/api/application-servers/post-suspend-server.mdx b/content/docs/api/application-servers/post-suspend-server.mdx
new file mode 100644
index 000000000..3804d4eba
--- /dev/null
+++ b/content/docs/api/application-servers/post-suspend-server.mdx
@@ -0,0 +1,17 @@
+---
+title: Suspend server
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Suspends the specified server
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Suspends the specified server
+
+
\ No newline at end of file
diff --git a/content/docs/api/application-servers/post-unsuspend-server.mdx b/content/docs/api/application-servers/post-unsuspend-server.mdx
new file mode 100644
index 000000000..5f50432e3
--- /dev/null
+++ b/content/docs/api/application-servers/post-unsuspend-server.mdx
@@ -0,0 +1,17 @@
+---
+title: Unsuspend server
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Unuspends the specified
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Unuspends the specified
+
+
\ No newline at end of file
diff --git a/content/docs/api/application-users/delete-delete-user.mdx b/content/docs/api/application-users/delete-delete-user.mdx
new file mode 100644
index 000000000..83410db98
--- /dev/null
+++ b/content/docs/api/application-users/delete-delete-user.mdx
@@ -0,0 +1,17 @@
+---
+title: Delete user
+full: true
+_openapi:
+ method: DELETE
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Deletes the specified user
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Deletes the specified user
+
+
\ No newline at end of file
diff --git a/content/docs/api/application-users/get-list-users.mdx b/content/docs/api/application-users/get-list-users.mdx
new file mode 100644
index 000000000..67df28161
--- /dev/null
+++ b/content/docs/api/application-users/get-list-users.mdx
@@ -0,0 +1,56 @@
+---
+title: List users
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: |-
+ Retrieves all users
+
+ ## Available Include parameters
+ | Parameter | Description |
+ |-----------|----------------------------------------|
+ | servers | List of servers the user has access to |
+
+ ## Filters
+ | Parameter |
+ |-------------|
+ | email |
+ | uuid |
+ | username |
+ | external_id |
+
+ ## Sort by
+ | Parameter |
+ |-------------|
+ | id |
+ | uuid |
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Retrieves all users
+
+## Available Include parameters
+| Parameter | Description |
+|-----------|----------------------------------------|
+| servers | List of servers the user has access to |
+
+## Filters
+| Parameter |
+|-------------|
+| email |
+| uuid |
+| username |
+| external_id |
+
+## Sort by
+| Parameter |
+|-------------|
+| id |
+| uuid |
+
+
\ No newline at end of file
diff --git a/content/docs/api/application-users/get-user-details.mdx b/content/docs/api/application-users/get-user-details.mdx
new file mode 100644
index 000000000..0fc8935bc
--- /dev/null
+++ b/content/docs/api/application-users/get-user-details.mdx
@@ -0,0 +1,28 @@
+---
+title: User details
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: |-
+ Retrieves the specified user by its external ID
+
+ ## Available include parameters
+ | Parameter | Description |
+ |-----------|----------------------------------------|
+ | servers | List of servers the user has access to |
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Retrieves the specified user by its external ID
+
+## Available include parameters
+| Parameter | Description |
+|-----------|----------------------------------------|
+| servers | List of servers the user has access to |
+
+
\ No newline at end of file
diff --git a/content/docs/api/application-users/patch-update-user.mdx b/content/docs/api/application-users/patch-update-user.mdx
new file mode 100644
index 000000000..e16c87270
--- /dev/null
+++ b/content/docs/api/application-users/patch-update-user.mdx
@@ -0,0 +1,17 @@
+---
+title: Update user
+full: true
+_openapi:
+ method: PATCH
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Updates the user information
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Updates the user information
+
+
\ No newline at end of file
diff --git a/content/docs/api/application-users/post-create-user.mdx b/content/docs/api/application-users/post-create-user.mdx
new file mode 100644
index 000000000..7da5c0b20
--- /dev/null
+++ b/content/docs/api/application-users/post-create-user.mdx
@@ -0,0 +1,17 @@
+---
+title: Create user
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Creates a new user
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Creates a new user
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-account/delete-delete-api-key.mdx b/content/docs/api/client-account/delete-delete-api-key.mdx
new file mode 100644
index 000000000..2b0fbf961
--- /dev/null
+++ b/content/docs/api/client-account/delete-delete-api-key.mdx
@@ -0,0 +1,17 @@
+---
+title: Delete API key
+full: true
+_openapi:
+ method: DELETE
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Deletes the specified API key
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Deletes the specified API key
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-account/get-2fa-details.mdx b/content/docs/api/client-account/get-2fa-details.mdx
new file mode 100644
index 000000000..a8fcfe5e4
--- /dev/null
+++ b/content/docs/api/client-account/get-2fa-details.mdx
@@ -0,0 +1,17 @@
+---
+title: 2FA details
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Generates a TOTP QR code image to allow the setup of 2FA
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Generates a TOTP QR code image to allow the setup of 2FA
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-account/get-account-activity.mdx b/content/docs/api/client-account/get-account-activity.mdx
new file mode 100644
index 000000000..173d8c643
--- /dev/null
+++ b/content/docs/api/client-account/get-account-activity.mdx
@@ -0,0 +1,17 @@
+---
+title: Account activity
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Returns the activity log for the authenticated user's account
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Returns the activity log for the authenticated user's account
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-account/get-account-details.mdx b/content/docs/api/client-account/get-account-details.mdx
new file mode 100644
index 000000000..652a69548
--- /dev/null
+++ b/content/docs/api/client-account/get-account-details.mdx
@@ -0,0 +1,17 @@
+---
+title: Account details
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Retrieves information about the account
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Retrieves information about the account
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-account/get-list-api-keys.mdx b/content/docs/api/client-account/get-list-api-keys.mdx
new file mode 100644
index 000000000..b97f4e511
--- /dev/null
+++ b/content/docs/api/client-account/get-list-api-keys.mdx
@@ -0,0 +1,17 @@
+---
+title: List API keys
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Retries a list of API keys
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Retries a list of API keys
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-account/get-list-ssh-keys.mdx b/content/docs/api/client-account/get-list-ssh-keys.mdx
new file mode 100644
index 000000000..37b557cdf
--- /dev/null
+++ b/content/docs/api/client-account/get-list-ssh-keys.mdx
@@ -0,0 +1,17 @@
+---
+title: List SSH keys
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Returns all SSH keys on the authenticated user's account
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Returns all SSH keys on the authenticated user's account
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-account/post-create-api-key.mdx b/content/docs/api/client-account/post-create-api-key.mdx
new file mode 100644
index 000000000..bc50b7fea
--- /dev/null
+++ b/content/docs/api/client-account/post-create-api-key.mdx
@@ -0,0 +1,17 @@
+---
+title: Create API key
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Generates a new API key
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Generates a new API key
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-account/post-create-ssh-key.mdx b/content/docs/api/client-account/post-create-ssh-key.mdx
new file mode 100644
index 000000000..9e1f1aff5
--- /dev/null
+++ b/content/docs/api/client-account/post-create-ssh-key.mdx
@@ -0,0 +1,19 @@
+---
+title: Create SSH key
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: >-
+ Adds an SSH key to the user's account. Used for SFTP authentication.
+ Requires a 2048+ bit RSA key or an ECDSA/Ed25519 key.
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Adds an SSH key to the user's account. Used for SFTP authentication. Requires a 2048+ bit RSA key or an ECDSA/Ed25519 key.
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-account/post-disable-2fa.mdx b/content/docs/api/client-account/post-disable-2fa.mdx
new file mode 100644
index 000000000..39c6491de
--- /dev/null
+++ b/content/docs/api/client-account/post-disable-2fa.mdx
@@ -0,0 +1,17 @@
+---
+title: Disable 2FA
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Disables two-factor authentication on the account
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Disables two-factor authentication on the account
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-account/post-enable-2fa.mdx b/content/docs/api/client-account/post-enable-2fa.mdx
new file mode 100644
index 000000000..498b502f3
--- /dev/null
+++ b/content/docs/api/client-account/post-enable-2fa.mdx
@@ -0,0 +1,22 @@
+---
+title: Enable 2FA
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: |-
+ Enables TOTP 2FA using the QR code generated by the GET request
+
+ Uses code generated from `GET /account/two-factor`
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Enables TOTP 2FA using the QR code generated by the GET request
+
+Uses code generated from `GET /account/two-factor`
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-account/post-remove-ssh-key.mdx b/content/docs/api/client-account/post-remove-ssh-key.mdx
new file mode 100644
index 000000000..ba5dcb8cf
--- /dev/null
+++ b/content/docs/api/client-account/post-remove-ssh-key.mdx
@@ -0,0 +1,17 @@
+---
+title: Remove SSH key
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Removes an SSH key from the user's account by its fingerprint
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Removes an SSH key from the user's account by its fingerprint
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-account/put-update-email.mdx b/content/docs/api/client-account/put-update-email.mdx
new file mode 100644
index 000000000..5c38f35b9
--- /dev/null
+++ b/content/docs/api/client-account/put-update-email.mdx
@@ -0,0 +1,17 @@
+---
+title: Update email
+full: true
+_openapi:
+ method: PUT
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Updates the email address of the account
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Updates the email address of the account
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-account/put-update-password.mdx b/content/docs/api/client-account/put-update-password.mdx
new file mode 100644
index 000000000..e461f5c1e
--- /dev/null
+++ b/content/docs/api/client-account/put-update-password.mdx
@@ -0,0 +1,17 @@
+---
+title: Update password
+full: true
+_openapi:
+ method: PUT
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Updates the password of the account
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Updates the password of the account
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-general/get-list-servers.mdx b/content/docs/api/client-general/get-list-servers.mdx
new file mode 100644
index 000000000..97dffe5c2
--- /dev/null
+++ b/content/docs/api/client-general/get-list-servers.mdx
@@ -0,0 +1,30 @@
+---
+title: List servers
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: |-
+ Lists all servers
+
+ ## Include parameters
+ | Parameter | Description |
+ |-----------|-------------------------------------------|
+ | egg | Information about the egg the server uses |
+ | subusers | List of subusers on the server |
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Lists all servers
+
+## Include parameters
+| Parameter | Description |
+|-----------|-------------------------------------------|
+| egg | Information about the egg the server uses |
+| subusers | List of subusers on the server |
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-general/get-show-permissions.mdx b/content/docs/api/client-general/get-show-permissions.mdx
new file mode 100644
index 000000000..78864532d
--- /dev/null
+++ b/content/docs/api/client-general/get-show-permissions.mdx
@@ -0,0 +1,22 @@
+---
+title: Show permissions
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: |-
+ Retries all available permissions
+
+ This is used for the frontend
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Retries all available permissions
+
+This is used for the frontend
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-backups/delete-delete-backup.mdx b/content/docs/api/client-server-backups/delete-delete-backup.mdx
new file mode 100644
index 000000000..24ae575ea
--- /dev/null
+++ b/content/docs/api/client-server-backups/delete-delete-backup.mdx
@@ -0,0 +1,17 @@
+---
+title: Delete backup
+full: true
+_openapi:
+ method: DELETE
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Deletes the specified backup
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Deletes the specified backup
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-backups/get-backup-details.mdx b/content/docs/api/client-server-backups/get-backup-details.mdx
new file mode 100644
index 000000000..f2bce487d
--- /dev/null
+++ b/content/docs/api/client-server-backups/get-backup-details.mdx
@@ -0,0 +1,17 @@
+---
+title: Backup details
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Retrieves information about the specified backup
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Retrieves information about the specified backup
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-backups/get-download-backup.mdx b/content/docs/api/client-server-backups/get-download-backup.mdx
new file mode 100644
index 000000000..3386ee809
--- /dev/null
+++ b/content/docs/api/client-server-backups/get-download-backup.mdx
@@ -0,0 +1,17 @@
+---
+title: Download backup
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Generates a download link for a backup
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Generates a download link for a backup
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-backups/get-list-backups.mdx b/content/docs/api/client-server-backups/get-list-backups.mdx
new file mode 100644
index 000000000..63affc826
--- /dev/null
+++ b/content/docs/api/client-server-backups/get-list-backups.mdx
@@ -0,0 +1,17 @@
+---
+title: List backups
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Retrieves a list of backups
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Retrieves a list of backups
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-backups/post-create-backup.mdx b/content/docs/api/client-server-backups/post-create-backup.mdx
new file mode 100644
index 000000000..f5b4c9a22
--- /dev/null
+++ b/content/docs/api/client-server-backups/post-create-backup.mdx
@@ -0,0 +1,17 @@
+---
+title: Create backup
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Creates a new backup
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Creates a new backup
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-backups/post-restore-backup.mdx b/content/docs/api/client-server-backups/post-restore-backup.mdx
new file mode 100644
index 000000000..349d704bf
--- /dev/null
+++ b/content/docs/api/client-server-backups/post-restore-backup.mdx
@@ -0,0 +1,20 @@
+---
+title: Restore backup
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: >-
+ Restores a backup to the server. Existing files will be overwritten.
+ Returns 400 if the backup has not completed, or if the server is
+ currently installing, transferring, or restoring a different backup.
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Restores a backup to the server. Existing files will be overwritten. Returns 400 if the backup has not completed, or if the server is currently installing, transferring, or restoring a different backup.
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-backups/post-toggle-backup-lock.mdx b/content/docs/api/client-server-backups/post-toggle-backup-lock.mdx
new file mode 100644
index 000000000..6ae4e8ee1
--- /dev/null
+++ b/content/docs/api/client-server-backups/post-toggle-backup-lock.mdx
@@ -0,0 +1,19 @@
+---
+title: Toggle backup lock
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: >-
+ Toggles the locked status of a backup. A locked backup cannot be
+ deleted by the automatic backup rotation.
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Toggles the locked status of a backup. A locked backup cannot be deleted by the automatic backup rotation.
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-databases/delete-delete-database.mdx b/content/docs/api/client-server-databases/delete-delete-database.mdx
new file mode 100644
index 000000000..fca894008
--- /dev/null
+++ b/content/docs/api/client-server-databases/delete-delete-database.mdx
@@ -0,0 +1,17 @@
+---
+title: Delete database
+full: true
+_openapi:
+ method: DELETE
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Deletes the specified database
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Deletes the specified database
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-databases/get-list-databases.mdx b/content/docs/api/client-server-databases/get-list-databases.mdx
new file mode 100644
index 000000000..c185e8c09
--- /dev/null
+++ b/content/docs/api/client-server-databases/get-list-databases.mdx
@@ -0,0 +1,28 @@
+---
+title: List databases
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: |-
+ Lists all databases on a server
+
+ ## Include parameters
+ | Parameter | Description |
+ |-----------|-------------------------------------|
+ | password | Includes the database user password |
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Lists all databases on a server
+
+## Include parameters
+| Parameter | Description |
+|-----------|-------------------------------------|
+| password | Includes the database user password |
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-databases/post-create-database.mdx b/content/docs/api/client-server-databases/post-create-database.mdx
new file mode 100644
index 000000000..dcbb8e087
--- /dev/null
+++ b/content/docs/api/client-server-databases/post-create-database.mdx
@@ -0,0 +1,17 @@
+---
+title: Create database
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Creates a new database
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Creates a new database
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-databases/post-rotate-password.mdx b/content/docs/api/client-server-databases/post-rotate-password.mdx
new file mode 100644
index 000000000..14198c944
--- /dev/null
+++ b/content/docs/api/client-server-databases/post-rotate-password.mdx
@@ -0,0 +1,17 @@
+---
+title: Rotate password
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Changes the password of a specified database
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Changes the password of a specified database
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-file-manager/get-download-file.mdx b/content/docs/api/client-server-file-manager/get-download-file.mdx
new file mode 100644
index 000000000..b03ad0434
--- /dev/null
+++ b/content/docs/api/client-server-file-manager/get-download-file.mdx
@@ -0,0 +1,28 @@
+---
+title: Download file
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: |-
+ Generates a one-time link to download the specified file
+
+ ## Available parameters
+ | Parameter | Description |
+ |-----------|------------------------------|
+ | file | URL encoded path to the desired file |
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Generates a one-time link to download the specified file
+
+## Available parameters
+| Parameter | Description |
+|-----------|------------------------------|
+| file | URL encoded path to the desired file |
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-file-manager/get-get-file-contents.mdx b/content/docs/api/client-server-file-manager/get-get-file-contents.mdx
new file mode 100644
index 000000000..49b5748b2
--- /dev/null
+++ b/content/docs/api/client-server-file-manager/get-get-file-contents.mdx
@@ -0,0 +1,28 @@
+---
+title: Get file contents
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: |-
+ Displays the contents of the specified file
+
+ ## Available parameters
+ | Parameter | Description |
+ |-----------|--------------------------------------|
+ | file | URL encoded path to the desired file |
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Displays the contents of the specified file
+
+## Available parameters
+| Parameter | Description |
+|-----------|--------------------------------------|
+| file | URL encoded path to the desired file |
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-file-manager/get-list-files.mdx b/content/docs/api/client-server-file-manager/get-list-files.mdx
new file mode 100644
index 000000000..d061f8d93
--- /dev/null
+++ b/content/docs/api/client-server-file-manager/get-list-files.mdx
@@ -0,0 +1,28 @@
+---
+title: List files
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: |-
+ Lists all files of the server
+
+ ## Available parameters
+ | Parameter | Description |
+ |-----------|-------------------------------------|
+ | directory | URL encoded path to list files from |
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Lists all files of the server
+
+## Available parameters
+| Parameter | Description |
+|-----------|-------------------------------------|
+| directory | URL encoded path to list files from |
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-file-manager/get-upload-file.mdx b/content/docs/api/client-server-file-manager/get-upload-file.mdx
new file mode 100644
index 000000000..e1be0018d
--- /dev/null
+++ b/content/docs/api/client-server-file-manager/get-upload-file.mdx
@@ -0,0 +1,17 @@
+---
+title: Upload file
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Returns a signed URL used to upload files to the server using POST
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Returns a signed URL used to upload files to the server using POST
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-file-manager/post-chmod-file.mdx b/content/docs/api/client-server-file-manager/post-chmod-file.mdx
new file mode 100644
index 000000000..9bb556e63
--- /dev/null
+++ b/content/docs/api/client-server-file-manager/post-chmod-file.mdx
@@ -0,0 +1,17 @@
+---
+title: Change file permissions
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Updates file permissions for one or more files in the given directory
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Updates file permissions for one or more files in the given directory
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-file-manager/post-compress-file.mdx b/content/docs/api/client-server-file-manager/post-compress-file.mdx
new file mode 100644
index 000000000..e2106fed8
--- /dev/null
+++ b/content/docs/api/client-server-file-manager/post-compress-file.mdx
@@ -0,0 +1,17 @@
+---
+title: Compress file
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Compresses the specified file
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Compresses the specified file
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-file-manager/post-copy-file.mdx b/content/docs/api/client-server-file-manager/post-copy-file.mdx
new file mode 100644
index 000000000..f796d12fb
--- /dev/null
+++ b/content/docs/api/client-server-file-manager/post-copy-file.mdx
@@ -0,0 +1,17 @@
+---
+title: Copy file
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Copies the specified file
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Copies the specified file
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-file-manager/post-create-folder.mdx b/content/docs/api/client-server-file-manager/post-create-folder.mdx
new file mode 100644
index 000000000..7ef86d1ee
--- /dev/null
+++ b/content/docs/api/client-server-file-manager/post-create-folder.mdx
@@ -0,0 +1,17 @@
+---
+title: Create folder
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Creates the specified folder in the specified directory
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Creates the specified folder in the specified directory
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-file-manager/post-decompress-file.mdx b/content/docs/api/client-server-file-manager/post-decompress-file.mdx
new file mode 100644
index 000000000..de8f548b5
--- /dev/null
+++ b/content/docs/api/client-server-file-manager/post-decompress-file.mdx
@@ -0,0 +1,17 @@
+---
+title: Decompress file
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Decompresses the selected file
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Decompresses the selected file
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-file-manager/post-delete-file.mdx b/content/docs/api/client-server-file-manager/post-delete-file.mdx
new file mode 100644
index 000000000..e599acfaa
--- /dev/null
+++ b/content/docs/api/client-server-file-manager/post-delete-file.mdx
@@ -0,0 +1,17 @@
+---
+title: Delete file
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Deletes the specified file(s) or folder(s)
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Deletes the specified file(s) or folder(s)
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-file-manager/post-pull-file.mdx b/content/docs/api/client-server-file-manager/post-pull-file.mdx
new file mode 100644
index 000000000..80ae2f683
--- /dev/null
+++ b/content/docs/api/client-server-file-manager/post-pull-file.mdx
@@ -0,0 +1,17 @@
+---
+title: Pull remote file
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Downloads a file from an external URL to the server
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Downloads a file from an external URL to the server
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-file-manager/post-write-file.mdx b/content/docs/api/client-server-file-manager/post-write-file.mdx
new file mode 100644
index 000000000..fde48f1ad
--- /dev/null
+++ b/content/docs/api/client-server-file-manager/post-write-file.mdx
@@ -0,0 +1,28 @@
+---
+title: Write file
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: |-
+ Writes data to the specified file
+
+ ## Available parameters
+ | Parameter | Description |
+ |-----------|--------------------------------------|
+ | file | URL encoded path to the desired file |
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Writes data to the specified file
+
+## Available parameters
+| Parameter | Description |
+|-----------|--------------------------------------|
+| file | URL encoded path to the desired file |
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-file-manager/put-rename-file.mdx b/content/docs/api/client-server-file-manager/put-rename-file.mdx
new file mode 100644
index 000000000..5184d8335
--- /dev/null
+++ b/content/docs/api/client-server-file-manager/put-rename-file.mdx
@@ -0,0 +1,17 @@
+---
+title: Rename file
+full: true
+_openapi:
+ method: PUT
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Renames the specified file(s) or folder(s)
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Renames the specified file(s) or folder(s)
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-network/delete-unassign-allocation.mdx b/content/docs/api/client-server-network/delete-unassign-allocation.mdx
new file mode 100644
index 000000000..dfe744832
--- /dev/null
+++ b/content/docs/api/client-server-network/delete-unassign-allocation.mdx
@@ -0,0 +1,17 @@
+---
+title: Unassign allocation
+full: true
+_openapi:
+ method: DELETE
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Deletes the specified non-primary allocation
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Deletes the specified non-primary allocation
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-network/get-list-allocations.mdx b/content/docs/api/client-server-network/get-list-allocations.mdx
new file mode 100644
index 000000000..222fb765a
--- /dev/null
+++ b/content/docs/api/client-server-network/get-list-allocations.mdx
@@ -0,0 +1,17 @@
+---
+title: List allocations
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Retrieves the network information for the specified server
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Retrieves the network information for the specified server
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-network/post-assign-allocation.mdx b/content/docs/api/client-server-network/post-assign-allocation.mdx
new file mode 100644
index 000000000..30334c14a
--- /dev/null
+++ b/content/docs/api/client-server-network/post-assign-allocation.mdx
@@ -0,0 +1,19 @@
+---
+title: Assign allocation
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: >-
+ Automatically assigns a new allocation if auto-assign is enabled on
+ the instance
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Automatically assigns a new allocation if auto-assign is enabled on the instance
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-network/post-set-allocation-note.mdx b/content/docs/api/client-server-network/post-set-allocation-note.mdx
new file mode 100644
index 000000000..990a7a729
--- /dev/null
+++ b/content/docs/api/client-server-network/post-set-allocation-note.mdx
@@ -0,0 +1,28 @@
+---
+title: Set allocation note
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: |-
+ Sets a note for the allocation
+
+ # Fields
+ | Name | Required? | Type | Description | Rules |
+ |-------|-----------|--------|---------------------|-------|
+ | notes | required | string | Note for allocation | |
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Sets a note for the allocation
+
+# Fields
+| Name | Required? | Type | Description | Rules |
+|-------|-----------|--------|---------------------|-------|
+| notes | required | string | Note for allocation | |
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-network/post-set-primary-allocation.mdx b/content/docs/api/client-server-network/post-set-primary-allocation.mdx
new file mode 100644
index 000000000..748400889
--- /dev/null
+++ b/content/docs/api/client-server-network/post-set-primary-allocation.mdx
@@ -0,0 +1,17 @@
+---
+title: Set primary allocation
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Sets the primary allocation
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Sets the primary allocation
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-schedules/delete-delete-schedule.mdx b/content/docs/api/client-server-schedules/delete-delete-schedule.mdx
new file mode 100644
index 000000000..563f421a1
--- /dev/null
+++ b/content/docs/api/client-server-schedules/delete-delete-schedule.mdx
@@ -0,0 +1,17 @@
+---
+title: Delete schedule
+full: true
+_openapi:
+ method: DELETE
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Deletes the specified schedule
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Deletes the specified schedule
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-schedules/delete-delete-task.mdx b/content/docs/api/client-server-schedules/delete-delete-task.mdx
new file mode 100644
index 000000000..6133f1a6a
--- /dev/null
+++ b/content/docs/api/client-server-schedules/delete-delete-task.mdx
@@ -0,0 +1,17 @@
+---
+title: Delete task
+full: true
+_openapi:
+ method: DELETE
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Deletes the specified task
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Deletes the specified task
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-schedules/get-list-schedules.mdx b/content/docs/api/client-server-schedules/get-list-schedules.mdx
new file mode 100644
index 000000000..ba7b2f5bb
--- /dev/null
+++ b/content/docs/api/client-server-schedules/get-list-schedules.mdx
@@ -0,0 +1,17 @@
+---
+title: List schedules
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Lists all schedules added to the server
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Lists all schedules added to the server
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-schedules/get-schedule-details.mdx b/content/docs/api/client-server-schedules/get-schedule-details.mdx
new file mode 100644
index 000000000..c19d0c13b
--- /dev/null
+++ b/content/docs/api/client-server-schedules/get-schedule-details.mdx
@@ -0,0 +1,17 @@
+---
+title: Schedule details
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Retrieves specific schedule
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Retrieves specific schedule
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-schedules/post-create-schedule.mdx b/content/docs/api/client-server-schedules/post-create-schedule.mdx
new file mode 100644
index 000000000..3dc1b8115
--- /dev/null
+++ b/content/docs/api/client-server-schedules/post-create-schedule.mdx
@@ -0,0 +1,17 @@
+---
+title: Create schedule
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Creates a new schedule
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Creates a new schedule
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-schedules/post-create-task.mdx b/content/docs/api/client-server-schedules/post-create-task.mdx
new file mode 100644
index 000000000..f27b7a621
--- /dev/null
+++ b/content/docs/api/client-server-schedules/post-create-task.mdx
@@ -0,0 +1,17 @@
+---
+title: Create task
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Creates a new task on the specified schedule
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Creates a new task on the specified schedule
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-schedules/post-execute-schedule.mdx b/content/docs/api/client-server-schedules/post-execute-schedule.mdx
new file mode 100644
index 000000000..8760d4f77
--- /dev/null
+++ b/content/docs/api/client-server-schedules/post-execute-schedule.mdx
@@ -0,0 +1,17 @@
+---
+title: Execute schedule
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Triggers a schedule to run now, regardless of its cron timing
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Triggers a schedule to run now, regardless of its cron timing
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-schedules/post-update-schedule.mdx b/content/docs/api/client-server-schedules/post-update-schedule.mdx
new file mode 100644
index 000000000..d736b5b4e
--- /dev/null
+++ b/content/docs/api/client-server-schedules/post-update-schedule.mdx
@@ -0,0 +1,17 @@
+---
+title: Update schedule
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Updates the specified schedule
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Updates the specified schedule
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-schedules/post-update-task.mdx b/content/docs/api/client-server-schedules/post-update-task.mdx
new file mode 100644
index 000000000..672a613bc
--- /dev/null
+++ b/content/docs/api/client-server-schedules/post-update-task.mdx
@@ -0,0 +1,17 @@
+---
+title: Update task
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Updates the specified task
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Updates the specified task
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-settings/post-reinstall-server.mdx b/content/docs/api/client-server-settings/post-reinstall-server.mdx
new file mode 100644
index 000000000..3c6ad442c
--- /dev/null
+++ b/content/docs/api/client-server-settings/post-reinstall-server.mdx
@@ -0,0 +1,17 @@
+---
+title: Reinstall server
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Renames the server
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Renames the server
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-settings/post-rename-server.mdx b/content/docs/api/client-server-settings/post-rename-server.mdx
new file mode 100644
index 000000000..f95ce2c1a
--- /dev/null
+++ b/content/docs/api/client-server-settings/post-rename-server.mdx
@@ -0,0 +1,28 @@
+---
+title: Rename server
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: |-
+ Renames the server
+
+ # Fields
+ | Name | Required? | Type | Description | Rules |
+ |------|-----------|--------|-------------------------|-------|
+ | name | required | string | New name for the server | |
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Renames the server
+
+# Fields
+| Name | Required? | Type | Description | Rules |
+|------|-----------|--------|-------------------------|-------|
+| name | required | string | New name for the server | |
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-settings/put-update-docker-image.mdx b/content/docs/api/client-server-settings/put-update-docker-image.mdx
new file mode 100644
index 000000000..38ffcb9ad
--- /dev/null
+++ b/content/docs/api/client-server-settings/put-update-docker-image.mdx
@@ -0,0 +1,20 @@
+---
+title: Update Docker image
+full: true
+_openapi:
+ method: PUT
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: >-
+ Changes the Docker image the server runs with. The image must be one
+ of the images allowed by the server's egg. Returns 400 if the image
+ was manually set by an admin.
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Changes the Docker image the server runs with. The image must be one of the images allowed by the server's egg. Returns 400 if the image was manually set by an admin.
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-startup/get-list-variables.mdx b/content/docs/api/client-server-startup/get-list-variables.mdx
new file mode 100644
index 000000000..52576f5c5
--- /dev/null
+++ b/content/docs/api/client-server-startup/get-list-variables.mdx
@@ -0,0 +1,17 @@
+---
+title: List Variables
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Lists all variables on the server
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Lists all variables on the server
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-startup/put-update-variable.mdx b/content/docs/api/client-server-startup/put-update-variable.mdx
new file mode 100644
index 000000000..3f93f5405
--- /dev/null
+++ b/content/docs/api/client-server-startup/put-update-variable.mdx
@@ -0,0 +1,17 @@
+---
+title: Update Variable
+full: true
+_openapi:
+ method: PUT
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Updates the specified variable
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Updates the specified variable
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-users/delete-delete-user.mdx b/content/docs/api/client-server-users/delete-delete-user.mdx
new file mode 100644
index 000000000..b76770f19
--- /dev/null
+++ b/content/docs/api/client-server-users/delete-delete-user.mdx
@@ -0,0 +1,17 @@
+---
+title: Delete user
+full: true
+_openapi:
+ method: DELETE
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Removes the specified user from the server
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Removes the specified user from the server
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-users/get-list-users.mdx b/content/docs/api/client-server-users/get-list-users.mdx
new file mode 100644
index 000000000..7a6ce2ae6
--- /dev/null
+++ b/content/docs/api/client-server-users/get-list-users.mdx
@@ -0,0 +1,19 @@
+---
+title: List Users
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: >-
+ Lists all users added to the server, along with details about them and
+ their permissions
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Lists all users added to the server, along with details about them and their permissions
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-users/get-user-details.mdx b/content/docs/api/client-server-users/get-user-details.mdx
new file mode 100644
index 000000000..97e436736
--- /dev/null
+++ b/content/docs/api/client-server-users/get-user-details.mdx
@@ -0,0 +1,17 @@
+---
+title: User details
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Retrieves information about a specific user
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Retrieves information about a specific user
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-users/post-create-user.mdx b/content/docs/api/client-server-users/post-create-user.mdx
new file mode 100644
index 000000000..b19609550
--- /dev/null
+++ b/content/docs/api/client-server-users/post-create-user.mdx
@@ -0,0 +1,38 @@
+---
+title: Create User
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: >-
+ Adds a user to the server
+
+
+ # Fields
+
+ | Name | Required? | Type |
+ Description | Rules |
+
+ |-------------|-----------|--------|------------------------------------|-------|
+
+ | email | required | string | Email address of the
+ user | |
+
+ | permissions | required | object | Permissions that user is
+ permitted | |
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Adds a user to the server
+
+# Fields
+| Name | Required? | Type | Description | Rules |
+|-------------|-----------|--------|------------------------------------|-------|
+| email | required | string | Email address of the user | |
+| permissions | required | object | Permissions that user is permitted | |
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server-users/post-update-user.mdx b/content/docs/api/client-server-users/post-update-user.mdx
new file mode 100644
index 000000000..995d4e453
--- /dev/null
+++ b/content/docs/api/client-server-users/post-update-user.mdx
@@ -0,0 +1,34 @@
+---
+title: Update user
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: >-
+ Updates the specified user
+
+
+ # Fields
+
+ | Name | Required? | Type |
+ Description | Rules |
+
+ |-------------|-----------|--------|------------------------------------|-------|
+
+ | permissions | required | object | Permissions that user is
+ permitted | |
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Updates the specified user
+
+# Fields
+| Name | Required? | Type | Description | Rules |
+|-------------|-----------|--------|------------------------------------|-------|
+| permissions | required | object | Permissions that user is permitted | |
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server/get-console-details.mdx b/content/docs/api/client-server/get-console-details.mdx
new file mode 100644
index 000000000..1dfed2c41
--- /dev/null
+++ b/content/docs/api/client-server/get-console-details.mdx
@@ -0,0 +1,88 @@
+---
+title: Console details
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: >-
+ Generates credentials to establish a websocket
+
+
+ ## How to connect
+
+ 1. Connect to the websocket address (in this example
+ "wss://pterodactyl.file.properties:8080/api/servers/1a7ce997-259b-452e-8b4e-cecc464142ca/ws")
+
+ 2. Send the token to the websocket like this:
+ `{"event":"auth","args":["eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImp0aSI6Ij..."]}`
+
+
+ * Tokens last about 10-15 minutes, and the websocket will notify you
+ once you need to send a new token with `{"event":"token expiring"}`
+ and `{"event":"token expired"}`
+
+
+ ## Things you can send
+
+ * `{"event":"auth","args":[""]}` # Authenticate with websocket
+
+ * `{"event":"send stats","args":[null]}` # Request stats
+
+ * `{"event":"send logs","args":[null]}` # Request logs
+
+ * `{"event":"set state","args":[""]}` # Send power
+ action
+
+ * `{"event":"send command","args":[""]}` # Send command
+
+
+ ## Things you'll receive
+
+ * `{"event":"auth success"}` # Upon successful websocket
+ authentication
+
+ * `{"event":"status","args":["offline"]}` # Status updates of the
+ server
+
+ * `{"event":"console output","args":["[14:07:12] [Query Listener
+ #1/INFO]: Query running on 0.0.0.0:25565"]}` # Logs from server
+
+ *
+ `{"event":"stats","args":["{\"memory_bytes\":526626816,\"memory_limit_bytes\":588800000,\"cpu_absolute\":588.815,\"network\":{\"rx_bytes\":1126,\"tx_bytes\":1126},\"state\":\"stopping\",\"disk_bytes\":128118626}"]}`
+ # Stats from server
+
+ * `{"event":"token expiring"}` # Token is expiring soon so request a
+ new one and send it to the websocket
+
+ * `{"event":"token expired"}` # Token has expired
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Generates credentials to establish a websocket
+
+## How to connect
+1. Connect to the websocket address (in this example "wss://pterodactyl.file.properties:8080/api/servers/1a7ce997-259b-452e-8b4e-cecc464142ca/ws")
+2. Send the token to the websocket like this: `{"event":"auth","args":["eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImp0aSI6Ij..."]}`
+
+* Tokens last about 10-15 minutes, and the websocket will notify you once you need to send a new token with `{"event":"token expiring"}` and `{"event":"token expired"}`
+
+## Things you can send
+* `{"event":"auth","args":[""]}` # Authenticate with websocket
+* `{"event":"send stats","args":[null]}` # Request stats
+* `{"event":"send logs","args":[null]}` # Request logs
+* `{"event":"set state","args":[""]}` # Send power action
+* `{"event":"send command","args":[""]}` # Send command
+
+## Things you'll receive
+* `{"event":"auth success"}` # Upon successful websocket authentication
+* `{"event":"status","args":["offline"]}` # Status updates of the server
+* `{"event":"console output","args":["[14:07:12] [Query Listener #1/INFO]: Query running on 0.0.0.0:25565"]}` # Logs from server
+* `{"event":"stats","args":["{\"memory_bytes\":526626816,\"memory_limit_bytes\":588800000,\"cpu_absolute\":588.815,\"network\":{\"rx_bytes\":1126,\"tx_bytes\":1126},\"state\":\"stopping\",\"disk_bytes\":128118626}"]}` # Stats from server
+* `{"event":"token expiring"}` # Token is expiring soon so request a new one and send it to the websocket
+* `{"event":"token expired"}` # Token has expired
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server/get-resource-usage.mdx b/content/docs/api/client-server/get-resource-usage.mdx
new file mode 100644
index 000000000..a741d0212
--- /dev/null
+++ b/content/docs/api/client-server/get-resource-usage.mdx
@@ -0,0 +1,17 @@
+---
+title: Resource usage
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Retrieves resource utilization of the specified server
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Retrieves resource utilization of the specified server
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server/get-server-activity.mdx b/content/docs/api/client-server/get-server-activity.mdx
new file mode 100644
index 000000000..8b2b625fb
--- /dev/null
+++ b/content/docs/api/client-server/get-server-activity.mdx
@@ -0,0 +1,17 @@
+---
+title: Server activity
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: Returns the activity log for the specified server
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Returns the activity log for the specified server
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server/get-server-details.mdx b/content/docs/api/client-server/get-server-details.mdx
new file mode 100644
index 000000000..39b331f28
--- /dev/null
+++ b/content/docs/api/client-server/get-server-details.mdx
@@ -0,0 +1,30 @@
+---
+title: Server details
+full: true
+_openapi:
+ method: GET
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: |-
+ Retrieves information about the specified server
+
+ ## Include parameters
+ | Parameter | Description |
+ |-----------|-------------------------------------------|
+ | egg | Information about the egg the server uses |
+ | subusers | List of subusers on the server |
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Retrieves information about the specified server
+
+## Include parameters
+| Parameter | Description |
+|-----------|-------------------------------------------|
+| egg | Information about the egg the server uses |
+| subusers | List of subusers on the server |
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server/post-change-power-state.mdx b/content/docs/api/client-server/post-change-power-state.mdx
new file mode 100644
index 000000000..50247f9f4
--- /dev/null
+++ b/content/docs/api/client-server/post-change-power-state.mdx
@@ -0,0 +1,34 @@
+---
+title: Change power state
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: |-
+ Sends a power signal to the server
+
+ ## Signals
+ | Signal | Description |
+ |---------|----------------------------------|
+ | start | Starts the server |
+ | stop | Gracefully stops the server |
+ | restart | Stops then starts the server |
+ | kill | Instantly end the server process |
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Sends a power signal to the server
+
+## Signals
+| Signal | Description |
+|---------|----------------------------------|
+| start | Starts the server |
+| stop | Gracefully stops the server |
+| restart | Stops then starts the server |
+| kill | Instantly end the server process |
+
+
\ No newline at end of file
diff --git a/content/docs/api/client-server/post-send-command.mdx b/content/docs/api/client-server/post-send-command.mdx
new file mode 100644
index 000000000..0aba0b5e4
--- /dev/null
+++ b/content/docs/api/client-server/post-send-command.mdx
@@ -0,0 +1,24 @@
+---
+title: Send command
+full: true
+_openapi:
+ method: POST
+ toc: []
+ structuredData:
+ headings: []
+ contents:
+ - content: >-
+ Sends a command to the server
+
+
+ The server must be online to send a command to it. You will get HTTP
+ 502 is the server if not online.
+---
+
+{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
+
+Sends a command to the server
+
+The server must be online to send a command to it. You will get HTTP 502 is the server if not online.
+
+
\ No newline at end of file
diff --git a/content/docs/api/meta.json b/content/docs/api/meta.json
new file mode 100644
index 000000000..a0dff9b63
--- /dev/null
+++ b/content/docs/api/meta.json
@@ -0,0 +1,27 @@
+{
+ "title": "API Reference",
+ "root": true,
+ "pages": [
+ "---Client API---",
+ "client-general",
+ "client-account",
+ "client-server",
+ "client-server-databases",
+ "client-server-file-manager",
+ "client-server-schedules",
+ "client-server-network",
+ "client-server-users",
+ "client-server-backups",
+ "client-server-startup",
+ "client-server-settings",
+ "---Application API---",
+ "application-users",
+ "application-nodes",
+ "application-nodes-allocations",
+ "application-locations",
+ "application-servers",
+ "application-servers-database-management",
+ "application-nests",
+ "application-nests-eggs-management"
+ ]
+}
\ No newline at end of file
diff --git a/content/docs/guides/configuration/add-node.mdx b/content/docs/guides/configuration/add-node.mdx
index 2a7555e9f..d1027827f 100644
--- a/content/docs/guides/configuration/add-node.mdx
+++ b/content/docs/guides/configuration/add-node.mdx
@@ -41,7 +41,7 @@ Don't forget to account for OS overhead and other software requirements on machi
## Install the Daemon
-At this point you'll need to have the Daemon installed on your machine. Check out the [documentation](/docs/wings/installation) for more information, or try one of the community guides for [CentOS](/docs/guides/wings-installation/centos7), or [Debian](/docs/guides/panel-installation/debian).
+At this point you'll need to have the Daemon installed on your machine. Check out the [documentation](/wings/installing) for more information, or try one of the community guides for [CentOS](/guides/wings-installation/centos7), or [Debian](/guides/panel-installation/debian).
## Configuring the Node
diff --git a/content/docs/guides/configuration/creating-custom-egg.mdx b/content/docs/guides/configuration/creating-custom-egg.mdx
deleted file mode 100644
index 288f0eded..000000000
--- a/content/docs/guides/configuration/creating-custom-egg.mdx
+++ /dev/null
@@ -1,164 +0,0 @@
----
-title: Creating a Custom Egg
-description: Learn how to create custom eggs for your Pterodactyl Panel
----
-
-
-
-
-You should not edit existing services or options that ship with the Panel. Each upgrade we push can make minor changes to these, and you'll lose any changes you've made.
-
-
-The first thing you'll need to do is create a new service. In this case, the name and description speak for themselves. The `Folder Name` _must be a unique name_ not being used by any other service, and should only contain letters, numbers, underscores, and dashes. This is the name of the folder where the daemon will be storing the service options on the daemon.
-
-The default start command is also required, however it can be changed per-option.
-
-## Create New Option
-
-After creating the service, in the bottom right of the page you should see a button titled `New Egg`, press it.
-
-
-
-You will be taken to a new service option page which is where most of the configuration happens. The first thing you need to do is select your service that you created previously from the `Associated Nest` dropdown.
-
-
-
-After that, enter an Option Name to describe it, in this case I am using `Widget`. You will also need to provide a _valid_ docker image, as well as a start command to be assigned to servers under this service option (remember, this can be tweaked per-server if needed).
-
-_Docker images must be specifically designed to work with Pterodactyl Panel._ You should read more about that in our [Creating a Docker Image](/docs/guides/configuration/creating-custom-image) guide.
-
-## Configure Process Management
-
-This is perhaps the most important step in this service option configuration, as this tells the Daemon how to run everything.
-
-
-
-The first field you'll encounter is `Copy Settings From`. The default selection is `None`. That is expected, and okay. This dropdown is discussed at the end of this article.
-
-### Stop Command
-
-Next, you'll encounter `Stop Command` and, as the name implies, this should be the command used to safely stop the option. For some games, this is `stop` or `end`. Certain programs and games don't have a specified stop command, so you can enter `^C` to have the daemon execute a `SIGINT` to end the process.
-
-### Log Storage
-
-Logs are competely handeled by the daemon now and use the docker logs to output the complete output from the server. This can be set like below.
-
-```json
-{}
-```
-
-### Configuration Files
-
-The next block is one of the most complex blocks, the `Configuration Files` descriptor. The Daemon will process this block prior to booting the server to ensure all of the required settings are defined and set correctly.
-
-```json
-{
- "server.properties": {
- "parser": "properties",
- "find": {
- "server-ip": "0.0.0.0",
- "enable-query": "true",
- "server-port": "{{server.build.default.port}}",
- "query.port": "{{server.build.default.port}}"
- }
- }
-}
-```
-
-In this example, we are telling the Daemon to read `server.properties` in `/home/container`. Within this block, we define a `parser`, in this case `properties` but the following are [valid parsers](https://github.com/pterodactyl/wings/blob/develop/parser/parser.go#L25-L30):
-
-- `file` — This parser goes based on matching the beginning of lines, and not a specific property like the other five. Avoid using this parser if possible.
-- `yaml` (supports `*` notation)
-- `properties`
-- `ini`
-- `json` (supports `*` notation)
-- `xml`
-
-Once you have defined a parser, we then define a `find` block which tells the Daemon what specific elements to find and replace. In this example, we have provided four separate items within the `server.properties` file that we want to find and replace to the assigned values. You can use either an exact value, or define a specific server setting from the `server.json` file. In this case, we're assigning the default server port to be used as the `server-port` and `query.port`. **These placeholders are case sensitive, and should have no spaces in them.**
-
-You can have multiple files listed here, the Daemon will process them in parallel before starting the server. When using `yaml` or `json` you can use more advanced searching for elements.
-
-```json
-{
- "config.yml": {
- "parser": "yaml",
- "find": {
- "listeners[0].query_enabled": true,
- "listeners[0].query_port": "{{server.build.default.port}}",
- "listeners[0].host": "0.0.0.0:{{server.build.default.port}}",
- "servers.*.address": {
- "127.0.0.1": "{{config.docker.interface}}",
- "localhost": "{{config.docker.interface}}"
- }
- }
- }
-}
-```
-
-In this example, we are parsing `config.yml` using the `yaml` parser. The first three find items are simply assigning ports and IPs for the first listener block. The last one, `servers.*.address` uses wildcard matching to match any items within the `servers` block, and then finding each `address` block for those items.
-
-An advanced feature of this file configuration is the ability to define multiple find and replace statements for a single matching line. In this case, we are looking for either `127.0.0.1` or `localhost` and replacing them with the docker interface defined in the configuration file using `{{config.docker.interface}}`.
-
-### Start Configuration
-
-The last block to configure is the `Start Configuration` for servers running using this service option.
-
-```json
-{
- "done": ")! For help, type "
-}
-```
-
-In the example block above, we define `done` as the entire line, or part of a line that indicates a server is done starting, and is ready for players to join. When the Daemon sees this output, it will mark the server as `ON` rather than `STARTING`.
-
-That concludes basic service option configuration.
-
-## Copy Settings From
-
-As mentioned above, there is a unique `Copy Settings From` dropdown when adding a new option. This gives you the ability to, as the name suggests, copy settings defined above from a different option.
-
-
-
-In the panel, we use this to copy settings that remain the same between similar service options, such as many of the Minecraft options.
-
-For example, lets look at the `Sponge (SpongeVanilla)` service option.
-
-As you can see, it as been told to copy settings from `Vanilla Minecraft`. This means that any of the fields that are left blank will inherit from the assigned parent. We then define a specific `userInteraction` line that is different in Sponge compared to Vanilla, but tell it that everything else should remain the same.
-
-_Please note that `Copy Settings From` does not support nested copies, you can only copy from a single parent, and that parent **must not be copying from another option.**_
-
-## Egg Variables
-
-One of the great parts of the Egg Variables is the ability to define specific variables that users and/or admins can control to tweak different settings without letting users modify the startup command. To create new variables, or edit existing ones, visit the new service option you created, and click the `Variables` tab at the top of the page. Lets take a look at an example variable that we can create.
-
-
-
-The name and description are rather self-explanitory, so I'll skip down to the `Environment Variable` box. This should be an Alpha-Numeric name with underscores, and should be uppercase. This will be the name of the environment variable which can be accessed in the startup command as `{{WOOZLE_WOO}}`, within file modifications as `{{env.WOOZLE_WOO}}`, or just `${WOOZLE_WOO}` in any shell scripts (it is passed through in the environment). We also define a default value for this environment variable in this example, but it is not required to do so.
-
-The next section is `Permissions`, which is a dropdown with two options: `Users Can View` and `Users Can Edit`.
-
-- `Users Can View` — allows a user to view the field on the front-end, as well as the assigned value of that variable. They will be able to see it replaced in their startup command.
-- `Users Can Edit` — allows a user to edit the value of the variable, for example the name of their `server.jar` file if running Minecraft.
-
-You should use caution here, even if you assign neither of the permissions it does not mean that the value will be hidden. Crafty users will still be able to get the environment on their server. In most cases this is simply hiding it from the user, and then used within the Dockerfile to perform actions, thus it is not important for the user to see.
-
-Finally, you will need to define some input rules to validate the value against. In this example, we use `required|string|between:1,10`, which means the field is `required`, must be a `string`, and must be between `1` and `10` characters in length. You can find [all of the available validation rules](https://laravel.com/docs/5.6/validation#available-validation-rules) on the Laravel website. You can also use ReGEX based validation by using the `regex:` rule flag. For example, [`required|regex:/^([\w\d._-]+)(\.jar)$/`](https://regex101.com/r/k4oEOn/1) will require the field, and will match the regex as any letters or numbers (`\w\d`) including underscore (`_`), periods (`.`), and dashes (`-`) ending in `.jar`.
-
-They will then be visible when managing the startup for a server in both the Admin CP and on the Front-End.
-
-
-
-## List of default variables
-
-The default variables are always accessible to all eggs and don't have to be created separately. They can be used in the egg startup, install script, or the configuration file parser.
-
-| Variable | Description | Example |
-| --- | --- | --- |
-| TZ | Time Zone | `Etc/UTC` |
-| STARTUP | Startup command of the egg | `java -Xms128M -Xmx{{SERVER_MEMORY}}M -jar {{SERVER_JARFILE}}` |
-| SERVER_MEMORY | Memory available for the server in MB | `512` |
-| SERVER_IP | Default ip of the server | `127.0.0.1` |
-| SERVER_PORT | Primary Server Port | `27015` |
-| P_SERVER_LOCATION | Location of the server | `Example City` |
-| P_SERVER_UUID | UUID of the server | `539fdca8-4a08-4551-a8d2-8ee5475b50d9` |
-| P_SERVER_ALLOCATION_LIMIT | Limit of allocations allowed for the server | `0` |
diff --git a/content/docs/guides/configuration/creating-custom-image.mdx b/content/docs/guides/configuration/creating-custom-image.mdx
deleted file mode 100644
index 5bf05d0e5..000000000
--- a/content/docs/guides/configuration/creating-custom-image.mdx
+++ /dev/null
@@ -1,140 +0,0 @@
----
-title: Creating a Custom Docker Image
-description: Build custom Docker images for use with Pterodactyl eggs
----
-
-
-
-
-This tutorial uses examples from our [`core:java`](https://github.com/pterodactyl/images/tree/java) docker image, which can be found on GitHub. This tutorial also assumes some knowledge of [Docker](https://docker.io/), we suggest reading up if this all looks foreign to you.
-
-
-## Creating the Dockerfile
-
-The most important part of this process is to create the [`Dockerfile`](https://docs.docker.com/engine/reference/builder/) that will be used by the Daemon. Due to heavy restrictions on server containers, you must setup this file in a specific manner.
-
-We try to make use of [Alpine Linux](https://alpinelinux.org) as much as possible for our images in order to keep their size down.
-
-```bash
-# ----------------------------------
-# Pterodactyl Core Dockerfile
-# Environment: Java
-# Minimum Panel Version: 0.6.0
-# ----------------------------------
-FROM openjdk:8-jdk-alpine
-
-MAINTAINER Pterodactyl Software,
-
-RUN apk add --no-cache --update curl ca-certificates openssl git tar bash sqlite fontconfig \
- && adduser --disabled-password --home /home/container container
-
-USER container
-ENV USER=container HOME=/home/container
-
-WORKDIR /home/container
-
-COPY ./entrypoint.sh /entrypoint.sh
-
-CMD ["/bin/bash", "/entrypoint.sh"]
-```
-
-Lets walk through the `Dockerfile` above. The first thing you'll notice is the [`FROM`](https://docs.docker.com/engine/reference/builder/#from) declaration.
-
-```bash
-FROM openjdk:8-jdk-alpine
-```
-
-In this case, we are using [`openjdk:8-jdk-alpine`](https://github.com/docker-library/openjdk) which provides us with Java 8.
-
-## Installing Dependencies
-
-The next thing we do is install the dependencies we will need using Alpine's package manager: `apk`. You'll notice some specific flags that keep the container small, including `--no-cache`, as well as everything being contained in a single [`RUN`](https://docs.docker.com/engine/reference/builder/#run) block.
-
-## Creating a Container User
-
-Within this `RUN` block, you'll notice the `useradd` command.
-
-```bash
-adduser -D -h /home/container container
-```
-
-
-All Pterodactyl containers must have a user named `container`, and the user home **must** be `/home/container`.
-
-
-After we create that user, we then define the default container [`USER`](https://docs.docker.com/engine/reference/builder/#user) as well as a few [`ENV`](https://docs.docker.com/engine/reference/builder/#env) settings to be applied to things running within the container.
-
-## Work Directory & Entrypoint
-
-One of the last things we do is define a [`WORKDIR`](https://docs.docker.com/engine/reference/builder/#workdir) which is where everything else will be executed. The `WORKDIR` must be set the `/home/container`.
-
-Finally, we need to copy our [`ENTRYPOINT`](https://docs.docker.com/engine/reference/builder/#entrypoint) script into the docker image root. This is done using [`COPY`](https://docs.docker.com/engine/reference/builder/#copy), after which we define the command to be used when the container is started using [`CMD`](https://docs.docker.com/engine/reference/builder/#cmd). The `CMD` line should always point to the `entrypoint.sh` file.
-
-```bash
-COPY ./entrypoint.sh /entrypoint.sh
-CMD ["/bin/bash", "/entrypoint.sh"]
-```
-
-## Entrypoint Script
-
-In order to complete this `Dockerfile`, we will need an `entrypoint.sh` file which tells Docker how to run this specific server type.
-
-These entrypoint files are actually fairly abstracted, and the Daemon will pass in the start command as an environment variable before processing it and then executing the command.
-
-```bash
-#!/bin/bash
-cd /home/container
-
-# Output Current Java Version
-java -version ## only really needed to show what version is being used. Should be changed for different applications
-
-# Replace Startup Variables
-MODIFIED_STARTUP=`eval echo $(echo ${STARTUP} | sed -e 's/{{/${/g' -e 's/}}/}/g')`
-echo ":/home/container$ ${MODIFIED_STARTUP}"
-
-# Run the Server
-${MODIFIED_STARTUP}
-```
-
-The second command, `cd /home/container`, simply ensures we are in the correct directory when running the rest of the commands. We then follow that up with `java -version` to output this information to end-users, but that is not necessary.
-
-## Modifying the Startup Command
-
-The most significant part of this file is the `MODIFIED_STARTUP` environment variable. What we are doing in this case is parsing the environment `STARTUP` that is passed into the container by the Daemon. In most cases, this variable looks something like the example below:
-
-```bash
-STARTUP="java -Xms128M -Xmx{{SERVER_MEMORY}}M -jar {{SERVER_JARFILE}}"
-```
-
-You'll notice some placeholders there, specifically `{{SERVER_MEMORY}}` and `{{SERVER_JARFILE}}`. These both refer to other environment variables being passed in, and they look something like the example below.
-
-```bash
-SERVER_MEMORY=1024
-SERVER_JARFILE=server.jar
-```
-
-There are a host of different environment variables, and they change depending on the specific service option configuration. However, that is not necessarily anything to worry about here.
-
-```bash
-MODIFIED_STARTUP=`eval echo $(echo ${STARTUP} | sed -e 's/{{/${/g' -e 's/}}/}/g')`
-```
-
-The command above simply evaluates the `STARTUP` environment variable, and then replaces anything surrounded in curly braces `{{EXAMPLE}}` with a matching environment variable (such as `EXAMPLE`). Thus, our `STARTUP` command:
-
-```bash
-java -Xms128M -Xmx{{SERVER_MEMORY}}M -jar {{SERVER_JARFILE}}
-```
-
-Becomes:
-
-```bash
-java -Xms128M -Xmx1024M -jar server.jar
-```
-
-## Run the Command
-
-The last step is to run this modified startup command, which is done with the line `${MODIFIED_STARTUP}`.
-
-### Note
-
-Sometimes you may need to change the permissions of the `entrypoint.sh` file, on linux you can do this by executing `chmod +x entrypoint.sh` in the directory where the file is.
diff --git a/content/docs/guides/configuration/meta.json b/content/docs/guides/configuration/meta.json
index d4c6f7fcc..2fc5a1e2f 100644
--- a/content/docs/guides/configuration/meta.json
+++ b/content/docs/guides/configuration/meta.json
@@ -3,8 +3,6 @@
"pages": [
"add-node",
"php-upgrade",
- "mounts",
- "creating-custom-egg",
- "creating-custom-image"
+ "mounts"
]
}
diff --git a/content/docs/guides/configuration/php-upgrade.mdx b/content/docs/guides/configuration/php-upgrade.mdx
index 6cbeba874..266d9a15c 100644
--- a/content/docs/guides/configuration/php-upgrade.mdx
+++ b/content/docs/guides/configuration/php-upgrade.mdx
@@ -72,4 +72,4 @@ a2enmod php8.3
### Return to the 1.X.X Upgrade Guide
-After completing the PHP upgrade, return to the [Panel upgrade guide](/docs/panel/upgrade) to continue with the update process.
+After completing the PHP upgrade, return to the [Panel upgrade guide](/panel/updating) to continue with the update process.
diff --git a/content/docs/guides/customization/panel.mdx b/content/docs/guides/customization/panel.mdx
index 3a0a89679..8952fad43 100644
--- a/content/docs/guides/customization/panel.mdx
+++ b/content/docs/guides/customization/panel.mdx
@@ -9,7 +9,7 @@ description: Learn how to build and customize Pterodactyl Panel assets
Do **not** run the following steps on your production nodes.
-Instructions on how to build the panel are also available in the [BUILDING.md](https://github.com/pterodactyl/panel/blob/1.0-develop/BUILDING.md) file.
+Instructions on how to build the panel are also available in the [BUILDING.md](https://github.com/pterodactyl/panel/blob/develop/BUILDING.md) file.
The frontend of the Panel is built with React. Any changes to the source files require to recompile it. This also applies to style sheets. The following sections explain how to do so.
diff --git a/content/docs/guides/egg-creation/creating-custom-egg.mdx b/content/docs/guides/egg-creation/creating-custom-egg.mdx
new file mode 100644
index 000000000..05071673c
--- /dev/null
+++ b/content/docs/guides/egg-creation/creating-custom-egg.mdx
@@ -0,0 +1,61 @@
+---
+title: Creating a Custom Egg
+description: Learn how to create custom eggs for your Pterodactyl Panel
+---
+
+
+Do not modify the default Nests or Eggs provided by the Panel. Each Pterodactyl update may alter these defaults and override your changes.
+
+
+Before creating a custom Egg, it's important to understand Pterodactyl's structure:
+
+**Nests** are collections of eggs (like categories for related server types), and **Eggs** are the specific configurations for installing and running a particular game or software.
+
+## Creating a New Nest (Category)
+
+If your egg doesn't fit into an existing Nest, you should create a new Nest for it. The Nests page can be found in the Admin Dashboard (in the left sidebar, near the bottom).
+
+Click the **"Create New"** button on the Nests page to create a new Nest. You will need to provide:
+
+- **Name:** A descriptive name for the category (for example, "Custom Games" or "Minecraft Mods").
+
+- **Description:** (Optional) Details about what eggs in this nest are for.
+
+Once these are filled, save the new Nest.
+
+
+
+
+If you have a pre-made Egg JSON file (for example, from the community), you can import it instead of creating one from scratch. Use the **"Import Egg"** button on the Nests page, select the target Nest, and upload the egg's JSON file. Check out the [Community Egg Repository](https://pterodactyleggs.com) for a large selection of ready-to-use community eggs.
+
+
+## Creating a New Egg
+
+After you have a Nest, you can create a new Egg within that nest. To do this, navigate to the nest's detail page, then click the **"New Egg"** button at the bottom of the page.
+
+
+
+This opens the egg configuration form (the "New Egg" page). If not already selected, choose the appropriate Nest from the **Associated Nest** dropdown at the top of the form.
+
+Now fill out the details for your new Egg:
+
+### Basic Details
+
+- **Name:** The name of the Egg (e.g. "MyGame Dedicated Server"). This is how the egg will be listed in the panel.
+
+- **Description:** A short description of what this egg is or does.
+
+### Docker Images
+
+Here you select the Docker image(s) that the server will run in. Docker images define the environment (OS and software) available to your server. Pterodactyl provides a variety of [Official images](https://github.com/Ptero-Eggs/yolks) (called "yolks") for many common use-cases, or you can specify a custom image. See the [Egg Docker Images](/guides/egg-creation/egg-docker-images) page for more details on available images.
+
+
+Make sure the Docker image contains all the required runtime dependencies for your server. Any package installed **only in the install script** will **not** be present when the server is running. Also, **the image must include a user named `container` with home directory `/home/container`** (this is required by Pterodactyl for all images).
+
+
+After filling in the basic details, you'll want to configure the remaining parts of your egg:
+
+- [Configuration Files & Startup Detection](/guides/egg-creation/egg-config-parser) — process management, stop commands, config file parsing, and startup detection
+- [Egg Variables](/guides/egg-creation/egg-variables) — define custom and default variables
+- [Egg Install Script](/guides/egg-creation/egg-install-script) — write the install script that sets up server files
+- [Creating a Custom Docker Image](/guides/egg-creation/creating-custom-image) — build your own image if the official ones don't fit your needs
diff --git a/content/docs/guides/egg-creation/creating-custom-image.mdx b/content/docs/guides/egg-creation/creating-custom-image.mdx
new file mode 100644
index 000000000..bfca40fa1
--- /dev/null
+++ b/content/docs/guides/egg-creation/creating-custom-image.mdx
@@ -0,0 +1,144 @@
+---
+title: Creating a Custom Docker Image
+description: Build custom Docker images for use with Pterodactyl eggs
+---
+
+
+All Pterodactyl containers must set `USER=container` and `HOME=/home/container` as environment variables, with `/home/container` as the working directory.
+
+
+This guide explains how to create a custom Docker image for use with Pterodactyl eggs, using a modern base example from the [Pterodactyl yolks repository](https://github.com/pterodactyl/yolks/tree/main).
+
+Docker images define the environment in which a server runs — what software is installed, what versions are used, and how everything is launched. Custom images allow you to add packages or modify behavior beyond what official yolks provide.
+
+## Dockerfile Example
+
+Here's a full Dockerfile example using Java 21 as the base image:
+
+```dockerfile
+FROM --platform=$TARGETOS/$TARGETARCH eclipse-temurin:21-jdk-jammy
+
+LABEL author="Matthew Penner" maintainer="matthew@pterodactyl.io"
+LABEL org.opencontainers.image.source="https://github.com/pterodactyl/yolks"
+LABEL org.opencontainers.image.licenses=MIT
+
+ENV DEBIAN_FRONTEND=noninteractive
+
+RUN apt update -y \
+ && apt install -y \
+ curl \
+ lsof \
+ ca-certificates \
+ openssl \
+ git \
+ tar \
+ sqlite3 \
+ fontconfig \
+ tzdata \
+ iproute2 \
+ libfreetype6 \
+ tini \
+ zip \
+ unzip
+
+ENV USER=container HOME=/home/container
+WORKDIR /home/container
+
+COPY --chmod=755 ./entrypoint.sh /entrypoint.sh
+
+ENTRYPOINT ["/usr/bin/tini", "-g", "--"]
+CMD ["/entrypoint.sh"]
+```
+
+## Breakdown of the Dockerfile
+
+### Base Image
+```dockerfile
+FROM --platform=$TARGETOS/$TARGETARCH eclipse-temurin:21-jdk-jammy
+```
+Uses Eclipse Temurin Java 21 JDK on Ubuntu Jammy. The `--platform` flag ensures compatibility with different system architectures.
+
+### Metadata Labels
+```dockerfile
+LABEL author="..."
+```
+Provides metadata such as author, source, and license. Useful for documentation.
+
+### Dependencies
+```dockerfile
+RUN apt update -y && apt install -y [...]
+```
+Installs useful server packages:
+
+- `curl`, `lsof`, `openssl`: Common CLI tools.
+- `fontconfig`, `libfreetype6`: Support Java-based GUI rendering.
+- `tini`: Handles signal forwarding and zombie reaping.
+
+### Environment & Working Directory
+```dockerfile
+ENV USER=container HOME=/home/container
+WORKDIR /home/container
+```
+Sets the required environment variables and default working directory.
+
+### Entrypoint Setup
+```dockerfile
+COPY --chmod=755 ./entrypoint.sh /entrypoint.sh
+```
+Copies the startup script and ensures it's executable.
+
+### Entry Command
+```dockerfile
+ENTRYPOINT ["/usr/bin/tini", "-g", "--"]
+CMD ["/entrypoint.sh"]
+```
+Uses `tini` to launch the container and execute the custom startup script.
+
+## Example entrypoint.sh
+
+In order to complete this Dockerfile, we will need an `entrypoint.sh` file which tells Docker how to run this specific server type.
+
+These entrypoint files are actually fairly abstracted, and the Daemon will pass in the start command as an environment variable before processing it and then executing the command.
+
+```bash
+#!/bin/bash
+
+# Default the TZ environment variable to UTC.
+TZ=${TZ:-UTC}
+export TZ
+
+# Set environment variable that holds the Internal Docker IP
+INTERNAL_IP=$(ip route get 1 | awk '{print $(NF-2);exit}')
+export INTERNAL_IP
+
+# Switch to the container's working directory
+cd /home/container || exit 1
+
+# Print Java version
+printf "\033[1m\033[33mcontainer@pterodactyl~ \033[0mjava -version\n"
+java -version
+
+# Convert all of the "{{VARIABLE}}" parts of the command into the expected shell
+# variable format of "${VARIABLE}" before evaluating the string and automatically
+# replacing the values.
+PARSED=$(echo "${STARTUP}" | sed -e 's/{{/${/g' -e 's/}}/}/g' | eval echo "$(cat -)")
+
+# Display the command we're running in the output, and then execute it with the env
+# from the container itself.
+printf "\033[1m\033[33mcontainer@pterodactyl~ \033[0m%s\n" "$PARSED"
+# shellcheck disable=SC2086
+eval ${PARSED}
+```
+
+### Breakdown
+
+- Navigates to the working directory.
+- Outputs the Java version for confirmation.
+- Processes and expands the Pterodactyl `STARTUP` variable.
+- Executes the startup command.
+
+## Final Notes
+
+- Must set `ENV USER=container HOME=/home/container` and `WORKDIR /home/container`.
+- Build and test locally with: `docker build -t my-image .`
+- Push images to Docker Hub or a private registry and specify them in the egg under Docker Image, or run the image locally first if you want to ensure it functions as expected.
diff --git a/content/docs/guides/egg-creation/egg-config-parser.mdx b/content/docs/guides/egg-creation/egg-config-parser.mdx
new file mode 100644
index 000000000..e12338fc7
--- /dev/null
+++ b/content/docs/guides/egg-creation/egg-config-parser.mdx
@@ -0,0 +1,118 @@
+---
+title: Configuration Files & Startup Detection
+description: Configure process management, startup detection, and config file parsing for Pterodactyl eggs
+---
+
+After setting the basic egg details, you need to configure how Wings will manage the server process. This includes defining how to start and stop the server, how to handle logs, and how to automatically update any configuration files. These settings are found on the egg's configuration page (under "Process Management").
+
+## Startup Command
+
+The **Startup Command** is the exact command that will run to start your server. This is executed every time the server is launched (when the user clicks the Start button). You can include egg variables in this command by using the `{{VARIABLE}}` syntax. For example, a startup command might look like:
+
+```
+java -Xms128M -XX:MaxRAMPercentage=95.0 -jar {{SERVER_JARFILE}}
+```
+
+## Stop Command
+
+The **Stop Command** is the command or signal used to safely stop the server. By default, many eggs use `^C` (Control+C) to send an interrupt signal, which works for most console-based servers. If the application has a special shutdown command (for example, typing "stop" in a Minecraft server console), you can specify that here instead. Wings will execute this command when a user clicks the Stop button.
+
+## Log Configuration
+
+In most cases you can leave the **Log Configuration** field blank (which defaults to an empty JSON `{}`). By default, Wings will stream all output from the container's console. The log configuration field is used only in advanced cases where the server's output needs special handling (for example, if the server writes logs only to a file and not to STDOUT, you could configure Wings to tail that file). For typical eggs, this field remains empty.
+
+## Configuration Files
+
+
+Using configuration file parsing is generally an advanced feature. If you are new to creating eggs, you may skip this section unless your egg needs it.
+
+
+This section allows you to define files that Pterodactyl should automatically modify each time the server starts, to ensure certain settings are always applied. You can provide a JSON object mapping file names to the values that should be set in those files. Wings will then parse and update those files before the server fully starts.
+
+For example, consider a game that uses a `server.properties` file for its settings. You might add a configuration entry like this:
+
+```json
+{
+ "server.properties": {
+ "parser": "properties",
+ "find": {
+ "server-ip": "0.0.0.0",
+ "server-port": "{{server.build.default.port}}",
+ "max-players": "{{env.MAX_PLAYERS}}"
+ }
+ }
+}
+```
+
+Each time the server starts, Wings checks if `server.properties` exists:
+- If it exists, Wings will update those keys to the defined values (inserting the key if it's missing).
+- If the file doesn't exist, Wings will create it with those keys and values.
+
+A more advanced example using a YAML file and wildcards:
+
+```json
+{
+ "config.yml": {
+ "parser": "yaml",
+ "find": {
+ "listeners[0].query_enabled": true,
+ "listeners[0].query_port": "{{server.build.default.port}}",
+ "listeners[0].host": "0.0.0.0:{{server.build.default.port}}",
+ "servers.*.address": {
+ "127.0.0.1": "{{config.docker.interface}}",
+ "localhost": "{{config.docker.interface}}"
+ }
+ }
+ }
+}
+```
+
+## Parser Types
+
+The available Parser Types are:
+
+| Type | Description |
+|------|-------------|
+| `properties` | `.properties` files with key=value pairs |
+| `ini` | Supports `[sections]` and `key=value` pairs |
+| `yaml` | Handles nested keys, supports wildcards |
+| `json` | Parses full structure, adds missing keys |
+| `xml` | Can update attributes/values via xpath |
+| `file` | Simple find/replace by line content (avoid if possible) |
+
+## Startup Configuration
+
+The Startup Configuration (sometimes called "startup detection") is a JSON block where you define text that indicates when the server has finished starting up. This helps Pterodactyl know when to mark the server as "Online" (running) versus "Starting".
+
+The `done` value can be a single string or an array of strings:
+
+```json
+{
+ "done": "Done ("
+}
+```
+
+or with multiple possible strings:
+
+```json
+{
+ "done": [
+ "Done (",
+ "Server is ready"
+ ]
+}
+```
+
+When any of the strings appear in the console output, Wings will consider the server to be fully started. This helps avoid marking the server as "running" before it's actually ready.
+
+If this section is omitted, Wings relies on process status or timeout heuristics.
+
+## Copy Settings From
+
+The **Copy Settings From** option in an egg allows inheriting settings from another egg. This is useful for reducing duplication (e.g., different Minecraft flavors like Vanilla, Spigot, etc.).
+
+
+
+If you select another egg as a parent in "Copy Settings From," any field in the current egg that you leave blank will be inherited from the parent egg. This is very useful when you have multiple eggs that share most of their configuration (for example, different versions or mods of the same game).
+
+Please note that Copy Settings From does not support nested copies — you can only copy from a single parent, and that parent **must not be copying from another option**.
diff --git a/content/docs/guides/egg-creation/egg-docker-images.mdx b/content/docs/guides/egg-creation/egg-docker-images.mdx
new file mode 100644
index 000000000..0f9faaa7d
--- /dev/null
+++ b/content/docs/guides/egg-creation/egg-docker-images.mdx
@@ -0,0 +1,83 @@
+---
+title: Egg Docker Images
+description: Available Docker images and yolks for Pterodactyl eggs
+---
+
+The [Pterodactyl yolks repository](https://github.com/pterodactyl/yolks) provides a variety of Docker images (called yolks) specifically designed for use with Pterodactyl eggs.
+
+These images provide the necessary runtime environments for game servers, bots, utilities, databases, and other services.
+Pterodactyl eggs run within Docker containers.
+The **Docker image** for an egg defines the base operating system and software environment available to the server. Choosing the right image is important:
+
+- Pterodactyl maintains an official repository of images (called **Yolks**) covering many common games, languages, and services.
+- You may also use a [Custom Docker Image](/guides/egg-creation/creating-custom-image) for unique requirements.
+
+## Categories of Yolks
+
+### General Purpose
+
+| Image | Description |
+|-------|-------------|
+| `oses` | Base operating system images used to build other yolks. Includes core utilities for most container environments. |
+| `installers` | Includes tools like `curl` and `wget`, commonly used to simplify and speed up installation scripts. |
+
+### Programming Languages
+
+| Image | Description |
+|-------|-------------|
+| `go` | An environment for Go (Golang) applications. Used for servers or tools written in Go. |
+| `java` | Supports running Java applications, including Minecraft servers and Java-based tools. |
+| `nodejs` | Provides Node.js and npm for JavaScript-based apps like bots, utilities, etc. |
+| `python` | Used to run or build Python applications, scripts, or automation tools. |
+| `rust` | Provides an environment for building or running applications developed in Rust. |
+
+### Databases
+
+| Image | Description |
+|-------|-------------|
+| `mariadb` | A drop-in replacement for MySQL, used for web apps and game server databases. |
+| `mongodb` | A NoSQL database suited for dynamic data structures and fast performance. |
+| `postgres` | Relational SQL database known for advanced features and data integrity. |
+| `redis` | In-memory data structure store, used for caching and high-performance applications. |
+
+### Game Tools
+
+| Image | Description |
+|-------|-------------|
+| `steamcmd` | Allows downloading and managing game servers from Steam (e.g. ARK, CS:GO, Valheim). |
+| `wine` | Runs Windows-based applications in Linux containers — useful for games that don't have Linux builds. |
+
+### Other
+
+| Image | Description |
+|-------|-------------|
+| `mono` | Environment for .NET applications using the Mono runtime. Supports C# programs and older .NET games. |
+| `voice` | Optimized for voice servers or tools like TeamSpeak or Mumble. |
+
+## Architecture Support
+
+Most yolks support both `amd64` and `arm64` architectures. Always check the image documentation to confirm compatibility with your server hardware.
+
+## Custom Images
+
+Requirements:
+- Must include all runtime dependencies.
+- Must set `ENV USER=container HOME=/home/container` and `WORKDIR /home/container`.
+- Use Alpine/Debian minimal bases where possible.
+
+If you want to build your own Docker image for an egg, refer to the [Creating a Custom Docker Image](/guides/egg-creation/creating-custom-image) guide for best practices on building and tagging images for Pterodactyl.
+
+## Providing Multiple Images
+
+An egg can offer **multiple Docker images** for the server owner to choose from. To do this, list each image on a new line in the egg's Docker Image field (in the egg configuration). You can optionally prepend a display name to each image using the format:
+`Display Name|docker/image:tag`
+
+For example, you might offer two Java images for a Minecraft egg:
+- `Java 17|ghcr.io/pterodactyl/yolks:java_17`
+- `Java 21|ghcr.io/pterodactyl/yolks:java_21`
+
+This would present the user with a dropdown choice between **"Java 17"** and **"Java 21"** when deploying the server. The text before the `|` is the friendly name shown in the panel, and the text after the `|` is the actual Docker image to use.
+
+
+If you're not sure which image to use for your egg, start with one of the [Official Yolks](https://github.com/pterodactyl/yolks) that closely matches your server's requirements. These images are maintained by the community and cover most common use cases.
+
diff --git a/content/docs/guides/egg-creation/egg-install-script.mdx b/content/docs/guides/egg-creation/egg-install-script.mdx
new file mode 100644
index 000000000..46f2dfa01
--- /dev/null
+++ b/content/docs/guides/egg-creation/egg-install-script.mdx
@@ -0,0 +1,84 @@
+---
+title: Egg Install Script
+description: Write install scripts that set up server files for Pterodactyl eggs
+---
+
+## What is the Install Script?
+
+The install script is where the **egg magic** happens.
+
+When you click on the **Install Script** tab for the egg, you will see four main parts:
+
+- A large text area to write the script. (Install Script)
+
+- A field where you can select a different egg's script, default set to 'None' (Copy Script From)
+
+- A field to select the **Docker image** in which the install script will run (Script Container).
+
+- A field used to specify the entrypoint command used for the script, usually 'bash' (Script Entrypoint Command)
+
+You can choose a special Docker image for the installation process (separate from the server's runtime image). Pterodactyl provides some "installer" images (Alpine or Debian based) that include common utilities like `curl`, `wget`, `unzip`, `git`, etc., to help with installation tasks. If you're not sure, use one of the official installer images:
+
+- `ghcr.io/ptero-eggs/installers:alpine`
+
+- `ghcr.io/ptero-eggs/installers:debian`
+
+- `ghcr.io/ptero-eggs/installers:ubuntu`
+
+You are not limited to these images — any Docker image compatible with Pterodactyl can be used as the install container. For example, some eggs use `eclipse-temurin:8-jdk-jammy` when the install process requires Java.
+
+Then, in the script text area, write the shell commands needed to set up the server.
+
+
+Anything you install or change **outside of `/mnt/server`** in the install container will **not persist** to the runtime server. The install script runs in a temporary environment. Only the `/mnt/server` directory (which corresponds to the server's file directory) is transferred to the actual server container. If your server needs specific system packages or libraries, those must be installed in the **runtime Docker image**, not just in the install script.
+
+
+**How the install process works:**
+
+1. **Create the server directory:** The script typically starts by making sure the `/mnt/server` directory exists and is the current working directory.
+ - For example, you might use:
+ ```bash
+ mkdir -p /mnt/server
+ cd /mnt/server
+ ```
+ - (In many official scripts, the container's working directory is already set to `/mnt/server`, but it's good practice to ensure it.)
+
+2. **Download and prepare files:** Fetch any necessary files (server binaries, mods, configs, etc.) from the internet or local sources.
+ - Common tools for this are `curl`, `wget`, `git clone`, or using a command pipeline like `curl ... | tar ...`.
+ - For example, you might download a ZIP of the server software and then unzip it.
+
+3. **Set up configurations:** If your server requires an initial configuration file or certain directory structure, you can create those here.
+ - For instance, you might generate a default config file, or rename files, etc.
+ - You can also use the values of variables by referencing environment variables (e.g. `${MAX_PLAYERS}` in the script will use the value from a custom egg variable if one exists).
+
+4. **Install any additional dependencies (if needed for installation):** In some cases, the install process itself might require extra tools or packages. Since the official installer images come with common tools, this is rarely needed, but you could install others (e.g., `apk add ...` or `apt install ...`) in the install container. Remember, these tools won't be present in the runtime container, so this step is only for things needed *during installation* (not for actually running the server).
+
+## Example Install Script
+
+```bash
+#!/bin/bash
+# Create and navigate to the server directory
+mkdir -p /mnt/server
+cd /mnt/server || exit 1
+
+# Install dependencies required for installation
+apt update && apt install -y unzip wget
+
+# Download necessary files
+wget -O game-server.zip "https://example.com/game-server.zip"
+unzip game-server.zip
+rm game-server.zip
+
+# Set up configuration
+echo "max_players=32" > config.cfg
+```
+
+## What Happens After Installation?
+
+When the install script finishes running:
+
+- All files and folders **inside** `/mnt/server` (the server's directory) are retained and moved to the server's persistent storage.
+
+- The install container is destroyed. Then the server's normal runtime container (using the Docker image specified in the egg's configuration) will start up, and it will have all the files that were in `/mnt/server` available.
+
+In summary, the install script's job is to populate `/mnt/server` with everything the server needs. Once that's done, those files persist, and then the server can be launched in the proper environment.
diff --git a/content/docs/guides/egg-creation/egg-variables.mdx b/content/docs/guides/egg-creation/egg-variables.mdx
new file mode 100644
index 000000000..148a5c2be
--- /dev/null
+++ b/content/docs/guides/egg-creation/egg-variables.mdx
@@ -0,0 +1,85 @@
+---
+title: Egg Variables
+description: Define and manage custom and default variables for Pterodactyl eggs
+---
+
+One powerful feature of eggs is the ability to define **variables** that can be used to customize the server's startup and configuration without editing the startup command directly. Egg variables are exposed as environment variables to the server and can be referenced in the install script or config files.
+
+To manage an egg's variables, create the egg (or edit an existing one) and navigate to the **Variables** tab on the egg configuration page.
+
+
+
+## Types of Egg Variables
+
+- **Default Variables:** These are provided by the Panel/Wings automatically for every server. You do **not** need to create these; they always exist.
+
+- **Custom Variables:** These are defined by you on the egg's Variables tab.
+
+## Default Variables
+
+These are injected into every server environment by default and can be referenced using the following syntaxes:
+
+- In the startup command: `{{VARIABLE}}`
+- In scripts: `$VARIABLE_NAME`
+- In configuration parser entries: `{{env.VARIABLE}}`
+
+| Variable Name | Description | Example |
+|---|---|---|
+| `TZ` | Time Zone set in the panel's `.env` file | `Etc/UTC` |
+| `STARTUP` | The actual resolved startup command for the server | `./run.sh -arg1` |
+| `SERVER_MEMORY` | Allocated memory for the server in megabytes | `1024` |
+| `SERVER_IP` | The IP address assigned to the primary allocation | `192.168.1.2` |
+| `SERVER_PORT` | The main port assigned to the server | `27015` |
+| `P_SERVER_LOCATION` | The name of the location (set by the admin in the panel) | `Amsterdam-01` |
+| `P_SERVER_UUID` | UUID of the server instance (used for tracking within Wings) | `ab12cd34-5678-90ef-ghij-klmn12345678` |
+| `P_SERVER_ALLOCATION_LIMIT` | The maximum number of allocations available to this server (if set) | `3` |
+| `USER` | The user executing processes inside the container | `container` |
+| `HOME` | The home directory inside the container | `/home/container` |
+
+## Custom Variables
+
+Each variable allows you to define:
+- The Environment Variable, for example: `MAX_PLAYERS`
+- A default value
+- Description (shown to the user in the panel)
+- Validation Rules
+- Whether it is viewable or editable by the user
+
+## Creating a New Variable
+
+When creating a new custom variable, you will provide:
+
+- **Name:** A friendly name for the variable (e.g. "Max Players").
+
+- **Description:** A description shown to the user (explain what the variable does).
+
+- **Environment Variable:** The actual environment variable name used in code (use **UPPERCASE** letters, numbers, and underscores only). For example, `MAX_PLAYERS`. This is the name that will be referenced in the startup command or configuration files.
+
+- **Default Value:** (Optional) A default value for this variable. This will be used if the user doesn't input anything else.
+
+- **User Permissions:** Whether the user can view and/or edit this variable on their server:
+ - *Users Can View* — If set, the user can see this variable (and its value) in their server's settings.
+ - *Users Can Edit* — If set, the user can change the value of this variable from the default.
+ (If neither option is enabled, the variable is essentially hidden from the user's front-end view, though it still exists in the server's environment.)
+
+### Validation Rules
+
+**Rules:** Validation rules for the user's input. This uses Laravel's validation rule format. Common rules include:
+
+- `required` — value must be provided
+- `nullable` — value can be left empty
+- `string` — must be a string
+- `numeric` — must be a number
+- `boolean` — must be true or false
+- `between:1,10` — string length or numeric value between 1 and 10
+- `max:64` — maximum string length or numeric value
+- `in:value1,value2` — must be one of the listed values (e.g., `in:true,false`)
+- `regex:/pattern/` — must match a regex pattern
+
+Rules are combined with `|`. For example, `required|string|between:1,10` means the value is required, must be a string, and 1 to 10 characters in length. To require a value ending in ".jar", you could use `required|regex:/^([\w\d._-]+)(\.jar)$/`.
+
+
+Even if you choose not to allow users to view or edit a variable, **be aware that it's not truly secret from the user**. Advanced users could still find the variable's value (since it exists in the server environment). Typically, hiding a variable is just to prevent casual users from changing or seeing it when it's not necessary for them to interact with (for example, a variable that is used internally by the egg).
+
+
+After creating custom variables, both the custom and default variables can be seen when viewing the server's startup in the Panel (in both Admin and client views). The startup command preview will show these variables substituted with their actual values.
diff --git a/content/docs/guides/egg-creation/meta.json b/content/docs/guides/egg-creation/meta.json
new file mode 100644
index 000000000..ccc94d8ec
--- /dev/null
+++ b/content/docs/guides/egg-creation/meta.json
@@ -0,0 +1,11 @@
+{
+ "title": "Egg Creation",
+ "pages": [
+ "creating-custom-egg",
+ "egg-docker-images",
+ "egg-config-parser",
+ "egg-variables",
+ "egg-install-script",
+ "creating-custom-image"
+ ]
+}
diff --git a/content/docs/guides/meta.json b/content/docs/guides/meta.json
index 5f03ebf9a..cdd15297a 100644
--- a/content/docs/guides/meta.json
+++ b/content/docs/guides/meta.json
@@ -1,11 +1,12 @@
{
- "title": "Guides",
+ "title": "Community Guides",
"root": true,
"pages": [
"panel-installation",
"wings-installation",
"tutorials",
"configuration",
+ "egg-creation",
"customization",
"games"
]
diff --git a/content/docs/guides/panel-installation/centos7.mdx b/content/docs/guides/panel-installation/centos7.mdx
index 95190d5e2..efae7f640 100644
--- a/content/docs/guides/panel-installation/centos7.mdx
+++ b/content/docs/guides/panel-installation/centos7.mdx
@@ -101,7 +101,7 @@ setsebool -P httpd_unified 1
## Installing the Panel
-Excellent, we now have all of the required dependencies installed and configured. From here, follow the [official Panel installation documentation](/docs/panel/getting-started#download-files).
+Excellent, we now have all of the required dependencies installed and configured. From here, follow the [official Panel installation documentation](/panel/getting-started#download-files).
You will need to change the fastcgi_pass path in the Nginx configuration to `/var/run/php-fpm/pterodactyl.sock`
diff --git a/content/docs/guides/panel-installation/centos8.mdx b/content/docs/guides/panel-installation/centos8.mdx
index 05583eaf0..d76f60f7e 100644
--- a/content/docs/guides/panel-installation/centos8.mdx
+++ b/content/docs/guides/panel-installation/centos8.mdx
@@ -80,7 +80,7 @@ sudo systemctl enable --now php-fpm
## Installing the Panel
-Excellent, we now have all of the required dependencies installed and configured. From here, follow the [official Panel installation documentation](/docs/panel/getting-started#download-files).
+Excellent, we now have all of the required dependencies installed and configured. From here, follow the [official Panel installation documentation](/panel/getting-started#download-files).
You will need to change the fastcgi_pass path in the Nginx configuration to `/var/run/php-fpm/pterodactyl.sock`
diff --git a/content/docs/guides/panel-installation/debian.mdx b/content/docs/guides/panel-installation/debian.mdx
index 7eaaaeba9..c1eece140 100644
--- a/content/docs/guides/panel-installation/debian.mdx
+++ b/content/docs/guides/panel-installation/debian.mdx
@@ -6,7 +6,7 @@ description: Install Pterodactyl Panel on Debian 11, 12, and 13
-This guide is based off the [official installation documentation](/docs/panel/getting-started) but is tailored specifically for Debian 11, 12 and 13.
+This guide is based off the [official installation documentation](/panel/getting-started) but is tailored specifically for Debian 11, 12 and 13.
| Operating System | Version | Supported | Notes |
@@ -51,8 +51,8 @@ curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/loca
### Download Files
-Great, now all of the dependencies have been dealt with. Continue the installation by following the [official documentation Download Files section](/docs/panel/getting-started#download-files).
+Great, now all of the dependencies have been dealt with. Continue the installation by following the [official documentation Download Files section](/panel/getting-started#download-files).
### Wings
-There is no additional configuration required for Wings on Debian 11, 12 or 13. You can follow the [official Wings install documentation](/docs/wings/installation), which covers Docker installation for Debian.
+There is no additional configuration required for Wings on Debian 11, 12 or 13. You can follow the [official Wings install documentation](/wings/installing), which covers Docker installation for Debian.
diff --git a/content/docs/guides/tutorials/ssl-certificates.mdx b/content/docs/guides/tutorials/ssl-certificates.mdx
index 72bda7385..89dd0782a 100644
--- a/content/docs/guides/tutorials/ssl-certificates.mdx
+++ b/content/docs/guides/tutorials/ssl-certificates.mdx
@@ -27,7 +27,7 @@ After installing the certbot, we need to generate a certificate. There are a cou
Then, in the command below, you should replace `example.com` with the domain you would like to generate a certificate for. When you have multiple domains you would like certificates for, simply add more `-d anotherdomain.com` flags to the command. You can also look into generating a wildcard certificate but that is not covered in this tutorial.
-When you are using certbot's Nginx/Apache plugin, you won't need to restart your webserver to have the certificate applied assuming that you've already configured the webservers to use SSL as instructed in the [web server configuration step](/docs/panel/webserver-configuration).
+When you are using certbot's Nginx/Apache plugin, you won't need to restart your webserver to have the certificate applied assuming that you've already configured the webservers to use SSL as instructed in the [web server configuration step](/panel/webserver-configuration).
### HTTP challenge
diff --git a/content/docs/guides/wings-installation/centos7.mdx b/content/docs/guides/wings-installation/centos7.mdx
index 5ec9edb75..51452dc2e 100644
--- a/content/docs/guides/wings-installation/centos7.mdx
+++ b/content/docs/guides/wings-installation/centos7.mdx
@@ -30,4 +30,4 @@ firewall-cmd --reload
## Installing Wings
-Great, now all of the dependencies and firewall rules have been dealt with. From here follow the [official Wings installation documentation](/docs/wings/installation#enabling-swap).
+Great, now all of the dependencies and firewall rules have been dealt with. From here follow the [official Wings installation documentation](/wings/installing#enabling-swap).
diff --git a/content/docs/guides/wings-installation/centos8.mdx b/content/docs/guides/wings-installation/centos8.mdx
index 1aa3bc6f9..edea6d5bf 100644
--- a/content/docs/guides/wings-installation/centos8.mdx
+++ b/content/docs/guides/wings-installation/centos8.mdx
@@ -34,7 +34,7 @@ firewall-cmd --reload
## Installing Wings
-Great, now all of the dependencies and firewall rules have been dealt with. From here follow the [official Wings installation documentation](/docs/wings/installation#enabling-swap).
+Great, now all of the dependencies and firewall rules have been dealt with. From here follow the [official Wings installation documentation](/wings/installing#enabling-swap).
If you have SELinux enforcement enabled and you are getting AVC denials from your containers, try relocating your Wings data directory from `/var/lib/pterodactyl` to `/var/srv/containers/pterodactyl`. That is where the targeted policy expects Docker to read and write data from.
diff --git a/content/docs/meta.json b/content/docs/meta.json
new file mode 100644
index 000000000..395e93a92
--- /dev/null
+++ b/content/docs/meta.json
@@ -0,0 +1,10 @@
+{
+ "pages": [
+ "project",
+ "panel",
+ "wings",
+ "docker",
+ "guides",
+ "api"
+ ]
+}
diff --git a/content/docs/panel/0.7/configuration.mdx b/content/docs/panel/0.7/configuration.mdx
deleted file mode 100644
index 398da7275..000000000
--- a/content/docs/panel/0.7/configuration.mdx
+++ /dev/null
@@ -1,102 +0,0 @@
----
-title: Environment Configuration
-description: Configure environment settings for Pterodactyl Panel 0.7
----
-
-Pterodactyl's environment settings are configured and stored in an environment file — `.env` — located in the
-installation root directory — generally `/var/www/pterodactyl`. Some of these settings are also stored in the database
-and will override settings found in the environment file.
-
-To change this behavior you can edit the `.env` file and change the setting `APP_ENVIRONMENT_ONLY=false` to
-`APP_ENVIRONMENT_ONLY=true` which will take effect the next time you refresh a page on the Panel. Generally you will
-only need to do this if you severely corrupt a setting in the Panel or are deep in development with the software.
-
-## Reporting All Exceptions
-
-By default Pterodactyl only logs and reports exceptions that are, well, exceptional by nature. There are some exceptions
-that we expect to occur such as authentication failures or validation issues. However, in rare instances when developing,
-or even on production servers, you might need to have all exceptions logged to detect inconsistent behavior.
-
-To do this, simply set `APP_REPORT_ALL_EXCEPTIONS=true` in your `.env` file. You'll want to turn this off once you've
-completed whatever it is you're needing the exceptions for, otherwise your logs will become very large, very quickly.
-
-## Client Databases
-
-By default Pterodactyl ships with the ability for clients to have their own per-server databases. If you wish to disable
-this ability, set `PTERODACTYL_CLIENT_DATABASES_ENABLED` to be `false`. Pterodactyl also attempts to create databases
-on a database host assigned to the current server's node but will use any host if one can't be found. If you would like
-to force a database to be created only on a host belonging to that server's node, set `PTERODACTYL_CLIENT_DATABASES_ALLOW_RANDOM`
-to be `false`.
-
-```bash
-PTERODACTYL_CLIENT_DATABASES_ENABLED=true
-PTERODACTYL_CLIENT_DATABASES_ALLOW_RANDOM=true
-```
-
-## Reverse Proxy Setup
-
-If you are planning on running Pterodactyl behind a reverse proxy, either using NGINX or because you are using
-[Cloudflare's Flexible SSL](https://support.cloudflare.com/hc/en-us/articles/200170416-What-do-the-SSL-options-mean-),
-you will need to make a quick modification to the Panel to ensure things continue to work as expected. By default when
-you are using these reverse proxies your Panel will not understand how to properly handle requests and you'll most likely
-be unable to login, or will see security warnings in your browser console as it attempts to load insecure assets. This
-is because the internal logic the Panel is using to determine how links should be generated thinks it is running over
-HTTP, and not over HTTPS.
-
-You will need to edit the `.env` file in the Panel's root directory to contain `TRUSTED_PROXIES=*` at minimum. We
-highly suggest providing a specific IP address (or comma separated list of IPs) rather than allowing `*`. For example,
-if your proxy is running on the same machine as the server, chances are that something like `TRUSTED_PROXIES=127.0.0.1`
-will work for you.
-
-### NGINX Specific Configuration
-
-For Pterodactyl to properly respond to an NGINX reverse proxy, the NGINX `location` config must contain the following lines:
-
-```nginx
-proxy_set_header X-Real-IP $remote_addr;
-proxy_set_header Host $host;
-proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
-proxy_set_header X-Forwarded-Proto $scheme;
-proxy_redirect off;
-proxy_buffering off;
-proxy_request_buffering off;
-```
-
-### Cloudflare Specific Configuration
-
-If you're using Cloudflare's Flexible SSL you should set `TRUSTED_PROXIES` to contain [their IP addresses](https://www.cloudflare.com/ips/).
-Below is an example of how to set this.
-
-```bash
-TRUSTED_PROXIES=103.21.244.0/22,103.22.200.0/22,103.31.4.0/22,104.16.0.0/12,108.162.192.0/18,131.0.72.0/22,141.101.64.0/18,162.158.0.0/15,172.64.0.0/13,173.245.48.0/20,188.114.96.0/20,190.93.240.0/20,197.234.240.0/22,198.41.128.0/17
-```
-
-## Increasing the Editable File Size
-
-By default the Panel attempts to set a reasonable limit for editing files through the web based file manager. However,
-some users find it too restrictive and wish to increase the size. This is controlled by a configuration value that can
-also be set using the `.env` file. The default value is `50,000` bytes but this can be increased as you see fit.
-
-```bash
-PTERODACTYL_FILES_MAX_EDIT_SIZE=50000
-```
-
-## Disable or Modify ReCaptcha
-
-To disable reCAPTCHA on login or password reset, simply set `RECAPTCHA_ENABLED=false` in the environment file. This
-change will take effect immediately.
-
-### Using Your Own Keys
-
-Pterodactyl comes preconfigured using a public set of reCAPTCHA keys but you may wish to use your own site
-specific keys. To do so, follow the instructions below.
-
-1. Visit [Google's reCAPTCHA Admin Console](https://www.google.com/recaptcha/admin#list).
-2. Click "Register New Site" and fill in a name for your keys.
-3. Choose `reCAPTCHA v2` and ensure that the option for `Invisible` is selected.
-4. Include the domain that your panel is located on.
-5. On the next page displayed, locate the "Site Key" and "Secret Key". In Pterodactyl's control panel click on "Settings" and then the "Advanced" tab. Enter the keys in the boxes "Site Key" and "Secret Key", respectively.
-
-
-If you do not want reCAPTCHA to verify the domain making the validation request you can uncheck "Verify the origin of reCaptcha solution" under "Advanced Settings" after generating your key.
-
diff --git a/content/docs/panel/0.7/getting-started.mdx b/content/docs/panel/0.7/getting-started.mdx
deleted file mode 100644
index 8e60ab55a..000000000
--- a/content/docs/panel/0.7/getting-started.mdx
+++ /dev/null
@@ -1,258 +0,0 @@
----
-title: Getting Started
-description: Installation guide for Pterodactyl Panel 0.7 (End-of-Life version)
----
-
-
-This documentation is for **end-of-life software** which does not receive any security updates or support
-from the community. This documentation has been left accessible for historical reasons.
-
-You should be installing and using [Pterodactyl Panel 1.0](/panel/getting-started) in production environments.
-
-
-Pterodactyl Panel is designed to run on your own web server. You will need to have root access to your server in order
-to run and use this panel.
-
-This panel does not exist as a drag-and-drop service to run your servers. It is a highly complex system
-requiring multiple dependencies and administrators willing to spend some time learning how to use it. If you expect
-to be able to install this with no understanding of basic Linux system administration you should stop and turn
-around now.
-
-## Picking a Server OS
-
-Pterodactyl runs on a wide range of operating systems, so pick whichever you are most comfortable using.
-
-
-Pterodactyl does not support most OpenVZ systems due to incompatibilities with Docker. If you are planning on running
-this software on an OpenVZ based system you will — most likely — not be successful.
-
-
-| Operating System | Version | Supported | Notes |
-| ---------------- | ------------------------------------------------------------- | :----------------: | ----------------------------------------------------------- |
-| **Ubuntu** | 18.04 | ✅ | Documentation written assuming Ubuntu 18.04 as the base OS. |
-| | [20.04](/community/installation-guides/panel/ubuntu2004.html) | ✅ | |
-| **CentOS** | [7](/community/installation-guides/panel/centos7.html) | ✅ | Extra repos are required. |
-| | [8](/community/installation-guides/panel/centos8.html) | ✅ | All required packages are part of the base repos. |
-| **Debian** | [9](/community/installation-guides/panel/debian9.html) | ✅ | Extra repos are required. |
-| | [10](/community/installation-guides/panel/debian10.html) | ✅ | All required packages are part of the base repos. |
-
-## Dependencies
-
-* PHP `7.2` with the following extensions: `cli`, `openssl`, `gd`, `mysql`, `PDO`, `mbstring`, `tokenizer`, `bcmath`, `xml` or `dom`, `curl`, `zip`, and `fpm` if you are planning to use nginx
-* MySQL `5.7` **or** MariaDB `10.1.3` or higher
-* Redis (`redis-server`)
-* A webserver (Apache, NGINX, Caddy, etc.)
-* `curl`
-* `tar`
-* `unzip`
-* `git`
-* `composer`
-
-### Example Dependency Installation
-
-The commands below are simply an example of how you might install these dependencies. Please consult with your
-operating system's package manager to determine the correct packages to install.
-
-```bash
-# Add "add-apt-repository" command
-apt -y install software-properties-common curl
-
-# Add additional repositories for PHP, Redis, and MariaDB
-LC_ALL=C.UTF-8 add-apt-repository -y ppa:ondrej/php
-add-apt-repository -y ppa:chris-lea/redis-server
-curl -LsS https://r.mariadb.com/downloads/mariadb_repo_setup | sudo bash
-
-# Update repositories list
-apt update
-
-# Add universe repository if you are on Ubuntu 18.04
-apt-add-repository universe
-
-# Install Dependencies
-apt -y install php7.2 php7.2-cli php7.2-gd php7.2-mysql php7.2-pdo php7.2-mbstring php7.2-tokenizer php7.2-bcmath php7.2-xml php7.2-fpm php7.2-curl php7.2-zip mariadb-server nginx tar unzip git redis-server
-```
-
-### Installing Composer
-
-Composer is a dependency manager for PHP that allows us to ship everything you'll need code wise to operate the Panel. You'll
-need composer installed before continuing in this process.
-
-```bash
-curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer --1
-```
-
-## Download Files
-
-The first step in this process is to create the folder where the panel will live and then move ourselves into that
-newly created folder. Below is an example of how to perform this operation.
-
-```bash
-mkdir -p /var/www/pterodactyl
-cd /var/www/pterodactyl
-```
-
-Once you have created a new directory for the Panel and moved into it you'll need to download the Panel files. This
-is as simple as using `curl` to download our pre-packaged content. Once it is downloaded you'll need to unpack the archive
-and then set the correct permissions on the `storage/` and `bootstrap/cache/` directories. These directories
-allow us to store files as well as keep a speedy cache available to reduce load times.
-
-```bash
-curl -Lo panel.tar.gz https://github.com/pterodactyl/panel/releases/download/v0.7.19/panel.tar.gz
-tar --strip-components=1 -xzvf panel.tar.gz
-chmod -R 755 storage/* bootstrap/cache/
-```
-
-## Installation
-
-
-This documentation is for **end-of-life software** which does not receive any security updates or support
-from the community. This documentation has been left accessible for historical reasons.
-
-You should be installing and using [Pterodactyl Panel 1.0](/panel/getting-started) in production environments.
-
-
-Now that all of the files have been downloaded we need to configure some core aspects of the Panel.
-
-
-You will need a database setup and a user with the correct permissions created for that database before
-continuing any further. See below to quickly create a user and database for your Pterodactyl panel, if you are unsure how to do this or want more information, please have a look at [Setting up MySQL](/tutorials/mysql_setup.html).
-
-```sql
-mysql -u root -p
-
-CREATE USER 'pterodactyl'@'localhost' IDENTIFIED WITH mysql_native_password BY 'A secure password';
-CREATE DATABASE panel;
-GRANT ALL ON panel.* TO 'pterodactyl'@'localhost' WITH GRANT OPTION;
-```
-
-
-First we will copy over our default environment settings file, install core dependencies, and then generate a
-new application encryption key.
-
-```bash
-cp .env.example .env
-composer install --no-dev --optimize-autoloader
-
-# Only run the command below if you are installing this Panel for
-# the first time and do not have any Pterodactyl Panel data in the database.
-php artisan key:generate --force
-```
-
-
-Back up your encryption key (APP_KEY in the `.env` file). It is used as an encryption key for all data that needs to be stored securely (e.g. api keys).
-Store it somewhere safe - not just on your server. If you lose it, all encrypted data is useless and can't be restored, even if you have database backups.
-
-
-### Environment Configuration
-
-Pterodactyl's core environment is easily configured using a few different CLI commands built into the app. This step
-will cover setting up things such as sessions, caching, database credentials, and email sending.
-
-```bash
-php artisan p:environment:setup
-php artisan p:environment:database
-
-# To use PHP's internal mail sending (not recommended), select "mail". To use a
-# custom SMTP server, select "smtp".
-php artisan p:environment:mail
-```
-
-### Database Setup
-
-Now we need to setup all of the base data for the Panel in the database you created earlier. **The command below
-may take some time to run depending on your machine. Please _DO NOT_ exit the process until it is completed!** This
-command will setup the database tables and then add all of the Nests & Eggs that power Pterodactyl.
-
-```bash
-php artisan migrate --seed
-```
-
-### Add The First User
-
-You'll then need to create an administrative user so that you can log into the panel. To do so, run the command below.
-At this time passwords **must** meet the following requirements: 8 characters, mixed case, at least one number.
-
-```bash
-php artisan p:user:make
-```
-
-### Set Permissions
-
-The last step in the installation process is to set the correct permissions on the Panel files so that the webserver can
-use them correctly.
-
-```bash
-# If using NGINX or Apache (not on CentOS):
-chown -R www-data:www-data *
-
-# If using NGINX on CentOS:
-chown -R nginx:nginx *
-
-# If using Apache on CentOS
-chown -R apache:apache *
-```
-
-## Queue Listeners
-
-We make use of queues to make the application faster and handle sending emails and other actions in the background.
-You will need to setup the queue worker for these actions to be processed.
-
-### Crontab Configuration
-
-The first thing we need to do is create a new cronjob that runs every minute to process specific Pterodactyl tasks, such
-as session cleanup and sending scheduled tasks to daemons. You'll want to open your crontab using `sudo crontab -e` and
-then paste the line below.
-
-```bash
-* * * * * php /var/www/pterodactyl/artisan schedule:run >> /dev/null 2>&1
-```
-
-### Create Queue Worker
-
-Next you need to create a new systemd worker to keep our queue process running in the background. This queue is responsible
-for sending emails and handling many other background tasks for Pterodactyl.
-
-Create a file called `pteroq.service` in `/etc/systemd/system` with the contents below.
-
-```text
-# Pterodactyl Queue Worker File
-# ----------------------------------
-
-[Unit]
-Description=Pterodactyl Queue Worker
-After=redis-server.service
-
-[Service]
-# On some systems the user and group might be different.
-# Some systems use `apache` or `nginx` as the user and group.
-User=www-data
-Group=www-data
-Restart=always
-ExecStart=/usr/bin/php /var/www/pterodactyl/artisan queue:work --queue=high,standard,low --sleep=3 --tries=3
-
-[Install]
-WantedBy=multi-user.target
-```
-
-
-If you are using CentOS, you will need to replace `redis-server.service` with `redis.service` at the `After=` line in order to ensure `redis` starts before the queue worker.
-
-
-
-If you are not using `redis` for anything you should remove the `After=` line, otherwise you will encounter errors
-when the service starts.
-
-
-If you are are using redis for your system, you will want to make sure to enable that it will start on boot. You can do that by running the following command:
-
-```bash
-sudo systemctl enable --now redis-server
-```
-
-Finally, enable the service and set it to boot on machine start.
-
-```bash
-sudo systemctl enable --now pteroq.service
-```
-
-#### Next Step: [Webserver Configuration](/panel/0.7/webserver-configuration)
diff --git a/content/docs/panel/0.7/meta.json b/content/docs/panel/0.7/meta.json
deleted file mode 100644
index 3813cf627..000000000
--- a/content/docs/panel/0.7/meta.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "title": "Panel 0.7 (Legacy)",
- "pages": [
- "getting-started",
- "webserver-configuration",
- "configuration",
- "upgrading",
- "upgrade",
- "troubleshooting"
- ]
-}
diff --git a/content/docs/panel/0.7/troubleshooting.mdx b/content/docs/panel/0.7/troubleshooting.mdx
deleted file mode 100644
index cfc5a8486..000000000
--- a/content/docs/panel/0.7/troubleshooting.mdx
+++ /dev/null
@@ -1,178 +0,0 @@
----
-title: Troubleshooting
-description: Common issues and solutions for Pterodactyl Panel 0.7
----
-
-## Reading Error Logs
-
-If you ever encounter an unexpected error with the Panel the first thing you will likely be asked for is the logs.
-To retrieve these, simply execute the command below which will output the last 100 lines of the Panel's log file.
-
-```bash
-tail -n 100 /var/www/pterodactyl/storage/logs/laravel-$(date +%F).log
-```
-
-### Parsing the Error
-
-When you run the command above, you'll probably be hit with a huge wall of text that might scare you. Fear not,
-this is simply a stacktrace leading to the cause of the error, and you can actually ignore almost all of it when
-looking for the cause of the error. Lets take a look at some example output below, which has been truncated to
-make this easier to follow with.
-
-```
-#70 /srv/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(116): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
-#71 /srv/www/public/index.php(53): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
-#72 {main}
-[2018-07-19 00:50:24] local.ERROR: ErrorException: file_put_contents(/srv/www/storage/framework/views/c9c05d1357df1ce4ec8fc5df78c16c493b0d4f48.php): failed to open stream: Permission denied in /srv/www/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php:122
-Stack trace:
-#0 [internal function]: Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(2, 'file_put_conten...', '/srv/www/vendor...', 122, Array)
-#1 /srv/www/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php(122): file_put_contents('/srv/www/storag...', 's...', 0)
-#2 /srv/www/vendor/laravel/framework/src/Illuminate/View/Compilers/BladeCompiler.php(122): Illuminate\Filesystem\Filesystem->put('/srv/www/storag...', 's...')
-#3 /srv/www/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php(51): Illuminate\View\Compilers\BladeCompiler->compile('/srv/www/resour...')
-#4 /srv/www/vendor/laravel/framework/src/Illuminate/View/View.php(142): Illuminate\View\Engines\CompilerEngine->get('/srv/www/resour...', Array)
-#5 /srv/www/vendor/laravel/framework/src/Illuminate/View/View.php(125): Illuminate\View\View->getContents()
-```
-
-The first thing you'll want to do is follow the chain of numbers _up_ until you find `#0`, this will be the function that
-triggered the exception. Right above line 0 you will see a line that has the date and time in brackets, `[2018-07-19 00:50:24]`
-above for example. This line will be the human readable exception that you can use to understand what went wrong.
-
-### Understanding the Error
-
-In the example above we can see that the actual error was:
-
-```
-local.ERROR: ErrorException: file_put_contents(...): failed to open stream: Permission denied in /srv/www/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php:122
-```
-
-From this error we can determine that there was an error performing a [file_put_contents()](http://php.net/manual/en/function.file-put-contents.php) call, and the error was
-that we couldn't open the file because permissions were denied. Its okay if you don't understand the error at all, but
-it does help you get faster support if you're able to provide these logs, and at least find the source of the error.
-Sometimes the errors are pretty straightforward and will tell you exactly what went wrong, such as a `ConnectionException`
-being thrown when the Panel can't connect to the Daemon.
-
-### Utilizing GREP
-
-If you're trying to go through a bunch of errors quickly, you can use the command below which will limit the results returned to only
-be the actual error lines, without all of the stack traces.
-
-```bash
-tail -n 1000 /var/www/pterodactyl/storage/logs/laravel-$(date +%F).log | grep "\[$(date +%Y)"
-```
-
-## Transfer Exceptions / XHR Poll Error
-
-If you are seeing errors similar to the examples below, chances are there is some networking related issue, or you
-just don't have a required service running.
-
-### Example Errors
-
-* "We were unable to connect to the main Socket.IO server, there may be network issues currently. The panel may not work as expected."
-
-* "A TransferException was encountered while trying to contact the daemon, please ensure it's online and accessible. This error has been logged."
-
-### Basic Debugging Steps
-
-* Ensure you have AdBlock disabled or whitelisted for your Panel and Daemon domains.
-
-* Check your browser's console by pressing `Ctrl + Shift + J` (in Chrome) or `Cmd + Alt + I` (in Safari). If there is
-a red error in it, chances are that it will narrow down the potential problem.
-
-* Make sure if the daemon is properly installed and the active configuration matches the configuration shown under
-`Admin -> Node -> Configuration` in the Panel.
-
-* Check that the Daemon is running, and not reporting errors. Use `service wings status` to check the current status of the process.
-
-* Check that the Daemon ports are open on your firewall. The Daemon uses ports `8080` or `8443` for HTTP traffic,
-and `2022` for SFTP traffic.
-
-* Check that the Panel can reach the Daemon using the domain that is configured on the Panel. Run `curl
-https://domain.com:8080` on the Panel server and ensure that it can connect to the Daemon.
-
-* Ensure that you are using the correct HTTP scheme for your Panel and Daemon. If the Panel is running over HTTPS
- the Daemon will also need to be running on HTTPS.
-
-### More Advanced Debugging Steps
-
-* Stop the Daemon and run `cd /srv/daemon; sudo npm start` to see if there are any errors being output by the Daemon.
-If so, try resolving them manually, or contact us on Discord for more assistance.
-
-* Check your DNS and ensure that the response you receive is the one you expect using a tool such as `nslookup` or `dig`.
-
-* If you use CloudFlare make sure that the yellow cloud is disabled for your Daemon or Panel `A` records.
-
-* Make sure when using the daemon behind a firewall — pfSense, OpenSwitch, etc — that the correct NAT settings to access
-the Daemon's ports from the outside network are setup.
-
-* If nothing is working so far, check your own DNS settings and consider switching DNS servers.
-
-* When running the Panel and Daemon on one server it can sometimes help if to add an entry in `/etc/hosts` that directs
-the public IP back to the server. Sometimes the reverse path is also needed, so you may need to add an entry to your
-servers `/etc/hosts` file that points the Panel's domain to the correct IP.
-
-* When running the Daemon and Panel on separate VM's using the same adapter make sure the VM's can connect to each
-other. Promiscuous mode might be needed.
-
-## Invalid MAC Exception
-
-
-This error should never happen if you correctly follow our installation and upgrade guides. The only time we have
-ever seen this error occur is when you blindly restore the Panel database from a backup and try to use a fresh
-installation of the Panel.
-
-When restoring backups you should _always_ restore the `.env` file!
-
-
-Sometimes when using the Panel you'll unexpectedly encounter a broken page, and upon checking the logs you'll see
-an exception mentioning an invalid MAC when decrypting. This error is caused by mismatched `APP_KEY`s in your `.env` file
-when the data was encrypted versus decrypted.
-
-If you are seeing this error the only solution is to restore the `APP_KEY` from your `.env` file. If you have lost that
-original key there is no way to recover the lost data.
-
-## SELinux Issues
-
-On systems with SELinux installed you might encounter unexpected errors when running redis or attempting to connect
-to the daemon to perform actions. These issues can generally be resolved by executing the commands below to allow
-these programs to work with SELinux.
-
-### Redis Permissions Errors
-
-```bash
-audit2allow -a -M redis_t
-semodule -i redis_t.pp
-```
-
-### In case there is any weirdness with parts of the panel
-
-```bash
-restorecon -R /var/www/pterodactyl/
-```
-
-### Daemon Connection Errors
-
-```bash
-audit2allow -a -M http_port_t
-semodule -i http_port_t.pp
-```
-
-## FirewallD issues
-
-If you are on a RHEL/CentOS server with firewalld installed you may have broken DNS.
-
-```bash
-firewall-cmd --permanent --zone=trusted --change-interface=pterodactyl0
-firewall-cmd --reload
-```
-
-restart docker and wings after running these to be sure the rules are applied.
-
-## Database Errors
-
-### DatabaseController.php:142
-
-```
-production.ERROR: ErrorException: Undefined variable: host in /var/www/pterodactyl/app/Http/Controllers/Admin/DatabaseController.php:142
-```
-
-The database user you are trying to use doesn't have appropriate grants/has used incorrect password.
diff --git a/content/docs/panel/0.7/upgrade/0-6-to-0-7.mdx b/content/docs/panel/0.7/upgrade/0-6-to-0-7.mdx
deleted file mode 100644
index 207595c9a..000000000
--- a/content/docs/panel/0.7/upgrade/0-6-to-0-7.mdx
+++ /dev/null
@@ -1,122 +0,0 @@
----
-title: Upgrading 0.6 to 0.7
-description: Guide for upgrading from Panel 0.6 to 0.7
----
-
-
-This documentation is for **end-of-life software** which does not receive any security updates or support
-from the community. This documentation has been left accessible for historical reasons.
-
-You should be installing and using [Pterodactyl Panel 1.0](/panel/getting-started) in production environments.
-
-
-## Fetch Updated Files
-
-The first step in the update process is to download the new panel files from GitHub. The command below will download
-the release archive for the most recent version of Pterodactyl and save it in the current directory. Now is a good time
-to ensure that you're in the `/var/www/pterodactyl` directory as the command below will automatically unpack in whatever
-directory you are currently in.
-
-```bash
-curl -L https://github.com/pterodactyl/panel/releases/download/v0.7.19/panel.tar.gz | tar --strip-components=1 -xzv
-```
-
-Once all of the files are downloaded we need to set the correct permissions on the cache and storage directories to avoid
-any webserver related errors.
-
-```bash
-chmod -R 755 storage/* bootstrap/cache
-```
-
-## Clear Compiled Assets
-
-Previous versions of Pterodactyl attempted to cache your configuration file for speed and performance enhancements. This
-ended up just causing more headaches with minimal improvements in performance, so we decided to stop doing that. Running
-the command below will clear the cached files for you so we can continue with upgrading.
-
-
-You probably only need to run this command once when upgrading from `0.6.X`. Once you're upgraded we don't cache the configuration
-file so there is no reason to remove anything.
-
-
-```bash
-rm -rf bootstrap/cache/*
-```
-
-Once the configuration cache is removed, you'll need to clear the template cache to ensure users get the most recent
-templates.
-
-```bash
-php artisan view:clear
-```
-
-## Update Dependencies
-
-After you've downloaded all of the new files you will need to upgrade the core components of the panel. To do this,
-simply run the commands below and follow any prompts.
-
-```bash
-composer install --no-dev --optimize-autoloader
-```
-
-## Update Environment
-
-These scripts will display your current values in brackets. To keep the current values simply press enter and it will
-continue without making any modifications.
-
-
-We've changed our recommended cache driver to be Redis, rather than Memcached. If you're using Memcached you can
-continue doing so with no problems, however moving forward our installation documentation will only mention Redis.
-
-
-```bash
-php artisan p:environment:setup
-php artisan p:environment:mail
-php artisan p:environment:database
-```
-
-## Database Updates
-
-
-The upgrade from `0.6` to `v0.7` includes some rather significant database changes. While the migration utility is
-able to handle everything for you, we still suggest taking a backup of your database before proceeding — just incase.
-
-
-
-Running `db:seed` below will overwrite any changes you made to core Pterodactyl Nests, Eggs, or Egg Variables! This is
-unavoidable, and this seeder must be run. To avoid this in the future, please create custom nests, or create custom
-eggs for game variations.
-
-
-```bash
-php artisan migrate --force
-php artisan db:seed --force
-```
-
-## Cleanup API Keys
-
-A significant change is introduced in 0.7.0 that changes how API keys are used, stored, and validated. Due to this
-change, all previously created keys will no longer function. In order to keep things cleaned up you'll want to remove
-these orphaned keys. To do so, run the command below.
-
-```bash
-php artisan p:migration:clean-orphaned-keys
-```
-
-Don't forget to create new keys for yourself, as well as let all of your users know they'll need to do so as well.
-
-## Set Permissions
-
-The last step is to set the proper owner of the files to be the user that runs your webserver. In most cases this
-is `www-data` but can vary from system to system — sometimes being `nginx`, `apache`, or even `nobody`.
-
-```bash
-# If using NGINX or Apache (not on CentOS):
-chown -R www-data:www-data *
-
-# If using NGINX on CentOS:
-chown -R nginx:nginx *
-
-# If using Apache on CentOS
-chown -R apache:apache *
-```
diff --git a/content/docs/panel/0.7/upgrade/0-7.mdx b/content/docs/panel/0.7/upgrade/0-7.mdx
deleted file mode 100644
index e17a18e58..000000000
--- a/content/docs/panel/0.7/upgrade/0-7.mdx
+++ /dev/null
@@ -1,83 +0,0 @@
----
-title: Upgrading 0.7 Series
-description: Guide for upgrading within the 0.7.X series of releases
----
-
-
-This documentation is for **end-of-life software** which does not receive any security updates or support
-from the community. This documentation has been left accessible for historical reasons.
-
-You should be installing and using [Pterodactyl Panel 1.0](/panel/getting-started) in production environments.
-
-
-This documentation covers the process for upgrading within the `0.7.X` series of releases. This means upgrading from
-— for example — `0.7.3` to `0.7.11`. **Do not use this guide for upgrading from `0.6` or upgrading to `1.0`.**
-
-
-If you are using a custom theme please be aware that upgrading will remove those files. You will need to re-upload
-your theme once the upgrade is complete or you will end up with server errors.
-
-
-## Fetch Updated Files
-
-The first step in the update process is to download the new panel files from GitHub. The command below will download
-the release archive for the most recent version of Pterodactyl and save it in the current directory. Now is a good time
-to ensure that you're in the `/var/www/pterodactyl` directory as the command below will automatically unpack the archive
-into your current folder.
-
-```bash
-curl -L https://github.com/pterodactyl/panel/releases/download/v0.7.19/panel.tar.gz | tar --strip-components=1 -xzv
-```
-
-Once all of the files are downloaded we need to set the correct permissions on the cache and storage directories to avoid
-any webserver related errors.
-
-```bash
-chmod -R 755 storage/* bootstrap/cache
-```
-
-## Update Dependencies
-
-After you've downloaded all of the new files you will need to upgrade the core components of the panel. To do this,
-simply run the commands below and follow any prompts.
-
-```bash
-composer install --no-dev --optimize-autoloader
-```
-
-## Clear Compiled Template Cache
-
-You'll also want to clear the compiled template cache to ensure that new and modified templates show up correctly for
-users.
-
-```bash
-php artisan view:clear
-php artisan config:clear
-```
-
-## Database Updates
-
-You'll also need to update your database schema for the newest version of Pterodactyl. Running the two commands below
-will update the schema and ensure the default eggs we ship are up to date (and add any new ones we might have). Just
-remember, _never edit core eggs we ship_! They will be overwritten by this update process.
-
-```bash
-php artisan migrate --force
-php artisan db:seed --force
-```
-
-## Set Permissions
-
-The last step is to set the proper owner of the files to be the user that runs your webserver. In most cases this
-is `www-data` but can vary from system to system — sometimes being `nginx`, `apache`, or even `nobody`.
-
-```bash
-# If using NGINX or Apache (not on CentOS):
-chown -R www-data:www-data *
-
-# If using NGINX on CentOS:
-chown -R nginx:nginx *
-
-# If using Apache on CentOS
-chown -R apache:apache *
-```
diff --git a/content/docs/panel/0.7/upgrade/meta.json b/content/docs/panel/0.7/upgrade/meta.json
deleted file mode 100644
index 0a0deb88e..000000000
--- a/content/docs/panel/0.7/upgrade/meta.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "title": "Upgrade Guides",
- "pages": [
- "0-6-to-0-7",
- "0-7"
- ]
-}
diff --git a/content/docs/panel/0.7/upgrading.mdx b/content/docs/panel/0.7/upgrading.mdx
deleted file mode 100644
index cec95bd86..000000000
--- a/content/docs/panel/0.7/upgrading.mdx
+++ /dev/null
@@ -1,41 +0,0 @@
----
-title: Upgrading
-description: Guide for upgrading Pterodactyl Panel 0.7 versions
----
-
-Upgrading the Panel is a relatively simple process. Below you will find a list of articles that will walk you through
-the upgrade process for each version of the software.
-
-
-This documentation is for **end-of-life software** which does not receive any security updates or support
-from the community. This documentation has been left accessible for historical reasons.
-
-You should be installing and using [Pterodactyl Panel 1.0](/panel/getting-started) in production environments.
-
-
-## Maintenance Mode
-
-Whenever you are performing an upgrade, you should be sure to place your Panel into "maintenance mode". This will prevent
-users from encountering unexpected errors, and ensure everything can be upgraded before users encounter potentially new features.
-
-```bash
-# Put the Panel into maintenance mode and deny user access
-php artisan down
-
-# Bring the Panel back up to receive connections.
-php artisan up
-```
-
-## Restarting Queue Workers
-
-After _every_ update, you should restart the queue worker to ensure that the new code is being loaded in and used.
-
-```bash
-php artisan queue:restart
-```
-
-## Version Specific Guides
-
-* [0.6.X to 0.7.19](/panel/0.7/upgrade/0-6-to-0-7)
-* [0.7.X series](/panel/0.7/upgrade/0-7)
-* [0.7.19 to 1.X.X](/panel/legacy-upgrade)
diff --git a/content/docs/panel/0.7/webserver-configuration.mdx b/content/docs/panel/0.7/webserver-configuration.mdx
deleted file mode 100644
index 1aa86f440..000000000
--- a/content/docs/panel/0.7/webserver-configuration.mdx
+++ /dev/null
@@ -1,241 +0,0 @@
----
-title: Webserver Configuration
-description: Configure NGINX or Apache for Pterodactyl Panel 0.7
----
-
-
-This documentation is for **end-of-life software** which does not receive any security updates or support
-from the community. This documentation has been left accessible for historical reasons.
-
-You should be installing and using [Pterodactyl Panel 1.0](/panel/getting-started) in production environments.
-
-
-
-You should remove the default Apache or NGINX configuration as it will expose application secrets to malicious
-users by default.
-
-
-## NGINX
-
-You should paste the contents of the file below, replacing `` with your domain name being used in a file called
-`pterodactyl.conf` and place it in `/etc/nginx/sites-available/`, or — if on CentOS, `/etc/nginx/conf.d/`.
-
-### NGINX With SSL
-
-This configuration assumes that you will be using SSL on both the Panel and Daemons for significantly improved communication
-security between users and the Panel. You will need to get a valid SSL certificate which can be done for free by using
-Let's Encrypt.
-
-
-When using the SSL configuration you MUST create SSL certificates, otherwise your NGINX will fail to start. See [Creating SSL Certificates](/tutorials/creating_ssl_certificates.html) documentation page for how to create these certificates before continuing.
-
-
-```nginx {5,11,26-27}
-server_tokens off;
-
-server {
- listen 80;
- server_name ;
- return 301 https://$server_name$request_uri;
-}
-
-server {
- listen 443 ssl http2;
- server_name ;
-
- root /var/www/pterodactyl/public;
- index index.php;
-
- access_log /var/log/nginx/pterodactyl.app-access.log;
- error_log /var/log/nginx/pterodactyl.app-error.log error;
-
- # allow larger file uploads and longer script runtimes
- client_max_body_size 100m;
- client_body_timeout 120s;
-
- sendfile off;
-
- # SSL Configuration
- ssl_certificate /etc/letsencrypt/live//fullchain.pem;
- ssl_certificate_key /etc/letsencrypt/live//privkey.pem;
- ssl_session_cache shared:SSL:10m;
- ssl_protocols TLSv1.2 TLSv1.3;
- ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";
- ssl_prefer_server_ciphers on;
-
- # See https://hstspreload.org/ before uncommenting the line below.
- # add_header Strict-Transport-Security "max-age=15768000; preload;";
- add_header X-Content-Type-Options nosniff;
- add_header X-XSS-Protection "1; mode=block";
- add_header X-Robots-Tag none;
- add_header Content-Security-Policy "frame-ancestors 'self'";
- add_header X-Frame-Options DENY;
- add_header Referrer-Policy same-origin;
-
- location / {
- try_files $uri $uri/ /index.php?$query_string;
- }
-
- location ~ \.php$ {
- fastcgi_split_path_info ^(.+\.php)(/.+)$;
- fastcgi_pass unix:/run/php/php7.2-fpm.sock;
- fastcgi_index index.php;
- include fastcgi_params;
- fastcgi_param PHP_VALUE "upload_max_filesize = 100M \n post_max_size=100M";
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- fastcgi_param HTTP_PROXY "";
- fastcgi_intercept_errors off;
- fastcgi_buffer_size 16k;
- fastcgi_buffers 4 16k;
- fastcgi_connect_timeout 300;
- fastcgi_send_timeout 300;
- fastcgi_read_timeout 300;
- include /etc/nginx/fastcgi_params;
- }
-
- location ~ /\.ht {
- deny all;
- }
-}
-```
-
-Continue reading to the bottom of this section for the final steps with NGINX!
-
-### NGINX Without SSL
-
-```nginx {3}
-server {
- listen 80;
- server_name ;
-
- root /var/www/pterodactyl/public;
- index index.html index.htm index.php;
- charset utf-8;
-
- location / {
- try_files $uri $uri/ /index.php?$query_string;
- }
-
- location = /favicon.ico { access_log off; log_not_found off; }
- location = /robots.txt { access_log off; log_not_found off; }
-
- access_log off;
- error_log /var/log/nginx/pterodactyl.app-error.log error;
-
- # allow larger file uploads and longer script runtimes
- client_max_body_size 100m;
- client_body_timeout 120s;
-
- sendfile off;
-
- location ~ \.php$ {
- fastcgi_split_path_info ^(.+\.php)(/.+)$;
- fastcgi_pass unix:/run/php/php7.2-fpm.sock;
- fastcgi_index index.php;
- include fastcgi_params;
- fastcgi_param PHP_VALUE "upload_max_filesize = 100M \n post_max_size=100M";
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- fastcgi_param HTTP_PROXY "";
- fastcgi_intercept_errors off;
- fastcgi_buffer_size 16k;
- fastcgi_buffers 4 16k;
- fastcgi_connect_timeout 300;
- fastcgi_send_timeout 300;
- fastcgi_read_timeout 300;
- }
-
- location ~ /\.ht {
- deny all;
- }
-}
-```
-
-### Enabling Configuration
-
-The final step is to enable your NGINX configuration and restart it.
-
-```bash
-# You do not need to symlink this file if you are using CentOS.
-sudo ln -s /etc/nginx/sites-available/pterodactyl.conf /etc/nginx/sites-enabled/pterodactyl.conf
-
-# You need to restart nginx regardless of OS.
-systemctl restart nginx
-```
-
-## Apache
-
-You should paste the contents of the file below, replacing `` with your domain name being used in a file called
-`pterodactyl.conf` and place it in `/etc/apache2/sites-available`, or — if on CentOS, `/etc/httpd/conf.d/`.
-
-Note: When using Apache, make sure you have the `libapache2-mod-php` package installed or else PHP will not display on your webserver.
-
-### Apache With SSL
-
-Like the nginx configuration, this assumes you will be using SSL on both the Panel and Daemons for improved security.
-
-
-When using the SSL configuration you MUST create SSL certificates, otherwise your Apache will fail to start. See [Creating SSL Certificates](/tutorials/creating_ssl_certificates.html) documentation page for how to create these certificates before continuing.
-
-
-```apache {2,8,17-18}
-
- # Replace the example with your domain name or IP address
- ServerName
-
- RewriteEngine On
- RewriteCond %{HTTPS} !=on
- RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
-
-
-
- # Replace the example with your domain name or IP address
- ServerName
- DocumentRoot "/var/www/pterodactyl/public"
-
- AllowEncodedSlashes On
-
- php_value upload_max_filesize 100M
- php_value post_max_size 100M
-
-
- Require all granted
- AllowOverride all
-
-
- SSLEngine on
- SSLCertificateFile /etc/letsencrypt/live//fullchain.pem
- SSLCertificateKeyFile /etc/letsencrypt/live//privkey.pem
-
-```
-
-### Apache Without SSL
-
-```apache {2}
-
- # Replace the example with your domain name or IP address
- ServerName
- DocumentRoot "/var/www/pterodactyl/public"
-
- AllowEncodedSlashes On
-
- php_value upload_max_filesize 100M
- php_value post_max_size 100M
-
-
- AllowOverride all
- Require all granted
-
-
-```
-
-### Enabling Configuration
-
-Once you've created the file above, simply run the commands below. If you are on CentOS _you do not need to run the commands
-below!_ You only need to run `systemctl restart httpd`.
-
-```bash
-# You do not need to run any of these commands on CentOS
-sudo ln -s /etc/apache2/sites-available/pterodactyl.conf /etc/apache2/sites-enabled/pterodactyl.conf
-sudo a2enmod rewrite
-systemctl restart apache2
-```
diff --git a/content/docs/panel/additional-configuration.mdx b/content/docs/panel/additional-configuration.mdx
index 1c7cdd3ec..62c6efe48 100644
--- a/content/docs/panel/additional-configuration.mdx
+++ b/content/docs/panel/additional-configuration.mdx
@@ -184,7 +184,7 @@ telemetry data. The telemetry data is collected every 24 hours, there is no ongo
or local storage of the telemetry data, we collect the data right before we send it to the remote
server.
-Currently, all telemetry collection logic is handled by the [TelemetryCollectionService](https://github.com/pterodactyl/panel/blob/1.0-develop/app/Services/Telemetry/TelemetryCollectionService.php#L53)
+Currently, all telemetry collection logic is handled by the [TelemetryCollectionService](https://github.com/pterodactyl/panel/blob/develop/app/Services/Telemetry/TelemetryCollectionService.php#L53)
on the panel. This service is responsible for collecting all the data that is sent to the remote
server.
diff --git a/content/docs/panel/getting-started.mdx b/content/docs/panel/getting-started.mdx
index 970243d33..c9d2c1185 100644
--- a/content/docs/panel/getting-started.mdx
+++ b/content/docs/panel/getting-started.mdx
@@ -19,9 +19,10 @@ of basic linux system administration you should stop and turn around now.**
Pterodactyl runs on a wide range of operating systems, so pick whichever you are most comfortable using.
-
-Pterodactyl does not support most OpenVZ systems due to incompatibilities with Docker. If you are planning on running
-this software on an OpenVZ based system you will — most likely — not be successful.
+
+Running Wings under LXC or OpenVZ containers is possible as long as the virtualization layer supports Docker. Most modern
+providers with LXC/OpenVZ 7+ and nested virtualization enabled will work without issues. If you run into problems, ensure
+that your provider has enabled the necessary kernel features for Docker.
| Operating System | Version | Supported | Notes |
@@ -31,8 +32,8 @@ this software on an OpenVZ based system you will — most likely — not
| **RHEL / Rocky Linux / AlmaLinux** | 8 | ✅ | Extra repos are required. |
| | 9 | ✅ | |
| **Debian** | 11 | ✅ | [Debian Dependencies](/guides/panel-installation/debian) |
-| | 12 | ✅ | [Debian Dependencies](/guides/panel-installation/debian)
-| | 13 | ✅ | [Debian Dependencies](/guides/panel-installation/debian)
+| | 12 | ✅ | [Debian Dependencies](/guides/panel-installation/debian) |
+| | 13 | ✅ | [Debian Dependencies](/guides/panel-installation/debian) |
## Dependencies
@@ -106,7 +107,7 @@ Now that all of the files have been downloaded we need to configure some core as
You will need a database setup and a user with the correct permissions created for that database before
continuing any further. See below to create a user and database for your Pterodactyl panel quickly. To find more detailed information
-please have a look at [Setting up MySQL](/guides/mysql-setup).
+please have a look at [Setting up MySQL](/guides/tutorials/mysql-setup).
```sql
# If using MariaDB (v11.0.0+) (This is the default when installing Pterodactyl by following the documentation.)
@@ -282,6 +283,4 @@ sudo systemctl enable --now pteroq.service
Since 1.11, Pterodactyl will collect anonymous telemetry to help us better understand how the
software is being used. To learn more about this feature and to opt-out, please see our [Telemetry](/panel/additional-configuration#telemetry)
-documentation. Make sure to continue with the rest of the installation process.
-
-#### Next Step: [Webserver Configuration](/panel/webserver-configuration)
+documentation. Make sure to continue with the rest of the installation process.
\ No newline at end of file
diff --git a/content/docs/panel/legacy-upgrade.mdx b/content/docs/panel/legacy-upgrade.mdx
deleted file mode 100644
index 37558cb40..000000000
--- a/content/docs/panel/legacy-upgrade.mdx
+++ /dev/null
@@ -1,149 +0,0 @@
----
-title: Legacy Upgrades
-description: Upgrading from Panel 0.7.X to 1.3.x
----
-
-
-
-This upgrade guide is for **upgrading from 0.7.X to 1.3.x**. If you are trying to do an upgrade on a 1.X Panel
-please [use this guide instead](/panel/updating). During this upgrade process you will have some periods
-of Panel unavailability, however none of the underlying game server instances will be stopped.
-
-## Enter Maintenance Mode
-
-You'll want to put your Panel into maintenance mode by running the `down` command below before starting. This
-will prevent users from accessing the Panel during a period where things will be broken or not working correctly. Make sure that you're in the `/var/www/pterodactyl` directory when executing the command.
-
-```bash
-# Put the Panel into maintenance mode and deny user access
-php artisan down
-```
-
-## Update Dependencies
-
-You'll need to make sure your system dependencies are up to date before performing this upgrade. Please
-reference the list below to ensure you have all of the required versions.
-
-* PHP `8.0` or `8.1` (recommended) with the following extensions: `cli`, `openssl`, `gd`, `mysql`, `PDO`, `mbstring`,
- `tokenizer`, `bcmath`, `xml` or `dom`, `curl`, `zip`, and `fpm` if you are planning to use nginx. See our guide
- for [Upgrading PHP](/guides/php_upgrade) for details.
-* Composer v2 (`composer self-update --2`)
-
-
-If you upgrade your PHP version and are using nginx as your webserver, you will have to update the
-`fastcgi_pass` value in your nginx's `pterodactyl.conf` configuration to use the correct `php-fpm` socket.
-
-
-* MySQL `5.7.22` or higher (MySQL `8` recommended) **or** MariaDB `10.2` or higher.
-
-
-Please make sure you are running the correct version of MariaDB or MySQL listed above! Failure to do so _will_
-result in an error when you attempt to run the migrations.
-
-Previous documentation (and just the age of this software) likely had you installing MariaDB 10.1 which _will not
-work_ with this version of Pterodactyl.
-
-
-## Fetch Updated Files
-
-The first step in the update process is to download the new panel files from GitHub. The command below will download
-the release archive for the most recent version of Pterodactyl and save it in the current directory. Now is a good time
-to ensure that you're in the `/var/www/pterodactyl` directory as the command below will automatically unpack the archive
-into your current folder.
-
-We will also be deleting the `app/` directory. Because of the way we handle installations and upgrades deleted files
-are not always detected properly, so simply uppacking over this location will result in some confusing behavior.
-
-```bash
-# Delete the app directory to ensure we start with a clean slate here. This will not affect any
-# of your settings or servers.
-curl -L -o panel.tar.gz https://github.com/pterodactyl/panel/releases/latest/download/panel.tar.gz
-rm -rf $(find app public resources -depth | head -n -1 | grep -Fv "$(tar -tf panel.tar.gz)")
-
-# Download the updated files and delete the archive file.
-tar -xzvf panel.tar.gz && rm -f panel.tar.gz
-```
-
-Once all of the files are downloaded we need to set the correct permissions on the cache and storage directories to avoid
-any webserver related errors.
-
-```bash
-chmod -R 755 storage/* bootstrap/cache
-```
-
-## Update Dependencies
-
-After you've downloaded all of the new files you will need to upgrade the core components of the panel. To do this,
-simply run the commands below and follow any prompts.
-
-```bash
-composer install --no-dev --optimize-autoloader
-```
-
-## Clear Compiled Template Cache
-
-You'll also want to clear the compiled template cache to ensure that new and modified templates show up correctly for
-users.
-
-```bash
-php artisan view:clear
-php artisan config:clear
-```
-
-## Database Updates
-
-You'll also need to update your database schema for the newest version of Pterodactyl. Running the two commands below
-will update the schema and ensure the default eggs we ship are up to date (and add any new ones we might have). Just
-remember, _never edit core eggs we ship_! They will be overwritten by this update process.
-
-
-If you used a custom plugin that allowed for server transfers on `0.7` you **MUST** delete or rename the `server_transfers` table
-before continuing.
-
-
-```bash
-php artisan migrate --force
-php artisan db:seed --force
-```
-
-## Set Permissions
-
-The last step is to set the proper owner of the files to be the user that runs your webserver. In most cases this
-is `www-data` but can vary from system to system — sometimes being `nginx`, `apache`, or even `nobody`.
-
-```bash
-# If using NGINX or Apache (not on CentOS):
-chown -R www-data:www-data *
-
-# If using NGINX on CentOS:
-chown -R nginx:nginx *
-
-# If using Apache on CentOS
-chown -R apache:apache *
-```
-
-## Restarting Queue Workers
-
-After _every_ update you should restart the queue worker to ensure that the new code is loaded in and used.
-
-```bash
-php artisan queue:restart
-```
-
-## Exit Maintenance Mode
-
-Now that the upgrade is complete, exit maintenance mode and your Panel will now be available.
-
-```bash
-# Bring the Panel back up to receive connections.
-php artisan up
-```
-
-## Switch to Wings
-
-We've deprecated the old Node.js daemon in favor of [Wings](https://github.com/pterodactyl/wings), our new server
-control plane written in Go. This new system is significantly faster, easier to install, and much smaller. All you
-need to do is install a single binary on your system and configure it to run on boot. **You cannot use the old Node.js
-Daemon to run servers with Pterodactyl Panel 1.0.**
-
-Please see [Migrating to Wings](/wings/migrating) for instructions.
diff --git a/content/docs/panel/meta.json b/content/docs/panel/meta.json
index 6a74b191f..d77e4b59e 100644
--- a/content/docs/panel/meta.json
+++ b/content/docs/panel/meta.json
@@ -6,9 +6,6 @@
"webserver-configuration",
"additional-configuration",
"updating",
- "troubleshooting",
- "---Legacy---",
- "legacy-upgrade",
- "0.7"
+ "troubleshooting"
]
}
diff --git a/content/docs/panel/updating.mdx b/content/docs/panel/updating.mdx
index e4e7d934a..45883f7e5 100644
--- a/content/docs/panel/updating.mdx
+++ b/content/docs/panel/updating.mdx
@@ -6,7 +6,7 @@ description: Guide for updating Pterodactyl Panel within the 1.x series
This documentation covers the process for updating within the `1.x` series of releases. This means updating from
-— for example — `1.5.0` to `1.6.0`. **Do not use this guide for upgrading from `0.7`.**
+— for example — `1.11.x` to `1.12.x`.
## Panel Version Requirements
@@ -27,7 +27,8 @@ most cases your base Wings version should match that of your Panel.
| 1.8.x | 1.6.x | | 7.4, 8.0, 8.1 |
| 1.9.x | 1.6.x | | 7.4, 8.0, 8.1 |
| 1.10.x | 1.7.x | | 7.4, 8.0, 8.1 |
-| **1.11.x** | **1.11.x** | ✅ | ~~8.1~~, 8.2, **8.3** |
+| 1.11.x | 1.11.x | | ~~8.1~~, 8.2, 8.3 |
+| **1.12.x** | **1.12.x** | ✅ | 8.2, **8.3** |
There are no 1.8.x, 1.9.x, or 1.10.x releases of Wings.
@@ -40,34 +41,22 @@ There are no 1.8.x, 1.9.x, or 1.10.x releases of Wings.
**Before continuing**, please ensure that your system and web server configuration has been upgraded to at least PHP 8.2 by running `php -v` and Composer 2 by running `composer --version`. You
should see an output similar to the result below. If you do not see at least PHP 8.2 and Composer 2, you will need to upgrade by following
-our [PHP Upgrade Guide](/guides/php_upgrade) and return to this documentation afterward.
+our [PHP Upgrade Guide](/guides/configuration/php-upgrade) and return to this documentation afterward.
```shell
vagrant@pterodactyl:~/app$ php -v
-PHP 8.2.5 (cli) (built: Dec 21 2022 10:32:13) (NTS)
+PHP 8.3.30 (cli) (built: Dec 21 2022 10:32:13) (NTS)
Copyright (c) The PHP Group
-Zend Engine v4.1.5, Copyright (c) Zend Technologies
- with Zend OPcache v8.2.5, Copyright (c), by Zend Technologies
+Zend Engine v4.3.30, Copyright (c) Zend Technologies
+ with Zend OPcache v8.3.30, Copyright (c), by Zend Technologies
vagrant@pterodactyl:~/app$ composer --version
-Composer version 2.3.5 2022-04-13 16:43:00
+Composer version 2.8.12 2025-09-19 13:41:59
```
-## Self Upgrade
+## Upgrade Steps
-
-The self-upgrade is currently in-operable due to issues with some dependencies we make use of.
-For the time being please perform a manual upgrade until this issue can be resolved.
-
-
-## Manual Upgrade
-
-If you prefer not to perform the automatic self-upgrade, or need to reference any upgrade steps you can follow
-the documentation below.
-
-
-If you've already performed the self-upgrade successfully you do not need to do anything else on this page.
-
+Follow the steps below to upgrade your Panel to the latest version.
### Enter Maintenance Mode
@@ -133,13 +122,13 @@ The last step is to set the proper owner of the files to be the user that runs y
is `www-data` but can vary from system to system — sometimes being `nginx`, `caddy`, `apache`, or even `nobody`.
```bash
-# If using NGINX or Apache (not on CentOS)
+# If using NGINX, Apache or Caddy (not on RHEL / Rocky Linux / AlmaLinux)
chown -R www-data:www-data /var/www/pterodactyl/*
-# If using NGINX on CentOS
+# If using NGINX on RHEL / Rocky Linux / AlmaLinux
chown -R nginx:nginx /var/www/pterodactyl/*
-# If using Apache on CentOS
+# If using Apache on RHEL / Rocky Linux / AlmaLinux
chown -R apache:apache /var/www/pterodactyl/*
```
@@ -164,8 +153,4 @@ php artisan up
Since 1.11, Pterodactyl will collect anonymous telemetry to help us better understand how the
software is being used. To learn more about this feature and to opt-out, please see our [Telemetry](/panel/additional-configuration#telemetry)
-documentation. Remember to continue with the rest of the upgrade.
-
-## Next Steps
-
-Continue with [Upgrading Wings](/wings/upgrading).
+documentation. Remember to continue with the rest of the upgrade.
\ No newline at end of file
diff --git a/content/docs/panel/webserver-configuration.mdx b/content/docs/panel/webserver-configuration.mdx
index 657d1ac6e..499470f77 100644
--- a/content/docs/panel/webserver-configuration.mdx
+++ b/content/docs/panel/webserver-configuration.mdx
@@ -4,7 +4,7 @@ description: Configure your webserver to serve the Pterodactyl Panel
---
-When using the SSL configuration you MUST create SSL certificates, otherwise your webserver will fail to start. See the [Creating SSL Certificates](/guides/creating_ssl_certificates) documentation page to learn how to create these certificates before continuing.
+When using the SSL configuration you MUST create SSL certificates, otherwise your webserver will fail to start. See the [Creating SSL Certificates](/guides/tutorials/ssl-certificates) documentation page to learn how to create these certificates before continuing.
@@ -342,7 +342,7 @@ You should paste the contents of the file below, replacing `` with your
```
-If you are using Cloudflare DNS in proxy mode, refer to [this tutorial](/guides/creating_ssl_certificates#method-3-caddy-using-cloudflare-api), to see how to configure Caddy to use DNS challenge for obtaining SSL certificates.
+If you are using Cloudflare DNS in proxy mode, refer to [this tutorial](/guides/tutorials/ssl-certificates#method-3-caddy-using-cloudflare-api), to see how to configure Caddy to use DNS challenge for obtaining SSL certificates.
### Enabling Configuration
@@ -398,7 +398,6 @@ The only two differences are that we have suffixed the `` with `:80` and
write_timeout 300s
}
- header Strict-Transport-Security "max-age=16768000; preload;"
header X-Content-Type-Options "nosniff"
header X-XSS-Protection "1; mode=block;"
header X-Robots-Tag "none"
@@ -430,8 +429,4 @@ The final step is to restart Caddy.
systemctl restart caddy
```
-
-
-## Next Steps
-
-Continue with the [Wings Installation](/wings/installing) guide.
+
\ No newline at end of file
diff --git a/content/docs/project/about.mdx b/content/docs/project/about.mdx
index 7f37b5f7d..6f875267f 100644
--- a/content/docs/project/about.mdx
+++ b/content/docs/project/about.mdx
@@ -5,12 +5,9 @@ description: Information about the Pterodactyl project team, sponsors, and licen
## Core Project Team
-| Name | Discord Name | Primary Role |
-| ---------------------------------------- | --------------- | ----------------------------------- |
-| [Dane Everitt](https://daneeveritt.com/) | `.tacticalfish` | Founder & Former Project Maintainer |
-| [Matthew Penner](https://matthewp.io/) | `matthewp` | Project Maintainer |
-| Stepan Fedotov | `trixter` | WHMCS Module Maintainer |
-| Michael Parker | `parkervcp` | Egg Developer, Docker Integration |
+| Name | Discord Name | Primary Role |
+| ---------------------------------------- | --------------- | ------------------------- |
+| [Dane Everitt](https://daneeveritt.com/) | `deveritt` | Founder & Project Maintainer |
Members of the project team have a red username in our Discord server.
@@ -37,7 +34,7 @@ The following companies help fund Pterodactyl's development. [Interested in beco
Pterodactyl® Copyright © 2015 Dane Everitt and contributors.
-Code released under the [MIT License](https://github.com/pterodactyl/panel/blob/1.0-develop/LICENSE.md).
+Code released under the [MIT License](https://github.com/pterodactyl/panel/blob/develop/LICENSE.md).
## Release Signing
diff --git a/content/docs/project/community.mdx b/content/docs/project/community.mdx
index a55f739ce..ba06a26e0 100644
--- a/content/docs/project/community.mdx
+++ b/content/docs/project/community.mdx
@@ -31,7 +31,7 @@ acting out is not allowed.
This community is fairly lax in regards to moderating language. However, the following are some examples of
behavior that is absolutely _not_ tolerated and for which you will be removed from the community.
-* Racist, sexist, homophobic, transphobic, or otherwise deregatory speech, images, insinuations, or any language whose
+* Racist, sexist, homophobic, transphobic, or otherwise derogatory speech, images, insinuations, or any language whose
sole purpose is to denigrate any individual, organization, or class of individual.
* Threats of violence against any person, group, or organization including "doxxing" of these entities.
* Pornographic or excessively violent content.
diff --git a/content/docs/project/index.mdx b/content/docs/project/index.mdx
index 3965d4440..adbcbd39d 100644
--- a/content/docs/project/index.mdx
+++ b/content/docs/project/index.mdx
@@ -21,7 +21,7 @@ Some of our core supported games include:
* Teamspeak
* Mumble
* Team Fortress 2
-* Counter Strike: Global Offensive
+* Counter-Strike: Global Offensive
* Garry's Mod
* ARK: Survival Evolved
diff --git a/content/docs/wings/daemon-0.6/configuration.mdx b/content/docs/wings/daemon-0.6/configuration.mdx
deleted file mode 100644
index ef73e9534..000000000
--- a/content/docs/wings/daemon-0.6/configuration.mdx
+++ /dev/null
@@ -1,171 +0,0 @@
----
-title: Additional Configuration
-description: Advanced configuration options for Pterodactyl Daemon 0.6 (Legacy)
----
-
-
-This documentation is for **abandoned software** which does not receive any security updates or support
-from the community. This documentation has been left accessible for historical reasons.
-
-You should be installing and using [Wings](/wings/installing) in production environments with
-[Pterodactyl Panel 1.0](/panel/getting-started).
-
-
-
-These are advanced configurations for the daemon. You risk breaking your daemon and making containers un-usable if
-you modify something incorrectly. Proceed at your own risk, and only if you know what each configuration value does.
-
-
-The documentation below uses dot-notated JSON to explain where each setting should live. You will need to manually
-expand this syntax when adding to the `core.json` file for the Daemon. For example, something like `internals.throttle.enabled`
-would be expanded to the JSON below.
-
-```json
-{
- "internals": {
- "throttle": {
- "enabled": true
- }
- }
-}
-```
-
-## Output Throttles
-
-There are a few throttle limits built into the Daemon to keep people from causing issues with data volume and CPU usage.
-Under normal circumstances users should not encounter these limits. You might see the occasional data throttling
-warning while starting a server or when there is a sudden spike in data output.
-
-If you're seeing more servers than you expected being killed as a result of the Daemon throttler, you can make
-adjustments to the settings below. Please note the configs below are in JSON dot-notation and should be expanded
-out into a normal JSON object.
-
-| Setting Path | Default Value | Notes |
-| ------------------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `enabled` | true | Determines if the throttle (and associated values below) should be used. |
-| `kill_at_count` | 5 | The number of warnings that can accumulate for a particular instance before the server process is killed. The decay time below affects how quickly this value is decreased. |
-| `decay` | 10 | The number of seconds that a server process must go without triggering a data throttle warning before the throttle count begins decreasing. This loop is processed every 5 seconds and will decrement the throttle count by one when the process goes more than this number of seconds without a data throttle occurring. |
-| `bytes` | 30720 | ⚠️ _(removed in v0.5.5)_ The maximum number of bytes of data that can be output in the defined interval before a warning occurs. |
-| `lines` | 1000 | ⚠️ _(added in v0.5.6)_ The number of lines that can be output by the server process in the defined check interval time. By default, 5,000 lines in ~500ms results in a server process kill. |
-| `check_interval_ms` | 100 | The number of milliseconds between the throttle resetting the used bytes or line count. |
-
-Please note that all of the settings above are in the `internals.throttle.X` path. So, `enabled` is actually `internals.throttle.enabled`.
-
-## Custom Network Interfaces
-
-If for whatever reason you need to modify the network interfaces used for Pterodactyl's local Docker network you
-can do so by modifying the `core.json` file for the daemon. In most cases you'll just be modifying the network
-name to allow your servers to use the host network stack. To do so, just change `docker.network.name` to be `host`
-rather than `pterodactyl_nw` as shown below.
-
-
-While changing to the host network stack does allow servers running on Pterodactyl to have direct access to local
-interfaces and bind to specific IP addresses (required for some Steam games), it is not recommended on public
-installations of Pterodactyl (where you have other users running servers).
-
-Using the `host` stack removes many network specific protections afforded by Docker, and will allow server processes
-to access anything on the host, as well as bind to any IP or Port they wish.
-
-
-
-Any changes to the network after the daemon has been started will require you to remove the docker network and restart the daemon. Any servers on the host need to be stopped before and most likely rebuilt.
-
-The following will stop the daemon, remove the network, and start the daemon again. Run at your own risk.
-`systemctl stop wings && docker network rm pterodactyl_nw && systemctl start wings`
-
-
-```json {5}
-"docker": {
- "socket": "/var/run/docker.sock",
- "autoupdate_images": true,
- "network": {
- "name": "pterodactyl_nw",
- "interfaces": {
- "v4": {
- "subnet": "172.18.0.0/16",
- "gateway": "172.18.0.1"
- }
- }
- },
- "interface": "172.18.0.1"
-},
-```
-
-## Private Registries
-
-| Setting Path | Default Value | Notes |
-| --------------- | ------------- | --------------------------------------------------------------------------------------------------------- |
-| `username` | _none_ | The username to use when connecting to the registry. |
-| `password` | _none_ | The password associated with the account. |
-| `images` | _none_ | An array of images that are associated with the private registry. |
-| `auth` | _none_ | |
-| `email` | _none_ | |
-| `serveraddress` | _none_ | The address to the server the registry is located on. |
-| `key` | _none_ | A pre-generated base64 encoded authentication string. If provided none of the above options are required. |
-
-Please note that all of the settings above are in the `docker.registry.X` path. So, `username` is actually `docker.registry.username`.
-
-## Security Policies
-
-This daemon ships with a very strict security configuration designed to limit access to the host system, and mitigate
-a large range of potential attack vectors. However, some users might need to tweak these settings, or are running on
-a private instance and are willing to decrease some of the security measures.
-
-| Setting Path | Default Value | Notes |
-| ---------------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `ipv6` | true | Set this to false to disable IPv6 networking on the pterodactyl0 interface. |
-| `internal` | false | Set this to true to prevent any external network access to all containers on the pterodactyl0 interface. |
-| `enable_icc` | true | Set this to false to disallow containers to access services running on the host system's non-public IP addresses. Setting this to false does make it impossible to connect (from a container) to MySQL/Redis/etc. running on the host system without using the public IP address. |
-| `enable_ip_masquerade` | true | Set this to false to disable IP Masquerading on the pterodactyl0 interface. |
-
-Please note that all of the settings above are in the `docker.policy.network.X` path. So, `ipv6` is actually `docker.policy.network.ipv6`.
-
-## Container Policy
-
-| Setting Path | Default Value | Notes |
-| -------------------- | ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `tmpfs` | `rw,exec,nosuid,size=50M` | These are the arguments used for mounting a `tmpfs` directory into containers to allow certain programs to run. |
-| `log_driver` | none | ⚠️ This option was **removed** in `v0.6` and is forcibly set to `json-file`. The log driver to use for containers. We default to `none` to mitigate a potential DoS attack vector if a server were to spam log output. |
-| `log_opts` | array | |
-| `log_opts.max_size` | `5m` | The maximum size of the server output log file created by Docker. |
-| `log_opts.max_files` | `1` | The maximum number of files that Docker will create with output from the server. |
-| `readonly_root` | true | Determines if the root filesystem of the container should be readonly. |
-| `securityopts` | array | An array of security options to apply to a container. The default array is provided below. |
-| `cap_drop` | array | An array of linux capabilities to drop from the container (in addition to ones [dropped by docker already](https://docs.docker.com/engine/security/security/#linux-kernel-capabilities). A listing of the default array is below. |
-
-Please note that all of the settings above are in the `docker.policy.container.X` path. So, `tmpfs` is actually `docker.policy.container.tmpfs`.
-
-### Default Security Opts Array
-
-```json
-[
- 'no-new-privileges',
-]
-```
-
-### Default Capabilities Drop Array
-
-
-Starting with `v0.6` of the Daemon, the following previously _dropped_ capabilities are available in containers: `chown`, `kill`, `setgid`, and `setuid`.
-
-
-```json
-[
- 'setpcap',
- 'mknod',
- 'audit_write',
- 'net_raw',
- 'dac_override',
- 'fowner',
- 'fsetid',
- 'net_bind_service',
- 'sys_chroot',
- 'setfcap',
-]
-```
-
-## Enabling Cloudflare
-
-Enabling Cloudflare on the daemon isn't particularly useful since users do not connect directly to the daemon port, and users need an unproxied hostname to access any servers on the node. As a result it's not possible to conceal the IP address of your node machine, but some people want to enable it regardless.
-
-Cloudflare only proxies the default daemon port (8080) when using HTTP. In order to get the daemon to work with Cloudflare when HTTPS is enabled you must change the daemon port to one that Cloudflare will proxy such as 8443. Since Cloudflare only proxies HTTP/HTTPS traffic for non-enterprise plans you cannot proxy the SFTP port.
diff --git a/content/docs/wings/daemon-0.6/installing.mdx b/content/docs/wings/daemon-0.6/installing.mdx
deleted file mode 100644
index b3d68a2af..000000000
--- a/content/docs/wings/daemon-0.6/installing.mdx
+++ /dev/null
@@ -1,211 +0,0 @@
----
-title: Installation
-description: Installation guide for Pterodactyl Daemon 0.6 (Legacy)
----
-
-
-This documentation is for **abandoned software** which does not receive any security updates or support
-from the community. This documentation has been left accessible for historical reasons.
-
-You should be installing and using [Wings](/wings/installing) in production environments with
-[Pterodactyl Panel 1.0](/panel/getting-started).
-
-
-
-This specific software is for Pterodactyl v0.7 and **must not be used for Pterodactyl v1.0**. If you have installed 1.0 you should use [Wings](/wings/installing) instead.
-
-
-## Supported Systems
-
-| Operating System | Version | Supported | Notes |
-| ---------------- | ------- | :----------------: | ----------------------------------------------------------- |
-| **Ubuntu** | 18.04 | ✅ | Documentation written assuming Ubuntu 18.04 as the base OS. |
-| | 20.04 | ✅ | |
-| **CentOS** | 7 | ⚠️ | Extra repos are required |
-| | 8 | ✅ | |
-| **Debian** | 9 | ✅ | |
-| | 10 | ✅ | |
-
-## System Requirements
-
-In order to run the Daemon you will need a system capable of running Docker containers. Most VPS and almost all
-dedicated servers should be capable of running Docker, but there are edge cases.
-
-If your provider makes use of `Virtuozzo`, `OpenVZ` (or `OVZ`), or `LXC` then you will most likely be unable to
-run the Daemon. If you are unsure what your host is using there are a couple of options. The easiest is to check
-their website, or reach out to their support team.
-
-If you want to take a different approach, try using `lscpu` and checking what the virtualization type listed is. An
-example of this is shown below which shows my hypervisor running with full virtualization — this means it will
-support Docker without issues. If you see `KVM` for the vendor, chances are you're fine as well.
-
-```bash
-dane@daemon:~$ lscpu | grep 'vendor\|type'
-Hypervisor vendor: VMware
-Virtualization type: full
-```
-
-If that doesn't work for some reason, or you're still unsure, you can also run the command below and as long as it
-doesn't report `Xen` or `LXC` you're probably okay to continue.
-
-```bash
-dane@daemon:~$ sudo dmidecode -s system-manufacturer
-VMware, Inc.
-```
-
-## Dependencies
-
-Pterodactyl's Daemon requires the following dependencies be installed on your system in order for it to operate.
-
-* Docker
-* Nodejs (`v10`, `v12`, higher versions likely work, but are untested)
-* `node-gyp`
-* `tar`
-* `unzip`
-* `make`, `gcc` (`gcc-c++` on CentOS), `g++`
-* `python`
-
-### Installing Docker
-
-For a quick install of Docker CE, you can execute the command below:
-
-```bash
-curl -sSL https://get.docker.com/ | CHANNEL=stable bash
-```
-
-If you would rather do a manual installation, please reference the official Docker documentation for how to install Docker CE on your server. Some quick links
-are listed below for commonly supported systems.
-
-* [Ubuntu](https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-docker-ce)
-* [CentOS](https://docs.docker.com/install/linux/docker-ce/centos/#install-docker-ce)
-* [Debian](https://docs.docker.com/install/linux/docker-ce/debian/#install-docker-ce)
-
-
-Please be aware that some hosts install a modified kernel that does not support important docker features. Please
-check your kernel by running `uname -r`. If your kernel ends in `-xxxx-grs-ipv6-64` or `-xxxx-mod-std-ipv6-64` you're
-probably using a non-supported kernel. Check our [Kernel Modifications](/wings/daemon-0.6/kernel-modifications) guide for details.
-
-
-#### Start Docker on Boot
-
-If you are on an operating system with systemd (Ubuntu 16+, Debian 8+, CentOS 7+) run the command below to have Docker start when you boot your machine.
-
-```bash
-systemctl enable docker
-```
-
-#### Enabling Swap
-
-On most systems, docker will be unable to setup swap space, you can check if this is the case by running `docker info`.
-If it outputs `WARNING: No swap limit support` near the bottom, this is the case. Enabling swap is completely optional,
-but we recommended doing it if you will be hosting for others, and to prevent OOM errors.
-
-To do so, open `/etc/default/grub` as a root user, and find the line starting with `GRUB_CMDLINE_LINUX_DEFAULT`. Make
-sure the line includes `swapaccount=1`.
-
-After doing that, simply run `sudo update-grub` followed by `sudo reboot` to restart the server and have swap enabled.
-Below is an example of what the line should look like, _do not copy this line verbatim, it often has additional
-OS specific parameters._
-
-```text
-GRUB_CMDLINE_LINUX_DEFAULT="swapaccount=1"
-```
-
-### Installing Nodejs
-
-NodeJS is also super easy to install! Simply run the command below to make the package accessible to your system.
-
-```bash
-curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
-apt -y install nodejs make gcc g++
-```
-
-
-If you are using CentOS, [please follow these instructions](https://nodejs.org/en/download/package-manager/#enterprise-linux-and-fedora). Ubuntu and Debian users may also follow the [official
-instructions provided by Nodejs](https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions).
-
-
-## Installing Daemon Software
-
-
-This documentation is for **abandoned software** which does not receive any security updates or support
-from the community. This documentation has been left accessible for historical reasons.
-
-You should be installing and using [Wings](/wings/installing) in production environments with
-[Pterodactyl Panel 1.0](/panel/getting-started).
-
-
-The first step for installing the daemon is to make sure we have the required directory structure setup. To do so,
-run the commands below.
-
-```bash
-mkdir -p /srv/daemon /srv/daemon-data
-cd /srv/daemon
-```
-
-
-If you are using a server provided by OVH or SoYouStart please be aware that your main drive space is probably allocated to
-`/home`, and not `/` by default. Please consider using `/home/daemon-data` for server data. This can be easily
-set when creating the node.
-
-
-The next step is to download the software and unpack the archive.
-
-```bash
-curl -L https://github.com/pterodactyl/daemon/releases/download/v0.6.13/daemon.tar.gz | tar --strip-components=1 -xzv
-```
-
-Finally, we need to install the dependencies that allow the Daemon to run properly. This command will most likely
-take a few minutes to run, please do not interrupt it.
-
-```bash
-npm install --only=production --no-audit --unsafe-perm
-```
-
-## Configure Daemon
-
-Once you have installed the daemon and required components, the next step is to create a node on your installed Panel
-Once you have done that there will be a tab called Configuration when you view the node.
-
-Simply copy and paste the code block and paste it into a file called `core.json` in `/srv/daemon/config` and save it.
-You may also use the Auto-Deployment feature rather than manually creating the files.
-
-## Starting the Daemon
-
-To start your daemon simply move into the daemon directory and run the command below which will start the daemon in
-foreground mode. Once you are done, use `CTRL+C` to terminate the process. Depending on your server's internet connection
-pulling and starting the Daemon for the first time may take a few minutes.
-
-```bash
-sudo npm start
-```
-
-### Daemonizing (using systemd)
-
-Running Pterodactyl Daemon in the background is a simple task, just make sure that it runs without errors before doing
-this. Place the contents below in a file called `wings.service` in the `/etc/systemd/system` directory.
-
-```text
-[Unit]
-Description=Pterodactyl Wings Daemon
-After=docker.service
-
-[Service]
-User=root
-#Group=some_group
-WorkingDirectory=/srv/daemon
-LimitNOFILE=4096
-PIDFile=/var/run/wings/daemon.pid
-ExecStart=/usr/bin/node /srv/daemon/src/index.js
-Restart=on-failure
-StartLimitInterval=600
-
-[Install]
-WantedBy=multi-user.target
-```
-
-Then, run the commands below to reload systemd and start the daemon.
-
-```bash
-systemctl enable --now wings
-```
diff --git a/content/docs/wings/daemon-0.6/kernel-modifications.mdx b/content/docs/wings/daemon-0.6/kernel-modifications.mdx
deleted file mode 100644
index 87b92f65c..000000000
--- a/content/docs/wings/daemon-0.6/kernel-modifications.mdx
+++ /dev/null
@@ -1,84 +0,0 @@
----
-title: Kernel Modifications
-description: Guide for modifying kernel on OVH/SYS servers for Pterodactyl Daemon
----
-
-
-In most cases, only users with a server provided by OVH will need to make any modifications to their kernel.
-
-
-## Update Kernel
-
-Install the new kernels using apt-get. In this case we are installing the latest version of the kernel,
-but feel free to browse using apt-cache search linux-image-extra to find all possible image versions you can
-install. You'll want to install the latest.
-
-```bash
-apt-get install linux-image-generic linux-image-extra-virtual
-```
-
-After you've installed the new kernel you'll need to update the grub loader using the command below. After that, a
-server reboot is in order.
-
-```bash
-sudo mv /etc/grub.d/06_OVHkernel /etc/grub.d/96_OVHkernel
-sudo update-grub
-sudo reboot
-```
-
-## Confirm Kernel
-
-Once you've rebooted, check that the latest kernel is installed using `uname -r`, it should output `4.4.0-131-generic`
-(in this case) or similar.
-
-
-If it still includes `-xxxx-grs-ipv6-64` or similar, it didn't work and you should move on top the steps below.
-
-
-## Set Default Boot
-
-Ok, so unfortunately the easiest way didn't work, but don't worry, we can still fix this. Firstly, lets run a quick
-command to list potential kernels, just look at the output and make sure you see your newly installed kernel listed.
-
-```bash
-grep "menuentry '" /boot/grub/grub.cfg
-```
-
-After running that you should see output similar to the example below.
-
-```text
-menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-ad1a8550-963c-4a9f-b922-85827cf44fbe' {
- menuentry 'Ubuntu, with Linux 4.4.0-131-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-131-generic-advanced-ad1a8550-963c-4a9f-b922-85827cf44fbe' {
- menuentry 'Ubuntu, with Linux 4.4.0-131-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-131-generic-recovery-ad1a8550-963c-4a9f-b922-85827cf44fbe' {
- menuentry 'Ubuntu, with Linux 4.4.0-127-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-127-generic-advanced-ad1a8550-963c-4a9f-b922-85827cf44fbe' {
- menuentry 'Ubuntu, with Linux 4.4.0-127-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-127-generic-recovery-ad1a8550-963c-4a9f-b922-85827cf44fbe' {
- menuentry 'Ubuntu, with Linux 4.4.0-116-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-116-generic-advanced-ad1a8550-963c-4a9f-b922-85827cf44fbe' {
- menuentry 'Ubuntu, with Linux 4.4.0-116-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-116-generic-recovery-ad1a8550-963c-4a9f-b922-85827cf44fbe' {
-```
-
-As you can see, we have `Ubuntu, with Linux 4.4.0-131-generic` listed as the first indented option. To boot using this
-specific kernel, we will need to modify our grub file.
-
-```bash
-sudo nano /etc/default/grub
-```
-
-Find `GRUB_DEFAULT`, it is most likely set to `GRUB_DEFAULT=0`. We're going to modify it a bit to boot our new kernel.
-
-```text
-GRUB_DEFAULT='Advanced options for Ubuntu>Ubuntu, with Linux 4.4.0-131-generic'
-```
-
-The only part of the code above that you might need to change is the `4.4.0-131-generic`, which you can find based on
-the kernel version you install. You might also notice that it matches the first indented entry from the grep menuentry
-command and also the version of the kernel that we installed above. Once you've done that, run the commands below to
-update grub and reboot, and you should be set.
-
-```bash
-sudo update-grub
-sudo reboot
-```
-
-## Boot from hard disk
-
-It's possible that even after you modified the GRUB configuration the server's still booted into a OVH kernel. If this happens to you, go to the OVH control panel and check the server's booting settings and make sure it's booting from hard disk instead of network boot.
diff --git a/content/docs/wings/daemon-0.6/meta.json b/content/docs/wings/daemon-0.6/meta.json
deleted file mode 100644
index 9dcae7280..000000000
--- a/content/docs/wings/daemon-0.6/meta.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "title": "Daemon 0.6 (Legacy)",
- "pages": [
- "installing",
- "configuration",
- "kernel-modifications",
- "standalone-sftp",
- "upgrading",
- "upgrade"
- ]
-}
diff --git a/content/docs/wings/daemon-0.6/standalone-sftp.mdx b/content/docs/wings/daemon-0.6/standalone-sftp.mdx
deleted file mode 100644
index cc2f62f0a..000000000
--- a/content/docs/wings/daemon-0.6/standalone-sftp.mdx
+++ /dev/null
@@ -1,101 +0,0 @@
----
-title: Standalone SFTP Server
-description: Guide for setting up standalone SFTP server for Pterodactyl Daemon 0.6 (Legacy)
----
-
-
-This documentation is for **abandoned software** which does not receive any security updates or support
-from the community. This documentation has been left accessible for historical reasons.
-
-You should be installing and using [Wings](/wings/installing) in production environments with
-[Pterodactyl Panel 1.0](/panel/getting-started).
-
-
-
-Standalone SFTP support was introduced in `Panel@v0.7.11` and `Daemon@v0.6.8` and will not work with prior versions.
-
-
-Pterodactyl now ships with the option to use a [standalone SFTP server](https://github.com/pterodactyl/sftp-server)
-rather than using the one that was built into the Daemon. This provides better compatibility with SFTP clients, improved
-transfer speeds, and a more native approach to file handling and server operation.
-
-Because this functionality is new, we've decided to make it an opt-in process, rather than an opt-out process. This page
-will cover how to setup your standalone SFTP server.
-
-## Disable Daemon's Server
-
-To disable the Daemon SFTP server, you only need to add `sftp.enabled=false` to your Daemon's `core.json` file.
-
-```json
-{
- ...
- "sftp": {
- ...
- "ip": "0.0.0.0",
- "enabled": false,
- "port": 2022,
- ...
- },
- ...
-}
-```
-
-Once you've done that, restarting the Daemon will apply the change and not boot the built-in server.
-
-## Run the Standalone Server
-
-To download the standalone server, execute the command below in your Daemon's base directory (generally `/srv/daemon`).
-
-```bash
-curl -Lo sftp-server https://github.com/pterodactyl/sftp-server/releases/download/v1.0.5/sftp-server
-chmod +x sftp-server
-```
-
-Excellent, now you've got the server binary. Because we've written this server using [`go`](https://golang.org) there
-are no additional dependencies you need to install.
-
-### Start the Server
-
-Finally, start the SFTP server so that you can then use it to access your files.
-
-```bash
-./sftp-server
-```
-
-By default, this will start the SFTP server on the old port of `2022`. If you want to use a different port it can be
-specified by passing the `--port` flag. For more advanced usage, please refer to the [GitHub README](https://github.com/pterodactyl/sftp-server/tree/release/v1.0.4#running)
-which includes all of the flags and their default values.
-
-## Daemonize Server
-
-Chances are you'll want to daemonize the SFTP server using something like `systemd` so that it will run in the
-background. Place the contents below in a file called `pterosftp.service` in the `/etc/systemd/system` directory.
-
-```text
-[Unit]
-Description=Pterodactyl Standalone SFTP Server
-After=wings.service
-
-[Service]
-User=root
-WorkingDirectory=/srv/daemon
-LimitNOFILE=4096
-PIDFile=/var/run/wings/sftp.pid
-ExecStart=/srv/daemon/sftp-server
-Restart=on-failure
-StartLimitInterval=600
-
-[Install]
-WantedBy=multi-user.target
-```
-
-Then, run the command below to enable it in systemd and start the SFTP server.
-
-```bash
-systemctl enable --now pterosftp
-```
-
-### Customizing Startup
-
-If you're trying to pass additional arguments to the server when starting it using SystemD you'll want to modify
-the `ExecStart` line. Something like `ExecStart=/srv/daemon/sftp-server --port 2022` for example.
diff --git a/content/docs/wings/daemon-0.6/upgrade/0-4-to-0-5.mdx b/content/docs/wings/daemon-0.6/upgrade/0-4-to-0-5.mdx
deleted file mode 100644
index dd5da1fb2..000000000
--- a/content/docs/wings/daemon-0.6/upgrade/0-4-to-0-5.mdx
+++ /dev/null
@@ -1,108 +0,0 @@
----
-title: Upgrading 0.4.X to 0.5.X
-description: Guide for upgrading Pterodactyl Daemon from 0.4.X to 0.5.X (Legacy)
----
-
-
-This documentation is for **abandoned software** which does not receive any security updates or support
-from the community. This documentation has been left accessible for historical reasons.
-
-You should be installing and using [Wings](/wings/installing) in production environments with
-[Pterodactyl Panel 1.0](/panel/getting-started).
-
-
-
-This upgrade process will require that **all** servers running through the Daemon be offline for a short period
-of time while data is reorganized and server containers are rebuilt. Please plan accordingly for this.
-
-You will need to update your Panel to the 0.7.X series in order to complete this process as well.
-
-
-## Docker Adjustments
-
-Previously we provided a quick Docker installation script in our installation instructions. We made the regrettable
-mistake of not reading deeper into it and realizing it enabled edge release channels for Docker. You'll want to take
-a look at the official documentation for Docker and change your channel to be a stable release channel.
-
-Please reference the official Docker documentation for how to install Docker CE on your server. Some quick links
-are listed below for commonly supported systems.
-
-* [Ubuntu](https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-docker-ce)
-* [CentOS](https://docs.docker.com/install/linux/docker-ce/centos/#install-docker-ce)
-* [Debian](https://docs.docker.com/install/linux/docker-ce/debian/#install-docker-ce)
-
-## Download Files
-
-To upgrade from v0.4.X first switch the directory where you installed your Daemon. If you followed the installation
-guide your Daemon is most likely located in `/srv/daemon`. Then, download and unpack the archive using the
-command below.
-
-```bash
-curl -L https://github.com/pterodactyl/daemon/releases/download/v0.5.7/daemon.tar.gz | tar --strip-components=1 -xzv
-```
-
-Then, update the core dependencies for the Daemon with the following command.
-
-```bash
-npm update --only=production
-```
-
-## SFTP Cleanup
-
-This version of the Daemon ships with an internal SFTP subsystem, no more need for a special Docker container or
-confusing file permissions. For the most part the Daemon can handle all of the internal changes that make this possible,
-you'll just need to remove the old Docker container for SFTP.
-
-To do so, simply run the following commands, changing `2022` if you are using a different port.
-
-```bash
-docker rmi -f quay.io/pterodactyl/scrappy
-sudo kill $( sudo lsof -i:2022 -t )
-```
-
-Once you have completed that step, you will need to boot the Daemon in order to have the new system user created
-automatically. This can be done by running `sudo npm start` in the Daemon directory. You'll want to run it in the
-foreground in order to monitor progress and make sure it executes without issues. Once it has finished running and
-the Daemon is up and running, stop it again using `CTRL+C`.
-
-If for whatever reason you need your user to be named something other than `pterodactyl` you can change that in the
-`core.json` before booting the Daemon by setting the `docker.container.username` key. 99.9% of users will not need
-to change the username.
-
-## File Migration
-
-Now for the longest part of the upgrade: data migration. You only need to migrate data once when updating from v0.4.X.
-
-You'll need all of your servers to be stopped for this part of the migration. All of their containers will also need
-to be rebuilt, but this will be completed on the Panel with a console command since we also need to update their
-configurations with some new data. We will run that command after we migrate all of the data.
-
-To perform this migration, simply run the command below in the Daemon directory and follow its prompts. Be aware it
-might take a few minutes to run, especially with large volumes of data.
-
-```bash
-sudo npm run migrate
-docker system prune
-```
-
-### Rebuild Containers
-
-After migrating your data, you'll also need to run a command on the Panel in order to update all of the configurations
-for these servers. First, be sure to boot the Daemon in foreground mode (`sudo npm start`). You'll then want to run the
-following command in the Panel directory, **not the Daemon directory**.
-
-```bash
-php artisan p:server:rebuild --node=###
-```
-
-Replace `###` above with the ID of your node that is being updated. This will toggle all servers for a rebuild, as
-well as push the latest information to their configurations. Once this is done, stop the Daemon, run the command below,
-and then boot it. If you have all daemons running and wish to update them all at once, remove the `--node` flag.
-
-Boot the Daemon one last time in the foreground, make sure it completes without errors, and then you can stop it and
-restart it using your service: `sudo systemctl start wings`.
-
-
-You're all finished! Thanks for bearing with us, this update addresses a lot of flaws in the previous implementations
-of the software, and also prepares your data for the eventual migration to our new daemon — which is still in the works.
-
diff --git a/content/docs/wings/daemon-0.6/upgrade/0-5-to-0-6.mdx b/content/docs/wings/daemon-0.6/upgrade/0-5-to-0-6.mdx
deleted file mode 100644
index cbea2dbd9..000000000
--- a/content/docs/wings/daemon-0.6/upgrade/0-5-to-0-6.mdx
+++ /dev/null
@@ -1,78 +0,0 @@
----
-title: Upgrading 0.5.X to 0.6.X
-description: Guide for upgrading Pterodactyl Daemon from 0.5.X to 0.6.X (Legacy)
----
-
-
-This documentation is for **abandoned software** which does not receive any security updates or support
-from the community. This documentation has been left accessible for historical reasons.
-
-You should be installing and using [Wings](/wings/installing) in production environments with
-[Pterodactyl Panel 1.0](/panel/getting-started).
-
-
-
-Your servers will need to be restarted after upgrading the daemon in order to see the expected log output in the Panel.
-
-
-## Breaking Changes
-
-This release introduces a few breaking changes to how the Daemon operates, but maintains compatibility with `v0.7.X` of
-the Panel, so you don't need to worry about updating the Panel.
-
-Of notable change in this release is that we've switched from using custom logging functionality to using Docker logging
-functionality. This allows us to better output events that happen before we can attach to the container, centralizes logic,
-and allows Docker to manage the logs (which it does very well). Now, when your server refuses to boot, instead of seeing
-an unhelpful "Server has crashed" message with nothing before it, you'll see _everything_ that happened in the container
-leading up to that point, assuming things were output.
-
-## Download Files
-
-To upgrade from v0.5.X first switch the directory where you installed your Daemon. If you followed the installation
-guide your Daemon is most likely located in `/srv/daemon`. Then, download and unpack the archive using the
-command below.
-
-
-Stop your Daemon process before continuing in order to avoid any issues and ensure everything updates as expected.
-
-```bash
-systemctl stop wings
-```
-
-
-```bash
-curl -L https://github.com/pterodactyl/daemon/releases/download/v0.6.13/daemon.tar.gz | tar --strip-components=1 -xzv
-```
-
-Then, update the core dependencies for the Daemon with the following command.
-
-```bash
-npm update --only=production
-```
-
-### Start the Daemon
-
-Finally, start your daemon up, most likely with the command below.
-
-```bash
-systemctl start wings
-```
-
-## Rebuild Containers
-
-Because of some changes we made behind the scenes when it comes to displaying server output you'll need to rebuild and
-restart all of your servers. The rebuild step is required, the restart step is optional, but highly recommended otherwise
-you will not be able to see any console output.
-
-Run the following commands _from the Panel server_ in order to perform a mass rebuild and restart. Replace `###` with the
-ID of the node you just upgraded, or remove the `--node` flag entirely to rebuild on all nodes.
-
-```bash
-php artisan p:server:rebuild --node=###
-```
-
-Then, restart all of the servers using the following command, or by manually restarting them one at a time in the Panel.
-
-```bash
-php artisan p:server:bulk-power restart --nodes=###
-```
diff --git a/content/docs/wings/daemon-0.6/upgrade/0-5.mdx b/content/docs/wings/daemon-0.6/upgrade/0-5.mdx
deleted file mode 100644
index 49f8dedb2..000000000
--- a/content/docs/wings/daemon-0.6/upgrade/0-5.mdx
+++ /dev/null
@@ -1,36 +0,0 @@
----
-title: Upgrading 0.5 Series
-description: Guide for upgrading Pterodactyl Daemon 0.5 series (Legacy)
----
-
-
-This documentation is for **abandoned software** which does not receive any security updates or support
-from the community. This documentation has been left accessible for historical reasons.
-
-You should be installing and using [Wings](/wings/installing) in production environments with
-[Pterodactyl Panel 1.0](/panel/getting-started).
-
-
-
-Your servers will not go offline during this process thanks to Docker. Clients will briefly lose connection
-to the Daemon from the Panel, but only during the restart phase.
-
-
-## Download Newest Release
-
-First, ensure you're in the Daemon directory, `/srv/daemon`, before continuing through this process. After you've done
-that, run the command below to pull down the latest files and unpack them in the daemon directory.
-
-```bash
-curl -L https://github.com/pterodactyl/daemon/releases/download/v0.5.7/daemon.tar.gz | tar --strip-components=1 -xzv
-```
-
-## Update Components
-
-After you've pulled down the latest files the last thing you need to do is run the commands below to update the
-components and then restart the daemon.
-
-```bash
-npm update --only=production
-systemctl restart wings
-```
diff --git a/content/docs/wings/daemon-0.6/upgrade/0-6.mdx b/content/docs/wings/daemon-0.6/upgrade/0-6.mdx
deleted file mode 100644
index 9db91d334..000000000
--- a/content/docs/wings/daemon-0.6/upgrade/0-6.mdx
+++ /dev/null
@@ -1,50 +0,0 @@
----
-title: Upgrading 0.6 Series
-description: Guide for upgrading Pterodactyl Daemon 0.6 series (Legacy)
----
-
-
-This documentation is for **abandoned software** which does not receive any security updates or support
-from the community. This documentation has been left accessible for historical reasons.
-
-You should be installing and using [Wings](/wings/installing) in production environments with
-[Pterodactyl Panel 1.0](/panel/getting-started).
-
-
-
-**DO NOT** use this guide to upgrade from `0.5.X` to `0.6.X`, it will not work and you will encounter errors afterwards. Please check the [0.5 to 0.6](/wings/daemon-0.6/upgrade/0-5-to-0-6) upgrade documentation to perform that update.
-
-
-
-Your servers will not go offline during this process thanks to Docker. Clients will briefly lose connection
-to the Daemon from the Panel, but only during the restart phase.
-
-
-## Download Newest Release
-
-First, ensure you're in the Daemon directory, `/srv/daemon`, before continuing through this process. After you've done
-that, run the command below to pull down the latest files and unpack them in the daemon directory.
-
-```bash
-curl -L https://github.com/pterodactyl/daemon/releases/download/v0.6.13/daemon.tar.gz | tar --strip-components=1 -xzv
-```
-
-## Update Components
-
-After you've pulled down the latest files the last thing you need to do is run the commands below to update the
-components and then restart the daemon.
-
-
-Version `0.6.13` requires Nodejs v10 or higher in order to compile the `mmmagic` dependency. Please ensure
-you are running at least version 10. You can run `node -v` to check, upgrade if it is `v6` or `v8`.
-
-
-
-You may see output along the lines of "found 14 vulnerabilities (6 low, 3 moderate, 5 high) in 927 scanned packages".
-You can safely ignore this output. Do not run the audit fix command, you _will_ break your Daemon.
-
-
-```bash
-npm install --only=production --no-audit --unsafe-perm
-systemctl restart wings
-```
diff --git a/content/docs/wings/daemon-0.6/upgrade/meta.json b/content/docs/wings/daemon-0.6/upgrade/meta.json
deleted file mode 100644
index a201ce0e7..000000000
--- a/content/docs/wings/daemon-0.6/upgrade/meta.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "title": "Upgrade Guides",
- "pages": [
- "0-4-to-0-5",
- "0-5",
- "0-5-to-0-6",
- "0-6"
- ]
-}
diff --git a/content/docs/wings/daemon-0.6/upgrading.mdx b/content/docs/wings/daemon-0.6/upgrading.mdx
deleted file mode 100644
index 1941e8483..000000000
--- a/content/docs/wings/daemon-0.6/upgrading.mdx
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: Upgrading
-description: Guide for upgrading Pterodactyl Daemon 0.6 (Legacy)
----
-
-
-This documentation is for **abandoned software** which does not receive any security updates or support
-from the community. This documentation has been left accessible for historical reasons.
-
-You should be installing and using [Wings](/wings/installing) in production environments with
-[Pterodactyl Panel 1.0](/panel/getting-started).
-
-
-## Version Specific Guides
-
-* [0.4.X to 0.5.X](/wings/daemon-0.6/upgrade/0-4-to-0-5)
-* [0.5.X series](/wings/daemon-0.6/upgrade/0-5)
-* [0.5.X to 0.6.X](/wings/daemon-0.6/upgrade/0-5-to-0-6)
-* [0.6.X series](/wings/daemon-0.6/upgrade/0-6)
-* [0.6.X to 1.X.X](/wings/migrating) (Current - Migrate to Wings)
-* [1.X.X series](/wings/upgrading) (Current - Wings)
diff --git a/content/docs/wings/index.mdx b/content/docs/wings/index.mdx
index b1a6e8de8..06a758622 100644
--- a/content/docs/wings/index.mdx
+++ b/content/docs/wings/index.mdx
@@ -3,7 +3,7 @@ title: Wings
description: Server control plane documentation for Pterodactyl Wings
---
-Wings is the next generation server control plane from Pterodactyl. It has been rebuilt from the ground up using Go and lessons learned from our first Nodejs Daemon.
+Wings is the server control plane from Pterodactyl. It has been rebuilt from the ground up using Go and lessons learned from our first Nodejs Daemon.
## Getting Started
@@ -17,13 +17,4 @@ If you're migrating from the old Node.JS daemon (0.6.x), see the [Migrating to W
- [Installing](/wings/installing) - Complete installation guide for Wings
- [Configuration](/wings/configuration) - Advanced configuration options
-- [Upgrading](/wings/upgrading) - Guide for upgrading Wings
-- [Migrating](/wings/migrating) - Migrate from Node.JS daemon to Wings
-
-### Daemon 0.6 (Legacy)
-
-
-The Daemon 0.6 documentation is provided for historical reference only. This software is abandoned and no longer receives security updates or support. You should be using Wings 1.0 with Pterodactyl Panel 1.0 in production environments.
-
-
-- [Legacy Daemon Documentation](/wings/daemon-0.6/installing) - Archived documentation for Daemon 0.6
+- [Upgrading](/wings/upgrading) - Guide for upgrading Wings
\ No newline at end of file
diff --git a/content/docs/wings/installing.mdx b/content/docs/wings/installing.mdx
index e9aa53a0b..44169db3a 100644
--- a/content/docs/wings/installing.mdx
+++ b/content/docs/wings/installing.mdx
@@ -21,8 +21,7 @@ only the versions listed below.
| Operating System | Version | Supported | Notes |
| ---------------------------------- | ------- | :----------------: | ----------------------------------------------------------- |
-| **Ubuntu** | 20.04 | ✅ | Documentation written assuming Ubuntu 20.04 as the base OS. |
-| | 22.04 | ✅ | |
+| **Ubuntu** | 22.04 | ✅ | |
| | 24.04 | ✅ | |
| **RHEL / Rocky Linux / AlmaLinux** | 8 | ✅ | |
| | 9 | ✅ | |
@@ -133,14 +132,12 @@ When your Panel is using SSL, the Wings must also have one created for its FQDN.
### Starting Wings
-To start Wings, simply run the command below, which will start it in a debug mode. Once you confirmed that it is running without errors, use `CTRL+C` to terminate the process and daemonize it by following the instructions below. Depending on your server's internet connection pulling and starting Wings for the first time may take a few minutes.
+To start Wings, simply run the command below, which will start it in debug mode. Once you confirmed that it is running without errors, use `CTRL+C` to terminate the process and daemonize it by following the instructions below. Depending on your server's internet connection pulling and starting Wings for the first time may take a few minutes.
```bash
sudo wings --debug
```
-You may optionally add the `--debug` flag to run Wings in debug mode.
-
### Daemonizing (using systemd)
Running Wings in the background is a simple task, just make sure that it runs without errors before doing
diff --git a/content/docs/wings/migrating.mdx b/content/docs/wings/migrating.mdx
index 734b8e02a..d02ccd616 100644
--- a/content/docs/wings/migrating.mdx
+++ b/content/docs/wings/migrating.mdx
@@ -22,7 +22,7 @@ run the commands below which will create the base directory and download the win
```bash
mkdir -p /etc/pterodactyl
-curl -L -o /usr/local/bin/wings https://github.com/pterodactyl/wings/releases/latest/download/wings_linux_amd64
+curl -L -o /usr/local/bin/wings "https://github.com/pterodactyl/wings/releases/latest/download/wings_linux_$([[ "$(uname -m)" == "x86_64" ]] && echo "amd64" || echo "arm64")"
chmod u+x /usr/local/bin/wings
```
diff --git a/lib/openapi.ts b/lib/openapi.ts
new file mode 100644
index 000000000..f6ddf3ba5
--- /dev/null
+++ b/lib/openapi.ts
@@ -0,0 +1,5 @@
+import { createOpenAPI } from 'fumadocs-openapi/server';
+
+export const openapi = createOpenAPI({
+ input: ['./openapi.json'],
+});
diff --git a/mdx-components.tsx b/mdx-components.tsx
index 3690dc297..7fca3040d 100644
--- a/mdx-components.tsx
+++ b/mdx-components.tsx
@@ -1,11 +1,13 @@
import defaultMdxComponents from 'fumadocs-ui/mdx';
import type { MDXComponents } from 'mdx/types';
import * as TabsComponents from 'fumadocs-ui/components/tabs';
+import { APIPage } from '@/components/api-page';
export function getMDXComponents(components?: MDXComponents): MDXComponents {
return {
...defaultMdxComponents,
...TabsComponents,
+ APIPage,
...components,
};
}
diff --git a/next.config.mjs b/next.config.mjs
index 19d623a9f..8606386dd 100644
--- a/next.config.mjs
+++ b/next.config.mjs
@@ -6,19 +6,10 @@ const withMDX = createMDX();
const config = {
reactStrictMode: true,
output: 'standalone',
+ basePath: '/docs',
images: {
unoptimized: true,
},
- basePath: '/docs',
- redirects: async () => {
- return [
- {
- source: '/',
- destination: '/panel/getting-started',
- permanent: false,
- },
- ];
- }
};
export default withMDX(config);
diff --git a/openapi.json b/openapi.json
new file mode 100644
index 000000000..65906ddc4
--- /dev/null
+++ b/openapi.json
@@ -0,0 +1,12986 @@
+{
+ "openapi": "3.0.3",
+ "info": {
+ "title": "Pterodactyl Panel API v1",
+ "version": "1.0.0",
+ "description": "REST API for the Pterodactyl Panel. Uses two authentication scopes: **Application API** keys (admin, created in the panel admin area) and **Client API** keys (per-user, created in account settings). All requests must include an `Authorization: Bearer ` header. Responses are JSON."
+ },
+ "servers": [
+ {
+ "url": "{panel}",
+ "description": "Pterodactyl Panel",
+ "variables": {
+ "panel": {
+ "default": "https://pterodactyl.file.properties",
+ "description": "Your panel URL"
+ }
+ }
+ }
+ ],
+ "tags": [
+ {
+ "name": "Application - Servers",
+ "description": "Create, update, and delete servers. Requires an application API key."
+ },
+ {
+ "name": "Application - Servers - Database Management",
+ "description": "Manage databases attached to servers. Requires an application API key."
+ },
+ {
+ "name": "Application - Nests",
+ "description": "List and view nests. Requires an application API key."
+ },
+ {
+ "name": "Application - Nests - Eggs Management",
+ "description": "List and view eggs within a nest. Requires an application API key."
+ },
+ {
+ "name": "Client - Server - Startup",
+ "description": "View and update server startup variables."
+ },
+ {
+ "name": "Client - General",
+ "description": "List servers the authenticated user can access, and view global permissions."
+ },
+ {
+ "name": "Client - Server",
+ "description": "Server details, console WebSocket, resource usage, power actions, and command execution."
+ },
+ {
+ "name": "Client - Server - Databases",
+ "description": "Create, delete, and rotate passwords for server databases."
+ },
+ {
+ "name": "Client - Server - File Manager",
+ "description": "Browse, read, write, copy, rename, compress, and delete server files."
+ },
+ {
+ "name": "Client - Server - Schedules",
+ "description": "Manage scheduled tasks (cron jobs) for a server."
+ },
+ {
+ "name": "Client - Server - Network",
+ "description": "View and manage server network allocations."
+ },
+ {
+ "name": "Client - Server - Users",
+ "description": "Manage subusers and their permissions on a server."
+ },
+ {
+ "name": "Client - Server - Backups",
+ "description": "Create, view, download, and delete server backups."
+ },
+ {
+ "name": "Application - Users",
+ "description": "Create, update, and delete panel users. Requires an application API key."
+ },
+ {
+ "name": "Application - Nodes",
+ "description": "Create, update, and delete nodes. Requires an application API key."
+ },
+ {
+ "name": "Application - Locations",
+ "description": "Create, update, and delete locations. Requires an application API key."
+ },
+ {
+ "name": "Application - Nodes - Allocations",
+ "description": "Manage port allocations on a node. Requires an application API key."
+ },
+ {
+ "name": "Client - Server - Settings",
+ "description": "Rename or reinstall a server."
+ },
+ {
+ "name": "Client - Account",
+ "description": "View and update account details, two-factor auth, email, password, and API keys."
+ }
+ ],
+ "paths": {
+ "/api/application/servers": {
+ "get": {
+ "tags": [
+ "Application - Servers"
+ ],
+ "summary": "List servers",
+ "operationId": "get-list-servers",
+ "description": "Retrieves all servers",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "data": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "external_id": {
+ "type": "string"
+ },
+ "uuid": {
+ "type": "string"
+ },
+ "identifier": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "suspended": {
+ "type": "boolean"
+ },
+ "limits": {
+ "type": "object",
+ "properties": {
+ "memory": {
+ "type": "integer"
+ },
+ "swap": {
+ "type": "integer"
+ },
+ "disk": {
+ "type": "integer"
+ },
+ "io": {
+ "type": "integer"
+ },
+ "cpu": {
+ "type": "integer"
+ },
+ "threads": {
+ "type": "string",
+ "nullable": true
+ }
+ }
+ },
+ "feature_limits": {
+ "type": "object",
+ "properties": {
+ "databases": {
+ "type": "integer"
+ },
+ "allocations": {
+ "type": "integer"
+ },
+ "backups": {
+ "type": "integer"
+ }
+ }
+ },
+ "user": {
+ "type": "integer"
+ },
+ "node": {
+ "type": "integer"
+ },
+ "allocation": {
+ "type": "integer"
+ },
+ "nest": {
+ "type": "integer"
+ },
+ "egg": {
+ "type": "integer"
+ },
+ "pack": {
+ "type": "string",
+ "nullable": true
+ },
+ "container": {
+ "type": "object",
+ "properties": {
+ "startup_command": {
+ "type": "string"
+ },
+ "image": {
+ "type": "string"
+ },
+ "installed": {
+ "type": "boolean"
+ },
+ "environment": {
+ "type": "object",
+ "properties": {
+ "SERVER_JARFILE": {
+ "type": "string"
+ },
+ "VANILLA_VERSION": {
+ "type": "string"
+ },
+ "STARTUP": {
+ "type": "string"
+ },
+ "P_SERVER_LOCATION": {
+ "type": "string"
+ },
+ "P_SERVER_UUID": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "updated_at": {
+ "type": "string"
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "relationships": {
+ "type": "object",
+ "properties": {
+ "databases": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "data": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "server": {
+ "type": "integer"
+ },
+ "host": {
+ "type": "integer"
+ },
+ "database": {
+ "type": "string"
+ },
+ "username": {
+ "type": "string"
+ },
+ "remote": {
+ "type": "string"
+ },
+ "max_connections": {
+ "type": "integer"
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "meta": {
+ "type": "object",
+ "properties": {
+ "pagination": {
+ "type": "object",
+ "properties": {
+ "total": {
+ "type": "integer"
+ },
+ "count": {
+ "type": "integer"
+ },
+ "per_page": {
+ "type": "integer"
+ },
+ "current_page": {
+ "type": "integer"
+ },
+ "total_pages": {
+ "type": "integer"
+ },
+ "links": {
+ "type": "object",
+ "properties": {}
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "list",
+ "data": [
+ {
+ "object": "server",
+ "attributes": {
+ "id": 5,
+ "external_id": "RemoteId1",
+ "uuid": "1a7ce997-259b-452e-8b4e-cecc464142ca",
+ "identifier": "1a7ce997",
+ "name": "Wuhu Island",
+ "description": "Matt from Wii Sports",
+ "suspended": false,
+ "limits": {
+ "memory": 512,
+ "swap": 0,
+ "disk": 200,
+ "io": 500,
+ "cpu": 0,
+ "threads": null
+ },
+ "feature_limits": {
+ "databases": 5,
+ "allocations": 5,
+ "backups": 2
+ },
+ "user": 1,
+ "node": 1,
+ "allocation": 1,
+ "nest": 1,
+ "egg": 5,
+ "pack": null,
+ "container": {
+ "startup_command": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -jar {{SERVER_JARFILE}}",
+ "image": "quay.io/pterodactyl/core:java",
+ "installed": true,
+ "environment": {
+ "SERVER_JARFILE": "server.jar",
+ "VANILLA_VERSION": "latest",
+ "STARTUP": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -jar {{SERVER_JARFILE}}",
+ "P_SERVER_LOCATION": "Test",
+ "P_SERVER_UUID": "1a7ce997-259b-452e-8b4e-cecc464142ca"
+ }
+ },
+ "updated_at": "2020-06-13T04:20:53+00:00",
+ "created_at": "2019-12-23T06:46:27+00:00",
+ "relationships": {
+ "databases": {
+ "object": "list",
+ "data": [
+ {
+ "object": "databases",
+ "attributes": {
+ "id": 1,
+ "server": 5,
+ "host": 4,
+ "database": "s5_perms",
+ "username": "u5_QsIAp1jhvS",
+ "remote": "%",
+ "max_connections": 0,
+ "created_at": "2020-06-12T23:00:13+01:00",
+ "updated_at": "2020-06-12T23:00:13+01:00"
+ }
+ },
+ {
+ "object": "databases",
+ "attributes": {
+ "id": 2,
+ "server": 5,
+ "host": 4,
+ "database": "s5_coreprotect",
+ "username": "u5_2jtJx1nO1d",
+ "remote": "%",
+ "max_connections": 0,
+ "created_at": "2020-06-12T23:00:20+01:00",
+ "updated_at": "2020-06-12T23:00:20+01:00"
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ ],
+ "meta": {
+ "pagination": {
+ "total": 1,
+ "count": 1,
+ "per_page": 50,
+ "current_page": 1,
+ "total_pages": 1,
+ "links": {}
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ]
+ },
+ "post": {
+ "tags": [
+ "Application - Servers"
+ ],
+ "summary": "Create server",
+ "operationId": "post-create-server",
+ "description": "Creates a new server",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "user": {
+ "type": "integer"
+ },
+ "egg": {
+ "type": "integer"
+ },
+ "docker_image": {
+ "type": "string"
+ },
+ "startup": {
+ "type": "string"
+ },
+ "environment": {
+ "type": "object",
+ "properties": {
+ "BUNGEE_VERSION": {
+ "type": "string"
+ },
+ "SERVER_JARFILE": {
+ "type": "string"
+ }
+ }
+ },
+ "limits": {
+ "type": "object",
+ "properties": {
+ "memory": {
+ "type": "integer"
+ },
+ "swap": {
+ "type": "integer"
+ },
+ "disk": {
+ "type": "integer"
+ },
+ "io": {
+ "type": "integer"
+ },
+ "cpu": {
+ "type": "integer"
+ }
+ }
+ },
+ "feature_limits": {
+ "type": "object",
+ "properties": {
+ "databases": {
+ "type": "integer"
+ },
+ "backups": {
+ "type": "integer"
+ }
+ }
+ },
+ "allocation": {
+ "type": "object",
+ "properties": {
+ "default": {
+ "type": "integer"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "name": "Building",
+ "user": 1,
+ "egg": 1,
+ "docker_image": "quay.io/pterodactyl/core:java",
+ "startup": "java -Xms128M -Xmx128M -jar server.jar",
+ "environment": {
+ "BUNGEE_VERSION": "latest",
+ "SERVER_JARFILE": "server.jar"
+ },
+ "limits": {
+ "memory": 128,
+ "swap": 0,
+ "disk": 512,
+ "io": 500,
+ "cpu": 100
+ },
+ "feature_limits": {
+ "databases": 5,
+ "backups": 1
+ },
+ "allocation": {
+ "default": 17
+ }
+ }
+ }
+ }
+ },
+ "responses": {
+ "201": {
+ "description": "Created",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "external_id": {
+ "type": "string",
+ "nullable": true
+ },
+ "uuid": {
+ "type": "string"
+ },
+ "identifier": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "suspended": {
+ "type": "boolean"
+ },
+ "limits": {
+ "type": "object",
+ "properties": {
+ "memory": {
+ "type": "integer"
+ },
+ "swap": {
+ "type": "integer"
+ },
+ "disk": {
+ "type": "integer"
+ },
+ "io": {
+ "type": "integer"
+ },
+ "cpu": {
+ "type": "integer"
+ },
+ "threads": {
+ "type": "string",
+ "nullable": true
+ }
+ }
+ },
+ "feature_limits": {
+ "type": "object",
+ "properties": {
+ "databases": {
+ "type": "integer"
+ },
+ "allocations": {
+ "type": "integer"
+ },
+ "backups": {
+ "type": "integer"
+ }
+ }
+ },
+ "user": {
+ "type": "integer"
+ },
+ "node": {
+ "type": "integer"
+ },
+ "allocation": {
+ "type": "integer"
+ },
+ "nest": {
+ "type": "integer"
+ },
+ "egg": {
+ "type": "integer"
+ },
+ "container": {
+ "type": "object",
+ "properties": {
+ "startup_command": {
+ "type": "string"
+ },
+ "image": {
+ "type": "string"
+ },
+ "installed": {
+ "type": "boolean"
+ },
+ "environment": {
+ "type": "object",
+ "properties": {
+ "BUNGEE_VERSION": {
+ "type": "string"
+ },
+ "SERVER_JARFILE": {
+ "type": "string"
+ },
+ "STARTUP": {
+ "type": "string"
+ },
+ "P_SERVER_LOCATION": {
+ "type": "string"
+ },
+ "P_SERVER_UUID": {
+ "type": "string"
+ },
+ "P_SERVER_ALLOCATION_LIMIT": {
+ "type": "integer"
+ }
+ }
+ }
+ }
+ },
+ "updated_at": {
+ "type": "string"
+ },
+ "created_at": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "server",
+ "attributes": {
+ "id": 7,
+ "external_id": null,
+ "uuid": "d557c19c-8b21-4456-a9e5-181beda429f4",
+ "identifier": "d557c19c",
+ "name": "Building",
+ "description": "",
+ "suspended": false,
+ "limits": {
+ "memory": 128,
+ "swap": 0,
+ "disk": 512,
+ "io": 500,
+ "cpu": 100,
+ "threads": null
+ },
+ "feature_limits": {
+ "databases": 5,
+ "allocations": 0,
+ "backups": 1
+ },
+ "user": 1,
+ "node": 1,
+ "allocation": 17,
+ "nest": 1,
+ "egg": 1,
+ "container": {
+ "startup_command": "java -Xms128M -Xmx128M -jar server.jar",
+ "image": "quay.io/pterodactyl/core:java",
+ "installed": false,
+ "environment": {
+ "BUNGEE_VERSION": "latest",
+ "SERVER_JARFILE": "server.jar",
+ "STARTUP": "java -Xms128M -Xmx128M -jar server.jar",
+ "P_SERVER_LOCATION": "GB",
+ "P_SERVER_UUID": "d557c19c-8b21-4456-a9e5-181beda429f4",
+ "P_SERVER_ALLOCATION_LIMIT": 0
+ }
+ },
+ "updated_at": "2020-10-29T01:38:59+00:00",
+ "created_at": "2020-10-29T01:38:59+00:00"
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ]
+ }
+ },
+ "/api/application/servers/{id}/databases": {
+ "get": {
+ "tags": [
+ "Application - Servers - Database Management"
+ ],
+ "summary": "List databases",
+ "operationId": "get-list-databases",
+ "description": "Retrieves all databases on a server\n\n## Available include parameters\n| Parameter | Description |\n|-----------|-------------------------------------|\n| password | Includes the database user password |\n| host | Information about the database host |",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Server ID (internal numeric ID)",
+ "example": 5
+ },
+ {
+ "name": "include",
+ "in": "query",
+ "schema": {
+ "type": "string"
+ },
+ "example": "password,host"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "data": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "server": {
+ "type": "integer"
+ },
+ "host": {
+ "type": "integer"
+ },
+ "database": {
+ "type": "string"
+ },
+ "username": {
+ "type": "string"
+ },
+ "remote": {
+ "type": "string"
+ },
+ "max_connections": {
+ "type": "integer"
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "string"
+ },
+ "relationships": {
+ "type": "object",
+ "properties": {
+ "password": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "password": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "host": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "name": {
+ "type": "string"
+ },
+ "host": {
+ "type": "string"
+ },
+ "port": {
+ "type": "integer"
+ },
+ "username": {
+ "type": "string"
+ },
+ "node": {
+ "type": "integer"
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "list",
+ "data": [
+ {
+ "object": "server_database",
+ "attributes": {
+ "id": 1,
+ "server": 5,
+ "host": 4,
+ "database": "s5_perms",
+ "username": "u5_QsIAp1jhvS",
+ "remote": "%",
+ "max_connections": 0,
+ "created_at": "2020-06-12T23:00:13+01:00",
+ "updated_at": "2020-06-12T23:00:13+01:00",
+ "relationships": {
+ "password": {
+ "object": "database_password",
+ "attributes": {
+ "password": ".FjJ!5w945L3tuG4DrSxF+T@"
+ }
+ },
+ "host": {
+ "object": "database_host",
+ "attributes": {
+ "id": 4,
+ "name": "MariaDB",
+ "host": "127.0.0.1",
+ "port": 3306,
+ "username": "pterodactyluser",
+ "node": 1,
+ "created_at": "2020-06-12T22:59:25+01:00",
+ "updated_at": "2020-06-12T22:59:25+01:00"
+ }
+ }
+ }
+ }
+ },
+ {
+ "object": "server_database",
+ "attributes": {
+ "id": 2,
+ "server": 5,
+ "host": 4,
+ "database": "s5_coreprotect",
+ "username": "u5_2jtJx1nO1d",
+ "remote": "%",
+ "max_connections": 0,
+ "created_at": "2020-06-12T23:00:20+01:00",
+ "updated_at": "2020-06-12T23:00:20+01:00",
+ "relationships": {
+ "password": {
+ "object": "database_password",
+ "attributes": {
+ "password": "4=rv^0vHuOPSHCfj!tM1OlMC"
+ }
+ },
+ "host": {
+ "object": "database_host",
+ "attributes": {
+ "id": 4,
+ "name": "MariaDB",
+ "host": "127.0.0.1",
+ "port": 3306,
+ "username": "pterodactyluser",
+ "node": 1,
+ "created_at": "2020-06-12T22:59:25+01:00",
+ "updated_at": "2020-06-12T22:59:25+01:00"
+ }
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ]
+ },
+ "post": {
+ "tags": [
+ "Application - Servers - Database Management"
+ ],
+ "summary": "Create database",
+ "operationId": "post-create-database",
+ "description": "Creates a new database on the specified server",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Server ID (internal numeric ID)",
+ "example": 5
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "database": {
+ "type": "string",
+ "description": "Name for database"
+ },
+ "remote": {
+ "type": "string",
+ "description": "Permitted remotes that can access the database"
+ },
+ "host": {
+ "type": "integer",
+ "description": "ID of the database host to use"
+ }
+ },
+ "required": [
+ "database"
+ ]
+ },
+ "example": {
+ "database": "matches",
+ "remote": "%",
+ "host": 4
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "server": {
+ "type": "integer"
+ },
+ "host": {
+ "type": "integer"
+ },
+ "database": {
+ "type": "string"
+ },
+ "username": {
+ "type": "string"
+ },
+ "remote": {
+ "type": "string"
+ },
+ "max_connections": {
+ "type": "string",
+ "nullable": true
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "string"
+ }
+ }
+ },
+ "meta": {
+ "type": "object",
+ "properties": {
+ "resource": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "server_database",
+ "attributes": {
+ "id": 6,
+ "server": 5,
+ "host": 4,
+ "database": "s5_matches",
+ "username": "u5_LhG3aGWBtk",
+ "remote": "%",
+ "max_connections": null,
+ "created_at": "2020-11-04T21:00:42+00:00",
+ "updated_at": "2020-11-04T21:00:42+00:00"
+ },
+ "meta": {
+ "resource": "https://pterodactyl.file.properties/api/application/servers/5/databases/6"
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ]
+ }
+ },
+ "/api/application/servers/{id}/databases/{database}": {
+ "get": {
+ "tags": [
+ "Application - Servers - Database Management"
+ ],
+ "summary": "Database details",
+ "operationId": "get-database-details",
+ "description": "Retrieves the specified database\n\n## Available include parameters\n| Parameter | Description |\n|-----------|-------------------------------------|\n| password | Includes the database user password |\n| host | Information about the database host |",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Server ID (internal numeric ID)",
+ "example": 5
+ },
+ {
+ "name": "database",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Database ID",
+ "example": 1
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "server": {
+ "type": "integer"
+ },
+ "host": {
+ "type": "integer"
+ },
+ "database": {
+ "type": "string"
+ },
+ "username": {
+ "type": "string"
+ },
+ "remote": {
+ "type": "string"
+ },
+ "max_connections": {
+ "type": "integer"
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "server_database",
+ "attributes": {
+ "id": 1,
+ "server": 5,
+ "host": 4,
+ "database": "s5_perms",
+ "username": "u5_QsIAp1jhvS",
+ "remote": "%",
+ "max_connections": 0,
+ "created_at": "2020-06-12T23:00:13+01:00",
+ "updated_at": "2020-06-12T23:00:13+01:00"
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ]
+ },
+ "delete": {
+ "tags": [
+ "Application - Servers - Database Management"
+ ],
+ "summary": "Delete database",
+ "operationId": "delete-delete-database",
+ "description": "Deletes the specified database",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Server ID (internal numeric ID)",
+ "example": 5
+ },
+ {
+ "name": "database",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Database ID",
+ "example": 1
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "No Content"
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ]
+ }
+ },
+ "/api/application/servers/{id}": {
+ "get": {
+ "tags": [
+ "Application - Servers"
+ ],
+ "summary": "Server details",
+ "operationId": "get-server-details",
+ "description": "Retrieves the specified server\n\n## Available include parameters\n| Parameter | Description |\n|-------------|--------------------------------------------|\n| allocations | List of allocations assigned to the server |\n| user | Information about the server owner |\n| subusers | List of users added to the server |\n| pack | Information about the server pack |\n| nest | Information about the server's egg nest |\n| egg | Information about the server's egg |\n| variables | List of server variables |\n| location | Information about server's node location |\n| node | Information about the server's node |\n| databases | List of databases on the server |",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Server ID (internal numeric ID)",
+ "example": 5
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "external_id": {
+ "type": "string"
+ },
+ "uuid": {
+ "type": "string"
+ },
+ "identifier": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "suspended": {
+ "type": "boolean"
+ },
+ "limits": {
+ "type": "object",
+ "properties": {
+ "memory": {
+ "type": "integer"
+ },
+ "swap": {
+ "type": "integer"
+ },
+ "disk": {
+ "type": "integer"
+ },
+ "io": {
+ "type": "integer"
+ },
+ "cpu": {
+ "type": "integer"
+ },
+ "threads": {
+ "type": "string",
+ "nullable": true
+ }
+ }
+ },
+ "feature_limits": {
+ "type": "object",
+ "properties": {
+ "databases": {
+ "type": "integer"
+ },
+ "allocations": {
+ "type": "integer"
+ },
+ "backups": {
+ "type": "integer"
+ }
+ }
+ },
+ "user": {
+ "type": "integer"
+ },
+ "node": {
+ "type": "integer"
+ },
+ "allocation": {
+ "type": "integer"
+ },
+ "nest": {
+ "type": "integer"
+ },
+ "egg": {
+ "type": "integer"
+ },
+ "pack": {
+ "type": "string",
+ "nullable": true
+ },
+ "container": {
+ "type": "object",
+ "properties": {
+ "startup_command": {
+ "type": "string"
+ },
+ "image": {
+ "type": "string"
+ },
+ "installed": {
+ "type": "boolean"
+ },
+ "environment": {
+ "type": "object",
+ "properties": {
+ "SERVER_JARFILE": {
+ "type": "string"
+ },
+ "VANILLA_VERSION": {
+ "type": "string"
+ },
+ "STARTUP": {
+ "type": "string"
+ },
+ "P_SERVER_LOCATION": {
+ "type": "string"
+ },
+ "P_SERVER_UUID": {
+ "type": "string"
+ },
+ "P_SERVER_ALLOCATION_LIMIT": {
+ "type": "integer"
+ }
+ }
+ }
+ }
+ },
+ "updated_at": {
+ "type": "string"
+ },
+ "created_at": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "server",
+ "attributes": {
+ "id": 5,
+ "external_id": "RemoteId1",
+ "uuid": "1a7ce997-259b-452e-8b4e-cecc464142ca",
+ "identifier": "1a7ce997",
+ "name": "Gaming",
+ "description": "Matt from Wii Sports",
+ "suspended": false,
+ "limits": {
+ "memory": 512,
+ "swap": 0,
+ "disk": 200,
+ "io": 500,
+ "cpu": 0,
+ "threads": null
+ },
+ "feature_limits": {
+ "databases": 5,
+ "allocations": 5,
+ "backups": 2
+ },
+ "user": 1,
+ "node": 1,
+ "allocation": 1,
+ "nest": 1,
+ "egg": 5,
+ "pack": null,
+ "container": {
+ "startup_command": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -jar {{SERVER_JARFILE}}",
+ "image": "quay.io/pterodactyl/core:java",
+ "installed": true,
+ "environment": {
+ "SERVER_JARFILE": "server.jar",
+ "VANILLA_VERSION": "latest",
+ "STARTUP": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -jar {{SERVER_JARFILE}}",
+ "P_SERVER_LOCATION": "GB",
+ "P_SERVER_UUID": "1a7ce997-259b-452e-8b4e-cecc464142ca",
+ "P_SERVER_ALLOCATION_LIMIT": 5
+ }
+ },
+ "updated_at": "2020-07-19T15:22:39+00:00",
+ "created_at": "2019-12-23T06:46:27+00:00"
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ]
+ },
+ "delete": {
+ "tags": [
+ "Application - Servers"
+ ],
+ "summary": "Delete server",
+ "operationId": "delete-delete-server",
+ "description": "Deletes the specified server",
+ "responses": {
+ "204": {
+ "description": "No Content"
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ]
+ }
+ },
+ "/api/application/servers/external/{external_id}": {
+ "get": {
+ "tags": [
+ "Application - Servers"
+ ],
+ "summary": "Server details",
+ "operationId": "get-server-details",
+ "description": "Retrieves a server by its external ID\n\n## Available include parameters\n| Parameter | Description |\n|-------------|--------------------------------------------|\n| allocations | List of allocations assigned to the server |\n| user | Information about the server owner |\n| subusers | List of users added to the server |\n| pack | Information about the server pack |\n| nest | Information about the server's egg nest |\n| egg | Information about the server's egg |\n| variables | List of server variables |\n| location | Information about server's node location |\n| node | Information about the server's node |\n| databases | List of databases on the server |",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "external_id": {
+ "type": "string"
+ },
+ "uuid": {
+ "type": "string"
+ },
+ "identifier": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "suspended": {
+ "type": "boolean"
+ },
+ "limits": {
+ "type": "object",
+ "properties": {
+ "memory": {
+ "type": "integer"
+ },
+ "swap": {
+ "type": "integer"
+ },
+ "disk": {
+ "type": "integer"
+ },
+ "io": {
+ "type": "integer"
+ },
+ "cpu": {
+ "type": "integer"
+ },
+ "threads": {
+ "type": "string",
+ "nullable": true
+ }
+ }
+ },
+ "feature_limits": {
+ "type": "object",
+ "properties": {
+ "databases": {
+ "type": "integer"
+ },
+ "allocations": {
+ "type": "integer"
+ },
+ "backups": {
+ "type": "integer"
+ }
+ }
+ },
+ "user": {
+ "type": "integer"
+ },
+ "node": {
+ "type": "integer"
+ },
+ "allocation": {
+ "type": "integer"
+ },
+ "nest": {
+ "type": "integer"
+ },
+ "egg": {
+ "type": "integer"
+ },
+ "pack": {
+ "type": "string",
+ "nullable": true
+ },
+ "container": {
+ "type": "object",
+ "properties": {
+ "startup_command": {
+ "type": "string"
+ },
+ "image": {
+ "type": "string"
+ },
+ "installed": {
+ "type": "boolean"
+ },
+ "environment": {
+ "type": "object",
+ "properties": {
+ "SERVER_JARFILE": {
+ "type": "string"
+ },
+ "VANILLA_VERSION": {
+ "type": "string"
+ },
+ "STARTUP": {
+ "type": "string"
+ },
+ "P_SERVER_LOCATION": {
+ "type": "string"
+ },
+ "P_SERVER_UUID": {
+ "type": "string"
+ },
+ "P_SERVER_ALLOCATION_LIMIT": {
+ "type": "integer"
+ }
+ }
+ }
+ }
+ },
+ "updated_at": {
+ "type": "string"
+ },
+ "created_at": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "server",
+ "attributes": {
+ "id": 5,
+ "external_id": "RemoteId1",
+ "uuid": "1a7ce997-259b-452e-8b4e-cecc464142ca",
+ "identifier": "1a7ce997",
+ "name": "Gaming",
+ "description": "Matt from Wii Sports",
+ "suspended": false,
+ "limits": {
+ "memory": 512,
+ "swap": 0,
+ "disk": 200,
+ "io": 500,
+ "cpu": 0,
+ "threads": null
+ },
+ "feature_limits": {
+ "databases": 5,
+ "allocations": 5,
+ "backups": 2
+ },
+ "user": 1,
+ "node": 1,
+ "allocation": 1,
+ "nest": 1,
+ "egg": 5,
+ "pack": null,
+ "container": {
+ "startup_command": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -jar {{SERVER_JARFILE}}",
+ "image": "quay.io/pterodactyl/core:java",
+ "installed": true,
+ "environment": {
+ "SERVER_JARFILE": "server.jar",
+ "VANILLA_VERSION": "latest",
+ "STARTUP": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -jar {{SERVER_JARFILE}}",
+ "P_SERVER_LOCATION": "GB",
+ "P_SERVER_UUID": "1a7ce997-259b-452e-8b4e-cecc464142ca",
+ "P_SERVER_ALLOCATION_LIMIT": 5
+ }
+ },
+ "updated_at": "2020-07-19T15:22:39+00:00",
+ "created_at": "2019-12-23T06:46:27+00:00"
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "external_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "External identifier",
+ "example": "RemoteId1"
+ }
+ ]
+ }
+ },
+ "/api/application/servers/{id}/details": {
+ "patch": {
+ "tags": [
+ "Application - Servers"
+ ],
+ "summary": "Update details",
+ "operationId": "patch-update-details",
+ "description": "Updates the server details",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Server ID (internal numeric ID)",
+ "example": 5
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "Name for the server"
+ },
+ "user": {
+ "type": "integer",
+ "description": "ID of the user which the server belongs to"
+ }
+ },
+ "required": [
+ "name",
+ "user"
+ ]
+ },
+ "example": {
+ "name": "Gaming",
+ "user": 1,
+ "external_id": "RemoteID1",
+ "description": "Matt from Wii Sports"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "external_id": {
+ "type": "string"
+ },
+ "uuid": {
+ "type": "string"
+ },
+ "identifier": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "suspended": {
+ "type": "boolean"
+ },
+ "limits": {
+ "type": "object",
+ "properties": {
+ "memory": {
+ "type": "integer"
+ },
+ "swap": {
+ "type": "integer"
+ },
+ "disk": {
+ "type": "integer"
+ },
+ "io": {
+ "type": "integer"
+ },
+ "cpu": {
+ "type": "integer"
+ },
+ "threads": {
+ "type": "string",
+ "nullable": true
+ }
+ }
+ },
+ "feature_limits": {
+ "type": "object",
+ "properties": {
+ "databases": {
+ "type": "integer"
+ },
+ "allocations": {
+ "type": "integer"
+ },
+ "backups": {
+ "type": "integer"
+ }
+ }
+ },
+ "user": {
+ "type": "integer"
+ },
+ "node": {
+ "type": "integer"
+ },
+ "allocation": {
+ "type": "integer"
+ },
+ "nest": {
+ "type": "integer"
+ },
+ "egg": {
+ "type": "integer"
+ },
+ "container": {
+ "type": "object",
+ "properties": {
+ "startup_command": {
+ "type": "string"
+ },
+ "image": {
+ "type": "string"
+ },
+ "installed": {
+ "type": "boolean"
+ },
+ "environment": {
+ "type": "object",
+ "properties": {
+ "SERVER_JARFILE": {
+ "type": "string"
+ },
+ "VANILLA_VERSION": {
+ "type": "string"
+ },
+ "STARTUP": {
+ "type": "string"
+ },
+ "P_SERVER_LOCATION": {
+ "type": "string"
+ },
+ "P_SERVER_UUID": {
+ "type": "string"
+ },
+ "P_SERVER_ALLOCATION_LIMIT": {
+ "type": "integer"
+ }
+ }
+ }
+ }
+ },
+ "updated_at": {
+ "type": "string"
+ },
+ "created_at": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "server",
+ "attributes": {
+ "id": 5,
+ "external_id": "RemoteID1",
+ "uuid": "1a7ce997-259b-452e-8b4e-cecc464142ca",
+ "identifier": "1a7ce997",
+ "name": "Gaming",
+ "description": "Matt from Wii Sports",
+ "suspended": false,
+ "limits": {
+ "memory": 512,
+ "swap": 0,
+ "disk": 200,
+ "io": 500,
+ "cpu": 0,
+ "threads": null
+ },
+ "feature_limits": {
+ "databases": 5,
+ "allocations": 5,
+ "backups": 2
+ },
+ "user": 1,
+ "node": 1,
+ "allocation": 1,
+ "nest": 1,
+ "egg": 5,
+ "container": {
+ "startup_command": "java -Xms128M -Xmx2014M -jar server.jar",
+ "image": "quay.io/pterodactyl/core:java",
+ "installed": true,
+ "environment": {
+ "SERVER_JARFILE": "server.jar",
+ "VANILLA_VERSION": "latest",
+ "STARTUP": "java -Xms128M -Xmx2048M -jar server.jar",
+ "P_SERVER_LOCATION": "GB",
+ "P_SERVER_UUID": "1a7ce997-259b-452e-8b4e-cecc464142ca",
+ "P_SERVER_ALLOCATION_LIMIT": 5
+ }
+ },
+ "updated_at": "2020-11-04T21:11:26+00:00",
+ "created_at": "2019-12-23T06:46:27+00:00"
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ]
+ }
+ },
+ "/api/application/servers/{id}/build": {
+ "patch": {
+ "tags": [
+ "Application - Servers"
+ ],
+ "summary": "Update build",
+ "operationId": "patch-update-build",
+ "description": "Updates the server build information",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Server ID (internal numeric ID)",
+ "example": 5
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "allocation": {
+ "type": "integer",
+ "description": "ID of primary allocation"
+ },
+ "memory": {
+ "type": "integer",
+ "description": "The maximum amount of memory allowed for this container. Setting this to 0 will allow unlimited memory in a container."
+ },
+ "swap": {
+ "type": "integer",
+ "description": "Setting this to 0 will disable swap space on this server. Setting to -1 will allow unlimited swap."
+ },
+ "io": {
+ "type": "integer",
+ "description": "IO performance of this server relative to other running containers"
+ },
+ "cpu": {
+ "type": "integer",
+ "description": "Each physical core on the system is considered to be 100%. Setting this value to 0 will allow a server to use CPU time without restrictions."
+ },
+ "disk": {
+ "type": "integer",
+ "description": "This server will not be allowed to boot if it is using more than this amount of space. If a server goes over this limit while running it will be safely stopped and locked until enough space is available. Set to 0 to allow unlimited disk usage."
+ },
+ "feature_limits.databases": {
+ "type": "integer",
+ "description": "The total number of databases a user is allowed to create for this server."
+ },
+ "feature_limits.backups": {
+ "type": "integer",
+ "description": "The total number of allocations a user is allowed to create for this server."
+ }
+ },
+ "required": [
+ "allocation",
+ "memory",
+ "swap",
+ "io",
+ "cpu",
+ "disk"
+ ]
+ },
+ "example": {
+ "allocation": 1,
+ "memory": 512,
+ "swap": 0,
+ "disk": 200,
+ "io": 500,
+ "cpu": 0,
+ "threads": null,
+ "feature_limits": {
+ "databases": 5,
+ "allocations": 5,
+ "backups": 2
+ }
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "external_id": {
+ "type": "string"
+ },
+ "uuid": {
+ "type": "string"
+ },
+ "identifier": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "suspended": {
+ "type": "boolean"
+ },
+ "limits": {
+ "type": "object",
+ "properties": {
+ "memory": {
+ "type": "integer"
+ },
+ "swap": {
+ "type": "integer"
+ },
+ "disk": {
+ "type": "integer"
+ },
+ "io": {
+ "type": "integer"
+ },
+ "cpu": {
+ "type": "integer"
+ },
+ "threads": {
+ "type": "string",
+ "nullable": true
+ }
+ }
+ },
+ "feature_limits": {
+ "type": "object",
+ "properties": {
+ "databases": {
+ "type": "integer"
+ },
+ "allocations": {
+ "type": "integer"
+ },
+ "backups": {
+ "type": "integer"
+ }
+ }
+ },
+ "user": {
+ "type": "integer"
+ },
+ "node": {
+ "type": "integer"
+ },
+ "allocation": {
+ "type": "integer"
+ },
+ "nest": {
+ "type": "integer"
+ },
+ "egg": {
+ "type": "integer"
+ },
+ "container": {
+ "type": "object",
+ "properties": {
+ "startup_command": {
+ "type": "string"
+ },
+ "image": {
+ "type": "string"
+ },
+ "installed": {
+ "type": "boolean"
+ },
+ "environment": {
+ "type": "object",
+ "properties": {
+ "SERVER_JARFILE": {
+ "type": "string"
+ },
+ "VANILLA_VERSION": {
+ "type": "string"
+ },
+ "STARTUP": {
+ "type": "string"
+ },
+ "P_SERVER_LOCATION": {
+ "type": "string"
+ },
+ "P_SERVER_UUID": {
+ "type": "string"
+ },
+ "P_SERVER_ALLOCATION_LIMIT": {
+ "type": "integer"
+ }
+ }
+ }
+ }
+ },
+ "updated_at": {
+ "type": "string"
+ },
+ "created_at": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "server",
+ "attributes": {
+ "id": 5,
+ "external_id": "RemoteID1",
+ "uuid": "1a7ce997-259b-452e-8b4e-cecc464142ca",
+ "identifier": "1a7ce997",
+ "name": "Gaming",
+ "description": "Matt from Wii Sports",
+ "suspended": false,
+ "limits": {
+ "memory": 512,
+ "swap": 0,
+ "disk": 200,
+ "io": 500,
+ "cpu": 0,
+ "threads": null
+ },
+ "feature_limits": {
+ "databases": 5,
+ "allocations": 5,
+ "backups": 2
+ },
+ "user": 1,
+ "node": 1,
+ "allocation": 1,
+ "nest": 1,
+ "egg": 5,
+ "container": {
+ "startup_command": "java -Xms128M -Xmx2014M -jar server.jar",
+ "image": "quay.io/pterodactyl/core:java",
+ "installed": true,
+ "environment": {
+ "SERVER_JARFILE": "server.jar",
+ "VANILLA_VERSION": "latest",
+ "STARTUP": "java -Xms128M -Xmx2048M -jar server.jar",
+ "P_SERVER_LOCATION": "GB",
+ "P_SERVER_UUID": "1a7ce997-259b-452e-8b4e-cecc464142ca",
+ "P_SERVER_ALLOCATION_LIMIT": 5
+ }
+ },
+ "updated_at": "2020-11-04T21:11:26+00:00",
+ "created_at": "2019-12-23T06:46:27+00:00"
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ]
+ }
+ },
+ "/api/application/servers/{id}/startup": {
+ "patch": {
+ "tags": [
+ "Application - Servers"
+ ],
+ "summary": "Update startup",
+ "operationId": "patch-update-startup",
+ "description": "Updates the server startup information",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Server ID (internal numeric ID)",
+ "example": 5
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "startup": {
+ "type": "string",
+ "description": "Edit your server's startup command here."
+ },
+ "environment": {
+ "type": "object",
+ "description": "Environment variables that the egg requires/supports"
+ },
+ "egg": {
+ "type": "string",
+ "description": "ID of the egg to use"
+ },
+ "image": {
+ "type": "string",
+ "description": "The Docker image to use for this server"
+ },
+ "skip_scripts": {
+ "type": "string",
+ "description": "If enabled, if the Egg has an install script, it will NOT be ran during install."
+ }
+ },
+ "required": [
+ "startup",
+ "egg",
+ "image"
+ ]
+ },
+ "example": {
+ "startup": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -jar {{SERVER_JARFILE}}",
+ "environment": {
+ "SERVER_JARFILE": "server.jar",
+ "VANILLA_VERSION": "latest"
+ },
+ "egg": 5,
+ "image": "quay.io/pterodactyl/core:java",
+ "skip_scripts": false
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "external_id": {
+ "type": "string"
+ },
+ "uuid": {
+ "type": "string"
+ },
+ "identifier": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "suspended": {
+ "type": "boolean"
+ },
+ "limits": {
+ "type": "object",
+ "properties": {
+ "memory": {
+ "type": "integer"
+ },
+ "swap": {
+ "type": "integer"
+ },
+ "disk": {
+ "type": "integer"
+ },
+ "io": {
+ "type": "integer"
+ },
+ "cpu": {
+ "type": "integer"
+ },
+ "threads": {
+ "type": "string",
+ "nullable": true
+ }
+ }
+ },
+ "feature_limits": {
+ "type": "object",
+ "properties": {
+ "databases": {
+ "type": "integer"
+ },
+ "allocations": {
+ "type": "integer"
+ },
+ "backups": {
+ "type": "integer"
+ }
+ }
+ },
+ "user": {
+ "type": "integer"
+ },
+ "node": {
+ "type": "integer"
+ },
+ "allocation": {
+ "type": "integer"
+ },
+ "nest": {
+ "type": "integer"
+ },
+ "egg": {
+ "type": "integer"
+ },
+ "container": {
+ "type": "object",
+ "properties": {
+ "startup_command": {
+ "type": "string"
+ },
+ "image": {
+ "type": "string"
+ },
+ "installed": {
+ "type": "boolean"
+ },
+ "environment": {
+ "type": "object",
+ "properties": {
+ "SERVER_JARFILE": {
+ "type": "string"
+ },
+ "VANILLA_VERSION": {
+ "type": "string"
+ },
+ "STARTUP": {
+ "type": "string"
+ },
+ "P_SERVER_LOCATION": {
+ "type": "string"
+ },
+ "P_SERVER_UUID": {
+ "type": "string"
+ },
+ "P_SERVER_ALLOCATION_LIMIT": {
+ "type": "integer"
+ }
+ }
+ }
+ }
+ },
+ "updated_at": {
+ "type": "string"
+ },
+ "created_at": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "server",
+ "attributes": {
+ "id": 5,
+ "external_id": "RemoteID1",
+ "uuid": "1a7ce997-259b-452e-8b4e-cecc464142ca",
+ "identifier": "1a7ce997",
+ "name": "Gaming",
+ "description": "Matt from Wii Sports",
+ "suspended": false,
+ "limits": {
+ "memory": 512,
+ "swap": 0,
+ "disk": 200,
+ "io": 500,
+ "cpu": 0,
+ "threads": null
+ },
+ "feature_limits": {
+ "databases": 5,
+ "allocations": 5,
+ "backups": 2
+ },
+ "user": 1,
+ "node": 1,
+ "allocation": 1,
+ "nest": 1,
+ "egg": 5,
+ "container": {
+ "startup_command": "java -Xms128M -Xmx2014M -jar server.jar",
+ "image": "quay.io/pterodactyl/core:java",
+ "installed": true,
+ "environment": {
+ "SERVER_JARFILE": "server.jar",
+ "VANILLA_VERSION": "latest",
+ "STARTUP": "java -Xms128M -Xmx2048M -jar server.jar",
+ "P_SERVER_LOCATION": "GB",
+ "P_SERVER_UUID": "1a7ce997-259b-452e-8b4e-cecc464142ca",
+ "P_SERVER_ALLOCATION_LIMIT": 5
+ }
+ },
+ "updated_at": "2020-11-04T21:11:26+00:00",
+ "created_at": "2019-12-23T06:46:27+00:00"
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ]
+ }
+ },
+ "/api/application/servers/{id}/suspend": {
+ "post": {
+ "tags": [
+ "Application - Servers"
+ ],
+ "summary": "Suspend server",
+ "operationId": "post-suspend-server",
+ "description": "Suspends the specified server",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Server ID (internal numeric ID)",
+ "example": 5
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "No Content"
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ]
+ }
+ },
+ "/api/application/servers/{id}/unsuspend": {
+ "post": {
+ "tags": [
+ "Application - Servers"
+ ],
+ "summary": "Unsuspend server",
+ "operationId": "post-unsuspend-server",
+ "description": "Unuspends the specified",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Server ID (internal numeric ID)",
+ "example": 5
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "No Content"
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ]
+ }
+ },
+ "/api/application/servers/{id}/reinstall": {
+ "post": {
+ "tags": [
+ "Application - Servers"
+ ],
+ "summary": "Reinstall server",
+ "operationId": "post-reinstall-server",
+ "description": "Reinstalls the specified server",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Server ID (internal numeric ID)",
+ "example": 5
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "No Content"
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ]
+ }
+ },
+ "/api/application/servers/{id}/force": {
+ "delete": {
+ "tags": [
+ "Application - Servers"
+ ],
+ "summary": "Force delete server",
+ "operationId": "delete-force-delete-server",
+ "description": "Forcefully deletes the specified server",
+ "responses": {
+ "204": {
+ "description": "No Content"
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ]
+ }
+ },
+ "/api/application/servers/{id}/databases/{database}/reset-password": {
+ "post": {
+ "tags": [
+ "Application - Servers - Database Management"
+ ],
+ "summary": "Reset password",
+ "operationId": "post-reset-password",
+ "description": "Rotates the password of the database",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Server ID (internal numeric ID)",
+ "example": 5
+ },
+ {
+ "name": "database",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Database ID",
+ "example": 1
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "No Content"
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ]
+ }
+ },
+ "/api/application/nests": {
+ "get": {
+ "tags": [
+ "Application - Nests"
+ ],
+ "summary": "List nests",
+ "operationId": "get-list-nests",
+ "description": "Retrieves all nests\n\n# Available include parameters\n| Parameter | Description |\n|-----------|---------------------------------|\n| eggs | List of eggs in the location |\n| servers | List of servers in the location |",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "data": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "uuid": {
+ "type": "string"
+ },
+ "author": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "meta": {
+ "type": "object",
+ "properties": {
+ "pagination": {
+ "type": "object",
+ "properties": {
+ "total": {
+ "type": "integer"
+ },
+ "count": {
+ "type": "integer"
+ },
+ "per_page": {
+ "type": "integer"
+ },
+ "current_page": {
+ "type": "integer"
+ },
+ "total_pages": {
+ "type": "integer"
+ },
+ "links": {
+ "type": "object",
+ "properties": {}
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "list",
+ "data": [
+ {
+ "object": "nest",
+ "attributes": {
+ "id": 1,
+ "uuid": "58bde975-ec57-4af2-b241-1426ac6d6d59",
+ "author": "support@pterodactyl.io",
+ "name": "Minecraft",
+ "description": "Minecraft - the classic game from Mojang. With support for Vanilla MC, Spigot, and many others!",
+ "created_at": "2019-12-22T04:42:51+00:00",
+ "updated_at": "2019-12-22T04:42:51+00:00"
+ }
+ },
+ {
+ "object": "nest",
+ "attributes": {
+ "id": 2,
+ "uuid": "5246d226-e8e8-46f5-b624-e99cf1a68c9a",
+ "author": "support@pterodactyl.io",
+ "name": "Source Engine",
+ "description": "Includes support for most Source Dedicated Server games.",
+ "created_at": "2019-12-22T04:42:51+00:00",
+ "updated_at": "2019-12-22T04:42:51+00:00"
+ }
+ },
+ {
+ "object": "nest",
+ "attributes": {
+ "id": 3,
+ "uuid": "0eb05bf7-3a00-4b1d-bef5-a6d8d7375e44",
+ "author": "support@pterodactyl.io",
+ "name": "Voice Servers",
+ "description": "Voice servers such as Mumble and Teamspeak 3.",
+ "created_at": "2019-12-22T04:42:51+00:00",
+ "updated_at": "2019-12-22T04:42:51+00:00"
+ }
+ },
+ {
+ "object": "nest",
+ "attributes": {
+ "id": 4,
+ "uuid": "e2a21c82-7175-4db0-9510-8d1ed525b2bf",
+ "author": "support@pterodactyl.io",
+ "name": "Rust",
+ "description": "Rust - A game where you must fight to survive.",
+ "created_at": "2019-12-22T04:42:51+00:00",
+ "updated_at": "2019-12-22T04:42:51+00:00"
+ }
+ }
+ ],
+ "meta": {
+ "pagination": {
+ "total": 4,
+ "count": 4,
+ "per_page": 50,
+ "current_page": 1,
+ "total_pages": 1,
+ "links": {}
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ]
+ }
+ },
+ "/api/application/nests/{nest}/eggs": {
+ "get": {
+ "tags": [
+ "Application - Nests - Eggs Management"
+ ],
+ "summary": "List eggs",
+ "operationId": "get-list-eggs",
+ "description": "Retrieves a list of eggs\n\n## Available include parameters\n| Parameter | Description |\n|-----------|----------------------------------------------|\n| nest | Information about the nest that owns the egg |\n| servers | List of servers using the egg |\n| config | Config options of the egg |\n| script | Egg install script |\n| variables | List of egg variables |",
+ "parameters": [
+ {
+ "name": "include",
+ "in": "query",
+ "schema": {
+ "type": "string"
+ },
+ "example": "nest,servers"
+ },
+ {
+ "name": "nest",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Nest ID",
+ "example": 1
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "data": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "uuid": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "nest": {
+ "type": "integer"
+ },
+ "author": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "docker_image": {
+ "type": "string"
+ },
+ "config": {
+ "type": "object",
+ "properties": {
+ "files": {
+ "type": "object",
+ "properties": {
+ "config.yml": {
+ "type": "object",
+ "properties": {
+ "parser": {
+ "type": "string"
+ },
+ "find": {
+ "type": "object",
+ "properties": {
+ "listeners[0].query_enabled": {
+ "type": "boolean"
+ },
+ "listeners[0].query_port": {
+ "type": "string"
+ },
+ "listeners[0].host": {
+ "type": "string"
+ },
+ "servers.*.address": {
+ "type": "object",
+ "properties": {
+ "127.0.0.1": {
+ "type": "string"
+ },
+ "localhost": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "startup": {
+ "type": "object",
+ "properties": {
+ "done": {
+ "type": "string"
+ },
+ "userInteraction": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "stop": {
+ "type": "string"
+ },
+ "logs": {
+ "type": "object",
+ "properties": {
+ "custom": {
+ "type": "boolean"
+ },
+ "location": {
+ "type": "string"
+ }
+ }
+ },
+ "extends": {
+ "type": "string",
+ "nullable": true
+ }
+ }
+ },
+ "startup": {
+ "type": "string"
+ },
+ "script": {
+ "type": "object",
+ "properties": {
+ "privileged": {
+ "type": "boolean"
+ },
+ "install": {
+ "type": "string"
+ },
+ "entry": {
+ "type": "string"
+ },
+ "container": {
+ "type": "string"
+ },
+ "extends": {
+ "type": "string",
+ "nullable": true
+ }
+ }
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "string"
+ },
+ "relationships": {
+ "type": "object",
+ "properties": {
+ "nest": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "uuid": {
+ "type": "string"
+ },
+ "author": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "servers": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "data": {
+ "type": "array",
+ "items": {}
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "list",
+ "data": [
+ {
+ "object": "egg",
+ "attributes": {
+ "id": 1,
+ "uuid": "695648dd-01a3-4ced-b075-d4ec4fb9fbf4",
+ "name": "Bungeecord",
+ "nest": 1,
+ "author": "support@pterodactyl.io",
+ "description": "For a long time, Minecraft server owners have had a dream that encompasses a free, easy, and reliable way to connect multiple Minecraft servers together. BungeeCord is the answer to said dream. Whether you are a small server wishing to string multiple game-modes together, or the owner of the ShotBow Network, BungeeCord is the ideal solution for you. With the help of BungeeCord, you will be able to unlock your community's full potential.",
+ "docker_image": "quay.io/pterodactyl/core:java",
+ "config": {
+ "files": {
+ "config.yml": {
+ "parser": "yaml",
+ "find": {
+ "listeners[0].query_enabled": true,
+ "listeners[0].query_port": "{{server.build.default.port}}",
+ "listeners[0].host": "0.0.0.0:{{server.build.default.port}}",
+ "servers.*.address": {
+ "127.0.0.1": "{{config.docker.interface}}",
+ "localhost": "{{config.docker.interface}}"
+ }
+ }
+ }
+ },
+ "startup": {
+ "done": "Listening on ",
+ "userInteraction": [
+ "Listening on /0.0.0.0:25577"
+ ]
+ },
+ "stop": "end",
+ "logs": {
+ "custom": false,
+ "location": "proxy.log.0"
+ },
+ "extends": null
+ },
+ "startup": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -jar {{SERVER_JARFILE}}",
+ "script": {
+ "privileged": true,
+ "install": "#!/bin/ash\n# Bungeecord Installation Script\n#\n# Server Files: /mnt/server\napk update\napk add curl\n\ncd /mnt/server\n\nif [ -z \"${BUNGEE_VERSION}\" ] || [ \"${BUNGEE_VERSION}\" == \"latest\" ]; then\n BUNGEE_VERSION=\"lastStableBuild\"\nfi\n\ncurl -o ${SERVER_JARFILE} https://ci.md-5.net/job/BungeeCord/${BUNGEE_VERSION}/artifact/bootstrap/target/BungeeCord.jar",
+ "entry": "ash",
+ "container": "alpine:3.9",
+ "extends": null
+ },
+ "created_at": "2019-12-22T04:42:51+00:00",
+ "updated_at": "2019-12-22T04:42:51+00:00",
+ "relationships": {
+ "nest": {
+ "object": "nest",
+ "attributes": {
+ "id": 1,
+ "uuid": "58bde975-ec57-4af2-b241-1426ac6d6d59",
+ "author": "support@pterodactyl.io",
+ "name": "Minecraft",
+ "description": "Minecraft - the classic game from Mojang. With support for Vanilla MC, Spigot, and many others!",
+ "created_at": "2019-12-22T04:42:51+00:00",
+ "updated_at": "2019-12-22T04:42:51+00:00"
+ }
+ },
+ "servers": {
+ "object": "list",
+ "data": []
+ }
+ }
+ }
+ },
+ {
+ "object": "egg",
+ "attributes": {
+ "id": 2,
+ "uuid": "7f8736d8-fd99-465f-8c3e-cb4d42c18541",
+ "name": "Forge Minecraft",
+ "nest": 1,
+ "author": "support@pterodactyl.io",
+ "description": "Minecraft Forge Server. Minecraft Forge is a modding API (Application Programming Interface), which makes it easier to create mods, and also make sure mods are compatible with each other.",
+ "docker_image": "quay.io/pterodactyl/core:java",
+ "config": {
+ "files": {
+ "server.properties": {
+ "parser": "properties",
+ "find": {
+ "server-ip": "0.0.0.0",
+ "enable-query": "true",
+ "server-port": "{{server.build.default.port}}",
+ "query.port": "{{server.build.default.port}}"
+ }
+ }
+ },
+ "startup": {
+ "done": ")! For help, type ",
+ "userInteraction": [
+ "Go to eula.txt for more info."
+ ]
+ },
+ "stop": "stop",
+ "logs": {
+ "custom": false,
+ "location": "logs/latest.log"
+ },
+ "extends": null
+ },
+ "startup": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -jar {{SERVER_JARFILE}}",
+ "script": {
+ "privileged": true,
+ "install": "#!/bin/bash\r\n# Forge Installation Script\r\n#\r\n# Server Files: /mnt/server\r\napt update\r\napt install -y curl\r\n\r\n#Fetching version\r\nif [ -z \"$MC_VERSION\" ] || [ \"$MC_VERSION\" == \"latest\" ]; then\r\n echo \"Fetching latest\"\r\n MC_VERSION=$(curl -sl https://files.minecraftforge.net/maven/net/minecraftforge/forge/index.html | grep -A 2 \"Latest\" | awk NF=NF RS= OFS=\" \" | grep -o -e '[1].[0-9]*.[0-9]* - [0-9]*.[0-9]*.[0-9]*.[0-9]*' | sed 's/ //g')\r\nelif [[ ! \"$MC_VERSION\" =~ - ]]; then\r\n echo \"Fetching latest from version $MC_VERSION\"\r\n MC_VERSION=$(curl -sl https://files.minecraftforge.net/maven/net/minecraftforge/forge/index_$MC_VERSION.html | grep -A 2 \"Latest\" | awk NF=NF RS= OFS=\" \" | grep -o -e '[1].[0-9]*.[0-9]* - [0-9]*.[0-9]*.[0-9]*.[0-9]*' | sed 's/ //g')\r\nfi\r\n\r\n#Checking if forge version valid\r\nif [[ ! \"$MC_VERSION\" =~ [1].[0-9]*.[0-9]*-[0-9]*.[0-9]*.[0-9]*.[0-9]* ]]; then\r\n echo \"!!! Invalid forge version \\\"$MC_VERSION\\\" !!!\"\r\n exit\r\nfi\r\n\r\n#Go into main direction\r\ncd /mnt/server\r\n\r\n#Adding .jar when not eding by SERVER_JARFILE\r\nif [[ ! $SERVER_JARFILE = *\\.jar ]]; then\r\n SERVER_JARFILE=\"$SERVER_JARFILE.jar\"\r\nfi\r\n\r\n#Downloading jars\r\necho -e \"Downloading forge version \\\"$MC_VERSION\\\"\"\r\ncurl -o installer.jar -sS https://files.minecraftforge.net/maven/net/minecraftforge/forge/$MC_VERSION/forge-$MC_VERSION-installer.jar\r\ncurl -o $SERVER_JARFILE -sS https://files.minecraftforge.net/maven/net/minecraftforge/forge/$MC_VERSION/forge-$MC_VERSION-universal.jar\r\n\r\n#Checking if downloaded jars exist\r\nif [ ! -f ./installer.jar ] || [ ! -f ./$SERVER_JARFILE ]; then\r\n echo \"!!! Error by downloading forge version \\\"$MC_VERSION\\\" !!!\"\r\n exit\r\nfi\r\n\r\n#Installing server\r\necho -e \"Installing forge server.\\n\"\r\njava -jar installer.jar --installServer\r\n\r\n#Deleting installer.jar\r\necho -e \"Deleting installer.jar file.\\n\"\r\nrm -rf installer.jar",
+ "entry": "bash",
+ "container": "openjdk:8",
+ "extends": null
+ },
+ "created_at": "2019-12-22T04:42:51+00:00",
+ "updated_at": "2019-12-22T04:42:51+00:00",
+ "relationships": {
+ "nest": {
+ "object": "nest",
+ "attributes": {
+ "id": 1,
+ "uuid": "58bde975-ec57-4af2-b241-1426ac6d6d59",
+ "author": "support@pterodactyl.io",
+ "name": "Minecraft",
+ "description": "Minecraft - the classic game from Mojang. With support for Vanilla MC, Spigot, and many others!",
+ "created_at": "2019-12-22T04:42:51+00:00",
+ "updated_at": "2019-12-22T04:42:51+00:00"
+ }
+ },
+ "servers": {
+ "object": "list",
+ "data": []
+ }
+ }
+ }
+ },
+ {
+ "object": "egg",
+ "attributes": {
+ "id": 3,
+ "uuid": "2ad75dfd-892d-4441-a452-6d7be7cc895a",
+ "name": "Paper",
+ "nest": 1,
+ "author": "parker@pterodactyl.io",
+ "description": "High performance Spigot fork that aims to fix gameplay and mechanics inconsistencies.",
+ "docker_image": "quay.io/pterodactyl/core:java",
+ "config": {
+ "files": {
+ "server.properties": {
+ "parser": "properties",
+ "find": {
+ "server-ip": "0.0.0.0",
+ "server-port": "{{server.build.default.port}}"
+ }
+ }
+ },
+ "startup": {
+ "done": ")! For help, type ",
+ "userInteraction": [
+ "Go to eula.txt for more info."
+ ]
+ },
+ "stop": "stop",
+ "logs": [],
+ "extends": null
+ },
+ "startup": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -Dterminal.jline=false -Dterminal.ansi=true -jar {{SERVER_JARFILE}}",
+ "script": {
+ "privileged": true,
+ "install": "#!/bin/ash\r\n# Paper Installation Script\r\n#\r\n# Server Files: /mnt/server\r\napk add --no-cache --update curl jq\r\n\r\nif [ -n \"${DL_PATH}\" ]; then\r\n echo -e \"using supplied download url\"\r\n DOWNLOAD_URL=`eval echo $(echo ${DL_PATH} | sed -e 's/{{/${/g' -e 's/}}/}/g')`\r\nelse\r\n VER_EXISTS=`curl -s https://papermc.io/api/v1/paper | jq -r --arg VERSION $MINECRAFT_VERSION '.versions[] | IN($VERSION)' | grep true`\r\n LATEST_PAPER_VERSION=`curl -s https://papermc.io/api/v1/paper | jq -r '.versions' | jq -r '.[0]'`\r\n \r\n if [ \"${VER_EXISTS}\" == \"true\" ]; then\r\n echo -e \"Version is valid. Using version ${MINECRAFT_VERSION}\"\r\n else\r\n echo -e \"Using the latest paper version\"\r\n MINECRAFT_VERSION=${LATEST_PAPER_VERSION}\r\n fi\r\n \r\n BUILD_EXISTS=`curl -s https://papermc.io/api/v1/paper/${MINECRAFT_VERSION} | jq -r --arg BUILD ${BUILD_NUMBER} '.builds.all[] | IN($BUILD)' | grep true`\r\n LATEST_PAPER_BUILD=`curl -s https://papermc.io/api/v1/paper/${MINECRAFT_VERSION} | jq -r '.builds.latest'`\r\n \r\n if [ \"${BUILD_EXISTS}\" == \"true\" ] || [ ${BUILD_NUMBER} == \"latest\" ]; then\r\n echo -e \"Build is valid. Using version ${BUILD_NUMBER}\"\r\n else\r\n echo -e \"Using the latest paper build\"\r\n BUILD_NUMBER=${LATEST_PAPER_BUILD}\r\n fi\r\n \r\n echo \"Version being downloaded\"\r\n echo -e \"MC Version: ${MINECRAFT_VERSION}\"\r\n echo -e \"Build: ${BUILD_NUMBER}\"\r\n DOWNLOAD_URL=https://papermc.io/api/v1/paper/${MINECRAFT_VERSION}/${BUILD_NUMBER}/download \r\nfi\r\n\r\ncd /mnt/server\r\n\r\necho -e \"running curl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\"\r\n\r\nif [ -f ${SERVER_JARFILE} ]; then\r\n mv ${SERVER_JARFILE} ${SERVER_JARFILE}.old\r\nfi\r\n\r\ncurl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}\r\n\r\nif [ ! -f server.properties ]; then\r\n echo -e \"Downloading MC server.properties\"\r\n curl -o server.properties https://raw.githubusercontent.com/parkervcp/eggs/master/minecraft_java/server.properties\r\nfi",
+ "entry": "ash",
+ "container": "alpine:3.9",
+ "extends": null
+ },
+ "created_at": "2019-12-22T04:42:51+00:00",
+ "updated_at": "2019-12-22T04:42:51+00:00",
+ "relationships": {
+ "nest": {
+ "object": "nest",
+ "attributes": {
+ "id": 1,
+ "uuid": "58bde975-ec57-4af2-b241-1426ac6d6d59",
+ "author": "support@pterodactyl.io",
+ "name": "Minecraft",
+ "description": "Minecraft - the classic game from Mojang. With support for Vanilla MC, Spigot, and many others!",
+ "created_at": "2019-12-22T04:42:51+00:00",
+ "updated_at": "2019-12-22T04:42:51+00:00"
+ }
+ },
+ "servers": {
+ "object": "list",
+ "data": []
+ }
+ }
+ }
+ },
+ {
+ "object": "egg",
+ "attributes": {
+ "id": 4,
+ "uuid": "00274063-5d21-439f-80b9-c4cc0dba8188",
+ "name": "Sponge (SpongeVanilla)",
+ "nest": 1,
+ "author": "support@pterodactyl.io",
+ "description": "SpongeVanilla is the SpongeAPI implementation for Vanilla Minecraft.",
+ "docker_image": "quay.io/pterodactyl/core:java-glibc",
+ "config": {
+ "files": {
+ "server.properties": {
+ "parser": "properties",
+ "find": {
+ "server-ip": "0.0.0.0",
+ "enable-query": "true",
+ "server-port": "{{server.build.default.port}}",
+ "query.port": "{{server.build.default.port}}"
+ }
+ }
+ },
+ "startup": {
+ "done": ")! For help, type ",
+ "userInteraction": [
+ "Go to eula.txt for more info."
+ ]
+ },
+ "stop": "stop",
+ "logs": {
+ "custom": false,
+ "location": "logs/latest.log"
+ },
+ "extends": null
+ },
+ "startup": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -jar {{SERVER_JARFILE}}",
+ "script": {
+ "privileged": true,
+ "install": "#!/bin/ash\n# Sponge Installation Script\n#\n# Server Files: /mnt/server\n\napk update\napk add curl\n\ncd /mnt/server\n\ncurl -sSL \"https://repo.spongepowered.org/maven/org/spongepowered/spongevanilla/${SPONGE_VERSION}/spongevanilla-${SPONGE_VERSION}.jar\" -o ${SERVER_JARFILE}",
+ "entry": "ash",
+ "container": "alpine:3.9",
+ "extends": null
+ },
+ "created_at": "2019-12-22T04:42:51+00:00",
+ "updated_at": "2019-12-22T04:42:51+00:00",
+ "relationships": {
+ "nest": {
+ "object": "nest",
+ "attributes": {
+ "id": 1,
+ "uuid": "58bde975-ec57-4af2-b241-1426ac6d6d59",
+ "author": "support@pterodactyl.io",
+ "name": "Minecraft",
+ "description": "Minecraft - the classic game from Mojang. With support for Vanilla MC, Spigot, and many others!",
+ "created_at": "2019-12-22T04:42:51+00:00",
+ "updated_at": "2019-12-22T04:42:51+00:00"
+ }
+ },
+ "servers": {
+ "object": "list",
+ "data": []
+ }
+ }
+ }
+ },
+ {
+ "object": "egg",
+ "attributes": {
+ "id": 5,
+ "uuid": "cd4cc5cf-de80-4a50-b458-dbd7d3193175",
+ "name": "Vanilla Minecraft",
+ "nest": 1,
+ "author": "support@pterodactyl.io",
+ "description": "Minecraft is a game about placing blocks and going on adventures. Explore randomly generated worlds and build amazing things from the simplest of homes to the grandest of castles. Play in Creative Mode with unlimited resources or mine deep in Survival Mode, crafting weapons and armor to fend off dangerous mobs. Do all this alone or with friends.",
+ "docker_image": "quay.io/pterodactyl/core:java",
+ "config": {
+ "files": {
+ "server.properties": {
+ "parser": "properties",
+ "find": {
+ "server-ip": "0.0.0.0",
+ "enable-query": "true",
+ "server-port": "{{server.build.default.port}}",
+ "query.port": "{{server.build.default.port}}"
+ }
+ }
+ },
+ "startup": {
+ "done": ")! For help, type ",
+ "userInteraction": [
+ "Go to eula.txt for more info."
+ ]
+ },
+ "stop": "stop",
+ "logs": {
+ "custom": false,
+ "location": "logs/latest.log"
+ },
+ "extends": null
+ },
+ "startup": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -jar {{SERVER_JARFILE}}",
+ "script": {
+ "privileged": true,
+ "install": "#!/bin/ash\r\n# Vanilla MC Installation Script\r\n#\r\n# Server Files: /mnt/server\r\napk update\r\napk add curl jq\r\n\r\ncd /mnt/server\r\n\r\nLATEST_VERSION=`curl https://launchermeta.mojang.com/mc/game/version_manifest.json | jq -r '.latest.release'`\r\n\r\nif [ -z \"$VANILLA_VERSION\" ] || [ \"$VANILLA_VERSION\" == \"latest\" ]; then\r\n MANIFEST_URL=$(curl https://launchermeta.mojang.com/mc/game/version_manifest.json | jq .versions | jq -r '.[] | select(.id == \"'$LATEST_VERSION'\") | .url')\r\nelse\r\n MANIFEST_URL=$(curl https://launchermeta.mojang.com/mc/game/version_manifest.json | jq .versions | jq -r '.[] | select(.id == \"'$VANILLA_VERSION'\") | .url')\r\nfi\r\n\r\nDOWNLOAD_URL=`curl $MANIFEST_URL | jq .downloads.server | jq -r '. | .url'`\r\n\r\ncurl -o ${SERVER_JARFILE} $DOWNLOAD_URL",
+ "entry": "ash",
+ "container": "alpine:3.9",
+ "extends": null
+ },
+ "created_at": "2019-12-22T04:42:51+00:00",
+ "updated_at": "2019-12-22T04:42:51+00:00",
+ "relationships": {
+ "nest": {
+ "object": "nest",
+ "attributes": {
+ "id": 1,
+ "uuid": "58bde975-ec57-4af2-b241-1426ac6d6d59",
+ "author": "support@pterodactyl.io",
+ "name": "Minecraft",
+ "description": "Minecraft - the classic game from Mojang. With support for Vanilla MC, Spigot, and many others!",
+ "created_at": "2019-12-22T04:42:51+00:00",
+ "updated_at": "2019-12-22T04:42:51+00:00"
+ }
+ },
+ "servers": {
+ "object": "list",
+ "data": [
+ {
+ "object": "server",
+ "attributes": {
+ "id": 5,
+ "external_id": "RemoteId1",
+ "uuid": "1a7ce997-259b-452e-8b4e-cecc464142ca",
+ "identifier": "1a7ce997",
+ "name": "Wuhu Island",
+ "description": "Matt from Wii Sports",
+ "suspended": false,
+ "limits": {
+ "memory": 512,
+ "swap": 0,
+ "disk": 200,
+ "io": 500,
+ "cpu": 0,
+ "threads": null
+ },
+ "feature_limits": {
+ "databases": 5,
+ "allocations": 5,
+ "backups": 2
+ },
+ "user": 1,
+ "node": 1,
+ "allocation": 1,
+ "nest": 1,
+ "egg": 5,
+ "pack": null,
+ "container": {
+ "startup_command": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -jar {{SERVER_JARFILE}}",
+ "image": "quay.io/pterodactyl/core:java",
+ "installed": true,
+ "environment": {
+ "SERVER_JARFILE": "server.jar",
+ "VANILLA_VERSION": "latest",
+ "STARTUP": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -jar {{SERVER_JARFILE}}",
+ "P_SERVER_LOCATION": "Test",
+ "P_SERVER_UUID": "1a7ce997-259b-452e-8b4e-cecc464142ca"
+ }
+ },
+ "updated_at": "2020-06-13T04:20:53+00:00",
+ "created_at": "2019-12-23T06:46:27+00:00"
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ]
+ }
+ },
+ "/api/application/nests/{nest}/eggs/{egg}": {
+ "get": {
+ "tags": [
+ "Application - Nests - Eggs Management"
+ ],
+ "summary": "Egg details",
+ "operationId": "get-egg-details",
+ "description": "Retrieves the specified egg\n\n## Available include parameters\n| Parameter | Description |\n|-----------|----------------------------------------------|\n| nest | Information about the nest that owns the egg |\n| servers | List of servers using the egg |\n| config | Config options of the egg |\n| script | Egg install script |\n| variables | List of egg variables |",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "uuid": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "nest": {
+ "type": "integer"
+ },
+ "author": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "docker_image": {
+ "type": "string"
+ },
+ "config": {
+ "type": "object",
+ "properties": {
+ "files": {
+ "type": "object",
+ "properties": {
+ "config.yml": {
+ "type": "object",
+ "properties": {
+ "parser": {
+ "type": "string"
+ },
+ "find": {
+ "type": "object",
+ "properties": {
+ "listeners[0].query_enabled": {
+ "type": "boolean"
+ },
+ "listeners[0].query_port": {
+ "type": "string"
+ },
+ "listeners[0].host": {
+ "type": "string"
+ },
+ "servers.*.address": {
+ "type": "object",
+ "properties": {
+ "127.0.0.1": {
+ "type": "string"
+ },
+ "localhost": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "startup": {
+ "type": "object",
+ "properties": {
+ "done": {
+ "type": "string"
+ },
+ "userInteraction": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "stop": {
+ "type": "string"
+ },
+ "logs": {
+ "type": "object",
+ "properties": {
+ "custom": {
+ "type": "boolean"
+ },
+ "location": {
+ "type": "string"
+ }
+ }
+ },
+ "extends": {
+ "type": "string",
+ "nullable": true
+ }
+ }
+ },
+ "startup": {
+ "type": "string"
+ },
+ "script": {
+ "type": "object",
+ "properties": {
+ "privileged": {
+ "type": "boolean"
+ },
+ "install": {
+ "type": "string"
+ },
+ "entry": {
+ "type": "string"
+ },
+ "container": {
+ "type": "string"
+ },
+ "extends": {
+ "type": "string",
+ "nullable": true
+ }
+ }
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "egg",
+ "attributes": {
+ "id": 1,
+ "uuid": "695648dd-01a3-4ced-b075-d4ec4fb9fbf4",
+ "name": "Bungeecord",
+ "nest": 1,
+ "author": "support@pterodactyl.io",
+ "description": "For a long time, Minecraft server owners have had a dream that encompasses a free, easy, and reliable way to connect multiple Minecraft servers together. BungeeCord is the answer to said dream. Whether you are a small server wishing to string multiple game-modes together, or the owner of the ShotBow Network, BungeeCord is the ideal solution for you. With the help of BungeeCord, you will be able to unlock your community's full potential.",
+ "docker_image": "quay.io/pterodactyl/core:java",
+ "config": {
+ "files": {
+ "config.yml": {
+ "parser": "yaml",
+ "find": {
+ "listeners[0].query_enabled": true,
+ "listeners[0].query_port": "{{server.build.default.port}}",
+ "listeners[0].host": "0.0.0.0:{{server.build.default.port}}",
+ "servers.*.address": {
+ "127.0.0.1": "{{config.docker.interface}}",
+ "localhost": "{{config.docker.interface}}"
+ }
+ }
+ }
+ },
+ "startup": {
+ "done": "Listening on ",
+ "userInteraction": [
+ "Listening on /0.0.0.0:25577"
+ ]
+ },
+ "stop": "end",
+ "logs": {
+ "custom": false,
+ "location": "proxy.log.0"
+ },
+ "extends": null
+ },
+ "startup": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -jar {{SERVER_JARFILE}}",
+ "script": {
+ "privileged": true,
+ "install": "#!/bin/ash\n# Bungeecord Installation Script\n#\n# Server Files: /mnt/server\napk update\napk add curl\n\ncd /mnt/server\n\nif [ -z \"${BUNGEE_VERSION}\" ] || [ \"${BUNGEE_VERSION}\" == \"latest\" ]; then\n BUNGEE_VERSION=\"lastStableBuild\"\nfi\n\ncurl -o ${SERVER_JARFILE} https://ci.md-5.net/job/BungeeCord/${BUNGEE_VERSION}/artifact/bootstrap/target/BungeeCord.jar",
+ "entry": "ash",
+ "container": "alpine:3.9",
+ "extends": null
+ },
+ "created_at": "2019-12-22T04:42:51+00:00",
+ "updated_at": "2019-12-22T04:42:51+00:00"
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "nest",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Nest ID",
+ "example": 1
+ },
+ {
+ "name": "egg",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Egg ID",
+ "example": 1
+ }
+ ]
+ }
+ },
+ "/api/application/nests/{nest}": {
+ "get": {
+ "tags": [
+ "Application - Nests"
+ ],
+ "summary": "Nest details",
+ "operationId": "get-nest-details",
+ "description": "Retrieves the specified nests\n\n# Available include parameters\n| Parameter | Description |\n|-----------|---------------------------------|\n| eggs | List of eggs in the location |\n| servers | List of servers in the location |",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "uuid": {
+ "type": "string"
+ },
+ "author": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "nest",
+ "attributes": {
+ "id": 1,
+ "uuid": "58bde975-ec57-4af2-b241-1426ac6d6d59",
+ "author": "support@pterodactyl.io",
+ "name": "Minecraft",
+ "description": "Minecraft - the classic game from Mojang. With support for Vanilla MC, Spigot, and many others!",
+ "created_at": "2019-12-22T04:42:51+00:00",
+ "updated_at": "2019-12-22T04:42:51+00:00"
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "nest",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Nest ID",
+ "example": 1
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/startup": {
+ "get": {
+ "tags": [
+ "Client - Server - Startup"
+ ],
+ "summary": "List Variables",
+ "operationId": "get-list-variables",
+ "description": "Lists all variables on the server",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "{\n \"object\": \"list\",\n \"data\": [\n {\n \"object\": \"egg_variable\",\n \"attributes\": {\n \"name\": \"Server Jar File\",\n \"description\": \"The name of the server jarfile to run the server with.\",\n \"env_variable\": \"SERVER_JARFILE\",\n \"default_value\": \"server.jar\",\n \"server_value\": \"server.jar\",\n \"is_editable\": true,\n \"rules\": \"required|regex:\\/^([\\\\w\\\\d._-]+)(\\\\.jar)$\\/\"\n }\n },\n {\n \"object\": \"egg_variable\",\n \"attributes\": {\n \"name\": \"Server Version\",\n \"description\": \"The version of Minecraft Vanilla to install. Use \\\"latest\\\" to install the latest version.\",\n \"env_variable\": \"VANILLA_VERSION\",\n \"default_value\": \"latest\",\n \"server_value\": \"latest\",\n \"is_editable\": true,\n \"rules\": \"required|string|between:3,15\"\n }\n }\n ],\n \"meta\": {\n \"startup_command\": \"java -Xms128M -Xmx512M -jar server.jar\",\n \"raw_startup_command\": \"java -Xms128M -Xmx\\{\\{ SERVER_MEMORY }}M -jar {\\{ SERVER_JARFILE }}\"\n }\n}"
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client": {
+ "get": {
+ "tags": [
+ "Client - General"
+ ],
+ "summary": "List servers",
+ "operationId": "get-list-servers",
+ "description": "Lists all servers\n\n## Include parameters\n| Parameter | Description |\n|-----------|-------------------------------------------|\n| egg | Information about the egg the server uses |\n| subusers | List of subusers on the server |",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "data": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "server_owner": {
+ "type": "boolean"
+ },
+ "identifier": {
+ "type": "string"
+ },
+ "uuid": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "node": {
+ "type": "string"
+ },
+ "sftp_details": {
+ "type": "object",
+ "properties": {
+ "ip": {
+ "type": "string"
+ },
+ "port": {
+ "type": "integer"
+ }
+ }
+ },
+ "description": {
+ "type": "string"
+ },
+ "limits": {
+ "type": "object",
+ "properties": {
+ "memory": {
+ "type": "integer"
+ },
+ "swap": {
+ "type": "integer"
+ },
+ "disk": {
+ "type": "integer"
+ },
+ "io": {
+ "type": "integer"
+ },
+ "cpu": {
+ "type": "integer"
+ }
+ }
+ },
+ "feature_limits": {
+ "type": "object",
+ "properties": {
+ "databases": {
+ "type": "integer"
+ },
+ "allocations": {
+ "type": "integer"
+ },
+ "backups": {
+ "type": "integer"
+ }
+ }
+ },
+ "is_suspended": {
+ "type": "boolean"
+ },
+ "is_installing": {
+ "type": "boolean"
+ },
+ "relationships": {
+ "type": "object",
+ "properties": {
+ "allocations": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "data": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "ip": {
+ "type": "string"
+ },
+ "ip_alias": {
+ "type": "string",
+ "nullable": true
+ },
+ "port": {
+ "type": "integer"
+ },
+ "notes": {
+ "type": "string",
+ "nullable": true
+ },
+ "is_default": {
+ "type": "boolean"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "meta": {
+ "type": "object",
+ "properties": {
+ "pagination": {
+ "type": "object",
+ "properties": {
+ "total": {
+ "type": "integer"
+ },
+ "count": {
+ "type": "integer"
+ },
+ "per_page": {
+ "type": "integer"
+ },
+ "current_page": {
+ "type": "integer"
+ },
+ "total_pages": {
+ "type": "integer"
+ },
+ "links": {
+ "type": "object",
+ "properties": {}
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "list",
+ "data": [
+ {
+ "object": "server",
+ "attributes": {
+ "server_owner": true,
+ "identifier": "1a7ce997",
+ "uuid": "1a7ce997-259b-452e-8b4e-cecc464142ca",
+ "name": "Gaming",
+ "node": "Test",
+ "sftp_details": {
+ "ip": "pterodactyl.file.properties",
+ "port": 2022
+ },
+ "description": "Matt from Wii Sports",
+ "limits": {
+ "memory": 512,
+ "swap": 0,
+ "disk": 200,
+ "io": 500,
+ "cpu": 0
+ },
+ "feature_limits": {
+ "databases": 5,
+ "allocations": 5,
+ "backups": 2
+ },
+ "is_suspended": false,
+ "is_installing": false,
+ "relationships": {
+ "allocations": {
+ "object": "list",
+ "data": [
+ {
+ "object": "allocation",
+ "attributes": {
+ "id": 1,
+ "ip": "45.86.168.218",
+ "ip_alias": null,
+ "port": 25565,
+ "notes": null,
+ "is_default": true
+ }
+ },
+ {
+ "object": "allocation",
+ "attributes": {
+ "id": 2,
+ "ip": "45.86.168.218",
+ "ip_alias": null,
+ "port": 25566,
+ "notes": "Votifier",
+ "is_default": false
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ ],
+ "meta": {
+ "pagination": {
+ "total": 1,
+ "count": 1,
+ "per_page": 50,
+ "current_page": 1,
+ "total_pages": 1,
+ "links": {}
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}": {
+ "get": {
+ "tags": [
+ "Client - Server"
+ ],
+ "summary": "Server details",
+ "operationId": "get-server-details",
+ "description": "Retrieves information about the specified server\n\n## Include parameters\n| Parameter | Description |\n|-----------|-------------------------------------------|\n| egg | Information about the egg the server uses |\n| subusers | List of subusers on the server |",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "server_owner": {
+ "type": "boolean"
+ },
+ "identifier": {
+ "type": "string"
+ },
+ "uuid": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "node": {
+ "type": "string"
+ },
+ "sftp_details": {
+ "type": "object",
+ "properties": {
+ "ip": {
+ "type": "string"
+ },
+ "port": {
+ "type": "integer"
+ }
+ }
+ },
+ "description": {
+ "type": "string"
+ },
+ "limits": {
+ "type": "object",
+ "properties": {
+ "memory": {
+ "type": "integer"
+ },
+ "swap": {
+ "type": "integer"
+ },
+ "disk": {
+ "type": "integer"
+ },
+ "io": {
+ "type": "integer"
+ },
+ "cpu": {
+ "type": "integer"
+ }
+ }
+ },
+ "feature_limits": {
+ "type": "object",
+ "properties": {
+ "databases": {
+ "type": "integer"
+ },
+ "allocations": {
+ "type": "integer"
+ },
+ "backups": {
+ "type": "integer"
+ }
+ }
+ },
+ "is_suspended": {
+ "type": "boolean"
+ },
+ "is_installing": {
+ "type": "boolean"
+ },
+ "relationships": {
+ "type": "object",
+ "properties": {
+ "allocations": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "data": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "ip": {
+ "type": "string"
+ },
+ "ip_alias": {
+ "type": "string",
+ "nullable": true
+ },
+ "port": {
+ "type": "integer"
+ },
+ "notes": {
+ "type": "string",
+ "nullable": true
+ },
+ "is_default": {
+ "type": "boolean"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "meta": {
+ "type": "object",
+ "properties": {
+ "is_server_owner": {
+ "type": "boolean"
+ },
+ "user_permissions": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "server",
+ "attributes": {
+ "server_owner": true,
+ "identifier": "1a7ce997",
+ "uuid": "1a7ce997-259b-452e-8b4e-cecc464142ca",
+ "name": "Wuhu Island",
+ "node": "Test",
+ "sftp_details": {
+ "ip": "pterodactyl.file.properties",
+ "port": 2022
+ },
+ "description": "Matt from Wii Sports",
+ "limits": {
+ "memory": 512,
+ "swap": 0,
+ "disk": 200,
+ "io": 500,
+ "cpu": 0
+ },
+ "feature_limits": {
+ "databases": 5,
+ "allocations": 5,
+ "backups": 2
+ },
+ "is_suspended": false,
+ "is_installing": false,
+ "relationships": {
+ "allocations": {
+ "object": "list",
+ "data": [
+ {
+ "object": "allocation",
+ "attributes": {
+ "id": 1,
+ "ip": "45.86.168.218",
+ "ip_alias": null,
+ "port": 25565,
+ "notes": null,
+ "is_default": true
+ }
+ },
+ {
+ "object": "allocation",
+ "attributes": {
+ "id": 2,
+ "ip": "45.86.168.218",
+ "ip_alias": null,
+ "port": 25566,
+ "notes": "Votifier",
+ "is_default": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "meta": {
+ "is_server_owner": true,
+ "user_permissions": [
+ "*",
+ "admin.websocket.errors",
+ "admin.websocket.install"
+ ]
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/websocket": {
+ "get": {
+ "tags": [
+ "Client - Server"
+ ],
+ "summary": "Console details",
+ "operationId": "get-console-details",
+ "description": "Generates credentials to establish a websocket\n\n## How to connect\n1. Connect to the websocket address (in this example \"wss://pterodactyl.file.properties:8080/api/servers/1a7ce997-259b-452e-8b4e-cecc464142ca/ws\")\n2. Send the token to the websocket like this: `{\"event\":\"auth\",\"args\":[\"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImp0aSI6Ij...\"]}`\n\n* Tokens last about 10-15 minutes, and the websocket will notify you once you need to send a new token with `{\"event\":\"token expiring\"}` and `{\"event\":\"token expired\"}`\n\n## Things you can send\n* `{\"event\":\"auth\",\"args\":[\"\"]}` # Authenticate with websocket\n* `{\"event\":\"send stats\",\"args\":[null]}` # Request stats\n* `{\"event\":\"send logs\",\"args\":[null]}` # Request logs\n* `{\"event\":\"set state\",\"args\":[\"\"]}` # Send power action\n* `{\"event\":\"send command\",\"args\":[\"\"]}` # Send command\n\n## Things you'll receive\n* `{\"event\":\"auth success\"}` # Upon successful websocket authentication\n* `{\"event\":\"status\",\"args\":[\"offline\"]}` # Status updates of the server\n* `{\"event\":\"console output\",\"args\":[\"[14:07:12] [Query Listener #1/INFO]: Query running on 0.0.0.0:25565\"]}` # Logs from server\n* `{\"event\":\"stats\",\"args\":[\"{\\\"memory_bytes\\\":526626816,\\\"memory_limit_bytes\\\":588800000,\\\"cpu_absolute\\\":588.815,\\\"network\\\":{\\\"rx_bytes\\\":1126,\\\"tx_bytes\\\":1126},\\\"state\\\":\\\"stopping\\\",\\\"disk_bytes\\\":128118626}\"]}` # Stats from server\n* `{\"event\":\"token expiring\"}` # Token is expiring soon so request a new one and send it to the websocket\n* `{\"event\":\"token expired\"}` # Token has expired",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "data": {
+ "type": "object",
+ "properties": {
+ "token": {
+ "type": "string"
+ },
+ "socket": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "data": {
+ "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImp0aSI6Ij...",
+ "socket": "wss://pterodactyl.file.properties:8080/api/servers/1a7ce997-259b-452e-8b4e-cecc464142ca/ws"
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/resources": {
+ "get": {
+ "tags": [
+ "Client - Server"
+ ],
+ "summary": "Resource usage",
+ "operationId": "get-resource-usage",
+ "description": "Retrieves resource utilization of the specified server",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "current_state": {
+ "type": "string"
+ },
+ "is_suspended": {
+ "type": "boolean"
+ },
+ "resources": {
+ "type": "object",
+ "properties": {
+ "memory_bytes": {
+ "type": "integer"
+ },
+ "cpu_absolute": {
+ "type": "integer"
+ },
+ "disk_bytes": {
+ "type": "integer"
+ },
+ "network_rx_bytes": {
+ "type": "integer"
+ },
+ "network_tx_bytes": {
+ "type": "integer"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "stats",
+ "attributes": {
+ "current_state": "starting",
+ "is_suspended": false,
+ "resources": {
+ "memory_bytes": 588701696,
+ "cpu_absolute": 0,
+ "disk_bytes": 130156361,
+ "network_rx_bytes": 694220,
+ "network_tx_bytes": 337090
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/command": {
+ "post": {
+ "tags": [
+ "Client - Server"
+ ],
+ "summary": "Send command",
+ "operationId": "post-send-command",
+ "description": "Sends a command to the server\n\nThe server must be online to send a command to it. You will get HTTP 502 is the server if not online.",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "command": {
+ "type": "string",
+ "description": "Command to send"
+ }
+ },
+ "required": [
+ "command"
+ ]
+ },
+ "example": {
+ "command": "say CodeCo says Hi!"
+ }
+ }
+ }
+ },
+ "responses": {
+ "204": {
+ "description": "No Content"
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/power": {
+ "post": {
+ "tags": [
+ "Client - Server"
+ ],
+ "summary": "Change power state",
+ "operationId": "post-change-power-state",
+ "description": "Sends a power signal to the server\n\n## Signals\n| Signal | Description |\n|---------|----------------------------------|\n| start | Starts the server |\n| stop | Gracefully stops the server |\n| restart | Stops then starts the server |\n| kill | Instantly end the server process |",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "signal": {
+ "type": "string",
+ "description": "Power signal to send"
+ }
+ },
+ "required": [
+ "signal"
+ ]
+ },
+ "example": {
+ "signal": "start"
+ }
+ }
+ }
+ },
+ "responses": {
+ "204": {
+ "description": "No Content"
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/permissions": {
+ "get": {
+ "tags": [
+ "Client - General"
+ ],
+ "summary": "Show permissions",
+ "operationId": "get-show-permissions",
+ "description": "Retries all available permissions\n\nThis is used for the frontend",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "permissions": {
+ "type": "object",
+ "properties": {
+ "websocket": {
+ "type": "object",
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "keys": {
+ "type": "object",
+ "properties": {
+ "connect": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "control": {
+ "type": "object",
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "keys": {
+ "type": "object",
+ "properties": {
+ "console": {
+ "type": "string"
+ },
+ "start": {
+ "type": "string"
+ },
+ "stop": {
+ "type": "string"
+ },
+ "restart": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "user": {
+ "type": "object",
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "keys": {
+ "type": "object",
+ "properties": {
+ "create": {
+ "type": "string"
+ },
+ "read": {
+ "type": "string"
+ },
+ "update": {
+ "type": "string"
+ },
+ "delete": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "file": {
+ "type": "object",
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "keys": {
+ "type": "object",
+ "properties": {
+ "create": {
+ "type": "string"
+ },
+ "read": {
+ "type": "string"
+ },
+ "update": {
+ "type": "string"
+ },
+ "delete": {
+ "type": "string"
+ },
+ "archive": {
+ "type": "string"
+ },
+ "sftp": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "backup": {
+ "type": "object",
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "keys": {
+ "type": "object",
+ "properties": {
+ "create": {
+ "type": "string"
+ },
+ "read": {
+ "type": "string"
+ },
+ "update": {
+ "type": "string"
+ },
+ "delete": {
+ "type": "string"
+ },
+ "download": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "allocation": {
+ "type": "object",
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "keys": {
+ "type": "object",
+ "properties": {
+ "read": {
+ "type": "string"
+ },
+ "create": {
+ "type": "string"
+ },
+ "update": {
+ "type": "string"
+ },
+ "delete": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "startup": {
+ "type": "object",
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "keys": {
+ "type": "object",
+ "properties": {
+ "read": {
+ "type": "string"
+ },
+ "update": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "database": {
+ "type": "object",
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "keys": {
+ "type": "object",
+ "properties": {
+ "create": {
+ "type": "string"
+ },
+ "read": {
+ "type": "string"
+ },
+ "update": {
+ "type": "string"
+ },
+ "delete": {
+ "type": "string"
+ },
+ "view_password": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "schedule": {
+ "type": "object",
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "keys": {
+ "type": "object",
+ "properties": {
+ "create": {
+ "type": "string"
+ },
+ "read": {
+ "type": "string"
+ },
+ "update": {
+ "type": "string"
+ },
+ "delete": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "settings": {
+ "type": "object",
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "keys": {
+ "type": "object",
+ "properties": {
+ "rename": {
+ "type": "string"
+ },
+ "reinstall": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "system_permissions",
+ "attributes": {
+ "permissions": {
+ "websocket": {
+ "description": "Allows the user to connect to the server websocket, giving them access to view console output and realtime server stats.",
+ "keys": {
+ "connect": "Allows a user to connect to the websocket instance for a server to stream the console."
+ }
+ },
+ "control": {
+ "description": "Permissions that control a user's ability to control the power state of a server, or send commands.",
+ "keys": {
+ "console": "Allows a user to send commands to the server instance via the console.",
+ "start": "Allows a user to start the server if it is stopped.",
+ "stop": "Allows a user to stop a server if it is running.",
+ "restart": "Allows a user to perform a server restart. This allows them to start the server if it is offline, but not put the server in a completely stopped state."
+ }
+ },
+ "user": {
+ "description": "Permissions that allow a user to manage other subusers on a server. They will never be able to edit their own account, or assign permissions they do not have themselves.",
+ "keys": {
+ "create": "Allows a user to create new subusers for the server.",
+ "read": "Allows the user to view subusers and their permissions for the server.",
+ "update": "Allows a user to modify other subusers.",
+ "delete": "Allows a user to delete a subuser from the server."
+ }
+ },
+ "file": {
+ "description": "Permissions that control a user's ability to modify the filesystem for this server.",
+ "keys": {
+ "create": "Allows a user to create additional files and folders via the Panel or direct upload.",
+ "read": "Allows a user to view the contents of a directory and read the contents of a file. Users with this permission can also download files.",
+ "update": "Allows a user to update the contents of an existing file or directory.",
+ "delete": "Allows a user to delete files or directories.",
+ "archive": "Allows a user to archive the contents of a directory as well as decompress existing archives on the system.",
+ "sftp": "Allows a user to connect to SFTP and manage server files using the other assigned file permissions."
+ }
+ },
+ "backup": {
+ "description": "Permissions that control a user's ability to generate and manage server backups.",
+ "keys": {
+ "create": "Allows a user to create new backups for this server.",
+ "read": "Allows a user to view all backups that exist for this server.",
+ "update": "",
+ "delete": "Allows a user to remove backups from the system.",
+ "download": "Allows a user to download backups."
+ }
+ },
+ "allocation": {
+ "description": "Permissions that control a user's ability to modify the port allocations for this server.",
+ "keys": {
+ "read": "Allows a user to view the allocations assigned to this server.",
+ "create": "Allows a user to assign additional allocations to the server.",
+ "update": "Allows a user to change the primary server allocation and attach notes to each allocation.",
+ "delete": "Allows a user to delete an allocation from the server."
+ }
+ },
+ "startup": {
+ "description": "Permissions that control a user's ability to view this server's startup parameters.",
+ "keys": {
+ "read": "",
+ "update": ""
+ }
+ },
+ "database": {
+ "description": "Permissions that control a user's access to the database management for this server.",
+ "keys": {
+ "create": "Allows a user to create a new database for this server.",
+ "read": "Allows a user to view the database associated with this server.",
+ "update": "Allows a user to rotate the password on a database instance. If the user does not have the view_password permission they will not see the updated password.",
+ "delete": "Allows a user to remove a database instance from this server.",
+ "view_password": "Allows a user to view the password associated with a database instance for this server."
+ }
+ },
+ "schedule": {
+ "description": "Permissions that control a user's access to the schedule management for this server.",
+ "keys": {
+ "create": "",
+ "read": "",
+ "update": "",
+ "delete": ""
+ }
+ },
+ "settings": {
+ "description": "Permissions that control a user's access to the settings for this server.",
+ "keys": {
+ "rename": "",
+ "reinstall": ""
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/databases": {
+ "get": {
+ "tags": [
+ "Client - Server - Databases"
+ ],
+ "summary": "List databases",
+ "operationId": "get-list-databases",
+ "description": "Lists all databases on a server\n\n## Include parameters\n| Parameter | Description |\n|-----------|-------------------------------------|\n| password | Includes the database user password |",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "data": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "host": {
+ "type": "object",
+ "properties": {
+ "address": {
+ "type": "string"
+ },
+ "port": {
+ "type": "integer"
+ }
+ }
+ },
+ "name": {
+ "type": "string"
+ },
+ "username": {
+ "type": "string"
+ },
+ "connections_from": {
+ "type": "string"
+ },
+ "max_connections": {
+ "type": "integer"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "list",
+ "data": [
+ {
+ "object": "server_database",
+ "attributes": {
+ "id": "bEY4yAD5",
+ "host": {
+ "address": "127.0.0.1",
+ "port": 3306
+ },
+ "name": "s5_perms",
+ "username": "u5_QsIAp1jhvS",
+ "connections_from": "%",
+ "max_connections": 0
+ }
+ },
+ {
+ "object": "server_database",
+ "attributes": {
+ "id": "E0A0Rw42",
+ "host": {
+ "address": "127.0.0.1",
+ "port": 3306
+ },
+ "name": "s5_coreprotect",
+ "username": "u5_2jtJx1nO1d",
+ "connections_from": "%",
+ "max_connections": 0
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ },
+ "post": {
+ "tags": [
+ "Client - Server - Databases"
+ ],
+ "summary": "Create database",
+ "operationId": "post-create-database",
+ "description": "Creates a new database",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "database": {
+ "type": "string"
+ },
+ "remote": {
+ "type": "string"
+ }
+ }
+ },
+ "example": {
+ "database": "bans",
+ "remote": "%"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "host": {
+ "type": "object",
+ "properties": {
+ "address": {
+ "type": "string"
+ },
+ "port": {
+ "type": "integer"
+ }
+ }
+ },
+ "name": {
+ "type": "string"
+ },
+ "username": {
+ "type": "string"
+ },
+ "connections_from": {
+ "type": "string"
+ },
+ "max_connections": {
+ "type": "integer"
+ },
+ "relationships": {
+ "type": "object",
+ "properties": {
+ "password": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "password": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "server_database",
+ "attributes": {
+ "id": "y9YVxO4V",
+ "host": {
+ "address": "127.0.0.1",
+ "port": 3306
+ },
+ "name": "s5_punishments",
+ "username": "u5_aeZqbGdCM9",
+ "connections_from": "%",
+ "max_connections": 0,
+ "relationships": {
+ "password": {
+ "object": "database_password",
+ "attributes": {
+ "password": "=lR2orDOcwfKkM=BXb.BVF.C"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/files/list": {
+ "get": {
+ "tags": [
+ "Client - Server - File Manager"
+ ],
+ "summary": "List files",
+ "operationId": "get-list-files",
+ "description": "Lists all files of the server\n\n## Available parameters\n| Parameter | Description |\n|-----------|-------------------------------------|\n| directory | URL encoded path to list files from |",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ },
+ {
+ "name": "directory",
+ "in": "query",
+ "schema": {
+ "type": "string"
+ },
+ "example": "/cache"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "data": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "mode": {
+ "type": "string"
+ },
+ "size": {
+ "type": "integer"
+ },
+ "is_file": {
+ "type": "boolean"
+ },
+ "is_symlink": {
+ "type": "boolean"
+ },
+ "is_editable": {
+ "type": "boolean"
+ },
+ "mimetype": {
+ "type": "string"
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "modified_at": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "list",
+ "data": [
+ {
+ "object": "file_object",
+ "attributes": {
+ "name": "cache",
+ "mode": "drwxr-xr-x",
+ "size": 4096,
+ "is_file": false,
+ "is_symlink": false,
+ "is_editable": false,
+ "mimetype": "inode/directory",
+ "created_at": "2020-07-13T12:41:55+00:00",
+ "modified_at": "2019-12-25T05:20:36+00:00"
+ }
+ },
+ {
+ "object": "file_object",
+ "attributes": {
+ "name": "logs",
+ "mode": "drwxr-xr-x",
+ "size": 4096,
+ "is_file": false,
+ "is_symlink": false,
+ "is_editable": false,
+ "mimetype": "inode/directory",
+ "created_at": "2020-07-13T12:42:02+00:00",
+ "modified_at": "2020-07-13T12:42:02+00:00"
+ }
+ },
+ {
+ "object": "file_object",
+ "attributes": {
+ "name": "plugins",
+ "mode": "drwxr-xr-x",
+ "size": 4096,
+ "is_file": false,
+ "is_symlink": false,
+ "is_editable": false,
+ "mimetype": "inode/directory",
+ "created_at": "2020-07-13T12:41:55+00:00",
+ "modified_at": "2019-12-25T05:21:07+00:00"
+ }
+ },
+ {
+ "object": "file_object",
+ "attributes": {
+ "name": "world",
+ "mode": "drwxr-xr-x",
+ "size": 4096,
+ "is_file": false,
+ "is_symlink": false,
+ "is_editable": false,
+ "mimetype": "inode/directory",
+ "created_at": "2020-07-13T13:26:22+00:00",
+ "modified_at": "2020-07-13T13:26:22+00:00"
+ }
+ },
+ {
+ "object": "file_object",
+ "attributes": {
+ "name": "world_nether",
+ "mode": "drwxr-xr-x",
+ "size": 4096,
+ "is_file": false,
+ "is_symlink": false,
+ "is_editable": false,
+ "mimetype": "inode/directory",
+ "created_at": "2020-07-13T12:41:55+00:00",
+ "modified_at": "2019-12-25T05:21:15+00:00"
+ }
+ },
+ {
+ "object": "file_object",
+ "attributes": {
+ "name": "world_the_end",
+ "mode": "drwxr-xr-x",
+ "size": 4096,
+ "is_file": false,
+ "is_symlink": false,
+ "is_editable": false,
+ "mimetype": "inode/directory",
+ "created_at": "2020-07-13T12:41:55+00:00",
+ "modified_at": "2019-12-25T05:21:15+00:00"
+ }
+ },
+ {
+ "object": "file_object",
+ "attributes": {
+ "name": "whitelist.json",
+ "mode": "-rw-r--r--",
+ "size": 2,
+ "is_file": true,
+ "is_symlink": false,
+ "is_editable": true,
+ "mimetype": "application/json",
+ "created_at": "2020-07-13T12:41:55+00:00",
+ "modified_at": "2019-12-25T05:21:07+00:00"
+ }
+ },
+ {
+ "object": "file_object",
+ "attributes": {
+ "name": "version_history.json",
+ "mode": "-rw-r--r--",
+ "size": 46,
+ "is_file": true,
+ "is_symlink": false,
+ "is_editable": true,
+ "mimetype": "application/json",
+ "created_at": "2020-07-13T12:41:55+00:00",
+ "modified_at": "2019-12-25T05:21:08+00:00"
+ }
+ },
+ {
+ "object": "file_object",
+ "attributes": {
+ "name": "usercache.json",
+ "mode": "-rw-r--r--",
+ "size": 2,
+ "is_file": true,
+ "is_symlink": false,
+ "is_editable": true,
+ "mimetype": "application/json",
+ "created_at": "2020-07-13T12:42:03+00:00",
+ "modified_at": "2020-07-13T12:42:03+00:00"
+ }
+ },
+ {
+ "object": "file_object",
+ "attributes": {
+ "name": "spigot.yml",
+ "mode": "-rw-r--r--",
+ "size": 3567,
+ "is_file": true,
+ "is_symlink": false,
+ "is_editable": true,
+ "mimetype": "text/plain",
+ "created_at": "2020-07-13T12:41:55+00:00",
+ "modified_at": "2020-06-12T21:44:42+00:00"
+ }
+ },
+ {
+ "object": "file_object",
+ "attributes": {
+ "name": "server.properties",
+ "mode": "-rw-r--r--",
+ "size": 955,
+ "is_file": true,
+ "is_symlink": false,
+ "is_editable": true,
+ "mimetype": "text/plain",
+ "created_at": "2020-07-13T12:41:59+00:00",
+ "modified_at": "2020-07-13T12:41:59+00:00"
+ }
+ },
+ {
+ "object": "file_object",
+ "attributes": {
+ "name": "server.jar",
+ "mode": "-rw-r--r--",
+ "size": 36175593,
+ "is_file": true,
+ "is_symlink": false,
+ "is_editable": false,
+ "mimetype": "application/jar",
+ "created_at": "2020-07-13T12:41:55+00:00",
+ "modified_at": "2020-06-12T22:38:46+00:00"
+ }
+ },
+ {
+ "object": "file_object",
+ "attributes": {
+ "name": "permissions.yml",
+ "mode": "-rw-r--r--",
+ "size": 0,
+ "is_file": true,
+ "is_symlink": false,
+ "is_editable": true,
+ "mimetype": "inode/x-empty",
+ "created_at": "2020-07-13T12:41:55+00:00",
+ "modified_at": "2019-12-25T05:21:08+00:00"
+ }
+ },
+ {
+ "object": "file_object",
+ "attributes": {
+ "name": "paper.yml",
+ "mode": "-rw-r--r--",
+ "size": 5310,
+ "is_file": true,
+ "is_symlink": false,
+ "is_editable": true,
+ "mimetype": "text/plain",
+ "created_at": "2020-07-13T12:41:55+00:00",
+ "modified_at": "2020-06-12T21:44:42+00:00"
+ }
+ },
+ {
+ "object": "file_object",
+ "attributes": {
+ "name": "ops.json",
+ "mode": "-rw-r--r--",
+ "size": 2,
+ "is_file": true,
+ "is_symlink": false,
+ "is_editable": true,
+ "mimetype": "application/json",
+ "created_at": "2020-07-13T12:42:03+00:00",
+ "modified_at": "2020-07-13T12:42:03+00:00"
+ }
+ },
+ {
+ "object": "file_object",
+ "attributes": {
+ "name": "hs_err_pid25.log",
+ "mode": "-rw-r--r--",
+ "size": 57099,
+ "is_file": true,
+ "is_symlink": false,
+ "is_editable": true,
+ "mimetype": "text/plain",
+ "created_at": "2020-07-13T12:41:55+00:00",
+ "modified_at": "2020-06-12T20:36:55+00:00"
+ }
+ },
+ {
+ "object": "file_object",
+ "attributes": {
+ "name": "help.yml",
+ "mode": "-rw-r--r--",
+ "size": 2576,
+ "is_file": true,
+ "is_symlink": false,
+ "is_editable": true,
+ "mimetype": "text/plain",
+ "created_at": "2020-07-13T12:41:55+00:00",
+ "modified_at": "2019-12-25T05:21:07+00:00"
+ }
+ },
+ {
+ "object": "file_object",
+ "attributes": {
+ "name": "eula.txt",
+ "mode": "-rw-r--r--",
+ "size": 250,
+ "is_file": true,
+ "is_symlink": false,
+ "is_editable": true,
+ "mimetype": "text/plain",
+ "created_at": "2020-07-13T12:41:55+00:00",
+ "modified_at": "2019-12-25T05:20:57+00:00"
+ }
+ },
+ {
+ "object": "file_object",
+ "attributes": {
+ "name": "commands.yml",
+ "mode": "-rw-r--r--",
+ "size": 598,
+ "is_file": true,
+ "is_symlink": false,
+ "is_editable": true,
+ "mimetype": "text/plain",
+ "created_at": "2020-07-13T12:41:55+00:00",
+ "modified_at": "2020-06-12T21:44:36+00:00"
+ }
+ },
+ {
+ "object": "file_object",
+ "attributes": {
+ "name": "bukkit.yml",
+ "mode": "-rw-r--r--",
+ "size": 1053,
+ "is_file": true,
+ "is_symlink": false,
+ "is_editable": true,
+ "mimetype": "text/plain",
+ "created_at": "2020-07-13T12:41:55+00:00",
+ "modified_at": "2020-06-12T21:44:36+00:00"
+ }
+ },
+ {
+ "object": "file_object",
+ "attributes": {
+ "name": "banned-players.json",
+ "mode": "-rw-r--r--",
+ "size": 2,
+ "is_file": true,
+ "is_symlink": false,
+ "is_editable": true,
+ "mimetype": "application/json",
+ "created_at": "2020-07-13T12:42:03+00:00",
+ "modified_at": "2020-07-13T12:42:03+00:00"
+ }
+ },
+ {
+ "object": "file_object",
+ "attributes": {
+ "name": "banned-ips.json",
+ "mode": "-rw-r--r--",
+ "size": 2,
+ "is_file": true,
+ "is_symlink": false,
+ "is_editable": true,
+ "mimetype": "application/json",
+ "created_at": "2020-07-13T12:42:03+00:00",
+ "modified_at": "2020-07-13T12:42:03+00:00"
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/startup/variable": {
+ "put": {
+ "tags": [
+ "Client - Server - Startup"
+ ],
+ "summary": "Update Variable",
+ "operationId": "put-update-variable",
+ "description": "Updates the specified variable",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "key": {
+ "type": "string"
+ },
+ "value": {
+ "type": "string"
+ }
+ }
+ },
+ "example": {
+ "key": "SERVER_JARFILE",
+ "value": "server.jar"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "env_variable": {
+ "type": "string"
+ },
+ "default_value": {
+ "type": "string"
+ },
+ "server_value": {
+ "type": "string"
+ },
+ "is_editable": {
+ "type": "boolean"
+ },
+ "rules": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "egg_variable",
+ "attributes": {
+ "name": "Server Jar File",
+ "description": "The name of the server jarfile to run the server with.",
+ "env_variable": "SERVER_JARFILE",
+ "default_value": "server.jar",
+ "server_value": "server.jar",
+ "is_editable": true,
+ "rules": "required|regex:/^([\\w\\d._-]+)(\\.jar)$/"
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/schedules": {
+ "get": {
+ "tags": [
+ "Client - Server - Schedules"
+ ],
+ "summary": "List schedules",
+ "operationId": "get-list-schedules",
+ "description": "Lists all schedules added to the server",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "data": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "name": {
+ "type": "string"
+ },
+ "cron": {
+ "type": "object",
+ "properties": {
+ "day_of_week": {
+ "type": "string"
+ },
+ "day_of_month": {
+ "type": "string"
+ },
+ "hour": {
+ "type": "string"
+ },
+ "minute": {
+ "type": "string"
+ }
+ }
+ },
+ "is_active": {
+ "type": "boolean"
+ },
+ "is_processing": {
+ "type": "boolean"
+ },
+ "last_run_at": {
+ "type": "string",
+ "nullable": true
+ },
+ "next_run_at": {
+ "type": "string"
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "string"
+ },
+ "relationships": {
+ "type": "object",
+ "properties": {
+ "tasks": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "data": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "sequence_id": {
+ "type": "integer"
+ },
+ "action": {
+ "type": "string"
+ },
+ "payload": {
+ "type": "string"
+ },
+ "time_offset": {
+ "type": "integer"
+ },
+ "is_queued": {
+ "type": "boolean"
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "list",
+ "data": [
+ {
+ "object": "server_schedule",
+ "attributes": {
+ "id": 1,
+ "name": "Daily Reboot",
+ "cron": {
+ "day_of_week": "*",
+ "day_of_month": "*",
+ "hour": "0",
+ "minute": "0"
+ },
+ "is_active": true,
+ "is_processing": false,
+ "last_run_at": null,
+ "next_run_at": "2020-06-13T00:00:00+01:00",
+ "created_at": "2020-06-12T23:50:14+01:00",
+ "updated_at": "2020-06-12T23:53:07+01:00",
+ "relationships": {
+ "tasks": {
+ "object": "list",
+ "data": [
+ {
+ "object": "schedule_task",
+ "attributes": {
+ "id": 1,
+ "sequence_id": 1,
+ "action": "command",
+ "payload": "say Rebooting...",
+ "time_offset": 0,
+ "is_queued": false,
+ "created_at": "2020-06-12T23:50:46+01:00",
+ "updated_at": "2020-06-12T23:52:54+01:00"
+ }
+ },
+ {
+ "object": "schedule_task",
+ "attributes": {
+ "id": 2,
+ "sequence_id": 2,
+ "action": "power",
+ "payload": "restart",
+ "time_offset": 5,
+ "is_queued": false,
+ "created_at": "2020-06-12T23:53:07+01:00",
+ "updated_at": "2020-06-12T23:53:07+01:00"
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ },
+ "post": {
+ "tags": [
+ "Client - Server - Schedules"
+ ],
+ "summary": "Create schedule",
+ "operationId": "post-create-schedule",
+ "description": "Creates a new schedule",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "Friendly name for the schedule"
+ },
+ "is_active": {
+ "type": "boolean",
+ "description": "Specifies whether the schedule is active"
+ },
+ "minute": {
+ "type": "string",
+ "description": "Cron minute syntax"
+ },
+ "hour": {
+ "type": "string",
+ "description": "Cron hour syntax"
+ },
+ "day\\_of\\_week": {
+ "type": "string",
+ "description": "Cron day-of-month syntax"
+ },
+ "day\\_of\\_month": {
+ "type": "string",
+ "description": "Cron day-of-month syntax"
+ }
+ },
+ "required": [
+ "name",
+ "minute",
+ "hour",
+ "day\\_of\\_week",
+ "day\\_of\\_month"
+ ]
+ },
+ "example": {
+ "name": "Minute Hello",
+ "minute": "*",
+ "hour": "*",
+ "day_of_month": "*",
+ "day_of_week": "*",
+ "is_active": true
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "name": {
+ "type": "string"
+ },
+ "cron": {
+ "type": "object",
+ "properties": {
+ "day_of_week": {
+ "type": "string"
+ },
+ "day_of_month": {
+ "type": "string"
+ },
+ "hour": {
+ "type": "string"
+ },
+ "minute": {
+ "type": "string"
+ }
+ }
+ },
+ "is_active": {
+ "type": "boolean"
+ },
+ "is_processing": {
+ "type": "boolean"
+ },
+ "last_run_at": {
+ "type": "string",
+ "nullable": true
+ },
+ "next_run_at": {
+ "type": "string"
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "string"
+ },
+ "relationships": {
+ "type": "object",
+ "properties": {
+ "tasks": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "data": {
+ "type": "array",
+ "items": {}
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "server_schedule",
+ "attributes": {
+ "id": 4,
+ "name": "Minute Hello",
+ "cron": {
+ "day_of_week": "*",
+ "day_of_month": "*",
+ "hour": "*",
+ "minute": "*"
+ },
+ "is_active": true,
+ "is_processing": false,
+ "last_run_at": null,
+ "next_run_at": "2020-06-13T15:17:00+01:00",
+ "created_at": "2020-06-13T15:16:45+01:00",
+ "updated_at": "2020-06-13T15:16:45+01:00",
+ "relationships": {
+ "tasks": {
+ "object": "list",
+ "data": []
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/network/allocations": {
+ "get": {
+ "tags": [
+ "Client - Server - Network"
+ ],
+ "summary": "List allocations",
+ "operationId": "get-list-allocations",
+ "description": "Retrieves the network information for the specified server",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "data": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "ip": {
+ "type": "string"
+ },
+ "ip_alias": {
+ "type": "string",
+ "nullable": true
+ },
+ "port": {
+ "type": "integer"
+ },
+ "notes": {
+ "type": "string",
+ "nullable": true
+ },
+ "is_default": {
+ "type": "boolean"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "list",
+ "data": [
+ {
+ "object": "allocation",
+ "attributes": {
+ "id": 1,
+ "ip": "45.86.168.218",
+ "ip_alias": null,
+ "port": 25565,
+ "notes": null,
+ "is_default": true
+ }
+ },
+ {
+ "object": "allocation",
+ "attributes": {
+ "id": 2,
+ "ip": "45.86.168.218",
+ "ip_alias": null,
+ "port": 25566,
+ "notes": "Votifier",
+ "is_default": false
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ },
+ "post": {
+ "tags": [
+ "Client - Server - Network"
+ ],
+ "summary": "Assign allocation",
+ "operationId": "post-assign-allocation",
+ "description": "Automatically assigns a new allocation if auto-assign is enabled on the instance",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "ip": {
+ "type": "string"
+ },
+ "ip_alias": {
+ "type": "string",
+ "nullable": true
+ },
+ "port": {
+ "type": "integer"
+ },
+ "notes": {
+ "type": "string",
+ "nullable": true
+ },
+ "is_default": {
+ "type": "boolean"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "allocation",
+ "attributes": {
+ "id": 6,
+ "ip": "45.86.168.218",
+ "ip_alias": null,
+ "port": 25570,
+ "notes": null,
+ "is_default": false
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/network/allocations/{allocation}": {
+ "post": {
+ "tags": [
+ "Client - Server - Network"
+ ],
+ "summary": "Set allocation note",
+ "operationId": "post-set-allocation-note",
+ "description": "Sets a note for the allocation\n\n# Fields\n| Name | Required? | Type | Description | Rules |\n|-------|-----------|--------|---------------------|-------|\n| notes | required | string | Note for allocation | |",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ },
+ {
+ "name": "allocation",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Allocation ID",
+ "example": 1
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "notes": {
+ "type": "string"
+ }
+ }
+ },
+ "example": {
+ "notes": "Votifier"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "ip": {
+ "type": "string"
+ },
+ "ip_alias": {
+ "type": "string",
+ "nullable": true
+ },
+ "port": {
+ "type": "integer"
+ },
+ "notes": {
+ "type": "string"
+ },
+ "is_default": {
+ "type": "boolean"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "allocation",
+ "attributes": {
+ "id": 2,
+ "ip": "45.86.168.218",
+ "ip_alias": null,
+ "port": 25566,
+ "notes": "Votifier",
+ "is_default": false
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ },
+ "delete": {
+ "tags": [
+ "Client - Server - Network"
+ ],
+ "summary": "Unassign allocation",
+ "operationId": "delete-unassign-allocation",
+ "description": "Deletes the specified non-primary allocation",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ },
+ {
+ "name": "allocation",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Allocation ID",
+ "example": 1
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "No Content"
+ },
+ "400": {
+ "description": "Bad Request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "errors": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "status": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "errors": [
+ {
+ "code": "DisplayException",
+ "status": "400",
+ "detail": "Cannot delete the primary allocation for a server."
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/network/allocations/{allocation}/primary": {
+ "post": {
+ "tags": [
+ "Client - Server - Network"
+ ],
+ "summary": "Set primary allocation",
+ "operationId": "post-set-primary-allocation",
+ "description": "Sets the primary allocation",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ },
+ {
+ "name": "allocation",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Allocation ID",
+ "example": 1
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "ip": {
+ "type": "string"
+ },
+ "ip_alias": {
+ "type": "string",
+ "nullable": true
+ },
+ "port": {
+ "type": "integer"
+ },
+ "notes": {
+ "type": "string"
+ },
+ "is_default": {
+ "type": "boolean"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "allocation",
+ "attributes": {
+ "id": 2,
+ "ip": "45.86.168.218",
+ "ip_alias": null,
+ "port": 25566,
+ "notes": "Votifier",
+ "is_default": true
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/users": {
+ "get": {
+ "tags": [
+ "Client - Server - Users"
+ ],
+ "summary": "List Users",
+ "operationId": "get-list-users",
+ "description": "Lists all users added to the server, along with details about them and their permissions",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "data": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "uuid": {
+ "type": "string"
+ },
+ "username": {
+ "type": "string"
+ },
+ "email": {
+ "type": "string"
+ },
+ "image": {
+ "type": "string"
+ },
+ "2fa_enabled": {
+ "type": "boolean"
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "permissions": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "list",
+ "data": [
+ {
+ "object": "server_subuser",
+ "attributes": {
+ "uuid": "73f233ca-99e0-47a9-bd46-efd3296d7ad9",
+ "username": "subuser1uxk",
+ "email": "subuser1@example.com",
+ "image": "https://gravatar.com/avatar/c0da5391b64449c1ecbfd4349184377c",
+ "2fa_enabled": false,
+ "created_at": "2020-06-12T23:18:43+01:00",
+ "permissions": [
+ "control.console",
+ "control.start",
+ "control.stop",
+ "control.restart",
+ "user.create",
+ "user.update",
+ "user.delete",
+ "user.read",
+ "file.create",
+ "file.read",
+ "file.update",
+ "file.delete",
+ "file.archive",
+ "file.sftp",
+ "backup.create",
+ "backup.read",
+ "backup.delete",
+ "backup.update",
+ "backup.download",
+ "allocation.update",
+ "startup.update",
+ "startup.read",
+ "database.create",
+ "database.read",
+ "database.update",
+ "database.delete",
+ "database.view_password",
+ "schedule.create",
+ "schedule.read",
+ "schedule.update",
+ "settings.rename",
+ "schedule.delete",
+ "settings.reinstall",
+ "websocket.connect"
+ ]
+ }
+ },
+ {
+ "object": "server_subuser",
+ "attributes": {
+ "uuid": "60a7aec3-e17d-4aa9-abb3-56d944d204b4",
+ "username": "subuser2jvc",
+ "email": "subuser2@example.com",
+ "image": "https://gravatar.com/avatar/3bb1c751a8b3488f4a4c70eddfe898d8",
+ "2fa_enabled": false,
+ "created_at": "2020-06-12T23:31:41+01:00",
+ "permissions": [
+ "control.console",
+ "control.start",
+ "websocket.connect"
+ ]
+ }
+ },
+ {
+ "object": "server_subuser",
+ "attributes": {
+ "uuid": "1287632d-9224-40c0-906e-f543423400bc",
+ "username": "subuser3bvo",
+ "email": "subuser3@example.com",
+ "image": "https://gravatar.com/avatar/8b28d32aaa64a1564450d16f71a81f65",
+ "2fa_enabled": false,
+ "created_at": "2020-07-13T14:27:46+01:00",
+ "permissions": [
+ "control.console",
+ "control.start",
+ "websocket.connect"
+ ]
+ }
+ },
+ {
+ "object": "server_subuser",
+ "attributes": {
+ "uuid": "2fcb6f7e-342a-423a-93a4-6111a237c0c7",
+ "username": "geboc70057d6r",
+ "email": "geboc70057@djemail.net",
+ "image": "https://gravatar.com/avatar/354d25d88e2c73b9f8d8e9bb8f1bf15e",
+ "2fa_enabled": false,
+ "created_at": "2020-07-13T14:36:44+01:00",
+ "permissions": [
+ "control.console",
+ "control.start",
+ "websocket.connect"
+ ]
+ }
+ },
+ {
+ "object": "server_subuser",
+ "attributes": {
+ "uuid": "b20e4e11-550f-4c52-893d-94fc8bc46a06",
+ "username": "testidq",
+ "email": "test@example.com",
+ "image": "https://gravatar.com/avatar/55502f40dc8b7c769880b10874abc9d0",
+ "2fa_enabled": false,
+ "created_at": "2020-07-19T13:48:38+01:00",
+ "permissions": [
+ "control.*",
+ "websocket.connect"
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ },
+ "post": {
+ "tags": [
+ "Client - Server - Users"
+ ],
+ "summary": "Create User",
+ "operationId": "post-create-user",
+ "description": "Adds a user to the server\n\n# Fields\n| Name | Required? | Type | Description | Rules |\n|-------------|-----------|--------|------------------------------------|-------|\n| email | required | string | Email address of the user | |\n| permissions | required | object | Permissions that user is permitted | |",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "email": {
+ "type": "string"
+ },
+ "permissions": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "example": {
+ "email": "subuser2@example.com",
+ "permissions": [
+ "control.console",
+ "control.start"
+ ]
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "uuid": {
+ "type": "string"
+ },
+ "username": {
+ "type": "string"
+ },
+ "email": {
+ "type": "string"
+ },
+ "image": {
+ "type": "string"
+ },
+ "2fa_enabled": {
+ "type": "boolean"
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "permissions": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "server_subuser",
+ "attributes": {
+ "uuid": "60a7aec3-e17d-4aa9-abb3-56d944d204b4",
+ "username": "subuser2jvc",
+ "email": "subuser2@example.com",
+ "image": "https://gravatar.com/avatar/3bb1c751a8b3488f4a4c70eddfe898d8",
+ "2fa_enabled": false,
+ "created_at": "2020-06-12T23:31:41+01:00",
+ "permissions": [
+ "control.console",
+ "control.start",
+ "websocket.connect"
+ ]
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/backups": {
+ "get": {
+ "tags": [
+ "Client - Server - Backups"
+ ],
+ "summary": "List backups",
+ "operationId": "get-list-backups",
+ "description": "Retrieves a list of backups",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "data": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "uuid": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "ignored_files": {
+ "type": "array",
+ "items": {}
+ },
+ "sha256_hash": {
+ "type": "string"
+ },
+ "bytes": {
+ "type": "integer"
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "completed_at": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "meta": {
+ "type": "object",
+ "properties": {
+ "pagination": {
+ "type": "object",
+ "properties": {
+ "total": {
+ "type": "integer"
+ },
+ "count": {
+ "type": "integer"
+ },
+ "per_page": {
+ "type": "integer"
+ },
+ "current_page": {
+ "type": "integer"
+ },
+ "total_pages": {
+ "type": "integer"
+ },
+ "links": {
+ "type": "object",
+ "properties": {}
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "list",
+ "data": [
+ {
+ "object": "backup",
+ "attributes": {
+ "uuid": "904df120-a66f-4375-a4ae-40eedbeae630",
+ "name": "Quick Backup",
+ "ignored_files": [],
+ "sha256_hash": "7c20d6a269b441a9dfd044e3f8ad13d77c09c83af8832d29ad603084a9a63726",
+ "bytes": 114402862,
+ "created_at": "2020-06-13T05:21:01+01:00",
+ "completed_at": "2020-06-13T05:21:04+01:00"
+ }
+ },
+ {
+ "object": "backup",
+ "attributes": {
+ "uuid": "63087048-eada-419c-ad72-803c1c949cac",
+ "name": "Backup at 2020-07-19 16:21:34",
+ "ignored_files": [],
+ "sha256_hash": "39bf93b9d8aee45316fa7ec8bbed0530904558851fa8e712452845c969873b16",
+ "bytes": 114567250,
+ "created_at": "2020-07-19T16:21:34+01:00",
+ "completed_at": "2020-07-19T16:21:35+01:00"
+ }
+ }
+ ],
+ "meta": {
+ "pagination": {
+ "total": 2,
+ "count": 2,
+ "per_page": 20,
+ "current_page": 1,
+ "total_pages": 1,
+ "links": {}
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ },
+ "post": {
+ "tags": [
+ "Client - Server - Backups"
+ ],
+ "summary": "Create backup",
+ "operationId": "post-create-backup",
+ "description": "Creates a new backup",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "uuid": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "ignored_files": {
+ "type": "array",
+ "items": {}
+ },
+ "sha256_hash": {
+ "type": "string",
+ "nullable": true
+ },
+ "bytes": {
+ "type": "integer"
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "completed_at": {
+ "type": "string",
+ "nullable": true
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "backup",
+ "attributes": {
+ "uuid": "63087048-eada-419c-ad72-803c1c949cac",
+ "name": "Backup at 2020-07-19 16:21:34",
+ "ignored_files": [],
+ "sha256_hash": null,
+ "bytes": 0,
+ "created_at": "2020-07-19T16:21:34+01:00",
+ "completed_at": null
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/application/users": {
+ "get": {
+ "tags": [
+ "Application - Users"
+ ],
+ "summary": "List users",
+ "operationId": "get-list-users",
+ "description": "Retrieves all users\n\n## Available Include parameters\n| Parameter | Description |\n|-----------|----------------------------------------|\n| servers | List of servers the user has access to |\n\n## Filters\n| Parameter |\n|-------------|\n| email |\n| uuid |\n| username |\n| external_id |\n\n## Sort by\n| Parameter |\n|-------------|\n| id |\n| uuid |",
+ "responses": {
+ "200": {
+ "description": "// GET /api/application/users?filter%5Bemail%5D=dane%40daneeveritt.com\n{\n \"object\": \"list\",\n \"data\": [\n {\n \"object\": \"user\",\n \"attributes\": {\n \"id\": 27,\n \"external_id\": null,\n \"uuid\": \"18528bb9-8f60-45e2-adc6-f72611559fd7\",\n \"username\": \"hodor7wm\",\n \"email\": \"hodor@example.com\",\n \"first_name\": \"Server\",\n \"last_name\": \"Subuser\",\n \"language\": \"en\",\n \"root_admin\": false,\n \"2fa\": false,\n \"created_at\": \"2020-08-19T03:23:35+00:00\",\n \"updated_at\": \"2020-08-19T03:23:35+00:00\"\n }\n },\n {\n \"object\": \"user\",\n \"attributes\": {\n \"id\": 26,\n \"external_id\": null,\n \"uuid\": \"b83673f6-3387-4a37-97cd-dd3a4f508343\",\n \"username\": \"testfz0\",\n \"email\": \"test@example.com\",\n \"first_name\": \"Server\",\n \"last_name\": \"Subuser\",\n \"language\": \"en\",\n \"root_admin\": false,\n \"2fa\": false,\n \"created_at\": \"2020-08-19T03:15:51+00:00\",\n \"updated_at\": \"2020-08-19T03:15:51+00:00\"\n }\n }\n ],\n \"meta\": {\n \"pagination\": {\n \"total\": 2,\n \"count\": 2,\n \"per_page\": 100,\n \"current_page\": 1,\n \"total_pages\": 1,\n \"links\": {}\n }\n }\n}"
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ]
+ },
+ "post": {
+ "tags": [
+ "Application - Users"
+ ],
+ "summary": "Create user",
+ "operationId": "post-create-user",
+ "description": "Creates a new user",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "email": {
+ "type": "string"
+ },
+ "username": {
+ "type": "string"
+ },
+ "first_name": {
+ "type": "string"
+ },
+ "last_name": {
+ "type": "string"
+ }
+ }
+ },
+ "example": {
+ "email": "example10@example.com",
+ "username": "exampleuser",
+ "first_name": "Example",
+ "last_name": "User"
+ }
+ }
+ }
+ },
+ "responses": {
+ "201": {
+ "description": "Created",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "external_id": {
+ "type": "string",
+ "nullable": true
+ },
+ "uuid": {
+ "type": "string"
+ },
+ "username": {
+ "type": "string"
+ },
+ "email": {
+ "type": "string"
+ },
+ "first_name": {
+ "type": "string"
+ },
+ "last_name": {
+ "type": "string"
+ },
+ "language": {
+ "type": "string"
+ },
+ "root_admin": {
+ "type": "boolean"
+ },
+ "2fa": {
+ "type": "boolean"
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "string"
+ }
+ }
+ },
+ "meta": {
+ "type": "object",
+ "properties": {
+ "resource": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "user",
+ "attributes": {
+ "id": 9,
+ "external_id": null,
+ "uuid": "dac03ece-fd51-4e4b-bd4f-a79e3b2794f9",
+ "username": "exampleuser",
+ "email": "example10@example.com",
+ "first_name": "Example",
+ "last_name": "User",
+ "language": "en",
+ "root_admin": false,
+ "2fa": false,
+ "created_at": "2020-10-29T01:25:12+00:00",
+ "updated_at": "2020-10-29T01:25:12+00:00"
+ },
+ "meta": {
+ "resource": "https://pterodactyl.file.properties/api/application/users/9"
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ]
+ }
+ },
+ "/api/application/nodes": {
+ "get": {
+ "tags": [
+ "Application - Nodes"
+ ],
+ "summary": "List nodes",
+ "operationId": "get-list-nodes",
+ "description": "Retrieves a list of nodes\n\n## Available include parameters\n| Parameter | Description |\n|-------------|--------------------------------------------------------|\n| allocations | List of allocations added to the node |\n| location | Information about the location the node is assigned to |\n| servers | List of servers on the node |",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "data": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "uuid": {
+ "type": "string"
+ },
+ "public": {
+ "type": "boolean"
+ },
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "location_id": {
+ "type": "integer"
+ },
+ "fqdn": {
+ "type": "string"
+ },
+ "scheme": {
+ "type": "string"
+ },
+ "behind_proxy": {
+ "type": "boolean"
+ },
+ "maintenance_mode": {
+ "type": "boolean"
+ },
+ "memory": {
+ "type": "integer"
+ },
+ "memory_overallocate": {
+ "type": "integer"
+ },
+ "disk": {
+ "type": "integer"
+ },
+ "disk_overallocate": {
+ "type": "integer"
+ },
+ "upload_size": {
+ "type": "integer"
+ },
+ "daemon_listen": {
+ "type": "integer"
+ },
+ "daemon_sftp": {
+ "type": "integer"
+ },
+ "daemon_base": {
+ "type": "string"
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "meta": {
+ "type": "object",
+ "properties": {
+ "pagination": {
+ "type": "object",
+ "properties": {
+ "total": {
+ "type": "integer"
+ },
+ "count": {
+ "type": "integer"
+ },
+ "per_page": {
+ "type": "integer"
+ },
+ "current_page": {
+ "type": "integer"
+ },
+ "total_pages": {
+ "type": "integer"
+ },
+ "links": {
+ "type": "object",
+ "properties": {}
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "list",
+ "data": [
+ {
+ "object": "node",
+ "attributes": {
+ "id": 1,
+ "uuid": "1046d1d1-b8ef-4771-82b1-2b5946d33397",
+ "public": true,
+ "name": "Test",
+ "description": "Test",
+ "location_id": 1,
+ "fqdn": "pterodactyl.file.properties",
+ "scheme": "https",
+ "behind_proxy": false,
+ "maintenance_mode": false,
+ "memory": 2048,
+ "memory_overallocate": 0,
+ "disk": 5000,
+ "disk_overallocate": 0,
+ "upload_size": 100,
+ "daemon_listen": 8080,
+ "daemon_sftp": 2022,
+ "daemon_base": "/srv/daemon-data",
+ "created_at": "2019-12-22T04:44:51+00:00",
+ "updated_at": "2019-12-22T04:44:51+00:00"
+ }
+ },
+ {
+ "object": "node",
+ "attributes": {
+ "id": 3,
+ "uuid": "71b15cf6-909a-4b60-aa04-abb4c8f98f61",
+ "public": true,
+ "name": "2",
+ "description": "e",
+ "location_id": 1,
+ "fqdn": "pterodactyl.file.properties",
+ "scheme": "https",
+ "behind_proxy": false,
+ "maintenance_mode": false,
+ "memory": 100,
+ "memory_overallocate": 0,
+ "disk": 100,
+ "disk_overallocate": 0,
+ "upload_size": 100,
+ "daemon_listen": 8080,
+ "daemon_sftp": 2022,
+ "daemon_base": "/var/lib/pterodactyl/volumes",
+ "created_at": "2020-06-23T04:50:37+00:00",
+ "updated_at": "2020-06-23T04:50:37+00:00"
+ }
+ }
+ ],
+ "meta": {
+ "pagination": {
+ "total": 2,
+ "count": 2,
+ "per_page": 50,
+ "current_page": 1,
+ "total_pages": 1,
+ "links": {}
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ]
+ },
+ "post": {
+ "tags": [
+ "Application - Nodes"
+ ],
+ "summary": "Create node",
+ "operationId": "post-create-node",
+ "description": "Creates a new node",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "location_id": {
+ "type": "integer"
+ },
+ "fqdn": {
+ "type": "string"
+ },
+ "scheme": {
+ "type": "string"
+ },
+ "memory": {
+ "type": "integer"
+ },
+ "memory_overallocate": {
+ "type": "integer"
+ },
+ "disk": {
+ "type": "integer"
+ },
+ "disk_overallocate": {
+ "type": "integer"
+ },
+ "upload_size": {
+ "type": "integer"
+ },
+ "daemon_sftp": {
+ "type": "integer"
+ },
+ "daemon_listen": {
+ "type": "integer"
+ }
+ }
+ },
+ "example": {
+ "name": "New Node",
+ "location_id": 1,
+ "fqdn": "node2.example.com",
+ "scheme": "https",
+ "memory": 10240,
+ "memory_overallocate": 0,
+ "disk": 50000,
+ "disk_overallocate": 0,
+ "upload_size": 100,
+ "daemon_sftp": 2022,
+ "daemon_listen": 8080
+ }
+ }
+ }
+ },
+ "responses": {
+ "201": {
+ "description": "Created",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "uuid": {
+ "type": "string"
+ },
+ "public": {
+ "type": "boolean"
+ },
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string",
+ "nullable": true
+ },
+ "location_id": {
+ "type": "integer"
+ },
+ "fqdn": {
+ "type": "string"
+ },
+ "scheme": {
+ "type": "string"
+ },
+ "behind_proxy": {
+ "type": "boolean"
+ },
+ "maintenance_mode": {
+ "type": "boolean"
+ },
+ "memory": {
+ "type": "integer"
+ },
+ "memory_overallocate": {
+ "type": "integer"
+ },
+ "disk": {
+ "type": "integer"
+ },
+ "disk_overallocate": {
+ "type": "integer"
+ },
+ "upload_size": {
+ "type": "integer"
+ },
+ "daemon_listen": {
+ "type": "integer"
+ },
+ "daemon_sftp": {
+ "type": "integer"
+ },
+ "daemon_base": {
+ "type": "string"
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "string"
+ },
+ "allocated_resources": {
+ "type": "object",
+ "properties": {
+ "memory": {
+ "type": "integer"
+ },
+ "disk": {
+ "type": "integer"
+ }
+ }
+ }
+ }
+ },
+ "meta": {
+ "type": "object",
+ "properties": {
+ "resource": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "node",
+ "attributes": {
+ "id": 4,
+ "uuid": "4158cfe9-2aa8-4812-bf6e-d88beeb08e98",
+ "public": true,
+ "name": "New Node",
+ "description": null,
+ "location_id": 1,
+ "fqdn": "node2.example.com",
+ "scheme": "https",
+ "behind_proxy": false,
+ "maintenance_mode": false,
+ "memory": 10240,
+ "memory_overallocate": 0,
+ "disk": 50000,
+ "disk_overallocate": 0,
+ "upload_size": 100,
+ "daemon_listen": 8080,
+ "daemon_sftp": 2022,
+ "daemon_base": "/var/lib/pterodactyl/volumes",
+ "created_at": "2020-10-29T01:17:38+00:00",
+ "updated_at": "2020-10-29T01:17:38+00:00",
+ "allocated_resources": {
+ "memory": 0,
+ "disk": 0
+ }
+ },
+ "meta": {
+ "resource": "https://pterodactyl.file.properties/api/application/nodes/4"
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ]
+ }
+ },
+ "/api/application/locations": {
+ "get": {
+ "tags": [
+ "Application - Locations"
+ ],
+ "summary": "List locations",
+ "operationId": "get-list-locations",
+ "description": "Retrieves all locations\n\n# Available include parameters\n| Parameter | Description |\n|-----------|----------------------------------------|\n| nodes | List of nodes assigned to the location |\n| servers | List of servers in the location |",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "data": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "short": {
+ "type": "string"
+ },
+ "long": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "string"
+ },
+ "created_at": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "meta": {
+ "type": "object",
+ "properties": {
+ "pagination": {
+ "type": "object",
+ "properties": {
+ "total": {
+ "type": "integer"
+ },
+ "count": {
+ "type": "integer"
+ },
+ "per_page": {
+ "type": "integer"
+ },
+ "current_page": {
+ "type": "integer"
+ },
+ "total_pages": {
+ "type": "integer"
+ },
+ "links": {
+ "type": "object",
+ "properties": {}
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "list",
+ "data": [
+ {
+ "object": "location",
+ "attributes": {
+ "id": 1,
+ "short": "GB",
+ "long": "London Datacenter",
+ "updated_at": "2020-06-13T21:16:58+00:00",
+ "created_at": "2019-12-22T04:44:18+00:00"
+ }
+ }
+ ],
+ "meta": {
+ "pagination": {
+ "total": 1,
+ "count": 1,
+ "per_page": 50,
+ "current_page": 1,
+ "total_pages": 1,
+ "links": {}
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ]
+ },
+ "post": {
+ "tags": [
+ "Application - Locations"
+ ],
+ "summary": "Create location",
+ "operationId": "post-create-location",
+ "description": "Creates a new location",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "short": {
+ "type": "string",
+ "description": "Location identifier"
+ },
+ "long": {
+ "type": "string",
+ "description": "Location description"
+ }
+ },
+ "required": [
+ "short"
+ ]
+ },
+ "example": {
+ "short": "GB",
+ "long": "London Datacenter"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "short": {
+ "type": "string"
+ },
+ "long": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "string"
+ },
+ "created_at": {
+ "type": "string"
+ }
+ }
+ },
+ "meta": {
+ "type": "object",
+ "properties": {
+ "resource": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "location",
+ "attributes": {
+ "id": 3,
+ "short": "G",
+ "long": "London Datacenter",
+ "updated_at": "2020-06-13T20:44:48+00:00",
+ "created_at": "2020-06-13T20:44:48+00:00"
+ },
+ "meta": {
+ "resource": "https://pterodactyl.file.properties/api/application/locations/3"
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ]
+ }
+ },
+ "/api/application/locations/{location}": {
+ "get": {
+ "tags": [
+ "Application - Locations"
+ ],
+ "summary": "Location details",
+ "operationId": "get-location-details",
+ "description": "Retrieves the specified location\n\n# Available include parameters\n| Parameter | Description |\n|-----------|----------------------------------------|\n| nodes | List of nodes assigned to the location |\n| servers | List of servers in the location |",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "short": {
+ "type": "string"
+ },
+ "long": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "string"
+ },
+ "created_at": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "location",
+ "attributes": {
+ "id": 1,
+ "short": "Test",
+ "long": "Test",
+ "updated_at": "2019-12-22T04:44:18+00:00",
+ "created_at": "2019-12-22T04:44:18+00:00"
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "location",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Location ID",
+ "example": 1
+ }
+ ]
+ },
+ "patch": {
+ "tags": [
+ "Application - Locations"
+ ],
+ "summary": "Update location",
+ "operationId": "patch-update-location",
+ "description": "Updates the specified location",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "short": {
+ "type": "string"
+ },
+ "long": {
+ "type": "string"
+ }
+ }
+ },
+ "example": {
+ "short": "GB",
+ "long": "London Datacenter"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "short": {
+ "type": "string"
+ },
+ "long": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "string"
+ },
+ "created_at": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "location",
+ "attributes": {
+ "id": 1,
+ "short": "GB",
+ "long": "London Datacenter",
+ "updated_at": "2020-06-13T21:16:58+00:00",
+ "created_at": "2019-12-22T04:44:18+00:00"
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "location",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Location ID",
+ "example": 1
+ }
+ ]
+ },
+ "delete": {
+ "tags": [
+ "Application - Locations"
+ ],
+ "summary": "Delete location",
+ "operationId": "delete-delete-location",
+ "description": "Deletes the specified location",
+ "responses": {
+ "204": {
+ "description": "No Content"
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "location",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Location ID",
+ "example": 1
+ }
+ ]
+ }
+ },
+ "/api/application/nodes/{node}": {
+ "get": {
+ "tags": [
+ "Application - Nodes"
+ ],
+ "summary": "Node details",
+ "operationId": "get-node-details",
+ "description": "Retrieves the specified node\n\n## Available include parameters\n| Parameter | Description |\n|-------------|--------------------------------------------------------|\n| allocations | List of allocations added to the node |\n| location | Information about the location the node is assigned to |\n| servers | List of servers on the node |",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "uuid": {
+ "type": "string"
+ },
+ "public": {
+ "type": "boolean"
+ },
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "location_id": {
+ "type": "integer"
+ },
+ "fqdn": {
+ "type": "string"
+ },
+ "scheme": {
+ "type": "string"
+ },
+ "behind_proxy": {
+ "type": "boolean"
+ },
+ "maintenance_mode": {
+ "type": "boolean"
+ },
+ "memory": {
+ "type": "integer"
+ },
+ "memory_overallocate": {
+ "type": "integer"
+ },
+ "disk": {
+ "type": "integer"
+ },
+ "disk_overallocate": {
+ "type": "integer"
+ },
+ "upload_size": {
+ "type": "integer"
+ },
+ "daemon_listen": {
+ "type": "integer"
+ },
+ "daemon_sftp": {
+ "type": "integer"
+ },
+ "daemon_base": {
+ "type": "string"
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "node",
+ "attributes": {
+ "id": 1,
+ "uuid": "1046d1d1-b8ef-4771-82b1-2b5946d33397",
+ "public": true,
+ "name": "Test",
+ "description": "Test",
+ "location_id": 1,
+ "fqdn": "pterodactyl.file.properties",
+ "scheme": "https",
+ "behind_proxy": false,
+ "maintenance_mode": false,
+ "memory": 2048,
+ "memory_overallocate": 0,
+ "disk": 5000,
+ "disk_overallocate": 0,
+ "upload_size": 100,
+ "daemon_listen": 8080,
+ "daemon_sftp": 2022,
+ "daemon_base": "/srv/daemon-data",
+ "created_at": "2019-12-22T04:44:51+00:00",
+ "updated_at": "2019-12-22T04:44:51+00:00"
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "node",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Node ID",
+ "example": 1
+ }
+ ]
+ },
+ "patch": {
+ "tags": [
+ "Application - Nodes"
+ ],
+ "summary": "Update node",
+ "operationId": "patch-update-node",
+ "description": "Updates the node details",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "location_id": {
+ "type": "integer"
+ },
+ "fqdn": {
+ "type": "string"
+ },
+ "scheme": {
+ "type": "string"
+ },
+ "behind_proxy": {
+ "type": "boolean"
+ },
+ "maintenance_mode": {
+ "type": "boolean"
+ },
+ "memory": {
+ "type": "integer"
+ },
+ "memory_overallocate": {
+ "type": "integer"
+ },
+ "disk": {
+ "type": "integer"
+ },
+ "disk_overallocate": {
+ "type": "integer"
+ },
+ "upload_size": {
+ "type": "integer"
+ },
+ "daemon_sftp": {
+ "type": "integer"
+ },
+ "daemon_listen": {
+ "type": "integer"
+ }
+ }
+ },
+ "example": {
+ "name": "Test Renamed",
+ "description": "Test",
+ "location_id": 1,
+ "fqdn": "pterodactyl.file.properties",
+ "scheme": "https",
+ "behind_proxy": false,
+ "maintenance_mode": false,
+ "memory": 2048,
+ "memory_overallocate": 0,
+ "disk": 5000,
+ "disk_overallocate": 0,
+ "upload_size": 100,
+ "daemon_sftp": 2022,
+ "daemon_listen": 8080
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "uuid": {
+ "type": "string"
+ },
+ "public": {
+ "type": "boolean"
+ },
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "location_id": {
+ "type": "integer"
+ },
+ "fqdn": {
+ "type": "string"
+ },
+ "scheme": {
+ "type": "string"
+ },
+ "behind_proxy": {
+ "type": "boolean"
+ },
+ "maintenance_mode": {
+ "type": "boolean"
+ },
+ "memory": {
+ "type": "integer"
+ },
+ "memory_overallocate": {
+ "type": "integer"
+ },
+ "disk": {
+ "type": "integer"
+ },
+ "disk_overallocate": {
+ "type": "integer"
+ },
+ "upload_size": {
+ "type": "integer"
+ },
+ "daemon_listen": {
+ "type": "integer"
+ },
+ "daemon_sftp": {
+ "type": "integer"
+ },
+ "daemon_base": {
+ "type": "string"
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "string"
+ },
+ "mounts": {
+ "type": "array",
+ "items": {}
+ },
+ "allocated_resources": {
+ "type": "object",
+ "properties": {
+ "memory": {
+ "type": "integer"
+ },
+ "disk": {
+ "type": "integer"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "node",
+ "attributes": {
+ "id": 1,
+ "uuid": "1046d1d1-b8ef-4771-82b1-2b5946d33397",
+ "public": true,
+ "name": "Test Renamed",
+ "description": "Test",
+ "location_id": 1,
+ "fqdn": "pterodactyl.file.properties",
+ "scheme": "https",
+ "behind_proxy": false,
+ "maintenance_mode": false,
+ "memory": 2048,
+ "memory_overallocate": 0,
+ "disk": 5000,
+ "disk_overallocate": 0,
+ "upload_size": 100,
+ "daemon_listen": 8080,
+ "daemon_sftp": 2022,
+ "daemon_base": "/var/lib/pterodactyl/volumes",
+ "created_at": "2019-12-22T04:44:51+00:00",
+ "updated_at": "2020-10-29T01:20:23+00:00",
+ "mounts": [],
+ "allocated_resources": {
+ "memory": 640,
+ "disk": 700
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "node",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Node ID",
+ "example": 1
+ }
+ ]
+ },
+ "delete": {
+ "tags": [
+ "Application - Nodes"
+ ],
+ "summary": "Delete node",
+ "operationId": "delete-delete-node",
+ "description": "Deletes the specified node",
+ "responses": {
+ "204": {
+ "description": "No Content"
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "node",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Node ID",
+ "example": 1
+ }
+ ]
+ }
+ },
+ "/api/application/nodes/{node}/configuration": {
+ "get": {
+ "tags": [
+ "Application - Nodes"
+ ],
+ "summary": "Node configuration",
+ "operationId": "get-node-configuration",
+ "description": "Displays the Wings configuration",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "debug": {
+ "type": "boolean"
+ },
+ "uuid": {
+ "type": "string"
+ },
+ "token_id": {
+ "type": "string"
+ },
+ "token": {
+ "type": "string"
+ },
+ "api": {
+ "type": "object",
+ "properties": {
+ "host": {
+ "type": "string"
+ },
+ "port": {
+ "type": "integer"
+ },
+ "ssl": {
+ "type": "object",
+ "properties": {
+ "enabled": {
+ "type": "boolean"
+ },
+ "cert": {
+ "type": "string"
+ },
+ "key": {
+ "type": "string"
+ }
+ }
+ },
+ "upload_limit": {
+ "type": "integer"
+ }
+ }
+ },
+ "system": {
+ "type": "object",
+ "properties": {
+ "data": {
+ "type": "string"
+ },
+ "sftp": {
+ "type": "object",
+ "properties": {
+ "bind_port": {
+ "type": "integer"
+ }
+ }
+ }
+ }
+ },
+ "remote": {
+ "type": "string"
+ }
+ }
+ },
+ "example": {
+ "debug": false,
+ "uuid": "1046d1d1-b8ef-4771-82b1-2b5946d33397",
+ "token_id": "iAcosCn1KCAgVjVO",
+ "token": "FanPzLCptUxkGow3vi7Z",
+ "api": {
+ "host": "0.0.0.0",
+ "port": 8080,
+ "ssl": {
+ "enabled": true,
+ "cert": "/etc/letsencrypt/live/pterodactyl.file.properties/fullchain.pem",
+ "key": "/etc/letsencrypt/live/pterodactyl.file.properties/privkey.pem"
+ },
+ "upload_limit": 100
+ },
+ "system": {
+ "data": "/srv/daemon-data",
+ "sftp": {
+ "bind_port": 2022
+ }
+ },
+ "remote": "https://pterodactyl.file.properties"
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "node",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Node ID",
+ "example": 1
+ }
+ ]
+ }
+ },
+ "/api/application/users/{user}": {
+ "get": {
+ "tags": [
+ "Application - Users"
+ ],
+ "summary": "User details",
+ "operationId": "get-user-details",
+ "description": "Retrieves the specified user\n\n## Available include parameters\n| Parameter | Description |\n|-----------|----------------------------------------|\n| servers | List of servers the user has access to |",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "external_id": {
+ "type": "string"
+ },
+ "uuid": {
+ "type": "string"
+ },
+ "username": {
+ "type": "string"
+ },
+ "email": {
+ "type": "string"
+ },
+ "first_name": {
+ "type": "string"
+ },
+ "last_name": {
+ "type": "string"
+ },
+ "language": {
+ "type": "string"
+ },
+ "root_admin": {
+ "type": "boolean"
+ },
+ "2fa": {
+ "type": "boolean"
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "user",
+ "attributes": {
+ "id": 1,
+ "external_id": "RemoteId1",
+ "uuid": "4de5a357-ed95-426b-aec1-8c328cfe9751",
+ "username": "admin",
+ "email": "example@example.com",
+ "first_name": "Admin",
+ "last_name": "User",
+ "language": "en",
+ "root_admin": true,
+ "2fa": false,
+ "created_at": "2019-12-22T04:43:29+00:00",
+ "updated_at": "2020-07-13T13:10:23+00:00"
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "user",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "User ID",
+ "example": 1
+ }
+ ]
+ },
+ "patch": {
+ "tags": [
+ "Application - Users"
+ ],
+ "summary": "Update user",
+ "operationId": "patch-update-user",
+ "description": "Updates the user information",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "email": {
+ "type": "string"
+ },
+ "username": {
+ "type": "string"
+ },
+ "first_name": {
+ "type": "string"
+ },
+ "last_name": {
+ "type": "string"
+ },
+ "language": {
+ "type": "string"
+ },
+ "password": {
+ "type": "string"
+ }
+ }
+ },
+ "example": {
+ "email": "example10@example.com",
+ "username": "exampleuser",
+ "first_name": "Example",
+ "last_name": "User",
+ "language": "en",
+ "password": "New Password"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "external_id": {
+ "type": "string",
+ "nullable": true
+ },
+ "uuid": {
+ "type": "string"
+ },
+ "username": {
+ "type": "string"
+ },
+ "email": {
+ "type": "string"
+ },
+ "first_name": {
+ "type": "string"
+ },
+ "last_name": {
+ "type": "string"
+ },
+ "language": {
+ "type": "string"
+ },
+ "root_admin": {
+ "type": "boolean"
+ },
+ "2fa": {
+ "type": "boolean"
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "user",
+ "attributes": {
+ "id": 9,
+ "external_id": null,
+ "uuid": "dac03ece-fd51-4e4b-bd4f-a79e3b2794f9",
+ "username": "exampleuser",
+ "email": "example10@example.com",
+ "first_name": "Example",
+ "last_name": "User",
+ "language": "en",
+ "root_admin": false,
+ "2fa": false,
+ "created_at": "2020-10-29T01:25:12+00:00",
+ "updated_at": "2020-10-29T01:28:29+00:00"
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "user",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "User ID",
+ "example": 1
+ }
+ ]
+ },
+ "delete": {
+ "tags": [
+ "Application - Users"
+ ],
+ "summary": "Delete user",
+ "operationId": "delete-delete-user",
+ "description": "Deletes the specified user",
+ "responses": {
+ "204": {
+ "description": "No Content"
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "user",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "User ID",
+ "example": 1
+ }
+ ]
+ }
+ },
+ "/api/application/users/external/{external_id}": {
+ "get": {
+ "tags": [
+ "Application - Users"
+ ],
+ "summary": "User details",
+ "operationId": "get-user-details",
+ "description": "Retrieves the specified user by its external ID\n\n## Available include parameters\n| Parameter | Description |\n|-----------|----------------------------------------|\n| servers | List of servers the user has access to |",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "external_id": {
+ "type": "string"
+ },
+ "uuid": {
+ "type": "string"
+ },
+ "username": {
+ "type": "string"
+ },
+ "email": {
+ "type": "string"
+ },
+ "first_name": {
+ "type": "string"
+ },
+ "last_name": {
+ "type": "string"
+ },
+ "language": {
+ "type": "string"
+ },
+ "root_admin": {
+ "type": "boolean"
+ },
+ "2fa": {
+ "type": "boolean"
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "user",
+ "attributes": {
+ "id": 1,
+ "external_id": "RemoteId1",
+ "uuid": "4de5a357-ed95-426b-aec1-8c328cfe9751",
+ "username": "admin",
+ "email": "example@example.com",
+ "first_name": "Admin",
+ "last_name": "User",
+ "language": "en",
+ "root_admin": true,
+ "2fa": false,
+ "created_at": "2019-12-22T04:43:29+00:00",
+ "updated_at": "2020-07-13T13:10:23+00:00"
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "external_id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "External identifier",
+ "example": "RemoteId1"
+ }
+ ]
+ }
+ },
+ "/api/application/nodes/{node}/allocations": {
+ "get": {
+ "tags": [
+ "Application - Nodes - Allocations"
+ ],
+ "summary": "List allocations",
+ "operationId": "get-list-allocations",
+ "description": "Lists allocations added to the node\n\n## Available include parameters\n| Parameter | Description |\n|-----------|--------------------------------------------------------|\n| node | Information about the node the allocation belongs to |\n| server | Information about the server the allocation belongs to |",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "data": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "ip": {
+ "type": "string"
+ },
+ "alias": {
+ "type": "string",
+ "nullable": true
+ },
+ "port": {
+ "type": "integer"
+ },
+ "notes": {
+ "type": "string",
+ "nullable": true
+ },
+ "assigned": {
+ "type": "boolean"
+ }
+ }
+ }
+ }
+ }
+ },
+ "meta": {
+ "type": "object",
+ "properties": {
+ "pagination": {
+ "type": "object",
+ "properties": {
+ "total": {
+ "type": "integer"
+ },
+ "count": {
+ "type": "integer"
+ },
+ "per_page": {
+ "type": "integer"
+ },
+ "current_page": {
+ "type": "integer"
+ },
+ "total_pages": {
+ "type": "integer"
+ },
+ "links": {
+ "type": "object",
+ "properties": {}
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "list",
+ "data": [
+ {
+ "object": "allocation",
+ "attributes": {
+ "id": 1,
+ "ip": "45.86.168.218",
+ "alias": null,
+ "port": 25565,
+ "notes": null,
+ "assigned": true
+ }
+ },
+ {
+ "object": "allocation",
+ "attributes": {
+ "id": 2,
+ "ip": "45.86.168.218",
+ "alias": null,
+ "port": 25566,
+ "notes": "Votifier",
+ "assigned": true
+ }
+ },
+ {
+ "object": "allocation",
+ "attributes": {
+ "id": 3,
+ "ip": "45.86.168.218",
+ "alias": null,
+ "port": 25567,
+ "notes": null,
+ "assigned": false
+ }
+ },
+ {
+ "object": "allocation",
+ "attributes": {
+ "id": 4,
+ "ip": "45.86.168.218",
+ "alias": null,
+ "port": 25568,
+ "notes": null,
+ "assigned": false
+ }
+ },
+ {
+ "object": "allocation",
+ "attributes": {
+ "id": 5,
+ "ip": "45.86.168.218",
+ "alias": null,
+ "port": 25569,
+ "notes": null,
+ "assigned": false
+ }
+ },
+ {
+ "object": "allocation",
+ "attributes": {
+ "id": 6,
+ "ip": "45.86.168.218",
+ "alias": null,
+ "port": 25570,
+ "notes": null,
+ "assigned": false
+ }
+ },
+ {
+ "object": "allocation",
+ "attributes": {
+ "id": 8,
+ "ip": "10.0.0.1",
+ "alias": null,
+ "port": 25565,
+ "notes": null,
+ "assigned": false
+ }
+ },
+ {
+ "object": "allocation",
+ "attributes": {
+ "id": 9,
+ "ip": "45.86.168.218",
+ "alias": null,
+ "port": 25571,
+ "notes": null,
+ "assigned": false
+ }
+ },
+ {
+ "object": "allocation",
+ "attributes": {
+ "id": 10,
+ "ip": "45.86.168.218",
+ "alias": null,
+ "port": 25572,
+ "notes": null,
+ "assigned": false
+ }
+ },
+ {
+ "object": "allocation",
+ "attributes": {
+ "id": 11,
+ "ip": "45.86.168.218",
+ "alias": null,
+ "port": 25573,
+ "notes": null,
+ "assigned": false
+ }
+ },
+ {
+ "object": "allocation",
+ "attributes": {
+ "id": 12,
+ "ip": "45.86.168.218",
+ "alias": null,
+ "port": 25574,
+ "notes": null,
+ "assigned": false
+ }
+ },
+ {
+ "object": "allocation",
+ "attributes": {
+ "id": 13,
+ "ip": "45.86.168.218",
+ "alias": null,
+ "port": 25575,
+ "notes": null,
+ "assigned": false
+ }
+ },
+ {
+ "object": "allocation",
+ "attributes": {
+ "id": 14,
+ "ip": "45.86.168.218",
+ "alias": null,
+ "port": 25576,
+ "notes": null,
+ "assigned": false
+ }
+ },
+ {
+ "object": "allocation",
+ "attributes": {
+ "id": 15,
+ "ip": "45.86.168.218",
+ "alias": null,
+ "port": 25577,
+ "notes": null,
+ "assigned": false
+ }
+ },
+ {
+ "object": "allocation",
+ "attributes": {
+ "id": 16,
+ "ip": "45.86.168.218",
+ "alias": null,
+ "port": 25578,
+ "notes": null,
+ "assigned": false
+ }
+ },
+ {
+ "object": "allocation",
+ "attributes": {
+ "id": 17,
+ "ip": "45.86.168.218",
+ "alias": null,
+ "port": 25579,
+ "notes": null,
+ "assigned": false
+ }
+ },
+ {
+ "object": "allocation",
+ "attributes": {
+ "id": 18,
+ "ip": "45.86.168.218",
+ "alias": null,
+ "port": 25580,
+ "notes": null,
+ "assigned": false
+ }
+ }
+ ],
+ "meta": {
+ "pagination": {
+ "total": 17,
+ "count": 17,
+ "per_page": 50,
+ "current_page": 1,
+ "total_pages": 1,
+ "links": {}
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "node",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Node ID",
+ "example": 1
+ }
+ ]
+ },
+ "post": {
+ "tags": [
+ "Application - Nodes - Allocations"
+ ],
+ "summary": "Create allocations",
+ "operationId": "post-create-allocations",
+ "description": "Adds an allocation to the node",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "ip": {
+ "type": "string",
+ "description": "IP address for the allocations"
+ },
+ "ports": {
+ "type": "object",
+ "description": "Object containing the ports to add"
+ }
+ },
+ "required": [
+ "ip",
+ "ports"
+ ]
+ },
+ "example": {
+ "ip": "10.0.0.1",
+ "ports": [
+ "25565"
+ ]
+ }
+ }
+ }
+ },
+ "responses": {
+ "204": {
+ "description": "No Content"
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "node",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Node ID",
+ "example": 1
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/settings/rename": {
+ "post": {
+ "tags": [
+ "Client - Server - Settings"
+ ],
+ "summary": "Rename server",
+ "operationId": "post-rename-server",
+ "description": "Renames the server\n\n# Fields\n| Name | Required? | Type | Description | Rules |\n|------|-----------|--------|-------------------------|-------|\n| name | required | string | New name for the server | |",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ }
+ }
+ },
+ "example": {
+ "name": "Gaming"
+ }
+ }
+ }
+ },
+ "responses": {
+ "204": {
+ "description": "No Content"
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/settings/reinstall": {
+ "post": {
+ "tags": [
+ "Client - Server - Settings"
+ ],
+ "summary": "Reinstall server",
+ "operationId": "post-reinstall-server",
+ "description": "Renames the server",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "No Content"
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/application/nodes/{node}/allocations/{allocation}": {
+ "delete": {
+ "tags": [
+ "Application - Nodes - Allocations"
+ ],
+ "summary": "Delete allocation",
+ "operationId": "delete-delete-allocation",
+ "description": "Deletes the specified allocation",
+ "responses": {
+ "204": {
+ "description": "No Content"
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "node",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Node ID",
+ "example": 1
+ },
+ {
+ "name": "allocation",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Allocation ID",
+ "example": 1
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/backups/{backup}": {
+ "get": {
+ "tags": [
+ "Client - Server - Backups"
+ ],
+ "summary": "Backup details",
+ "operationId": "get-backup-details",
+ "description": "Retrieves information about the specified backup",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ },
+ {
+ "name": "backup",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Backup UUID",
+ "example": "904df120-a66f-4375-a4ae-40eedbeae630"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "uuid": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "ignored_files": {
+ "type": "array",
+ "items": {}
+ },
+ "sha256_hash": {
+ "type": "string"
+ },
+ "bytes": {
+ "type": "integer"
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "completed_at": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "backup",
+ "attributes": {
+ "uuid": "904df120-a66f-4375-a4ae-40eedbeae630",
+ "name": "Quick Backup",
+ "ignored_files": [],
+ "sha256_hash": "7c20d6a269b441a9dfd044e3f8ad13d77c09c83af8832d29ad603084a9a63726",
+ "bytes": 114402862,
+ "created_at": "2020-06-13T05:21:01+01:00",
+ "completed_at": "2020-06-13T05:21:04+01:00"
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ },
+ "delete": {
+ "tags": [
+ "Client - Server - Backups"
+ ],
+ "summary": "Delete backup",
+ "operationId": "delete-delete-backup",
+ "description": "Deletes the specified backup",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ },
+ {
+ "name": "backup",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Backup UUID",
+ "example": "904df120-a66f-4375-a4ae-40eedbeae630"
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "No Content"
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/backups/{backup}/download": {
+ "get": {
+ "tags": [
+ "Client - Server - Backups"
+ ],
+ "summary": "Download backup",
+ "operationId": "get-download-backup",
+ "description": "Generates a download link for a backup",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ },
+ {
+ "name": "backup",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Backup UUID",
+ "example": "904df120-a66f-4375-a4ae-40eedbeae630"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "url": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "signed_url",
+ "attributes": {
+ "url": "https://pterodactyl.file.properties:8080/download/backup?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImp0aSI6IjdkYzAxNzVjODU4MTE5MDRlMjJjNTcxNjBhMjkwMjgwZGFjMDMzM2I2ZmJhMTE3YTI4YjdhMDM5Y2U1OTg0YzcifQ.eyJpc3MiOiJodHRwczpcL1wvcHRlcm9kYWN0eWwuZmlsZS5wcm9wZXJ0aWVzIiwiYXVkIjoiaHR0cHM6XC9cL3B0ZXJvZGFjdHlsLmZpbGUucHJvcGVydGllczo4MDgwIiwianRpIjoiN2RjMDE3NWM4NTgxMTkwNGUyMmM1NzE2MGEyOTAyODBkYWMwMzMzYjZmYmExMTdhMjhiN2EwMzljZTU5ODRjNyIsImlhdCI6MTU5NTE3MjEyNSwibmJmIjoxNTk1MTcxODI1LCJleHAiOjE1OTUxNzMwMjUsImJhY2t1cF91dWlkIjoiOTA0ZGYxMjAtYTY2Zi00Mzc1LWE0YWUtNDBlZWRiZWFlNjMwIiwic2VydmVyX3V1aWQiOiIxYTdjZTk5Ny0yNTliLTQ1MmUtOGI0ZS1jZWNjNDY0MTQyY2EiLCJ1bmlxdWVfaWQiOiJKN1lIQUFUZzVoYVg4M1VOIn0.0zSozCFyjsYjGjUiPS76wM1WXX09FecNxdSZnj6rNt4"
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/users/{subuser}": {
+ "get": {
+ "tags": [
+ "Client - Server - Users"
+ ],
+ "summary": "User details",
+ "operationId": "get-user-details",
+ "description": "Retrieves information about a specific user",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ },
+ {
+ "name": "subuser",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Subuser UUID",
+ "example": "60a7aec3-e17d-4aa9-abb3-56d944d204b4"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "uuid": {
+ "type": "string"
+ },
+ "username": {
+ "type": "string"
+ },
+ "email": {
+ "type": "string"
+ },
+ "image": {
+ "type": "string"
+ },
+ "2fa_enabled": {
+ "type": "boolean"
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "permissions": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "server_subuser",
+ "attributes": {
+ "uuid": "60a7aec3-e17d-4aa9-abb3-56d944d204b4",
+ "username": "subuser2jvc",
+ "email": "subuser2@example.com",
+ "image": "https://gravatar.com/avatar/3bb1c751a8b3488f4a4c70eddfe898d8",
+ "2fa_enabled": false,
+ "created_at": "2020-06-12T23:31:41+01:00",
+ "permissions": [
+ "control.console",
+ "control.start",
+ "websocket.connect"
+ ]
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ },
+ "post": {
+ "tags": [
+ "Client - Server - Users"
+ ],
+ "summary": "Update user",
+ "operationId": "post-update-user",
+ "description": "Updates the specified user\n\n# Fields\n| Name | Required? | Type | Description | Rules |\n|-------------|-----------|--------|------------------------------------|-------|\n| permissions | required | object | Permissions that user is permitted | |",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ },
+ {
+ "name": "subuser",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Subuser UUID",
+ "example": "60a7aec3-e17d-4aa9-abb3-56d944d204b4"
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "permissions": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "example": {
+ "permissions": [
+ "control.console",
+ "control.start"
+ ]
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "uuid": {
+ "type": "string"
+ },
+ "username": {
+ "type": "string"
+ },
+ "email": {
+ "type": "string"
+ },
+ "image": {
+ "type": "string"
+ },
+ "2fa_enabled": {
+ "type": "boolean"
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "permissions": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "server_subuser",
+ "attributes": {
+ "uuid": "60a7aec3-e17d-4aa9-abb3-56d944d204b4",
+ "username": "subuser2jvc",
+ "email": "subuser2@example.com",
+ "image": "https://gravatar.com/avatar/3bb1c751a8b3488f4a4c70eddfe898d8",
+ "2fa_enabled": false,
+ "created_at": "2020-06-12T23:31:41+01:00",
+ "permissions": [
+ "control.console",
+ "control.start",
+ "websocket.connect"
+ ]
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ },
+ "delete": {
+ "tags": [
+ "Client - Server - Users"
+ ],
+ "summary": "Delete user",
+ "operationId": "delete-delete-user",
+ "description": "Removes the specified user from the server",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ },
+ {
+ "name": "subuser",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Subuser UUID",
+ "example": "60a7aec3-e17d-4aa9-abb3-56d944d204b4"
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "No Content"
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/schedules/{schedule}": {
+ "get": {
+ "tags": [
+ "Client - Server - Schedules"
+ ],
+ "summary": "Schedule details",
+ "operationId": "get-schedule-details",
+ "description": "Retrieves specific schedule",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ },
+ {
+ "name": "schedule",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Schedule ID",
+ "example": 1
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "name": {
+ "type": "string"
+ },
+ "cron": {
+ "type": "object",
+ "properties": {
+ "day_of_week": {
+ "type": "string"
+ },
+ "day_of_month": {
+ "type": "string"
+ },
+ "hour": {
+ "type": "string"
+ },
+ "minute": {
+ "type": "string"
+ }
+ }
+ },
+ "is_active": {
+ "type": "boolean"
+ },
+ "is_processing": {
+ "type": "boolean"
+ },
+ "last_run_at": {
+ "type": "string",
+ "nullable": true
+ },
+ "next_run_at": {
+ "type": "string"
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "string"
+ },
+ "relationships": {
+ "type": "object",
+ "properties": {
+ "tasks": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "data": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "sequence_id": {
+ "type": "integer"
+ },
+ "action": {
+ "type": "string"
+ },
+ "payload": {
+ "type": "string"
+ },
+ "time_offset": {
+ "type": "integer"
+ },
+ "is_queued": {
+ "type": "boolean"
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "server_schedule",
+ "attributes": {
+ "id": 1,
+ "name": "Daily Reboot",
+ "cron": {
+ "day_of_week": "*",
+ "day_of_month": "*",
+ "hour": "0",
+ "minute": "0"
+ },
+ "is_active": true,
+ "is_processing": false,
+ "last_run_at": null,
+ "next_run_at": "2020-06-13T00:00:00+01:00",
+ "created_at": "2020-06-12T23:50:14+01:00",
+ "updated_at": "2020-06-12T23:53:07+01:00",
+ "relationships": {
+ "tasks": {
+ "object": "list",
+ "data": [
+ {
+ "object": "schedule_task",
+ "attributes": {
+ "id": 1,
+ "sequence_id": 1,
+ "action": "command",
+ "payload": "say Rebooting...",
+ "time_offset": 0,
+ "is_queued": false,
+ "created_at": "2020-06-12T23:50:46+01:00",
+ "updated_at": "2020-06-12T23:52:54+01:00"
+ }
+ },
+ {
+ "object": "schedule_task",
+ "attributes": {
+ "id": 2,
+ "sequence_id": 2,
+ "action": "power",
+ "payload": "restart",
+ "time_offset": 5,
+ "is_queued": false,
+ "created_at": "2020-06-12T23:53:07+01:00",
+ "updated_at": "2020-06-12T23:53:07+01:00"
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ },
+ "post": {
+ "tags": [
+ "Client - Server - Schedules"
+ ],
+ "summary": "Update schedule",
+ "operationId": "post-update-schedule",
+ "description": "Updates the specified schedule",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ },
+ {
+ "name": "schedule",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Schedule ID",
+ "example": 1
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "Friendly name for the schedule"
+ },
+ "is_active": {
+ "type": "boolean",
+ "description": "Specifies whether the schedule is active"
+ },
+ "minute": {
+ "type": "string",
+ "description": "Cron minute syntax"
+ },
+ "hour": {
+ "type": "string",
+ "description": "Cron hour syntax"
+ },
+ "day_of_week": {
+ "type": "string",
+ "description": "Cron day-of-month syntax"
+ },
+ "day_of_month": {
+ "type": "string",
+ "description": "Cron day-of-month syntax"
+ }
+ },
+ "required": [
+ "name",
+ "minute",
+ "hour",
+ "day_of_week",
+ "day_of_month"
+ ]
+ },
+ "example": {
+ "name": "Hourly Hello",
+ "minute": "0",
+ "hour": "*",
+ "day_of_month": "*",
+ "day_of_week": "*"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "name": {
+ "type": "string"
+ },
+ "cron": {
+ "type": "object",
+ "properties": {
+ "day_of_week": {
+ "type": "string"
+ },
+ "day_of_month": {
+ "type": "string"
+ },
+ "hour": {
+ "type": "string"
+ },
+ "minute": {
+ "type": "string"
+ }
+ }
+ },
+ "is_active": {
+ "type": "boolean"
+ },
+ "is_processing": {
+ "type": "boolean"
+ },
+ "last_run_at": {
+ "type": "string",
+ "nullable": true
+ },
+ "next_run_at": {
+ "type": "string"
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "string"
+ },
+ "relationships": {
+ "type": "object",
+ "properties": {
+ "tasks": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "data": {
+ "type": "array",
+ "items": {}
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "server_schedule",
+ "attributes": {
+ "id": 2,
+ "name": "Hourly Hello",
+ "cron": {
+ "day_of_week": "*",
+ "day_of_month": "*",
+ "hour": "*",
+ "minute": "0"
+ },
+ "is_active": false,
+ "is_processing": false,
+ "last_run_at": null,
+ "next_run_at": "2020-06-13T16:00:00+01:00",
+ "created_at": "2020-06-13T15:05:25+01:00",
+ "updated_at": "2020-06-13T15:14:07+01:00",
+ "relationships": {
+ "tasks": {
+ "object": "list",
+ "data": []
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ },
+ "delete": {
+ "tags": [
+ "Client - Server - Schedules"
+ ],
+ "summary": "Delete schedule",
+ "operationId": "delete-delete-schedule",
+ "description": "Deletes the specified schedule",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ },
+ {
+ "name": "schedule",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Schedule ID",
+ "example": 1
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "No Content"
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/schedules/{schedule}/tasks": {
+ "post": {
+ "tags": [
+ "Client - Server - Schedules"
+ ],
+ "summary": "Create task",
+ "operationId": "post-create-task",
+ "description": "Creates a new task on the specified schedule",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ },
+ {
+ "name": "schedule",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Schedule ID",
+ "example": 1
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "action": {
+ "type": "string",
+ "description": "Type of action to use"
+ },
+ "payload": {
+ "type": "string",
+ "description": "Payload to send"
+ },
+ "time_offset": {
+ "type": "string",
+ "description": "Offset in seconds"
+ }
+ },
+ "required": [
+ "action",
+ "payload",
+ "time_offset"
+ ]
+ },
+ "example": {
+ "action": "command",
+ "payload": "say Hello World",
+ "time_offset": "0"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "sequence_id": {
+ "type": "integer"
+ },
+ "action": {
+ "type": "string"
+ },
+ "payload": {
+ "type": "string"
+ },
+ "time_offset": {
+ "type": "integer"
+ },
+ "is_queued": {
+ "type": "boolean"
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "schedule_task",
+ "attributes": {
+ "id": 6,
+ "sequence_id": 1,
+ "action": "command",
+ "payload": "say Hello World",
+ "time_offset": 0,
+ "is_queued": false,
+ "created_at": "2020-10-29T01:09:03+00:00",
+ "updated_at": "2020-10-29T01:09:03+00:00"
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/schedules/{schedule}/tasks/{task}": {
+ "post": {
+ "tags": [
+ "Client - Server - Schedules"
+ ],
+ "summary": "Update task",
+ "operationId": "post-update-task",
+ "description": "Updates the specified task",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ },
+ {
+ "name": "schedule",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Schedule ID",
+ "example": 1
+ },
+ {
+ "name": "task",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Task ID",
+ "example": 1
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "action": {
+ "type": "string",
+ "description": "Type of action to use"
+ },
+ "payload": {
+ "type": "string",
+ "description": "Payload to send"
+ },
+ "time_offset": {
+ "type": "string",
+ "description": "Offset in seconds"
+ }
+ },
+ "required": [
+ "action",
+ "payload",
+ "time_offset"
+ ]
+ },
+ "example": {
+ "action": "command",
+ "payload": "say Updated Statement!?",
+ "time_offset": "0"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "sequence_id": {
+ "type": "integer"
+ },
+ "action": {
+ "type": "string"
+ },
+ "payload": {
+ "type": "string"
+ },
+ "time_offset": {
+ "type": "integer"
+ },
+ "is_queued": {
+ "type": "boolean"
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "schedule_task",
+ "attributes": {
+ "id": 6,
+ "sequence_id": 1,
+ "action": "command",
+ "payload": "say Updated Statement!?",
+ "time_offset": 0,
+ "is_queued": false,
+ "created_at": "2020-10-29T01:09:03+00:00",
+ "updated_at": "2020-10-29T01:10:30+00:00"
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ },
+ "delete": {
+ "tags": [
+ "Client - Server - Schedules"
+ ],
+ "summary": "Delete task",
+ "operationId": "delete-delete-task",
+ "description": "Deletes the specified task",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ },
+ {
+ "name": "schedule",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Schedule ID",
+ "example": 1
+ },
+ {
+ "name": "task",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Task ID",
+ "example": 1
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "No Content"
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/files/contents": {
+ "get": {
+ "tags": [
+ "Client - Server - File Manager"
+ ],
+ "summary": "Get file contents",
+ "operationId": "get-get-file-contents",
+ "description": "Displays the contents of the specified file\n\n## Available parameters\n| Parameter | Description |\n|-----------|--------------------------------------|\n| file | URL encoded path to the desired file |",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ },
+ {
+ "name": "file",
+ "in": "query",
+ "schema": {
+ "type": "string"
+ },
+ "example": "/paper.yml"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "# This is the main configuration file for Paper.\n# As you can see, there's tons to configure. Some options may impact gameplay, so use\n# with caution, and make sure you know what each option does before configuring.\n# \n# If you need help with the configuration or have any questions related to Paper,\n# join us in our Discord or IRC channel.\n# \n# Discord: https://paperdiscord.emc.gs\n# IRC: #paper @ irc.spi.gt ( http://irc.spi.gt/iris/?channels=paper )\n# Website: https://papermc.io/ \n# Docs: https://paper.readthedocs.org/ \n\nverbose: false\nconfig-version: 20\nsettings:\n load-permissions-yml-before-plugins: true\n bungee-online-mode: true\n region-file-cache-size: 256\n incoming-packet-spam-threshold: 300\n save-player-data: true\n use-alternative-luck-formula: false\n suggest-player-names-when-null-tab-completions: true\n enable-player-collisions: true\n save-empty-scoreboard-teams: false\n velocity-support:\n enabled: false\n online-mode: false\n secret: ''\n async-chunks:\n enable: true\n load-threads: -1\n watchdog:\n early-warning-every: 5000\n early-warning-delay: 10000\n spam-limiter:\n tab-spam-increment: 1\n tab-spam-limit: 500\n book-size:\n page-max: 2560\n total-multiplier: 0.98\nmessages:\n no-permission: '&cI''m sorry, but you do not have permission to perform this command.\n Please contact the server administrators if you believe that this is in error.'\n kick:\n authentication-servers-down: ''\n connection-throttle: Connection throttled! Please wait before reconnecting.\n flying-player: Flying is not enabled on this server\n flying-vehicle: Flying is not enabled on this server\ntimings:\n enabled: true\n verbose: true\n server-name-privacy: false\n hidden-config-entries:\n - database\n - settings.bungeecord-addresses\n history-interval: 300\n history-length: 3600\n server-name: Unknown Server\nworld-settings:\n default:\n per-player-mob-spawns: false\n optimize-explosions: false\n portal-search-radius: 128\n disable-teleportation-suffocation-check: false\n fixed-chunk-inhabited-time: -1\n use-vanilla-world-scoreboard-name-coloring: false\n remove-corrupt-tile-entities: false\n enable-treasure-maps: true\n treasure-maps-return-already-discovered: false\n experience-merge-max-value: -1\n prevent-moving-into-unloaded-chunks: false\n max-auto-save-chunks-per-tick: 24\n falling-block-height-nerf: 0\n tnt-entity-height-nerf: 0\n filter-nbt-data-from-spawn-eggs-and-related: true\n max-entity-collisions: 8\n disable-creeper-lingering-effect: false\n duplicate-uuid-resolver: saferegen\n duplicate-uuid-saferegen-delete-range: 32\n prevent-tnt-from-moving-in-water: false\n disable-thunder: false\n skeleton-horse-thunder-spawn-chance: 0.01\n disable-ice-and-snow: false\n count-all-mobs-for-spawning: false\n keep-spawn-loaded-range: 10\n keep-spawn-loaded: true\n auto-save-interval: -1\n armor-stands-do-collision-entity-lookups: true\n non-player-arrow-despawn-rate: -1\n creative-arrow-despawn-rate: -1\n nether-ceiling-void-damage-height: 0\n grass-spread-tick-rate: 1\n water-over-lava-flow-speed: 5\n bed-search-radius: 1\n fix-zero-tick-instant-grow-farms: true\n use-faster-eigencraft-redstone: false\n allow-non-player-entities-on-scoreboards: false\n disable-explosion-knockback: false\n container-update-tick-rate: 1\n parrots-are-unaffected-by-player-movement: false\n armor-stands-tick: true\n spawner-nerfed-mobs-should-jump: false\n entities-target-with-follow-range: false\n allow-leashing-undead-horse: false\n baby-zombie-movement-modifier: 0.5\n mob-spawner-tick-rate: 1\n all-chunks-are-slime-chunks: false\n game-mechanics:\n scan-for-legacy-ender-dragon: true\n disable-pillager-patrols: false\n disable-relative-projectile-velocity: false\n disable-chest-cat-detection: false\n shield-blocking-delay: 5\n disable-end-credits: false\n disable-player-crits: false\n disable-sprint-interruption-on-attack: false\n disable-unloaded-chunk-enderpearl-exploit: true\n max-growth-height:\n cactus: 3\n reeds: 3\n fishing-time-range:\n MinimumTicks: 100\n MaximumTicks: 600\n despawn-ranges:\n soft: 32\n hard: 128\n lightning-strike-distance-limit:\n sound: -1\n impact-sound: -1\n flash: -1\n frosted-ice:\n enabled: true\n delay:\n min: 20\n max: 40\n lootables:\n auto-replenish: false\n restrict-player-reloot: true\n reset-seed-on-fill: true\n max-refills: -1\n refresh-min: 12h\n refresh-max: 2d\n alt-item-despawn-rate:\n enabled: false\n items:\n COBBLESTONE: 300\n hopper:\n cooldown-when-full: true\n disable-move-event: false\n anti-xray:\n enabled: false\n engine-mode: 1\n chunk-edge-mode: 2\n max-chunk-section-index: 3\n update-radius: 2\n hidden-blocks:\n - gold_ore\n - iron_ore\n - coal_ore\n - lapis_ore\n - mossy_cobblestone\n - obsidian\n - chest\n - diamond_ore\n - redstone_ore\n - clay\n - emerald_ore\n - ender_chest\n replacement-blocks:\n - stone\n - oak_planks\n generator-settings:\n flat-bedrock: false\n squid-spawn-height:\n maximum: 0.0"
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/files/download": {
+ "get": {
+ "tags": [
+ "Client - Server - File Manager"
+ ],
+ "summary": "Download file",
+ "operationId": "get-download-file",
+ "description": "Generates a one-time link to download the specified file\n\n## Available parameters\n| Parameter | Description |\n|-----------|------------------------------|\n| file | URL encoded path to the desired file |",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ },
+ {
+ "name": "file",
+ "in": "query",
+ "schema": {
+ "type": "string"
+ },
+ "example": "/eula.txt"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "url": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "signed_url",
+ "attributes": {
+ "url": "https://pterodactyl.file.properties:8080/download/file?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImp0aSI6IjdkYzAxNzVjODU4MTE5MDRlMjJjNTcxNjBhMjkwMjgwZGFjMDMzM2I2ZmJhMTE3YTI4YjdhMDM5Y2U1OTg0YzcifQ.eyJpc3MiOiJodHRwczpcL1wvcHRlcm9kYWN0eWwuZmlsZS5wcm9wZXJ0aWVzIiwiYXVkIjoiaHR0cHM6XC9cL3B0ZXJvZGFjdHlsLmZpbGUucHJvcGVydGllczo4MDgwIiwianRpIjoiN2RjMDE3NWM4NTgxMTkwNGUyMmM1NzE2MGEyOTAyODBkYWMwMzMzYjZmYmExMTdhMjhiN2EwMzljZTU5ODRjNyIsImlhdCI6MTU5NDY0ODEwMCwibmJmIjoxNTk0NjQ3ODAwLCJleHAiOjE1OTQ2NDkwMDAsImZpbGVfcGF0aCI6IlwvZXVsYS50eHQiLCJzZXJ2ZXJfdXVpZCI6IjFhN2NlOTk3LTI1OWItNDUyZS04YjRlLWNlY2M0NjQxNDJjYSIsInVuaXF1ZV9pZCI6IlNvWUdIamNaNmhKUVlieHUifQ.h4eBmxDXf-4GAwVuAWZFU5QTqd62jw7HTre4aKQGpvw"
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/files/rename": {
+ "put": {
+ "tags": [
+ "Client - Server - File Manager"
+ ],
+ "summary": "Rename file",
+ "operationId": "put-rename-file",
+ "description": "Renames the specified file(s) or folder(s)",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "root": {
+ "type": "string"
+ },
+ "files": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "from": {
+ "type": "string"
+ },
+ "to": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "root": "/",
+ "files": [
+ {
+ "from": "data",
+ "to": "abc"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "responses": {
+ "204": {
+ "description": "No Content"
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/files/copy": {
+ "post": {
+ "tags": [
+ "Client - Server - File Manager"
+ ],
+ "summary": "Copy file",
+ "operationId": "post-copy-file",
+ "description": "Copies the specified file",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "location": {
+ "type": "string"
+ }
+ }
+ },
+ "example": {
+ "location": "/server.properties"
+ }
+ }
+ }
+ },
+ "responses": {
+ "204": {
+ "description": "No Content"
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/files/write": {
+ "post": {
+ "tags": [
+ "Client - Server - File Manager"
+ ],
+ "summary": "Write file",
+ "operationId": "post-write-file",
+ "description": "Writes data to the specified file\n\n## Available parameters\n| Parameter | Description |\n|-----------|--------------------------------------|\n| file | URL encoded path to the desired file |",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ },
+ {
+ "name": "file",
+ "in": "query",
+ "schema": {
+ "type": "string"
+ },
+ "example": "/eula.txt"
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "No Content"
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/files/compress": {
+ "post": {
+ "tags": [
+ "Client - Server - File Manager"
+ ],
+ "summary": "Compress file",
+ "operationId": "post-compress-file",
+ "description": "Compresses the specified file",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "root": {
+ "type": "string"
+ },
+ "files": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "example": {
+ "root": "/",
+ "files": [
+ "abc"
+ ]
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "mode": {
+ "type": "string"
+ },
+ "size": {
+ "type": "integer"
+ },
+ "is_file": {
+ "type": "boolean"
+ },
+ "is_symlink": {
+ "type": "boolean"
+ },
+ "is_editable": {
+ "type": "boolean"
+ },
+ "mimetype": {
+ "type": "string"
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "modified_at": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "file_object",
+ "attributes": {
+ "name": "archive-2020-08-23T220805Z.tar.gz",
+ "mode": "-rw-------",
+ "size": 0,
+ "is_file": true,
+ "is_symlink": false,
+ "is_editable": false,
+ "mimetype": "application/tar+gzip",
+ "created_at": "2020-08-23T22:08:05+00:00",
+ "modified_at": "2020-08-23T22:08:05+00:00"
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/files/decompress": {
+ "post": {
+ "tags": [
+ "Client - Server - File Manager"
+ ],
+ "summary": "Decompress file",
+ "operationId": "post-decompress-file",
+ "description": "Decompresses the selected file",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "root": {
+ "type": "string"
+ },
+ "file": {
+ "type": "string"
+ }
+ }
+ },
+ "example": {
+ "root": "/",
+ "file": "archive-2020-08-23T220655Z.tar.gz"
+ }
+ }
+ }
+ },
+ "responses": {
+ "204": {
+ "description": "No Content"
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/files/delete": {
+ "post": {
+ "tags": [
+ "Client - Server - File Manager"
+ ],
+ "summary": "Delete file",
+ "operationId": "post-delete-file",
+ "description": "Deletes the specified file(s) or folder(s)",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "root": {
+ "type": "string"
+ },
+ "files": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "example": {
+ "root": "/maps",
+ "files": [
+ "worlds"
+ ]
+ }
+ }
+ }
+ },
+ "responses": {
+ "204": {
+ "description": "No Content"
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/files/create-folder": {
+ "post": {
+ "tags": [
+ "Client - Server - File Manager"
+ ],
+ "summary": "Create folder",
+ "operationId": "post-create-folder",
+ "description": "Creates the specified folder in the specified directory",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "root": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ }
+ }
+ },
+ "example": {
+ "root": "/maps",
+ "name": "worlds"
+ }
+ }
+ }
+ },
+ "responses": {
+ "204": {
+ "description": "No Content"
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/files/upload": {
+ "get": {
+ "tags": [
+ "Client - Server - File Manager"
+ ],
+ "summary": "Upload file",
+ "operationId": "get-upload-file",
+ "description": "Returns a signed URL used to upload files to the server using POST",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "url": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "signed_url",
+ "attributes": {
+ "url": "https://pterodactyl.file.properties:8080/upload/file?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImp0aSI6IjdkYzAxNzVjODU4MTE5MDRlMjJjNTcxNjBhMjkwMjgwZGFjMDMzM2I2ZmJhMTE3YTI4YjdhMDM5Y2U1OTg0YzcifQ.eyJpc3MiOiJodHRwczpcL1wvcHRlcm9kYWN0eWwuZmlsZS5wcm9wZXJ0aWVzIiwiYXVkIjoiaHR0cHM6XC9cL3B0ZXJvZGFjdHlsLmZpbGUucHJvcGVydGllczo4MDgwIiwianRpIjoiN2RjMDE3NWM4NTgxMTkwNGUyMmM1NzE2MGEyOTAyODBkYWMwMzMzYjZmYmExMTdhMjhiN2EwMzljZTU5ODRjNyIsImlhdCI6MTU5ODIyMTMyMSwibmJmIjoxNTk4MjIxMDIxLCJleHAiOjE1OTgyMjIyMjEsInNlcnZlcl91dWlkIjoiMWE3Y2U5OTctMjU5Yi00NTJlLThiNGUtY2VjYzQ2NDE0MmNhIiwidW5pcXVlX2lkIjoiNmM2OFdkSkJTVzg0RlBsUiJ9.GJ5681K9ehhPCcXevyxw-RO1jhv4UWg5T8b_P7r6s8Q"
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/databases/{database}/rotate-password": {
+ "post": {
+ "tags": [
+ "Client - Server - Databases"
+ ],
+ "summary": "Rotate password",
+ "operationId": "post-rotate-password",
+ "description": "Changes the password of a specified database",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ },
+ {
+ "name": "database",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Database ID",
+ "example": 1
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "host": {
+ "type": "object",
+ "properties": {
+ "address": {
+ "type": "string"
+ },
+ "port": {
+ "type": "integer"
+ }
+ }
+ },
+ "name": {
+ "type": "string"
+ },
+ "username": {
+ "type": "string"
+ },
+ "connections_from": {
+ "type": "string"
+ },
+ "max_connections": {
+ "type": "integer"
+ },
+ "relationships": {
+ "type": "object",
+ "properties": {
+ "password": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "password": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "server_database",
+ "attributes": {
+ "id": "y9YVxO4V",
+ "host": {
+ "address": "127.0.0.1",
+ "port": 3306
+ },
+ "name": "s5_punishments",
+ "username": "u5_aeZqbGdCM9",
+ "connections_from": "%",
+ "max_connections": 0,
+ "relationships": {
+ "password": {
+ "object": "database_password",
+ "attributes": {
+ "password": "vnFKXlJ.p77!EiGR+Kd3muB."
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/databases/{database}": {
+ "delete": {
+ "tags": [
+ "Client - Server - Databases"
+ ],
+ "summary": "Delete database",
+ "operationId": "delete-delete-database",
+ "description": "Deletes the specified database",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ },
+ {
+ "name": "database",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Database ID",
+ "example": 1
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "No Content"
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/account": {
+ "get": {
+ "tags": [
+ "Client - Account"
+ ],
+ "summary": "Account details",
+ "operationId": "get-account-details",
+ "description": "Retrieves information about the account",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "admin": {
+ "type": "boolean"
+ },
+ "username": {
+ "type": "string"
+ },
+ "email": {
+ "type": "string"
+ },
+ "first_name": {
+ "type": "string"
+ },
+ "last_name": {
+ "type": "string"
+ },
+ "language": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "user",
+ "attributes": {
+ "id": 1,
+ "admin": true,
+ "username": "admin",
+ "email": "example@example.com",
+ "first_name": "Admin",
+ "last_name": "User",
+ "language": "en"
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/account/two-factor": {
+ "get": {
+ "tags": [
+ "Client - Account"
+ ],
+ "summary": "2FA details",
+ "operationId": "get-2fa-details",
+ "description": "Generates a TOTP QR code image to allow the setup of 2FA",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "data": {
+ "type": "object",
+ "properties": {
+ "image_url_data": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "data": {
+ "image_url_data": "otpauth://totp/Pterodactyl:example%40example.com?secret=LGYOWJEGVRPPGPWATP5ZHOYC7DHAYQ6S&issuer=Pterodactyl"
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ },
+ "post": {
+ "tags": [
+ "Client - Account"
+ ],
+ "summary": "Enable 2FA",
+ "operationId": "post-enable-2fa",
+ "description": "Enables TOTP 2FA using the QR code generated by the GET request\n\nUses code generated from `GET /account/two-factor`",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string",
+ "description": "TOTP Code"
+ }
+ },
+ "required": [
+ "code"
+ ]
+ },
+ "example": {
+ "code": "505134"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "tokens": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "recovery_tokens",
+ "attributes": {
+ "tokens": [
+ "MpBjHH8O08",
+ "D9H0hktN6L",
+ "ho8KiUpeV8",
+ "06vZEfrYPf",
+ "nFRySZ2ryh",
+ "7K1cTrhGoV",
+ "n6xpwwlJfv",
+ "hAmyCsZxYO",
+ "5FiMKFyNpH",
+ "IViSFoRFvW"
+ ]
+ }
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Bad Request",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "errors": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "status": {
+ "type": "string"
+ },
+ "detail": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "errors": [
+ {
+ "code": "TwoFactorAuthenticationTokenInvalid",
+ "status": "400",
+ "detail": "The token provided is not valid."
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/account/email": {
+ "put": {
+ "tags": [
+ "Client - Account"
+ ],
+ "summary": "Update email",
+ "operationId": "put-update-email",
+ "description": "Updates the email address of the account",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "email": {
+ "type": "string",
+ "description": "New email"
+ },
+ "password": {
+ "type": "string",
+ "description": "Existing password"
+ }
+ },
+ "required": [
+ "email",
+ "password"
+ ]
+ },
+ "example": {
+ "email": "example@xample.com",
+ "password": "Password"
+ }
+ }
+ }
+ },
+ "responses": {
+ "201": {
+ "description": "Successful"
+ },
+ "400": {
+ "description": "// Invalid password\n{\n \"errors\": [\n {\n \"code\": \"InvalidPasswordProvidedException\",\n \"status\": \"400\",\n \"detail\": \"The password provided was invalid for this account.\"\n }\n ]\n}"
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/account/password": {
+ "put": {
+ "tags": [
+ "Client - Account"
+ ],
+ "summary": "Update password",
+ "operationId": "put-update-password",
+ "description": "Updates the password of the account",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "current_password": {
+ "type": "string",
+ "description": "Existing password"
+ },
+ "password": {
+ "type": "string",
+ "description": "New password"
+ },
+ "password_confirmation": {
+ "type": "string",
+ "description": "Confirm new password"
+ }
+ },
+ "required": [
+ "current_password",
+ "password",
+ "password_confirmation"
+ ]
+ },
+ "example": {
+ "current_password": "Password",
+ "password": "password",
+ "password_confirmation": "password"
+ }
+ }
+ }
+ },
+ "responses": {
+ "204": {
+ "description": "No Content"
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/account/api-keys": {
+ "get": {
+ "tags": [
+ "Client - Account"
+ ],
+ "summary": "List API keys",
+ "operationId": "get-list-api-keys",
+ "description": "Retries a list of API keys",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "data": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "identifier": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "allowed_ips": {
+ "type": "array",
+ "items": {}
+ },
+ "last_used_at": {
+ "type": "string"
+ },
+ "created_at": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "list",
+ "data": [
+ {
+ "object": "api_key",
+ "attributes": {
+ "identifier": "wwQ5DJ6X1XaFznQS",
+ "description": "API Docs",
+ "allowed_ips": [],
+ "last_used_at": "2020-06-03T15:04:47+01:00",
+ "created_at": "2020-05-18T00:12:43+01:00"
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ },
+ "post": {
+ "tags": [
+ "Client - Account"
+ ],
+ "summary": "Create API key",
+ "operationId": "post-create-api-key",
+ "description": "Generates a new API key",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "description": {
+ "type": "string",
+ "description": "Note for the API key"
+ }
+ },
+ "required": [
+ "description"
+ ]
+ },
+ "example": {
+ "description": "Restricted IPs",
+ "allowed_ips": [
+ "127.0.0.1",
+ "192.168.0.1"
+ ]
+ }
+ }
+ }
+ },
+ "responses": {
+ "201": {
+ "description": "Created",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "identifier": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "allowed_ips": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "last_used_at": {
+ "type": "string",
+ "nullable": true
+ },
+ "created_at": {
+ "type": "string"
+ }
+ }
+ },
+ "meta": {
+ "type": "object",
+ "properties": {
+ "secret_token": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "api_key",
+ "attributes": {
+ "identifier": "yjAZbHMyKrv9YRZ0",
+ "description": "Restricted IPs",
+ "allowed_ips": [
+ "127.0.0.1",
+ "192.168.0.1"
+ ],
+ "last_used_at": null,
+ "created_at": "2020-08-17T04:44:42+01:00"
+ },
+ "meta": {
+ "secret_token": "wiHiMbmgjLOkA2fPzRD6KdMe7Q9Cqaka"
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/account/api-keys/{api_key}": {
+ "delete": {
+ "tags": [
+ "Client - Account"
+ ],
+ "summary": "Delete API key",
+ "operationId": "delete-delete-api-key",
+ "description": "Deletes the specified API key",
+ "responses": {
+ "204": {
+ "description": "No Content"
+ },
+ "404": {
+ "description": "// Non existing API key\n{\n \"errors\": [\n {\n \"code\": \"NotFoundHttpException\",\n \"status\": \"404\",\n \"detail\": \"An error was encountered while processing this request.\"\n }\n ]\n}"
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ],
+ "parameters": [
+ {
+ "name": "api_key",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "API key identifier",
+ "example": "NWKMYMT2Mrav0Iq2"
+ }
+ ]
+ }
+ },
+ "/api/client/account/ssh-keys": {
+ "get": {
+ "tags": [
+ "Client - Account"
+ ],
+ "summary": "List SSH keys",
+ "operationId": "get-list-ssh-keys",
+ "description": "Returns all SSH keys on the authenticated user's account",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "data": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "fingerprint": {
+ "type": "string"
+ },
+ "public_key": {
+ "type": "string"
+ },
+ "created_at": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "list",
+ "data": [
+ {
+ "object": "ssh_key",
+ "attributes": {
+ "name": "my-key",
+ "fingerprint": "jwNan4mvlewsaCP5p7YKVgALQGUBiOCcKViJIGIrktQ",
+ "public_key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI...",
+ "created_at": "2026-02-22T15:23:33+01:00"
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ },
+ "post": {
+ "tags": [
+ "Client - Account"
+ ],
+ "summary": "Create SSH key",
+ "operationId": "post-create-ssh-key",
+ "description": "Adds an SSH key to the user's account. Used for SFTP authentication. Requires a 2048+ bit RSA key or an ECDSA/Ed25519 key.",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "public_key": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "name",
+ "public_key"
+ ]
+ },
+ "example": {
+ "name": "my-key",
+ "public_key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... user@host"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "fingerprint": {
+ "type": "string"
+ },
+ "public_key": {
+ "type": "string"
+ },
+ "created_at": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "ssh_key",
+ "attributes": {
+ "name": "my-key",
+ "fingerprint": "jwNan4mvlewsaCP5p7YKVgALQGUBiOCcKViJIGIrktQ",
+ "public_key": "-----BEGIN PUBLIC KEY-----\r\nMCowBQYDK2VwAyEA...\r\n-----END PUBLIC KEY-----",
+ "created_at": "2026-02-22T15:23:33+01:00"
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/account/ssh-keys/remove": {
+ "post": {
+ "tags": [
+ "Client - Account"
+ ],
+ "summary": "Remove SSH key",
+ "operationId": "post-remove-ssh-key",
+ "description": "Removes an SSH key from the user's account by its fingerprint",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "fingerprint": {
+ "type": "string",
+ "description": "The fingerprint of the SSH key to remove"
+ }
+ },
+ "required": [
+ "fingerprint"
+ ]
+ },
+ "example": {
+ "fingerprint": "jwNan4mvlewsaCP5p7YKVgALQGUBiOCcKViJIGIrktQ"
+ }
+ }
+ }
+ },
+ "responses": {
+ "204": {
+ "description": "No Content"
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/account/activity": {
+ "get": {
+ "tags": [
+ "Client - Account"
+ ],
+ "summary": "Account activity",
+ "operationId": "get-account-activity",
+ "description": "Returns the activity log for the authenticated user's account",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "data": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "batch": {
+ "type": "string",
+ "nullable": true
+ },
+ "event": {
+ "type": "string"
+ },
+ "is_api": {
+ "type": "boolean"
+ },
+ "ip": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string",
+ "nullable": true
+ },
+ "properties": {
+ "type": "object"
+ },
+ "has_additional_metadata": {
+ "type": "boolean"
+ },
+ "timestamp": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "list",
+ "data": [
+ {
+ "object": "activity_log",
+ "attributes": {
+ "id": "c7d4d572c5422d89a66408a1facd4e06cb4f65dd",
+ "batch": null,
+ "event": "auth:success",
+ "is_api": false,
+ "ip": "82.73.127.188",
+ "description": null,
+ "properties": {
+ "ip": "82.73.127.188",
+ "useragent": "Mozilla/5.0 ..."
+ },
+ "has_additional_metadata": false,
+ "timestamp": "2025-12-01T23:10:45+01:00"
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/activity": {
+ "get": {
+ "tags": [
+ "Client - Server"
+ ],
+ "summary": "Server activity",
+ "operationId": "get-server-activity",
+ "description": "Returns the activity log for the specified server",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "data": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "batch": {
+ "type": "string",
+ "nullable": true
+ },
+ "event": {
+ "type": "string"
+ },
+ "is_api": {
+ "type": "boolean"
+ },
+ "ip": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string",
+ "nullable": true
+ },
+ "properties": {
+ "type": "object"
+ },
+ "has_additional_metadata": {
+ "type": "boolean"
+ },
+ "timestamp": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "list",
+ "data": [
+ {
+ "object": "activity_log",
+ "attributes": {
+ "id": "abc123",
+ "batch": null,
+ "event": "server:power.start",
+ "is_api": false,
+ "ip": "82.73.127.188",
+ "description": null,
+ "properties": {},
+ "has_additional_metadata": false,
+ "timestamp": "2025-12-01T23:10:45+01:00"
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/backups/{backup}/lock": {
+ "post": {
+ "tags": [
+ "Client - Server - Backups"
+ ],
+ "summary": "Toggle backup lock",
+ "operationId": "post-toggle-backup-lock",
+ "description": "Toggles the locked status of a backup. A locked backup cannot be deleted by the automatic backup rotation.",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ },
+ {
+ "name": "backup",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Backup UUID",
+ "example": "904df120-a66f-4375-a4ae-40eedbeae630"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "uuid": {
+ "type": "string"
+ },
+ "is_successful": {
+ "type": "boolean"
+ },
+ "is_locked": {
+ "type": "boolean"
+ },
+ "name": {
+ "type": "string"
+ },
+ "ignored_files": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "checksum": {
+ "type": "string",
+ "nullable": true
+ },
+ "bytes": {
+ "type": "integer"
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "completed_at": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "object": "backup",
+ "attributes": {
+ "uuid": "b25bd2e3-4fbf-4ef3-8590-ad451364ee1c",
+ "is_successful": true,
+ "is_locked": true,
+ "name": "backup",
+ "ignored_files": [],
+ "checksum": "sha1:898e2b835849de8243616c104f4edf21160a79ef",
+ "bytes": 538508593,
+ "created_at": "2025-04-27T21:35:40+02:00",
+ "completed_at": "2025-04-27T21:36:03+02:00"
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/backups/{backup}/restore": {
+ "post": {
+ "tags": [
+ "Client - Server - Backups"
+ ],
+ "summary": "Restore backup",
+ "operationId": "post-restore-backup",
+ "description": "Restores a backup to the server. Existing files will be overwritten. Returns 400 if the backup has not completed, or if the server is currently installing, transferring, or restoring a different backup.",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ },
+ {
+ "name": "backup",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Backup UUID",
+ "example": "904df120-a66f-4375-a4ae-40eedbeae630"
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "truncate": {
+ "type": "boolean",
+ "description": "Whether to delete all files before restoring the backup"
+ }
+ },
+ "required": [
+ "truncate"
+ ]
+ },
+ "example": {
+ "truncate": false
+ }
+ }
+ }
+ },
+ "responses": {
+ "204": {
+ "description": "No Content"
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/files/chmod": {
+ "post": {
+ "tags": [
+ "Client - Server - File Manager"
+ ],
+ "summary": "Change file permissions",
+ "operationId": "post-chmod-file",
+ "description": "Updates file permissions for one or more files in the given directory",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "root": {
+ "type": "string",
+ "description": "Base directory of the files"
+ },
+ "files": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "file": {
+ "type": "string"
+ },
+ "mode": {
+ "type": "integer"
+ }
+ },
+ "required": [
+ "file",
+ "mode"
+ ]
+ }
+ }
+ },
+ "required": [
+ "files"
+ ]
+ },
+ "example": {
+ "root": "/",
+ "files": [
+ {
+ "file": "server.properties",
+ "mode": 644
+ }
+ ]
+ }
+ }
+ }
+ },
+ "responses": {
+ "204": {
+ "description": "No Content"
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/files/pull": {
+ "post": {
+ "tags": [
+ "Client - Server - File Manager"
+ ],
+ "summary": "Pull remote file",
+ "operationId": "post-pull-file",
+ "description": "Downloads a file from an external URL to the server",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "url": {
+ "type": "string"
+ },
+ "directory": {
+ "type": "string",
+ "description": "Directory to save the file in"
+ },
+ "filename": {
+ "type": "string",
+ "description": "Override the filename"
+ },
+ "use_header": {
+ "type": "string",
+ "description": "Use the filename from the response headers"
+ },
+ "foreground": {
+ "type": "boolean",
+ "description": "Whether to download in the foreground"
+ }
+ },
+ "required": [
+ "url"
+ ]
+ },
+ "example": {
+ "url": "https://example.com/server-plugin.jar",
+ "directory": "/plugins",
+ "filename": "plugin.jar"
+ }
+ }
+ }
+ },
+ "responses": {
+ "204": {
+ "description": "No Content"
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/schedules/{schedule}/execute": {
+ "post": {
+ "tags": [
+ "Client - Server - Schedules"
+ ],
+ "summary": "Execute schedule",
+ "operationId": "post-execute-schedule",
+ "description": "Triggers a schedule to run now, regardless of its cron timing",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ },
+ {
+ "name": "schedule",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Schedule ID",
+ "example": 1
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "No Content"
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/servers/{server}/settings/docker-image": {
+ "put": {
+ "tags": [
+ "Client - Server - Settings"
+ ],
+ "summary": "Update Docker image",
+ "operationId": "put-update-docker-image",
+ "description": "Changes the Docker image the server runs with. The image must be one of the images allowed by the server's egg. Returns 400 if the image was manually set by an admin.",
+ "parameters": [
+ {
+ "name": "server",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ },
+ "description": "Server identifier (short 8-character ID)",
+ "example": "1a7ce997"
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "docker_image": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "docker_image"
+ ]
+ },
+ "example": {
+ "docker_image": "ghcr.io/pterodactyl/yolks:java_21"
+ }
+ }
+ }
+ },
+ "responses": {
+ "204": {
+ "description": "No Content"
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/client/account/two-factor/disable": {
+ "post": {
+ "tags": [
+ "Client - Account"
+ ],
+ "summary": "Disable 2FA",
+ "operationId": "post-disable-2fa",
+ "description": "Disables two-factor authentication on the account",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "password": {
+ "type": "string",
+ "description": "Account password"
+ }
+ },
+ "required": [
+ "password"
+ ]
+ },
+ "example": {
+ "password": "yourpassword"
+ }
+ }
+ }
+ },
+ "responses": {
+ "204": {
+ "description": "No Content"
+ }
+ },
+ "security": [
+ {
+ "ClientToken": []
+ }
+ ]
+ }
+ },
+ "/api/application/nodes/deployable": {
+ "get": {
+ "tags": [
+ "Application - Nodes"
+ ],
+ "summary": "List deployable nodes",
+ "operationId": "get-deployable-nodes",
+ "description": "Returns nodes that have enough resources for a new server with the given requirements",
+ "parameters": [
+ {
+ "name": "memory",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Required memory in MB",
+ "example": 512
+ },
+ {
+ "name": "disk",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "integer"
+ },
+ "description": "Required disk space in MB",
+ "example": 1024
+ },
+ {
+ "name": "location_ids[]",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "description": "Filter by location IDs"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "data": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "object": {
+ "type": "string"
+ },
+ "attributes": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "uuid": {
+ "type": "string"
+ },
+ "public": {
+ "type": "boolean"
+ },
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "location_id": {
+ "type": "integer"
+ },
+ "fqdn": {
+ "type": "string"
+ },
+ "scheme": {
+ "type": "string"
+ },
+ "behind_proxy": {
+ "type": "boolean"
+ },
+ "maintenance_mode": {
+ "type": "boolean"
+ },
+ "memory": {
+ "type": "integer"
+ },
+ "memory_overallocate": {
+ "type": "integer"
+ },
+ "disk": {
+ "type": "integer"
+ },
+ "disk_overallocate": {
+ "type": "integer"
+ },
+ "upload_size": {
+ "type": "integer"
+ },
+ "daemon_listen": {
+ "type": "integer"
+ },
+ "daemon_sftp": {
+ "type": "integer"
+ },
+ "daemon_base": {
+ "type": "string"
+ },
+ "created_at": {
+ "type": "string"
+ },
+ "updated_at": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "ApplicationToken": []
+ }
+ ]
+ }
+ }
+ },
+ "components": {
+ "securitySchemes": {
+ "ClientToken": {
+ "type": "http",
+ "scheme": "bearer",
+ "description": "Client API key (generated at /account/api)"
+ },
+ "ApplicationToken": {
+ "type": "http",
+ "scheme": "bearer",
+ "description": "Application API key (generated at /admin/api)"
+ }
+ }
+ }
+}
diff --git a/package-lock.json b/package-lock.json
index 23bc62485..e8028c03f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -10,13 +10,15 @@
"hasInstallScript": true,
"dependencies": {
"@orama/orama": "^3.1.17",
- "fumadocs-core": "16.2.5",
+ "fumadocs-core": "^16.6.4",
"fumadocs-mdx": "14.1.1",
- "fumadocs-ui": "16.2.5",
+ "fumadocs-openapi": "^10.3.7",
+ "fumadocs-ui": "^16.6.4",
"lucide-react": "^0.556.0",
"next": "16.0.10",
"react": "^19.2.1",
- "react-dom": "^19.2.1"
+ "react-dom": "^19.2.1",
+ "shiki": "^3.22.0"
},
"devDependencies": {
"@tailwindcss/postcss": "^4.1.17",
@@ -473,12 +475,80 @@
"resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz",
"integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ=="
},
+ "node_modules/@formatjs/fast-memoize": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-3.1.0.tgz",
+ "integrity": "sha512-b5mvSWCI+XVKiz5WhnBCY3RJ4ZwfjAidU0yVlKa3d3MSgKmH1hC3tBGEAtYyN5mqL7N0G5x0BOUYyO8CEupWgg==",
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.8.1"
+ }
+ },
"node_modules/@formatjs/intl-localematcher": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.6.2.tgz",
- "integrity": "sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==",
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.8.1.tgz",
+ "integrity": "sha512-xwEuwQFdtSq1UKtQnyTZWC+eHdv7Uygoa+H2k/9uzBVQjDyp9r20LNDNKedWXll7FssT3GRHvqsdJGYSUWqYFA==",
+ "license": "MIT",
"dependencies": {
- "tslib": "^2.8.0"
+ "@formatjs/fast-memoize": "3.1.0",
+ "tslib": "^2.8.1"
+ }
+ },
+ "node_modules/@fumadocs/tailwind": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/@fumadocs/tailwind/-/tailwind-0.0.2.tgz",
+ "integrity": "sha512-4JrTJLRDKKdFF3gy07rAsakqGr17/0cJE042B1icCmMRrPA4a38cjR1qd4EqUiDJ+fzM0wgVN9QYiqds3HB2rg==",
+ "license": "MIT",
+ "dependencies": {
+ "postcss-selector-parser": "^7.1.1"
+ },
+ "peerDependencies": {
+ "tailwindcss": "^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "tailwindcss": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@fumari/json-schema-to-typescript": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@fumari/json-schema-to-typescript/-/json-schema-to-typescript-2.0.0.tgz",
+ "integrity": "sha512-X0Wm3QJLj1Rtb1nY2exM6QwMXb9LGyIKLf35+n6xyltDDBLMECOC4R/zPaw3RwgFVmvRLSmLCd+ht4sKabgmNw==",
+ "license": "MIT",
+ "dependencies": {
+ "js-yaml": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "@apidevtools/json-schema-ref-parser": "14.x.x",
+ "prettier": "3.x.x"
+ },
+ "peerDependenciesMeta": {
+ "@apidevtools/json-schema-ref-parser": {
+ "optional": true
+ },
+ "prettier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@fumari/stf": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@fumari/stf/-/stf-0.0.3.tgz",
+ "integrity": "sha512-EDgfqz6oWJLPfmrekl4sCssypPmQ1dV8J7RqWR9Wbzj2mekUIeAqljGkh1EgykZp8Yve9Ehnmn3gjHggFgQU2A==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^19.2.0",
+ "react-dom": "^19.2.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
}
},
"node_modules/@img/colour": {
@@ -1129,9 +1199,10 @@
}
},
"node_modules/@orama/orama": {
- "version": "3.1.17",
- "resolved": "https://registry.npmjs.org/@orama/orama/-/orama-3.1.17.tgz",
- "integrity": "sha512-APwpZ+FTGMryo4QEeD6ti+Ei8suBkvxe8PeWdUcQHVfJDpjpt4c1dKojjNswcBmdeWSiiTYcnkKKH+yuo6727g==",
+ "version": "3.1.18",
+ "resolved": "https://registry.npmjs.org/@orama/orama/-/orama-3.1.18.tgz",
+ "integrity": "sha512-a61ljmRVVyG5MC/698C8/FfFDw5a8LOIvyOLW5fztgUXqUpc1jOfQzOitSCbge657OgXXThmY3Tk8fpiDb4UcA==",
+ "license": "Apache-2.0",
"engines": {
"node": ">= 20.0.0"
}
@@ -1708,6 +1779,67 @@
}
}
},
+ "node_modules/@radix-ui/react-select": {
+ "version": "2.2.6",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.2.6.tgz",
+ "integrity": "sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/number": "1.1.1",
+ "@radix-ui/primitive": "1.1.3",
+ "@radix-ui/react-collection": "1.1.7",
+ "@radix-ui/react-compose-refs": "1.1.2",
+ "@radix-ui/react-context": "1.1.2",
+ "@radix-ui/react-direction": "1.1.1",
+ "@radix-ui/react-dismissable-layer": "1.1.11",
+ "@radix-ui/react-focus-guards": "1.1.3",
+ "@radix-ui/react-focus-scope": "1.1.7",
+ "@radix-ui/react-id": "1.1.1",
+ "@radix-ui/react-popper": "1.2.8",
+ "@radix-ui/react-portal": "1.1.9",
+ "@radix-ui/react-primitive": "2.1.3",
+ "@radix-ui/react-slot": "1.2.3",
+ "@radix-ui/react-use-callback-ref": "1.1.1",
+ "@radix-ui/react-use-controllable-state": "1.2.2",
+ "@radix-ui/react-use-layout-effect": "1.1.1",
+ "@radix-ui/react-use-previous": "1.1.1",
+ "@radix-ui/react-visually-hidden": "1.2.3",
+ "aria-hidden": "^1.2.4",
+ "react-remove-scroll": "^2.6.3"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-slot": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz",
+ "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.2"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
"node_modules/@radix-ui/react-slot": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.4.tgz",
@@ -1909,78 +2041,176 @@
"resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz",
"integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw=="
},
+ "node_modules/@scalar/helpers": {
+ "version": "0.2.15",
+ "resolved": "https://registry.npmjs.org/@scalar/helpers/-/helpers-0.2.15.tgz",
+ "integrity": "sha512-hMHXejGFVOS4HwCo7C2qddChuvMJs3sEOALo7gNOvwLS4dGLrW8flbSglDki4ttyremlKQstP5WJuPxmHQU3sA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/@scalar/json-magic": {
+ "version": "0.11.4",
+ "resolved": "https://registry.npmjs.org/@scalar/json-magic/-/json-magic-0.11.4.tgz",
+ "integrity": "sha512-F40E18vp6GIcJU5kV9UOKGhIrzN2IYdEMCcG3vw3INvvkXqJGqVPnCjcnSWFk27MByaD5Dzjlc3TvkgTiqNGYw==",
+ "license": "MIT",
+ "dependencies": {
+ "@scalar/helpers": "0.2.15",
+ "pathe": "^2.0.3",
+ "yaml": "^2.8.0"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/@scalar/openapi-parser": {
+ "version": "0.24.10",
+ "resolved": "https://registry.npmjs.org/@scalar/openapi-parser/-/openapi-parser-0.24.10.tgz",
+ "integrity": "sha512-E9K8OYD7XKHsvTyLTSdILKHbm4Q3n/MA3EGdDTEBLJHSJd1vLOwiJzrp3+h+xiqFxlX7vlecInZvFy/3c1fqPg==",
+ "license": "MIT",
+ "dependencies": {
+ "@scalar/helpers": "0.2.12",
+ "@scalar/json-magic": "0.11.1",
+ "@scalar/openapi-types": "0.5.3",
+ "@scalar/openapi-upgrader": "0.1.8",
+ "ajv": "^8.17.1",
+ "ajv-draft-04": "^1.0.0",
+ "ajv-formats": "^3.0.1",
+ "jsonpointer": "^5.0.1",
+ "leven": "^4.0.0",
+ "yaml": "^2.8.0"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/@scalar/openapi-parser/node_modules/@scalar/helpers": {
+ "version": "0.2.12",
+ "resolved": "https://registry.npmjs.org/@scalar/helpers/-/helpers-0.2.12.tgz",
+ "integrity": "sha512-Ig/H1Je8nqcDiY+YwFIpATxF2ko7zKrjIZFWK2gGeNTYK4Np9XnqDHg56jM3Xru439Eh4qHq9P/lX7Se5nnxFA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/@scalar/openapi-parser/node_modules/@scalar/json-magic": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/@scalar/json-magic/-/json-magic-0.11.1.tgz",
+ "integrity": "sha512-JsugkVpZ9SmKW6fDhamcmkttc9YOPGgb9Azbwc7hXTlZgG6YeYXx8qFvYr5eJE4cfzCqalodS/9w7moZnVG3cw==",
+ "license": "MIT",
+ "dependencies": {
+ "@scalar/helpers": "0.2.12",
+ "yaml": "^2.8.0"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/@scalar/openapi-types": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/@scalar/openapi-types/-/openapi-types-0.5.3.tgz",
+ "integrity": "sha512-m4n/Su3K01d15dmdWO1LlqecdSPKuNjuokrJLdiQ485kW/hRHbXW1QP6tJL75myhw/XhX5YhYAR+jrwnGjXiMw==",
+ "license": "MIT",
+ "dependencies": {
+ "zod": "^4.1.11"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/@scalar/openapi-upgrader": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/@scalar/openapi-upgrader/-/openapi-upgrader-0.1.8.tgz",
+ "integrity": "sha512-2xuYLLs0fBadLIk4I1ObjMiCnOyLPEMPf24A1HtHQvhKGDnGlvT63F2rU2Xw8lxCjgHnzveMPnOJEbwIy64RCg==",
+ "license": "MIT",
+ "dependencies": {
+ "@scalar/openapi-types": "0.5.3"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
"node_modules/@shikijs/core": {
- "version": "3.20.0",
- "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.20.0.tgz",
- "integrity": "sha512-f2ED7HYV4JEk827mtMDwe/yQ25pRiXZmtHjWF8uzZKuKiEsJR7Ce1nuQ+HhV9FzDcbIo4ObBCD9GPTzNuy9S1g==",
+ "version": "3.22.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.22.0.tgz",
+ "integrity": "sha512-iAlTtSDDbJiRpvgL5ugKEATDtHdUVkqgHDm/gbD2ZS9c88mx7G1zSYjjOxp5Qa0eaW0MAQosFRmJSk354PRoQA==",
+ "license": "MIT",
"dependencies": {
- "@shikijs/types": "3.20.0",
+ "@shikijs/types": "3.22.0",
"@shikijs/vscode-textmate": "^10.0.2",
"@types/hast": "^3.0.4",
"hast-util-to-html": "^9.0.5"
}
},
"node_modules/@shikijs/engine-javascript": {
- "version": "3.20.0",
- "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.20.0.tgz",
- "integrity": "sha512-OFx8fHAZuk7I42Z9YAdZ95To6jDePQ9Rnfbw9uSRTSbBhYBp1kEOKv/3jOimcj3VRUKusDYM6DswLauwfhboLg==",
+ "version": "3.22.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.22.0.tgz",
+ "integrity": "sha512-jdKhfgW9CRtj3Tor0L7+yPwdG3CgP7W+ZEqSsojrMzCjD1e0IxIbwUMDDpYlVBlC08TACg4puwFGkZfLS+56Tw==",
+ "license": "MIT",
"dependencies": {
- "@shikijs/types": "3.20.0",
+ "@shikijs/types": "3.22.0",
"@shikijs/vscode-textmate": "^10.0.2",
"oniguruma-to-es": "^4.3.4"
}
},
"node_modules/@shikijs/engine-oniguruma": {
- "version": "3.20.0",
- "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.20.0.tgz",
- "integrity": "sha512-Yx3gy7xLzM0ZOjqoxciHjA7dAt5tyzJE3L4uQoM83agahy+PlW244XJSrmJRSBvGYELDhYXPacD4R/cauV5bzQ==",
+ "version": "3.22.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.22.0.tgz",
+ "integrity": "sha512-DyXsOG0vGtNtl7ygvabHd7Mt5EY8gCNqR9Y7Lpbbd/PbJvgWrqaKzH1JW6H6qFkuUa8aCxoiYVv8/YfFljiQxA==",
+ "license": "MIT",
"dependencies": {
- "@shikijs/types": "3.20.0",
+ "@shikijs/types": "3.22.0",
"@shikijs/vscode-textmate": "^10.0.2"
}
},
"node_modules/@shikijs/langs": {
- "version": "3.20.0",
- "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.20.0.tgz",
- "integrity": "sha512-le+bssCxcSHrygCWuOrYJHvjus6zhQ2K7q/0mgjiffRbkhM4o1EWu2m+29l0yEsHDbWaWPNnDUTRVVBvBBeKaA==",
+ "version": "3.22.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.22.0.tgz",
+ "integrity": "sha512-x/42TfhWmp6H00T6uwVrdTJGKgNdFbrEdhaDwSR5fd5zhQ1Q46bHq9EO61SCEWJR0HY7z2HNDMaBZp8JRmKiIA==",
+ "license": "MIT",
"dependencies": {
- "@shikijs/types": "3.20.0"
+ "@shikijs/types": "3.22.0"
}
},
"node_modules/@shikijs/rehype": {
- "version": "3.20.0",
- "resolved": "https://registry.npmjs.org/@shikijs/rehype/-/rehype-3.20.0.tgz",
- "integrity": "sha512-/sqob3V/lJK0m2mZ64nkcWPN88im0D9atkI3S3PUBvtJZTHnJXVwZhHQFRDyObgEIa37IpHYHR3CuFtXB5bT2g==",
+ "version": "3.22.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/rehype/-/rehype-3.22.0.tgz",
+ "integrity": "sha512-69b2VPc6XBy/VmAJlpBU5By+bJSBdE2nvgRCZXav7zujbrjXuT0F60DIrjKuutjPqNufuizE+E8tIZr2Yn8Z+g==",
+ "license": "MIT",
"dependencies": {
- "@shikijs/types": "3.20.0",
+ "@shikijs/types": "3.22.0",
"@types/hast": "^3.0.4",
"hast-util-to-string": "^3.0.1",
- "shiki": "3.20.0",
+ "shiki": "3.22.0",
"unified": "^11.0.5",
- "unist-util-visit": "^5.0.0"
+ "unist-util-visit": "^5.1.0"
}
},
"node_modules/@shikijs/themes": {
- "version": "3.20.0",
- "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.20.0.tgz",
- "integrity": "sha512-U1NSU7Sl26Q7ErRvJUouArxfM2euWqq1xaSrbqMu2iqa+tSp0D1Yah8216sDYbdDHw4C8b75UpE65eWorm2erQ==",
+ "version": "3.22.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.22.0.tgz",
+ "integrity": "sha512-o+tlOKqsr6FE4+mYJG08tfCFDS+3CG20HbldXeVoyP+cYSUxDhrFf3GPjE60U55iOkkjbpY2uC3It/eeja35/g==",
+ "license": "MIT",
"dependencies": {
- "@shikijs/types": "3.20.0"
+ "@shikijs/types": "3.22.0"
}
},
"node_modules/@shikijs/transformers": {
- "version": "3.20.0",
- "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-3.20.0.tgz",
- "integrity": "sha512-PrHHMRr3Q5W1qB/42kJW6laqFyWdhrPF2hNR9qjOm1xcSiAO3hAHo7HaVyHE6pMyevmy3i51O8kuGGXC78uK3g==",
+ "version": "3.22.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-3.22.0.tgz",
+ "integrity": "sha512-E7eRV7mwDBjueLF6852n2oYeJYxBq3NSsDk+uyruYAXONv4U8holGmIrT+mPRJQ1J1SNOH6L8G19KRzmBawrFw==",
+ "license": "MIT",
"dependencies": {
- "@shikijs/core": "3.20.0",
- "@shikijs/types": "3.20.0"
+ "@shikijs/core": "3.22.0",
+ "@shikijs/types": "3.22.0"
}
},
"node_modules/@shikijs/types": {
- "version": "3.20.0",
- "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.20.0.tgz",
- "integrity": "sha512-lhYAATn10nkZcBQ0BlzSbJA3wcmL5MXUUF8d2Zzon6saZDlToKaiRX60n2+ZaHJCmXEcZRWNzn+k9vplr8Jhsw==",
+ "version": "3.22.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.22.0.tgz",
+ "integrity": "sha512-491iAekgKDBFE67z70Ok5a8KBMsQ2IJwOWw3us/7ffQkIBCyOQfm/aNwVMBUriP02QshIfgHCBSIYAl3u2eWjg==",
+ "license": "MIT",
"dependencies": {
"@shikijs/vscode-textmate": "^10.0.2",
"@types/hast": "^3.0.4"
@@ -1989,7 +2219,8 @@
"node_modules/@shikijs/vscode-textmate": {
"version": "10.0.2",
"resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz",
- "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg=="
+ "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==",
+ "license": "MIT"
},
"node_modules/@standard-schema/spec": {
"version": "1.1.0",
@@ -2348,6 +2579,12 @@
"@types/unist": "*"
}
},
+ "node_modules/@types/json-schema": {
+ "version": "7.0.15",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+ "license": "MIT"
+ },
"node_modules/@types/mdast": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
@@ -2419,6 +2656,53 @@
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
}
},
+ "node_modules/ajv": {
+ "version": "8.18.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz",
+ "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==",
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ajv-draft-04": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz",
+ "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==",
+ "license": "MIT",
+ "peerDependencies": {
+ "ajv": "^8.5.0"
+ },
+ "peerDependenciesMeta": {
+ "ajv": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/ajv-formats": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz",
+ "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^8.0.0"
+ },
+ "peerDependencies": {
+ "ajv": "^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "ajv": {
+ "optional": true
+ }
+ }
+ },
"node_modules/argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
@@ -2581,6 +2865,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
"integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "license": "MIT",
"bin": {
"cssesc": "bin/cssesc"
},
@@ -2669,6 +2954,18 @@
"node": ">=10.13.0"
}
},
+ "node_modules/entities": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
+ "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
"node_modules/esast-util-from-estree": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz",
@@ -2850,6 +3147,46 @@
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
},
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "license": "MIT"
+ },
+ "node_modules/fast-uri": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz",
+ "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/fast-xml-parser": {
+ "version": "5.3.7",
+ "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.3.7.tgz",
+ "integrity": "sha512-JzVLro9NQv92pOM/jTCR6mHlJh2FGwtomH8ZQjhFj/R29P2Fnj38OgPJVtcvYw6SuKClhgYuwUZf5b3rd8u2mA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/NaturalIntelligence"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "strnum": "^2.1.2"
+ },
+ "bin": {
+ "fxparser": "src/cli/cli.js"
+ }
+ },
"node_modules/fdir": {
"version": "6.5.0",
"resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
@@ -2866,21 +3203,56 @@
}
}
},
+ "node_modules/foreach": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.6.tgz",
+ "integrity": "sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==",
+ "license": "MIT"
+ },
+ "node_modules/framer-motion": {
+ "version": "12.34.3",
+ "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.34.3.tgz",
+ "integrity": "sha512-v81ecyZKYO/DfpTwHivqkxSUBzvceOpoI+wLfgCgoUIKxlFKEXdg0oR9imxwXumT4SFy8vRk9xzJ5l3/Du/55Q==",
+ "license": "MIT",
+ "dependencies": {
+ "motion-dom": "^12.34.3",
+ "motion-utils": "^12.29.2",
+ "tslib": "^2.4.0"
+ },
+ "peerDependencies": {
+ "@emotion/is-prop-valid": "*",
+ "react": "^18.0.0 || ^19.0.0",
+ "react-dom": "^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@emotion/is-prop-valid": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ },
+ "react-dom": {
+ "optional": true
+ }
+ }
+ },
"node_modules/fumadocs-core": {
- "version": "16.2.5",
- "resolved": "https://registry.npmjs.org/fumadocs-core/-/fumadocs-core-16.2.5.tgz",
- "integrity": "sha512-u07n2oQJ2XaEQpWOdCyJnICYEasQiZhTFNf40C+Q2AJ3kKFeiz42mHccea0t/sjfBbO9pEDHyvZVHhSf/Cm3AA==",
+ "version": "16.6.4",
+ "resolved": "https://registry.npmjs.org/fumadocs-core/-/fumadocs-core-16.6.4.tgz",
+ "integrity": "sha512-/8nY7zGJHBCi8hk/WI3oGVNijvUdsiUVE6bZbq7hw6CgleRndyXQGnumrBJO8kPrefFzagHNBrzzLEuJAW15Og==",
"license": "MIT",
"dependencies": {
- "@formatjs/intl-localematcher": "^0.6.2",
- "@orama/orama": "^3.1.16",
- "@shikijs/rehype": "^3.20.0",
- "@shikijs/transformers": "^3.20.0",
+ "@formatjs/intl-localematcher": "^0.8.1",
+ "@orama/orama": "^3.1.18",
+ "@shikijs/rehype": "^3.22.0",
+ "@shikijs/transformers": "^3.22.0",
"estree-util-value-to-estree": "^3.5.0",
"github-slugger": "^2.0.0",
"hast-util-to-estree": "^3.1.3",
"hast-util-to-jsx-runtime": "^2.3.6",
"image-size": "^2.0.2",
+ "mdast-util-mdx": "^3.0.0",
+ "mdast-util-to-markdown": "^2.1.2",
"negotiator": "^1.0.0",
"npm-to-yarn": "^3.0.1",
"path-to-regexp": "^8.3.0",
@@ -2888,13 +3260,21 @@
"remark-gfm": "^4.0.1",
"remark-rehype": "^11.1.2",
"scroll-into-view-if-needed": "^3.1.0",
- "shiki": "^3.20.0",
- "unist-util-visit": "^5.0.0"
+ "shiki": "^3.22.0",
+ "tinyglobby": "^0.2.15",
+ "unified": "^11.0.5",
+ "unist-util-visit": "^5.1.0",
+ "vfile": "^6.0.3"
},
"peerDependencies": {
- "@mixedbread/sdk": "^0.19.0",
+ "@mdx-js/mdx": "*",
+ "@mixedbread/sdk": "^0.46.0",
"@orama/core": "1.x.x",
+ "@oramacloud/client": "2.x.x",
"@tanstack/react-router": "1.x.x",
+ "@types/estree-jsx": "*",
+ "@types/hast": "*",
+ "@types/mdast": "*",
"@types/react": "*",
"algoliasearch": "5.x.x",
"lucide-react": "*",
@@ -2902,19 +3282,34 @@
"react": "^19.2.0",
"react-dom": "^19.2.0",
"react-router": "7.x.x",
- "waku": "^0.26.0 || ^0.27.0",
- "zod": "*"
+ "waku": "^0.26.0 || ^0.27.0 || ^1.0.0",
+ "zod": "4.x.x"
},
"peerDependenciesMeta": {
+ "@mdx-js/mdx": {
+ "optional": true
+ },
"@mixedbread/sdk": {
"optional": true
},
"@orama/core": {
"optional": true
},
+ "@oramacloud/client": {
+ "optional": true
+ },
"@tanstack/react-router": {
"optional": true
},
+ "@types/estree-jsx": {
+ "optional": true
+ },
+ "@types/hast": {
+ "optional": true
+ },
+ "@types/mdast": {
+ "optional": true
+ },
"@types/react": {
"optional": true
},
@@ -2991,10 +3386,72 @@
}
}
},
+ "node_modules/fumadocs-openapi": {
+ "version": "10.3.7",
+ "resolved": "https://registry.npmjs.org/fumadocs-openapi/-/fumadocs-openapi-10.3.7.tgz",
+ "integrity": "sha512-nD3xoQy9Ra2GlkKKzRZNUvJexPB3XxSJjP7vAyN5gXKvesyLKIlkC7N2XOy617p+2fZbgBPsdoId1sfIQL1h6g==",
+ "license": "MIT",
+ "dependencies": {
+ "@fumari/json-schema-to-typescript": "^2.0.0",
+ "@fumari/stf": "^0.0.3",
+ "@radix-ui/react-accordion": "^1.2.12",
+ "@radix-ui/react-dialog": "^1.1.15",
+ "@radix-ui/react-select": "^2.2.6",
+ "@radix-ui/react-slot": "^1.2.4",
+ "@scalar/json-magic": "^0.11.1",
+ "@scalar/openapi-parser": "0.24.10",
+ "@scalar/openapi-upgrader": "^0.1.8",
+ "ajv": "^8.18.0",
+ "class-variance-authority": "^0.7.1",
+ "github-slugger": "^2.0.0",
+ "hast-util-to-jsx-runtime": "^2.3.6",
+ "js-yaml": "^4.1.1",
+ "lucide-react": "^0.570.0",
+ "next-themes": "^0.4.6",
+ "openapi-sampler": "^1.7.0",
+ "react-hook-form": "^7.71.1",
+ "remark": "^15.0.1",
+ "remark-rehype": "^11.1.2",
+ "tailwind-merge": "^3.4.1",
+ "xml-js": "^1.6.11"
+ },
+ "peerDependencies": {
+ "@scalar/api-client-react": "*",
+ "@types/react": "*",
+ "fumadocs-core": "^16.5.0",
+ "fumadocs-ui": "^16.5.0",
+ "json-schema-typed": "*",
+ "react": "^19.2.0",
+ "react-dom": "^19.2.0"
+ },
+ "peerDependenciesMeta": {
+ "@scalar/api-client-react": {
+ "optional": true
+ },
+ "@types/react": {
+ "optional": true
+ },
+ "json-schema-typed": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/fumadocs-openapi/node_modules/lucide-react": {
+ "version": "0.570.0",
+ "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.570.0.tgz",
+ "integrity": "sha512-qGnQ8bEPJLMseKo7kI6jK6GW6Y2Yl4PpqoWbroNsobZ8+tZR4SUuO4EXK3oWCdZr48SZ7PnaulTkvzkKvG/Iqg==",
+ "license": "ISC",
+ "peerDependencies": {
+ "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
"node_modules/fumadocs-ui": {
- "version": "16.2.5",
- "integrity": "sha512-pn16BD2CTk5vfzkxkRzSCzXOxn6ldon5StrUoxV4v6TkizkV5R6AfEyfX0wknVuWRu/2wgec9dLh3qu4R82zTQ==",
+ "version": "16.6.4",
+ "resolved": "https://registry.npmjs.org/fumadocs-ui/-/fumadocs-ui-16.6.4.tgz",
+ "integrity": "sha512-DY/JKtupsL8HheBXqOarwOhTrPf8g1ms5oynlZcq5izNwQmvb1zAZr/GNB4FKaBlaZqNujQc30lk9yDis8IMlQ==",
+ "license": "MIT",
"dependencies": {
+ "@fumadocs/tailwind": "0.0.2",
"@radix-ui/react-accordion": "^1.2.12",
"@radix-ui/react-collapsible": "^1.1.12",
"@radix-ui/react-dialog": "^1.1.15",
@@ -3006,20 +3463,22 @@
"@radix-ui/react-slot": "^1.2.4",
"@radix-ui/react-tabs": "^1.1.13",
"class-variance-authority": "^0.7.1",
- "fumadocs-core": "16.2.5",
- "lodash.merge": "^4.6.2",
+ "lucide-react": "^0.570.0",
+ "motion": "^12.34.0",
"next-themes": "^0.4.6",
- "postcss-selector-parser": "^7.1.1",
"react-medium-image-zoom": "^5.4.0",
+ "react-remove-scroll": "^2.7.2",
+ "rehype-raw": "^7.0.0",
"scroll-into-view-if-needed": "^3.1.0",
- "tailwind-merge": "^3.4.0"
+ "tailwind-merge": "^3.4.1",
+ "unist-util-visit": "^5.1.0"
},
"peerDependencies": {
"@types/react": "*",
+ "fumadocs-core": "16.6.4",
"next": "16.x.x",
"react": "^19.2.0",
- "react-dom": "^19.2.0",
- "tailwindcss": "^4.0.0"
+ "react-dom": "^19.2.0"
},
"peerDependenciesMeta": {
"@types/react": {
@@ -3027,12 +3486,18 @@
},
"next": {
"optional": true
- },
- "tailwindcss": {
- "optional": true
}
}
},
+ "node_modules/fumadocs-ui/node_modules/lucide-react": {
+ "version": "0.570.0",
+ "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.570.0.tgz",
+ "integrity": "sha512-qGnQ8bEPJLMseKo7kI6jK6GW6Y2Yl4PpqoWbroNsobZ8+tZR4SUuO4EXK3oWCdZr48SZ7PnaulTkvzkKvG/Iqg==",
+ "license": "ISC",
+ "peerDependencies": {
+ "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
"node_modules/get-nonce": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz",
@@ -3052,6 +3517,64 @@
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
"dev": true
},
+ "node_modules/hast-util-from-parse5": {
+ "version": "8.0.3",
+ "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz",
+ "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/unist": "^3.0.0",
+ "devlop": "^1.0.0",
+ "hastscript": "^9.0.0",
+ "property-information": "^7.0.0",
+ "vfile": "^6.0.0",
+ "vfile-location": "^5.0.0",
+ "web-namespaces": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-parse-selector": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz",
+ "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-raw": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz",
+ "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/unist": "^3.0.0",
+ "@ungap/structured-clone": "^1.0.0",
+ "hast-util-from-parse5": "^8.0.0",
+ "hast-util-to-parse5": "^8.0.0",
+ "html-void-elements": "^3.0.0",
+ "mdast-util-to-hast": "^13.0.0",
+ "parse5": "^7.0.0",
+ "unist-util-position": "^5.0.0",
+ "unist-util-visit": "^5.0.0",
+ "vfile": "^6.0.0",
+ "web-namespaces": "^2.0.0",
+ "zwitch": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/hast-util-to-estree": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz",
@@ -3083,6 +3606,7 @@
"version": "9.0.5",
"resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz",
"integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==",
+ "license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0",
"@types/unist": "^3.0.0",
@@ -3127,10 +3651,30 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/hast-util-to-parse5": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.1.tgz",
+ "integrity": "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "devlop": "^1.0.0",
+ "property-information": "^7.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "web-namespaces": "^2.0.0",
+ "zwitch": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/hast-util-to-string": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.1.tgz",
"integrity": "sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==",
+ "license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0"
},
@@ -3151,10 +3695,28 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/hastscript": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz",
+ "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "hast-util-parse-selector": "^4.0.0",
+ "property-information": "^7.0.0",
+ "space-separated-tokens": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/html-void-elements": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz",
"integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -3247,6 +3809,42 @@
"js-yaml": "bin/js-yaml.js"
}
},
+ "node_modules/json-pointer": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/json-pointer/-/json-pointer-0.6.2.tgz",
+ "integrity": "sha512-vLWcKbOaXlO+jvRy4qNd+TI1QUPZzfJj1tpJ3vAXDych5XJf93ftpUKe5pKCrzyIIwgBJcOcCVRUfqQP25afBw==",
+ "license": "MIT",
+ "dependencies": {
+ "foreach": "^2.0.4"
+ }
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "license": "MIT"
+ },
+ "node_modules/jsonpointer": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz",
+ "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/leven": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/leven/-/leven-4.1.0.tgz",
+ "integrity": "sha512-KZ9W9nWDT7rF7Dazg8xyLHGLrmpgq2nVNFUckhqdW3szVP6YhCpp/RAnpmVExA9JvrMynjwSLVrEj3AepHR6ew==",
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/lightningcss": {
"version": "1.30.2",
"resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.2.tgz",
@@ -3496,11 +4094,6 @@
"url": "https://opencollective.com/parcel"
}
},
- "node_modules/lodash.merge": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
- },
"node_modules/longest-streak": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz",
@@ -4499,6 +5092,47 @@
}
]
},
+ "node_modules/motion": {
+ "version": "12.34.3",
+ "resolved": "https://registry.npmjs.org/motion/-/motion-12.34.3.tgz",
+ "integrity": "sha512-xZIkBGO7v/Uvm+EyaqYd+9IpXu0sZqLywVlGdCFrrMiaO9JI4Kx51mO9KlHSWwll+gZUVY5OJsWgYI5FywJ/tw==",
+ "license": "MIT",
+ "dependencies": {
+ "framer-motion": "^12.34.3",
+ "tslib": "^2.4.0"
+ },
+ "peerDependencies": {
+ "@emotion/is-prop-valid": "*",
+ "react": "^18.0.0 || ^19.0.0",
+ "react-dom": "^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@emotion/is-prop-valid": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ },
+ "react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/motion-dom": {
+ "version": "12.34.3",
+ "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.34.3.tgz",
+ "integrity": "sha512-sYgFe+pR9aIM7o4fhs2aXtOI+oqlUd33N9Yoxcgo1Fv7M20sRkHtCmzE/VRNIcq7uNJ+qio+Xubt1FXH3pQ+eQ==",
+ "license": "MIT",
+ "dependencies": {
+ "motion-utils": "^12.29.2"
+ }
+ },
+ "node_modules/motion-utils": {
+ "version": "12.29.2",
+ "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.29.2.tgz",
+ "integrity": "sha512-G3kc34H2cX2gI63RqU+cZq+zWRRPSsNIOjpdl9TN4AQwC4sgwYPl/Q/Obf/d53nOm569T0fYK+tcoSV50BWx8A==",
+ "license": "MIT"
+ },
"node_modules/ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
@@ -4629,18 +5263,31 @@
"node_modules/oniguruma-parser": {
"version": "0.12.1",
"resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz",
- "integrity": "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w=="
+ "integrity": "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==",
+ "license": "MIT"
},
"node_modules/oniguruma-to-es": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.4.tgz",
"integrity": "sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==",
+ "license": "MIT",
"dependencies": {
"oniguruma-parser": "^0.12.1",
"regex": "^6.0.1",
"regex-recursion": "^6.0.2"
}
},
+ "node_modules/openapi-sampler": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/openapi-sampler/-/openapi-sampler-1.7.0.tgz",
+ "integrity": "sha512-fWq32F5vqGpgRJYIarC/9Y1wC9tKnRDcCOjsDJ7MIcSv2HsE7kNifcXIZ8FVtNStBUWxYrEk/MKqVF0SwZ5gog==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/json-schema": "^7.0.7",
+ "fast-xml-parser": "^5.3.4",
+ "json-pointer": "0.6.2"
+ }
+ },
"node_modules/parse-entities": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz",
@@ -4664,6 +5311,18 @@
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
"integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="
},
+ "node_modules/parse5": {
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz",
+ "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==",
+ "license": "MIT",
+ "dependencies": {
+ "entities": "^6.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/inikulin/parse5?sponsor=1"
+ }
+ },
"node_modules/path-to-regexp": {
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz",
@@ -4673,6 +5332,12 @@
"url": "https://opencollective.com/express"
}
},
+ "node_modules/pathe": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
+ "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
+ "license": "MIT"
+ },
"node_modules/picocolors": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
@@ -4721,6 +5386,7 @@
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz",
"integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==",
+ "license": "MIT",
"dependencies": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
@@ -4755,6 +5421,22 @@
"react": "^19.2.3"
}
},
+ "node_modules/react-hook-form": {
+ "version": "7.71.1",
+ "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.71.1.tgz",
+ "integrity": "sha512-9SUJKCGKo8HUSsCO+y0CtqkqI5nNuaDqTxyqPsZPqIwudpj4rCrAz/jZV+jn57bx5gtZKOh3neQu94DXMc+w5w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/react-hook-form"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17 || ^18 || ^19"
+ }
+ },
"node_modules/react-medium-image-zoom": {
"version": "5.4.0",
"resolved": "https://registry.npmjs.org/react-medium-image-zoom/-/react-medium-image-zoom-5.4.0.tgz",
@@ -4915,6 +5597,7 @@
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz",
"integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==",
+ "license": "MIT",
"dependencies": {
"regex-utilities": "^2.3.0"
}
@@ -4923,6 +5606,7 @@
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz",
"integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==",
+ "license": "MIT",
"dependencies": {
"regex-utilities": "^2.3.0"
}
@@ -4930,7 +5614,23 @@
"node_modules/regex-utilities": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz",
- "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng=="
+ "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==",
+ "license": "MIT"
+ },
+ "node_modules/rehype-raw": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz",
+ "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "hast-util-raw": "^9.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
},
"node_modules/rehype-recma": {
"version": "1.0.0",
@@ -5036,6 +5736,24 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/require-from-string": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sax": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.4.tgz",
+ "integrity": "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==",
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">=11.0.0"
+ }
+ },
"node_modules/scheduler": {
"version": "0.27.0",
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz",
@@ -5106,16 +5824,17 @@
}
},
"node_modules/shiki": {
- "version": "3.20.0",
- "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.20.0.tgz",
- "integrity": "sha512-kgCOlsnyWb+p0WU+01RjkCH+eBVsjL1jOwUYWv0YDWkM2/A46+LDKVs5yZCUXjJG6bj4ndFoAg5iLIIue6dulg==",
- "dependencies": {
- "@shikijs/core": "3.20.0",
- "@shikijs/engine-javascript": "3.20.0",
- "@shikijs/engine-oniguruma": "3.20.0",
- "@shikijs/langs": "3.20.0",
- "@shikijs/themes": "3.20.0",
- "@shikijs/types": "3.20.0",
+ "version": "3.22.0",
+ "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.22.0.tgz",
+ "integrity": "sha512-LBnhsoYEe0Eou4e1VgJACes+O6S6QC0w71fCSp5Oya79inkwkm15gQ1UF6VtQ8j/taMDh79hAB49WUk8ALQW3g==",
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/core": "3.22.0",
+ "@shikijs/engine-javascript": "3.22.0",
+ "@shikijs/engine-oniguruma": "3.22.0",
+ "@shikijs/langs": "3.22.0",
+ "@shikijs/themes": "3.22.0",
+ "@shikijs/types": "3.22.0",
"@shikijs/vscode-textmate": "^10.0.2",
"@types/hast": "^3.0.4"
}
@@ -5158,6 +5877,18 @@
"url": "https://github.com/sponsors/wooorm"
}
},
+ "node_modules/strnum": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.2.tgz",
+ "integrity": "sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/NaturalIntelligence"
+ }
+ ],
+ "license": "MIT"
+ },
"node_modules/style-to-js": {
"version": "1.1.21",
"resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.21.tgz",
@@ -5197,9 +5928,10 @@
}
},
"node_modules/tailwind-merge": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.4.0.tgz",
- "integrity": "sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==",
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.5.0.tgz",
+ "integrity": "sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==",
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/dcastil"
@@ -5368,9 +6100,10 @@
}
},
"node_modules/unist-util-visit": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz",
- "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz",
+ "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==",
+ "license": "MIT",
"dependencies": {
"@types/unist": "^3.0.0",
"unist-util-is": "^6.0.0",
@@ -5438,7 +6171,8 @@
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "license": "MIT"
},
"node_modules/vfile": {
"version": "6.0.3",
@@ -5453,6 +6187,20 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/vfile-location": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz",
+ "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/vfile-message": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz",
@@ -5466,6 +6214,43 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/web-namespaces": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz",
+ "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/xml-js": {
+ "version": "1.6.11",
+ "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz",
+ "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==",
+ "license": "MIT",
+ "dependencies": {
+ "sax": "^1.2.4"
+ },
+ "bin": {
+ "xml-js": "bin/cli.js"
+ }
+ },
+ "node_modules/yaml": {
+ "version": "2.8.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz",
+ "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==",
+ "license": "ISC",
+ "bin": {
+ "yaml": "bin.mjs"
+ },
+ "engines": {
+ "node": ">= 14.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/eemeli"
+ }
+ },
"node_modules/zod": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/zod/-/zod-4.2.1.tgz",
diff --git a/package.json b/package.json
index 55872e600..1bea9039d 100644
--- a/package.json
+++ b/package.json
@@ -11,13 +11,15 @@
},
"dependencies": {
"@orama/orama": "^3.1.17",
- "fumadocs-core": "16.2.5",
+ "fumadocs-core": "^16.6.4",
"fumadocs-mdx": "14.1.1",
- "fumadocs-ui": "16.2.5",
+ "fumadocs-openapi": "^10.3.7",
+ "fumadocs-ui": "^16.6.4",
"lucide-react": "^0.556.0",
"next": "16.0.10",
"react": "^19.2.1",
- "react-dom": "^19.2.1"
+ "react-dom": "^19.2.1",
+ "shiki": "^3.22.0"
},
"devDependencies": {
"@tailwindcss/postcss": "^4.1.17",
diff --git a/public/community/config/eggs/Pterodactyl_Create_New_Egg.png b/public/community/config/eggs/Pterodactyl_Create_New_Egg.png
new file mode 100644
index 000000000..24c0b786d
Binary files /dev/null and b/public/community/config/eggs/Pterodactyl_Create_New_Egg.png differ
diff --git a/public/community/config/eggs/Pterodactyl_Create_New_Egg_Copy_Settings_From.png b/public/community/config/eggs/Pterodactyl_Create_New_Egg_Copy_Settings_From.png
index d0cf7c097..402a9fc1e 100644
Binary files a/public/community/config/eggs/Pterodactyl_Create_New_Egg_Copy_Settings_From.png and b/public/community/config/eggs/Pterodactyl_Create_New_Egg_Copy_Settings_From.png differ
diff --git a/public/community/config/eggs/Pterodactyl_Create_New_Egg_Process_Management.png b/public/community/config/eggs/Pterodactyl_Create_New_Egg_Process_Management.png
index eac159d1c..fc27bf4a2 100644
Binary files a/public/community/config/eggs/Pterodactyl_Create_New_Egg_Process_Management.png and b/public/community/config/eggs/Pterodactyl_Create_New_Egg_Process_Management.png differ
diff --git a/public/community/config/eggs/Pterodactyl_Create_New_Egg_Select.png b/public/community/config/eggs/Pterodactyl_Create_New_Egg_Select.png
index 4e9297c70..cd0ecbb85 100644
Binary files a/public/community/config/eggs/Pterodactyl_Create_New_Egg_Select.png and b/public/community/config/eggs/Pterodactyl_Create_New_Egg_Select.png differ
diff --git a/public/community/config/eggs/Pterodactyl_Create_New_Egg_Startup.png b/public/community/config/eggs/Pterodactyl_Create_New_Egg_Startup.png
index 42054a53b..1145f0b53 100644
Binary files a/public/community/config/eggs/Pterodactyl_Create_New_Egg_Startup.png and b/public/community/config/eggs/Pterodactyl_Create_New_Egg_Startup.png differ
diff --git a/public/community/config/eggs/Pterodactyl_Create_New_Egg_Variables.png b/public/community/config/eggs/Pterodactyl_Create_New_Egg_Variables.png
index d0c816209..72db5a3c4 100644
Binary files a/public/community/config/eggs/Pterodactyl_Create_New_Egg_Variables.png and b/public/community/config/eggs/Pterodactyl_Create_New_Egg_Variables.png differ
diff --git a/public/community/config/eggs/Pterodactyl_Create_New_Nest.png b/public/community/config/eggs/Pterodactyl_Create_New_Nest.png
new file mode 100644
index 000000000..4373e64f9
Binary files /dev/null and b/public/community/config/eggs/Pterodactyl_Create_New_Nest.png differ