Compare commits

...

67 Commits

Author SHA1 Message Date
961d2021bd auto upgrade script 2025-06-21 19:46:30 +02:00
e52500ad47 fix update.sh 2025-06-21 16:09:48 +02:00
3732d690db fix Dockerfile 2025-06-21 14:47:35 +02:00
a123145d84 version bump 2025-06-21 14:40:58 +02:00
ada56065cb fix updater 2025-06-21 14:38:11 +02:00
a3db7cbc85 fix installer 2025-06-21 12:43:46 +02:00
d2eb2c4e4a fix tests (#619)
* fix tests

* fix tests
2025-06-21 10:21:35 +02:00
7bfa9ef91d use redis for queues, sessions and cache (#618) 2025-06-21 09:48:07 +02:00
3196c0d954 fix installer 2025-06-20 13:32:50 +02:00
45521d2616 fix githook deletion 2025-06-20 00:13:54 +02:00
7a94e28da2 fix optimizer 2025-06-20 00:02:22 +02:00
cf9bb35615 fix phpstan 2025-06-19 21:29:34 +02:00
9a3578f3ac fix docker ssh issue by downgrading phpseclib 2025-06-19 21:25:25 +02:00
632a56bf4d fix importer on docker 2025-06-19 19:45:09 +02:00
f97fffe654 fix importer
fix plugins on docker
2025-06-19 16:41:46 +02:00
2081bdd46e add log viewer 2025-06-19 15:32:52 +02:00
48c4d53d31 optimize docker 2025-06-19 15:07:15 +02:00
69939f8aad fix docker 2025-06-19 14:49:01 +02:00
798542673f fix docker 2025-06-19 14:23:33 +02:00
49c29de962 fix command typo 2025-06-19 14:12:27 +02:00
342a3aa4c6 Plugins (#616)
* wip

* fix plugin uninstall

* marketplace
2025-06-19 14:07:15 +02:00
131b828807 Plugins base (#613)
* wip

* wip

* cleanup

* notification channels

* phpstan

* services

* remove server types

* refactoring

* refactoring
2025-06-14 14:35:18 +02:00
adc0653d15 api-docs fix 2025-06-10 12:23:42 +02:00
c6ed3f029d upgrade installer to php 8.4 2025-06-10 00:26:09 +02:00
eceacffb0d docker php upgrade 2025-06-10 00:16:51 +02:00
09a9735962 reverse proxy basics (#609) 2025-06-10 00:14:05 +02:00
4e6491a080 Export and Import vito settings (#606)
* Export and Import vito settings

* fix tests
2025-06-05 17:01:22 +02:00
8e8859b305 #591 - fix tests 2025-06-04 21:40:26 +02:00
56baba74d7 #591 - fix tests 2025-06-04 21:36:01 +02:00
ab68964d43 #591 - load balancer 2025-06-04 21:30:47 +02:00
0bd390f27c #591 - force npm 2025-06-04 19:05:34 +02:00
f8f8d57fe2 #591 - tests 2025-06-04 19:04:02 +02:00
35894003f5 #591 - scripts 2025-06-04 15:38:07 +02:00
c3f69f3247 #591 - sites 2025-06-04 08:08:20 +02:00
efacadba10 #591 - node 2025-06-01 12:02:25 +02:00
84476db764 #591 - php 2025-06-01 11:31:09 +02:00
41388dafbf #591 - server-settings 2025-05-31 20:33:36 +02:00
0b7dd1732b #591 - console 2025-05-31 12:39:46 +02:00
c09c7a63fa #591 - monitoring 2025-05-31 00:18:04 +02:00
857319025f #591 - server-logs 2025-05-30 13:52:39 +02:00
104cd2fce8 #591 - services 2025-05-30 11:02:07 +02:00
1b9f826bcb #591 - fix server-ssh-keys 2025-05-29 21:24:47 +02:00
0fce4dba9c #591 - server-ssh-keys 2025-05-29 21:20:33 +02:00
8b6f65db97 #591 - workers 2025-05-29 20:05:13 +02:00
984c1f3a8e Add Caddy Server Support Alongside Nginx (#600)
* added enum

* add config for caddy

* add svg icon

* add caddy service class

* wip

* install caddy

* create base Caddyfile with common snippets

* Create a systemd service to run Caddy in the background.

* create uninstall file

* wip

* create path

* create vhost

* get vhost

* delete site

* add php version change file

* add custom ssl

* create redirect file

* add vhost for caddy site & load balancer

* update svg

* fix caddy icon

* fix style

* add systemctl reload method

* Reload systemd after modifying the Caddy service file.

* add caddy

* added tests

* format with pint

* prevent multiple web server installations

* added error log & access log

(cherry picked from commit 2318e1b1df)
2025-05-29 11:39:00 +02:00
61506ff70e #591 - cron jobs 2025-05-28 00:19:25 +02:00
6032bd1098 #591 - firewall 2025-05-27 00:30:29 +02:00
f5fdbae4ac #591 - sites [wip] 2025-05-25 22:17:19 +02:00
ff11fb44e0 #591 - backups 2025-05-23 18:27:24 +02:00
a5ce0d33b3 Fix mysqldump backup error
This reverts commit 564b97e2aa.
2025-05-21 21:05:16 +02:00
a40c2828c2 #591 - backups 2025-05-21 21:05:13 +02:00
fe3317692b #591 - database-users 2025-05-21 17:21:10 +02:00
2850c1fa59 #591 - databases 2025-05-20 17:35:20 +02:00
eb86204069 #591 - api keys 2025-05-20 08:15:10 +02:00
f7ac3c32f0 #591 - fix typo 2025-05-19 22:40:42 +02:00
61faaabb85 #591 - tags 2025-05-19 22:22:21 +02:00
04d52f6742 #591 - ssh-keys 2025-05-19 20:55:32 +02:00
cdc012c270 #591 - notification-channels 2025-05-19 20:05:38 +02:00
563b9c5909 #591 - storage-providers 2025-05-19 00:13:17 +02:00
5a00d35eba #591 - source-controls 2025-05-18 23:46:28 +02:00
1ed5d7362b #591 - server-providers 2025-05-18 21:12:06 +02:00
8b4d156afa #591 - profile, users and projects 2025-05-18 18:25:27 +02:00
edd4ba1bc2 #591 - app search bar UI 2025-05-15 22:38:24 +03:00
b8ba83949b projects 2025-05-15 14:23:26 +03:00
a81e9b18b7 dashboard layout (#597) 2025-05-13 23:42:22 +03:00
38bafd7654 Setup Inertia (#593) 2025-05-10 11:10:11 +03:00
6eb88c7c6e laravel 12 upgrade (#586)
* laravel 12 upgrade

* upgrade scribe to v5

* fix lint
2025-04-21 21:56:53 +02:00
1024 changed files with 52031 additions and 32349 deletions

View File

@ -3,12 +3,15 @@ root = true
[*] [*]
charset = utf-8 charset = utf-8
end_of_line = lf end_of_line = lf
indent_size = 4 indent_size = 2
indent_style = space indent_style = space
insert_final_newline = true insert_final_newline = true
trim_trailing_whitespace = true trim_trailing_whitespace = true
ij_any_block_comment_at_first_column = false ij_any_block_comment_at_first_column = false
[{*.php,composer.json,composer.lock}]
indent_size = 4
[*.md] [*.md]
trim_trailing_whitespace = false trim_trailing_whitespace = false

View File

@ -15,3 +15,6 @@ MAIL_PASSWORD=null
MAIL_ENCRYPTION=null MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS="noreply@${APP_NAME}" MAIL_FROM_ADDRESS="noreply@${APP_NAME}"
MAIL_FROM_NAME="${APP_NAME}" MAIL_FROM_NAME="${APP_NAME}"
REDIS_HOST=redis
REDIS_PORT=6379

View File

@ -4,9 +4,11 @@ on:
push: push:
branches: branches:
- 2.x - 2.x
- 3.x
pull_request: pull_request:
branches: branches:
- 2.x - 2.x
- 3.x
jobs: jobs:
tests: tests:
@ -15,7 +17,7 @@ jobs:
strategy: strategy:
fail-fast: true fail-fast: true
matrix: matrix:
php: [ 8.2 ] php: [ 8.4 ]
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4

View File

@ -6,6 +6,7 @@ on:
- main - main
- 1.x - 1.x
- 2.x - 2.x
- 3.x
pull_request: pull_request:
jobs: jobs:
@ -15,7 +16,7 @@ jobs:
strategy: strategy:
fail-fast: true fail-fast: true
matrix: matrix:
php: [ 8.2 ] php: [ 8.4 ]
node-version: [ "20.x" ] node-version: [ "20.x" ]
steps: steps:
@ -48,7 +49,7 @@ jobs:
node-version: "20.x" node-version: "20.x"
- name: Install NPM Dependencies - name: Install NPM Dependencies
run: npm install run: npm install --force
- name: Run lint - name: Run lint
run: npm run lint run: npm run lint

View File

@ -6,6 +6,7 @@ on:
- main - main
- 1.x - 1.x
- 2.x - 2.x
- 3.x
pull_request: pull_request:
jobs: jobs:
@ -15,7 +16,8 @@ jobs:
strategy: strategy:
fail-fast: true fail-fast: true
matrix: matrix:
php: [ 8.2 ] php: [ 8.4 ]
node-version: [ "22.x" ]
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
@ -44,5 +46,19 @@ jobs:
- name: Set up the .env file - name: Set up the .env file
run: touch .env run: touch .env
- name: Generate Application Key
run: php artisan key:generate
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "22.x"
- name: Install NPM Dependencies
run: npm install --force
- name: Build assets
run: npm run build
- name: Run test suite - name: Run test suite
run: php artisan test run: php artisan test

1
.gitignore vendored
View File

@ -22,3 +22,4 @@ yarn-error.log
/.idea /.idea
/.vscode /.vscode
laradumps.yaml laradumps.yaml
/public/build

View File

@ -13,3 +13,6 @@ sail
!*.blade.php !*.blade.php
!*.sh !*.sh
resources/views/ssh/ resources/views/ssh/
resources/views/scribe/
resources/js/ziggy.js
resources/views/mail/*

View File

@ -1,26 +1,46 @@
{ {
"plugins": [ "semi": true,
"prettier-plugin-blade", "singleQuote": true,
"prettier-plugin-tailwindcss", "singleAttributePerLine": false,
"prettier-plugin-sh" "htmlWhitespaceSensitivity": "css",
], "printWidth": 150,
"overrides": [ "tailwindFunctions": [
{ "clsx",
"files": ["*.blade.php"], "cn"
"options": { ],
"parser": "blade", "tabWidth": 2,
"printWidth": 120, "plugins": [
"htmlWhitespaceSensitivity": "ignore", "prettier-plugin-blade",
"tabWidth": 4, "prettier-plugin-tailwindcss",
"quoteProps": "consistent", "prettier-plugin-sh"
"trailingComma": "none" ],
} "overrides": [
}, {
{ "files": [
"files": ["*.sh"], "*.blade.php"
"options": { ],
"parser": "sh" "options": {
} "parser": "blade",
} "printWidth": 120,
] "htmlWhitespaceSensitivity": "ignore",
"tabWidth": 4,
"quoteProps": "consistent",
"trailingComma": "none"
}
},
{
"files": [
"*.sh"
],
"options": {
"parser": "sh"
}
},
{
"files": "**/*.yml",
"options": {
"tabWidth": 2
}
}
]
} }

View File

@ -1,4 +1,4 @@
# GENERATED. YOU SHOULDN'T MODIFY OR DELETE THIS FILE. # GENERATED. YOU SHOULDN'T MODIFY OR DELETE THIS FILE.
# Scribe uses this file to know when you change something manually in your docs. # Scribe uses this file to know when you change something manually in your docs.
.scribe/intro.md=98adb6862b118c06e02e4e22390feb6f .scribe/intro.md=ce7ca21baf0406f807aed85ee1d8fa6e
.scribe/auth.md=7fcc12b2e5a86fa9c49f509d348f3cc2 .scribe/auth.md=9bee2b1ef8a238b2e58613fa636d5f39

View File

@ -1,7 +1,3 @@
# Authenticating requests # Authenticating requests
To authenticate requests, include an **`Authorization`** header with the value **`"Bearer YOUR-API-KEY"`**. This API is not authenticated.
All authenticated endpoints are marked with a `requires authentication` badge in the documentation below.
You can retrieve your token by visiting <a href="/settings/api-keys" target="_blank">here</a>

View File

@ -1,292 +1,160 @@
## Autogenerated by Scribe. DO NOT MODIFY. ## Autogenerated by Scribe. DO NOT MODIFY.
name: cron-jobs name: Endpoints
description: '' description: ''
endpoints: endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs'
metadata:
groupName: cron-jobs
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: list
description: 'Get all cron jobs.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"data":[{"id":null,"server_id":null,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","created_at":null,"updated_at":null},{"id":null,"server_id":null,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer eDa6Vdh1Z4vc35bP8E6gafk'
controller: null
method: null
route: null
custom: []
- -
httpMethods: httpMethods:
- POST - POST
uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs' uri: 'api/servers/{server_id}/agent/{id}'
metadata: metadata:
groupName: cron-jobs groupName: Endpoints
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: create title: ''
description: 'Create a new cron job.' description: ''
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id: server_id:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters:
command:
name: command
description: ''
required: true
example: quia
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
user:
name: user
description: ''
required: true
example: root
type: string
enumValues:
- root
- vito
exampleWasSpecified: false
nullable: false
custom: []
frequency:
name: frequency
description: 'Frequency of the cron job.'
required: true
example: '* * * * *'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
command: quia
user: root
frequency: '* * * * *'
fileParameters: []
responses:
-
status: 200
content: '{"id":null,"server_id":null,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer 66EeZvdh3kVaDP8f4ga5c1b'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs/{cronJob_id}'
metadata:
groupName: cron-jobs
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a cron job by ID.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cronJob_id:
name: cronJob_id
description: 'The ID of the cronJob.'
required: true
example: 6 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
id:
name: id
description: 'The ID of the agent.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 server_id: 6
server_id: 29 id: architecto
cronJob_id: 6
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters:
cleanBodyParameters: [] load:
fileParameters: [] name: load
responses:
-
status: 200
content: '{"id":null,"server_id":null,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","created_at":null,"updated_at":null}'
headers: []
description: '' description: ''
required: true
example: 4326.41688
type: number
enumValues: []
exampleWasSpecified: false
nullable: false
custom: [] custom: []
memory_total:
name: memory_total
description: ''
required: true
example: 4326.41688
type: number
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
memory_used:
name: memory_used
description: ''
required: true
example: 4326.41688
type: number
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
memory_free:
name: memory_free
description: ''
required: true
example: 4326.41688
type: number
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
disk_total:
name: disk_total
description: ''
required: true
example: 4326.41688
type: number
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
disk_used:
name: disk_used
description: ''
required: true
example: 4326.41688
type: number
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
disk_free:
name: disk_free
description: ''
required: true
example: 4326.41688
type: number
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
load: 4326.41688
memory_total: 4326.41688
memory_used: 4326.41688
memory_free: 4326.41688
disk_total: 4326.41688
disk_used: 4326.41688
disk_free: 4326.41688
fileParameters: []
responses: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer D4c3Z65ebv8E16fahaVgPdk'
controller: null controller: null
method: null method: null
route: null route: null
custom: [] custom: []
- -
httpMethods: httpMethods:
- DELETE 0: GET
uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs/{cronJob_id}' 2: POST
3: PUT
4: PATCH
5: DELETE
6: OPTIONS
uri: api/git-hooks
metadata: metadata:
groupName: cron-jobs groupName: Endpoints
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: delete title: ''
description: 'Delete cron job.' description: ''
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters: []
project_id: cleanUrlParameters: []
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cronJob_id:
name: cronJob_id
description: 'The ID of the cronJob.'
required: true
example: 13
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
cronJob_id: 13
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -294,16 +162,21 @@ endpoints:
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 204 status: 404
content: null content: |-
headers: [] {
description: '' "message": ""
}
headers:
cache-control: 'no-cache, private'
content-type: application/json
x-ratelimit-limit: '60'
x-ratelimit-remaining: '57'
access-control-allow-origin: '*'
description: null
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer h3cP4aZa1v8feDdEg5b6k6V'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -1,23 +1,22 @@
## Autogenerated by Scribe. DO NOT MODIFY. ## Autogenerated by Scribe. DO NOT MODIFY.
name: databases name: cron-jobs
description: '' description: ''
endpoints: endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers/{server_id}/databases' uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs'
metadata: metadata:
groupName: databases groupName: cron-jobs
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all databases.' description: 'Get all cron jobs.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -35,7 +34,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 29 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -43,7 +42,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29 server_id: 6
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -52,15 +51,12 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":null,"server_id":null,"name":"leffler.esther","status":"ready","created_at":null,"updated_at":null},{"id":null,"server_id":null,"name":"rhoda.rutherford","status":"ready","created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":3,"server_id":1,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":4,"server_id":1,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer E1VdfegZah4k86b53Dc6Pva'
controller: null controller: null
method: null method: null
route: null route: null
@ -68,18 +64,17 @@ endpoints:
- -
httpMethods: httpMethods:
- POST - POST
uri: 'api/projects/{project_id}/servers/{server_id}/databases' uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs'
metadata: metadata:
groupName: databases groupName: cron-jobs
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Create a new database.' description: 'Create a new cron job.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -97,7 +92,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 29 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -105,57 +100,56 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29 server_id: 6
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
name: command:
name: name name: command
description: '' description: ''
required: true required: true
example: quisquam example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
charset: user:
name: charset name: user
description: '' description: ''
required: true required: true
example: omnis example: vito
type: string type: string
enumValues: [] enumValues:
- root
- vito
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
collation: frequency:
name: collation name: frequency
description: '' description: 'Frequency of the cron job.'
required: true required: true
example: at example: '* * * * *'
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
name: quisquam command: architecto
charset: omnis user: vito
collation: at frequency: '* * * * *'
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":null,"server_id":null,"name":"csawayn","status":"ready","created_at":null,"updated_at":null}' content: '{"id":3,"server_id":1,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer PVgkZ35ca4afd1EbD8ehv66'
controller: null controller: null
method: null method: null
route: null route: null
@ -163,18 +157,17 @@ endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers/{server_id}/databases/{id}' uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs/{cronJob_id}'
metadata: metadata:
groupName: databases groupName: cron-jobs
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: 'Get a database by ID.' description: 'Get a cron job by ID.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -192,17 +185,17 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 29 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
id: cronJob_id:
name: id name: cronJob_id
description: 'The ID of the database.' description: 'The ID of the cronJob.'
required: true required: true
example: 8 example: 1
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -210,8 +203,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29 server_id: 6
id: 8 cronJob_id: 1
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -220,15 +213,12 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":null,"server_id":null,"name":"sandrine43","status":"ready","created_at":null,"updated_at":null}' content: '{"id":3,"server_id":1,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer EP64D8g51adf6hbceavVZ3k'
controller: null controller: null
method: null method: null
route: null route: null
@ -236,18 +226,17 @@ endpoints:
- -
httpMethods: httpMethods:
- DELETE - DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/databases/{database_id}' uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs/{cronJob_id}'
metadata: metadata:
groupName: databases groupName: cron-jobs
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete database.' description: 'Delete cron job.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -265,17 +254,17 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 29 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
database_id: cronJob_id:
name: database_id name: cronJob_id
description: 'The ID of the database.' description: 'The ID of the cronJob.'
required: true required: true
example: 8 example: 1
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -283,8 +272,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29 server_id: 6
database_id: 8 cronJob_id: 1
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -298,10 +287,7 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer 8dgEk3Zv1eaVP66bDhf4ac5'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -1,23 +1,22 @@
## Autogenerated by Scribe. DO NOT MODIFY. ## Autogenerated by Scribe. DO NOT MODIFY.
name: database-users name: databases
description: '' description: ''
endpoints: endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers/{server_id}/database-users' uri: 'api/projects/{project_id}/servers/{server_id}/databases'
metadata: metadata:
groupName: database-users groupName: databases
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all database users.' description: 'Get all databases.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -35,7 +34,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 29 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -43,7 +42,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29 server_id: 6
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -52,15 +51,12 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":null,"server_id":null,"username":"letha64","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null},{"id":null,"server_id":null,"username":"hagenes.lurline","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":9,"server_id":1,"name":"zbailey","collation":null,"charset":null,"status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":10,"server_id":1,"name":"rempel.chadrick","collation":null,"charset":null,"status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer d4g15bV3Pa6hDvck6eaEf8Z'
controller: null controller: null
method: null method: null
route: null route: null
@ -68,18 +64,17 @@ endpoints:
- -
httpMethods: httpMethods:
- POST - POST
uri: 'api/projects/{project_id}/servers/{server_id}/database-users' uri: 'api/projects/{project_id}/servers/{server_id}/databases'
metadata: metadata:
groupName: database-users groupName: databases
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Create a new database user.' description: 'Create a new database.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -97,7 +92,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 29 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -105,57 +100,54 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29 server_id: 6
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
username: name:
name: username name: name
description: '' description: ''
required: true required: true
example: qui example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
password: charset:
name: password name: charset
description: '' description: ''
required: true required: true
example: 'xYv*3,#HQ=5<w!' example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
host: collation:
name: host name: collation
description: 'Host, if it is a remote user.' description: ''
required: true required: true
example: '%' example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
username: qui name: architecto
password: 'xYv*3,#HQ=5<w!' charset: architecto
host: '%' collation: architecto
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":null,"server_id":null,"username":"marcelle95","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null}' content: '{"id":9,"server_id":1,"name":"zbailey","collation":null,"charset":null,"status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer 3vZ6f6kagacDEhV1Pde5b84'
controller: null controller: null
method: null method: null
route: null route: null
@ -163,18 +155,17 @@ endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers/{server_id}/database-users/{databaseUser_id}' uri: 'api/projects/{project_id}/servers/{server_id}/databases/{id}'
metadata: metadata:
groupName: database-users groupName: databases
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: 'Get a database user by ID.' description: 'Get a database by ID.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -192,17 +183,17 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 29 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
databaseUser_id: id:
name: databaseUser_id name: id
description: 'The ID of the databaseUser.' description: 'The ID of the database.'
required: true required: true
example: 1 example: 8
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -210,8 +201,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29 server_id: 6
databaseUser_id: 1 id: 8
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -220,99 +211,12 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":null,"server_id":null,"username":"brandi53","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null}' content: '{"id":9,"server_id":1,"name":"rempel.chadrick","collation":null,"charset":null,"status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer af3b5ac6dP8ZV4vE1hk6eDg'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/database-users/{databaseUser_id}/link'
metadata:
groupName: database-users
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: link
description: 'Link to databases'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
databaseUser_id:
name: databaseUser_id
description: 'The ID of the databaseUser.'
required: true
example: 4
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
databaseUser_id: 4
queryParameters: []
cleanQueryParameters: []
bodyParameters:
databases:
name: databases
description: 'Array of database names to link to the user.'
required: true
example: maiores
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
databases: maiores
fileParameters: []
responses:
-
status: 200
content: '{"id":null,"server_id":null,"username":"kschmidt","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer b6f3Ed641gaZDcVa5k8vePh'
controller: null controller: null
method: null method: null
route: null route: null
@ -320,18 +224,17 @@ endpoints:
- -
httpMethods: httpMethods:
- DELETE - DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/database-users/{databaseUser_id}' uri: 'api/projects/{project_id}/servers/{server_id}/databases/{database_id}'
metadata: metadata:
groupName: database-users groupName: databases
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete database user.' description: 'Delete database.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -349,17 +252,17 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 29 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
databaseUser_id: database_id:
name: databaseUser_id name: database_id
description: 'The ID of the databaseUser.' description: 'The ID of the database.'
required: true required: true
example: 20 example: 8
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -367,8 +270,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29 server_id: 6
databaseUser_id: 20 database_id: 8
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -382,10 +285,7 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer Zka6fh15g6eaV8vE34cDPdb'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -1,23 +1,22 @@
## Autogenerated by Scribe. DO NOT MODIFY. ## Autogenerated by Scribe. DO NOT MODIFY.
name: firewall-rules name: database-users
description: '' description: ''
endpoints: endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules' uri: 'api/projects/{project_id}/servers/{server_id}/database-users'
metadata: metadata:
groupName: firewall-rules groupName: database-users
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all firewall rules.' description: 'Get all database users.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -35,7 +34,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 29 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -43,7 +42,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29 server_id: 6
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -52,15 +51,12 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":null,"name":"ut","server_id":null,"type":"allow","protocol":"tcp","port":35499,"source":"177.130.54.250","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null},{"id":null,"name":"totam","server_id":null,"type":"allow","protocol":"tcp","port":29448,"source":"181.194.26.13","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":4,"server_id":1,"username":"cartwright.maxine","databases":[],"host":"%","status":"creating","status_color":"warning","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":5,"server_id":1,"username":"gusikowski.eden","databases":[],"host":"%","status":"creating","status_color":"warning","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer eD368kaZfVEab4v61ghdP5c'
controller: null controller: null
method: null method: null
route: null route: null
@ -68,18 +64,17 @@ endpoints:
- -
httpMethods: httpMethods:
- POST - POST
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules' uri: 'api/projects/{project_id}/servers/{server_id}/database-users'
metadata: metadata:
groupName: firewall-rules groupName: database-users
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Create a new firewall rule.' description: 'Create a new database user.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -97,7 +92,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 29 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -105,237 +100,54 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29 server_id: 6
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
name: username:
name: name name: username
description: '' description: ''
required: true required: true
example: sapiente example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
type: password:
name: type name: password
description: '' description: ''
required: true required: true
example: allow example: '|]|{+-'
type: string
enumValues:
- allow
- deny
exampleWasSpecified: false
nullable: false
custom: []
protocol:
name: protocol
description: ''
required: true
example: tcp
type: string
enumValues:
- tcp
- udp
exampleWasSpecified: false
nullable: false
custom: []
port:
name: port
description: ''
required: true
example: et
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
source: host:
name: source name: host
description: '' description: 'Host, if it is a remote user.'
required: false
example: doloribus
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
mask:
name: mask
description: 'Mask for source IP.'
required: true required: true
example: '0' example: '%'
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
name: sapiente username: architecto
type: allow password: '|]|{+-'
protocol: tcp host: '%'
port: et
source: doloribus
mask: '0'
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":null,"name":"omnis","server_id":null,"type":"allow","protocol":"tcp","port":54634,"source":"246.242.9.65","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null}' content: '{"id":4,"server_id":1,"username":"justina.gaylord","databases":[],"host":"%","status":"creating","status_color":"warning","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer 3184PbED6aacZveV6hf5dgk'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- PUT
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules/{firewallRule_id}'
metadata:
groupName: firewall-rules
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: edit
description: 'Update an existing firewall rule.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
firewallRule_id:
name: firewallRule_id
description: 'The ID of the firewallRule.'
required: true
example: 85
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
firewallRule_id: 85
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: ''
required: true
example: et
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
type:
name: type
description: ''
required: true
example: allow
type: string
enumValues:
- allow
- deny
exampleWasSpecified: false
nullable: false
custom: []
protocol:
name: protocol
description: ''
required: true
example: tcp
type: string
enumValues:
- tcp
- udp
exampleWasSpecified: false
nullable: false
custom: []
port:
name: port
description: ''
required: true
example: aut
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
source:
name: source
description: ''
required: false
example: et
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
mask:
name: mask
description: 'Mask for source IP.'
required: true
example: '0'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: et
type: allow
protocol: tcp
port: aut
source: et
mask: '0'
fileParameters: []
responses:
-
status: 200
content: '{"id":null,"name":"consequatur","server_id":null,"type":"allow","protocol":"tcp","port":879,"source":"206.106.27.116","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer ad46E3egPDc51aV6hb8vkZf'
controller: null controller: null
method: null method: null
route: null route: null
@ -343,18 +155,17 @@ endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules/{firewallRule_id}' uri: 'api/projects/{project_id}/servers/{server_id}/database-users/{databaseUser_id}'
metadata: metadata:
groupName: firewall-rules groupName: database-users
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: 'Get a firewall rule by ID.' description: 'Get a database user by ID.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -372,17 +183,17 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 29 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
firewallRule_id: databaseUser_id:
name: firewallRule_id name: databaseUser_id
description: 'The ID of the firewallRule.' description: 'The ID of the databaseUser.'
required: true required: true
example: 85 example: 16
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -390,8 +201,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29 server_id: 6
firewallRule_id: 85 databaseUser_id: 16
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -400,34 +211,30 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":null,"name":"dolores","server_id":null,"type":"allow","protocol":"tcp","port":4691,"source":"147.108.28.144","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null}' content: '{"id":4,"server_id":1,"username":"zbailey","databases":[],"host":"%","status":"creating","status_color":"warning","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer 6gkvbDae15a6f43EVPdZh8c'
controller: null controller: null
method: null method: null
route: null route: null
custom: [] custom: []
- -
httpMethods: httpMethods:
- DELETE - POST
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules/{firewallRule_id}' uri: 'api/projects/{project_id}/servers/{server_id}/database-users/{databaseUser_id}/link'
metadata: metadata:
groupName: firewall-rules groupName: database-users
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: delete title: link
description: 'Delete firewall rule.' description: 'Link to databases'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -445,17 +252,17 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 29 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
firewallRule_id: databaseUser_id:
name: firewallRule_id name: databaseUser_id
description: 'The ID of the firewallRule.' description: 'The ID of the databaseUser.'
required: true required: true
example: 85 example: 16
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -463,8 +270,88 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29 server_id: 6
firewallRule_id: 85 databaseUser_id: 16
queryParameters: []
cleanQueryParameters: []
bodyParameters:
databases:
name: databases
description: 'Array of database names to link to the user.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
databases: architecto
fileParameters: []
responses:
-
status: 200
content: '{"id":4,"server_id":1,"username":"zbailey","databases":[],"host":"%","status":"creating","status_color":"warning","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/database-users/{databaseUser_id}'
metadata:
groupName: database-users
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete database user.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
databaseUser_id:
name: databaseUser_id
description: 'The ID of the databaseUser.'
required: true
example: 16
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
databaseUser_id: 16
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -478,10 +365,7 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer ZVd1fk5E3e48hDvaa6g6cPb'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -1,26 +1,48 @@
## Autogenerated by Scribe. DO NOT MODIFY. ## Autogenerated by Scribe. DO NOT MODIFY.
name: general name: firewall-rules
description: '' description: ''
endpoints: endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: api/health uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules'
metadata: metadata:
groupName: general groupName: firewall-rules
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: health-check title: list
description: '' description: 'Get all firewall rules.'
authenticated: false authenticated: false
custom: [] custom: []
headers: headers:
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: [] urlParameters:
cleanUrlParameters: [] project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -29,14 +51,414 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"success":true,"version":"2.4.0"}' content: '{"data":[{"id":22,"name":"eius","server_id":1,"type":"allow","protocol":"tcp","port":9322,"source":"113.14.236.204","mask":"24","note":"test","status":"creating","status_color":"info","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":23,"name":"velit","server_id":1,"type":"allow","protocol":"tcp","port":2983,"source":"199.172.126.144","mask":"24","note":"test","status":"creating","status_color":"info","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: headers: []
cache-control: 'no-cache, private' description: ''
content-type: application/json custom: []
x-ratelimit-limit: '60' responseFields: []
x-ratelimit-remaining: '59' auth: []
access-control-allow-origin: '*' controller: null
description: null method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules'
metadata:
groupName: firewall-rules
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: create
description: 'Create a new firewall rule.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: ''
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
type:
name: type
description: ''
required: true
example: allow
type: string
enumValues:
- allow
- deny
exampleWasSpecified: false
nullable: false
custom: []
protocol:
name: protocol
description: ''
required: true
example: tcp
type: string
enumValues:
- tcp
- udp
exampleWasSpecified: false
nullable: false
custom: []
port:
name: port
description: ''
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
source:
name: source
description: ''
required: false
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
mask:
name: mask
description: 'Mask for source IP.'
required: true
example: '0'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: architecto
type: allow
protocol: tcp
port: architecto
source: architecto
mask: '0'
fileParameters: []
responses:
-
status: 200
content: '{"id":22,"name":"eius","server_id":1,"type":"allow","protocol":"tcp","port":9322,"source":"113.14.236.204","mask":"24","note":"test","status":"creating","status_color":"info","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- PUT
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules/{firewallRule_id}'
metadata:
groupName: firewall-rules
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: edit
description: 'Update an existing firewall rule.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
firewallRule_id:
name: firewallRule_id
description: 'The ID of the firewallRule.'
required: true
example: 19
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
firewallRule_id: 19
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: ''
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
type:
name: type
description: ''
required: true
example: deny
type: string
enumValues:
- allow
- deny
exampleWasSpecified: false
nullable: false
custom: []
protocol:
name: protocol
description: ''
required: true
example: udp
type: string
enumValues:
- tcp
- udp
exampleWasSpecified: false
nullable: false
custom: []
port:
name: port
description: ''
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
source:
name: source
description: ''
required: false
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
mask:
name: mask
description: 'Mask for source IP.'
required: true
example: '0'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: architecto
type: deny
protocol: udp
port: architecto
source: architecto
mask: '0'
fileParameters: []
responses:
-
status: 200
content: '{"id":22,"name":"eius","server_id":1,"type":"allow","protocol":"tcp","port":9322,"source":"113.14.236.204","mask":"24","note":"test","status":"creating","status_color":"info","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules/{firewallRule_id}'
metadata:
groupName: firewall-rules
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a firewall rule by ID.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
firewallRule_id:
name: firewallRule_id
description: 'The ID of the firewallRule.'
required: true
example: 19
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
firewallRule_id: 19
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"id":22,"name":"velit","server_id":1,"type":"allow","protocol":"tcp","port":2983,"source":"199.172.126.144","mask":"24","note":"test","status":"creating","status_color":"info","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules/{firewallRule_id}'
metadata:
groupName: firewall-rules
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete firewall rule.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
firewallRule_id:
name: firewallRule_id
description: 'The ID of the firewallRule.'
required: true
example: 19
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
firewallRule_id: 19
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth: []

View File

@ -1,23 +1,22 @@
## Autogenerated by Scribe. DO NOT MODIFY. ## Autogenerated by Scribe. DO NOT MODIFY.
name: projects name: general
description: '' description: ''
endpoints: endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: api/projects uri: api/health
metadata: metadata:
groupName: projects groupName: general
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: list title: health-check
description: 'Get all projects.' description: ''
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: [] urlParameters: []
@ -30,230 +29,17 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":3,"name":"Mr. Drake Nader","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"},{"id":4,"name":"Wilhelmine Jacobson","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"success":true,"version":"2.5.0"}'
headers: [] headers:
description: '' cache-control: 'no-cache, private'
content-type: application/json
x-ratelimit-limit: '60'
x-ratelimit-remaining: '56'
access-control-allow-origin: '*'
description: null
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer fbPE6haeDZ8v1gV5ak463dc'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: api/projects
metadata:
groupName: projects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: create
description: 'Create a new project.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters: []
cleanUrlParameters: []
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the project.'
required: true
example: dignissimos
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: dignissimos
fileParameters: []
responses:
-
status: 200
content: '{"id":3,"name":"Pattie Cole","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer 6ZkedcEfa5V6Dv4ab8P3g1h'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{id}'
metadata:
groupName: projects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a project by ID.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
id:
name: id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"id":3,"name":"Mr. Elias Bauch","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer P6ka4Zaefgh8Ec3dV15v6bD'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- PUT
uri: 'api/projects/{id}'
metadata:
groupName: projects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: update
description: 'Update project.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
id:
name: id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the project.'
required: true
example: sunt
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: sunt
fileParameters: []
responses:
-
status: 200
content: '{"id":3,"name":"Elfrieda Jakubowski","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer ecaDZkf5E4vgP1V86d6hb3a'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}'
metadata:
groupName: projects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete project.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer h5gZ63DPVbcevE4faka86d1'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -1,60 +1,26 @@
## Autogenerated by Scribe. DO NOT MODIFY. ## Autogenerated by Scribe. DO NOT MODIFY.
name: redirects name: projects
description: '' description: ''
endpoints: endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers/{server_id}/sites/{site_id}/redirects' uri: api/projects
metadata: metadata:
groupName: redirects groupName: projects
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: index title: list
description: 'Get all redirects.' description: 'Get all projects.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters: []
project_id: cleanUrlParameters: []
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
site_id:
name: site_id
description: 'The ID of the site.'
required: true
example: 44
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
site_id: 44
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -63,15 +29,12 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":null,"site_id":null,"mode":307,"from":"ipsum","to":"http:\/\/fritsch.biz\/","status":"ready","created_at":null,"updated_at":null},{"id":null,"site_id":null,"mode":302,"from":"culpa","to":"http:\/\/www.huels.net\/aut-ut-ut-porro-non-rerum-voluptatum.html","status":"ready","created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":3,"name":"Belle Dickens","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":4,"name":"Mittie Considine","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer cV16fevgEZhPadD43685akb'
controller: null controller: null
method: null method: null
route: null route: null
@ -79,23 +42,69 @@ endpoints:
- -
httpMethods: httpMethods:
- POST - POST
uri: 'api/projects/{project_id}/servers/{server_id}/sites/{site_id}/redirects' uri: api/projects
metadata: metadata:
groupName: redirects groupName: projects
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Create a new redirect.' description: 'Create a new project.'
authenticated: true authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters: []
cleanUrlParameters: []
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the project.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: architecto
fileParameters: []
responses:
-
status: 200
content: '{"id":3,"name":"Ms. Elisabeth Okuneva","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{id}'
metadata:
groupName: projects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a project by ID.'
authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
project_id: id:
name: project_id name: id
description: 'The ID of the project.' description: 'The ID of the project.'
required: true required: true
example: 1 example: 1
@ -104,84 +113,80 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
server_id: cleanUrlParameters:
name: server_id id: 1
description: 'The ID of the server.' queryParameters: []
required: true cleanQueryParameters: []
example: 29 bodyParameters: []
type: integer cleanBodyParameters: []
enumValues: [] fileParameters: []
exampleWasSpecified: false responses:
nullable: false -
status: 200
content: '{"id":3,"name":"Aleen O''Kon","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: [] custom: []
site_id: responseFields: []
name: site_id auth: []
description: 'The ID of the site.' controller: null
method: null
route: null
custom: []
-
httpMethods:
- PUT
uri: 'api/projects/{id}'
metadata:
groupName: projects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: update
description: 'Update project.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
id:
name: id
description: 'The ID of the project.'
required: true required: true
example: 44 example: 1
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 id: 1
server_id: 29
site_id: 44
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
from: name:
name: from name: name
description: '' description: 'The name of the project.'
required: true required: true
example: odit example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
to:
name: to
description: ''
required: true
example: incidunt
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
mode:
name: mode
description: ''
required: true
example: 301
type: string
enumValues:
- 301
- 302
- 307
- 308
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters: cleanBodyParameters:
from: odit name: architecto
to: incidunt
mode: 301
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: null content: '{"id":3,"name":"Ms. Elisabeth Okuneva","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer ZD45hPk638abev61EVcagdf'
controller: null controller: null
method: null method: null
route: null route: null
@ -189,18 +194,17 @@ endpoints:
- -
httpMethods: httpMethods:
- DELETE - DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/sites/{site_id}/redirects/{redirect_id}' uri: 'api/projects/{project_id}'
metadata: metadata:
groupName: redirects groupName: projects
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete a redirect.' description: 'Delete project.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -214,41 +218,8 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
site_id:
name: site_id
description: 'The ID of the site.'
required: true
example: 44
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
redirect_id:
name: redirect_id
description: 'The ID of the redirect.'
required: true
example: 9
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29
site_id: 44
redirect_id: 9
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -262,10 +233,7 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer Ec3fDgdbae615aPh8k6vV4Z'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -1,74 +1,22 @@
## Autogenerated by Scribe. DO NOT MODIFY. ## Autogenerated by Scribe. DO NOT MODIFY.
name: servers name: redirects
description: '' description: ''
endpoints: endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers'
metadata:
groupName: servers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: list
description: 'Get all servers in a project.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"data":[{"id":null,"project_id":null,"user_id":null,"provider_id":null,"name":"Miss Bonita Vandervort IV","ssh_user":"vito","ip":"120.222.195.212","local_ip":"138.119.37.248","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":null,"last_update_check":null,"created_at":null,"updated_at":null},{"id":null,"project_id":null,"user_id":null,"provider_id":null,"name":"Dr. Shanie Batz IV","ssh_user":"vito","ip":"241.88.138.163","local_ip":"138.226.232.93","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":null,"last_update_check":null,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer Pg1Vk6cvadD8eb3ZhaEf564'
controller: null
method: null
route: null
custom: []
- -
httpMethods: httpMethods:
- POST - POST
uri: 'api/projects/{project_id}/servers' uri: 'api/projects/{project_id}/servers/{server_id}/sites/{site_id}/redirects'
metadata: metadata:
groupName: servers groupName: redirects
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Create a new server.' description: 'Create a new redirect.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -82,359 +30,81 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
site_id:
name: site_id
description: 'The ID of the site.'
required: true
example: 14
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 6
site_id: 14
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
provider: from:
name: provider name: from
description: 'The server provider type' description: ''
required: true required: true
example: fugiat example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
server_provider: to:
name: server_provider name: to
description: 'If the provider is not custom, the ID of the server provider profile' description: ''
required: true required: true
example: digitalocean example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
mode:
name: mode
description: ''
required: true
example: 307
type: string type: string
enumValues: enumValues:
- custom - 301
- hetzner - 302
- digitalocean - 307
- linode - 308
- vultr
exampleWasSpecified: false
nullable: false
custom: []
region:
name: region
description: 'Provider region if the provider is not custom'
required: true
example: itaque
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
plan:
name: plan
description: 'Provider plan if the provider is not custom'
required: true
example: voluptatum
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
ip:
name: ip
description: 'SSH IP address if the provider is custom'
required: true
example: ut
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
port:
name: port
description: 'SSH Port if the provider is custom'
required: true
example: reiciendis
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
name:
name: name
description: 'The name of the server.'
required: true
example: et
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
os:
name: os
description: 'The os of the server'
required: true
example: vel
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
webserver:
name: webserver
description: 'Web server'
required: true
example: nginx
type: string
enumValues:
- none
- nginx
exampleWasSpecified: false
nullable: false
custom: []
database:
name: database
description: Database
required: true
example: mysql80
type: string
enumValues:
- none
- mysql57
- mysql80
- mariadb103
- mariadb104
- mariadb103
- postgresql12
- postgresql13
- postgresql14
- postgresql15
- postgresql16
exampleWasSpecified: false
nullable: false
custom: []
php:
name: php
description: 'PHP version'
required: true
example: '7.2'
type: string
enumValues:
- '7.0'
- '7.1'
- '7.2'
- '7.3'
- '7.4'
- '8.0'
- '8.1'
- '8.2'
- '8.3'
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
provider: fugiat from: architecto
server_provider: digitalocean to: architecto
region: itaque mode: 307
plan: voluptatum
ip: ut
port: reiciendis
name: et
os: vel
webserver: nginx
database: mysql80
php: '7.2'
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":null,"project_id":null,"user_id":null,"provider_id":null,"name":"Jeromy Mann","ssh_user":"vito","ip":"128.70.209.89","local_ip":"150.217.250.187","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":null,"last_update_check":null,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer 5E61e4vfcgDbVkZd68aah3P'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{id}'
metadata:
groupName: servers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a server by ID.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
id:
name: id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
id: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"id":null,"project_id":null,"user_id":null,"provider_id":null,"name":"Miss Maya Schaden I","ssh_user":"vito","ip":"44.57.83.39","local_ip":"46.22.92.58","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":null,"last_update_check":null,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer hV3debf65aPD4E1ckag8Z6v'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/reboot'
metadata:
groupName: servers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: reboot
description: 'Reboot a server.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null content: null
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer b61aD6538PacZEkeghfvV4d'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/upgrade'
metadata:
groupName: servers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: upgrade
description: 'Upgrade server.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer dEZaa6cePVf3k86g45vbD1h'
controller: null controller: null
method: null method: null
route: null route: null
@ -442,18 +112,17 @@ endpoints:
- -
httpMethods: httpMethods:
- DELETE - DELETE
uri: 'api/projects/{project_id}/servers/{server_id}' uri: 'api/projects/{project_id}/servers/{server_id}/sites/{site_id}/redirects/{redirect_id}'
metadata: metadata:
groupName: servers groupName: redirects
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete server.' description: 'Delete a redirect.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -471,7 +140,27 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 29 example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
site_id:
name: site_id
description: 'The ID of the site.'
required: true
example: 14
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
redirect_id:
name: redirect_id
description: 'The ID of the redirect.'
required: true
example: 2
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -479,7 +168,9 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29 server_id: 6
site_id: 14
redirect_id: 2
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -493,10 +184,7 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer 6aDkZEfdP16V58gb43avhec'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -1,23 +1,22 @@
## Autogenerated by Scribe. DO NOT MODIFY. ## Autogenerated by Scribe. DO NOT MODIFY.
name: server-providers name: servers
description: '' description: ''
endpoints: endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/server-providers' uri: 'api/projects/{project_id}/servers'
metadata: metadata:
groupName: server-providers groupName: servers
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: '' description: 'Get all servers in a project.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -41,15 +40,12 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":3,"project_id":null,"global":true,"name":"aut","provider":"hetzner","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"},{"id":4,"project_id":null,"global":true,"name":"qui","provider":"aws","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":7,"project_id":1,"services":[],"user_id":1,"provider_id":null,"name":"Rhiannon Hackett","ssh_user":"vito","ssh_users":["root","vito"],"ip":"15.21.182.27","local_ip":"15.126.47.30","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":0,"last_update_check":null,"status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":8,"project_id":1,"services":[],"user_id":1,"provider_id":null,"name":"Maya Bins","ssh_user":"vito","ssh_users":["root","vito"],"ip":"88.63.32.129","local_ip":"161.58.4.234","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":0,"last_update_check":null,"status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer 3evaP8h6VEZkbfgaD6d1c45'
controller: null controller: null
method: null method: null
route: null route: null
@ -57,18 +53,17 @@ endpoints:
- -
httpMethods: httpMethods:
- POST - POST
uri: 'api/projects/{project_id}/server-providers' uri: 'api/projects/{project_id}/servers'
metadata: metadata:
groupName: server-providers groupName: servers
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: '' description: 'Create a new server.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -89,9 +84,64 @@ endpoints:
bodyParameters: bodyParameters:
provider: provider:
name: provider name: provider
description: 'The provider (aws, linode, hetzner, digitalocean, vultr, ...)' description: 'The server provider type'
required: true required: true
example: corrupti example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_provider:
name: server_provider
description: 'If the provider is not custom, the ID of the server provider profile'
required: true
example: linode
type: string
enumValues:
- custom
- hetzner
- digitalocean
- linode
- vultr
exampleWasSpecified: false
nullable: false
custom: []
region:
name: region
description: 'Provider region if the provider is not custom'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
plan:
name: plan
description: 'Provider plan if the provider is not custom'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
ip:
name: ip
description: 'SSH IP address if the provider is custom'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
port:
name: port
description: 'SSH Port if the provider is custom'
required: true
example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -99,63 +149,99 @@ endpoints:
custom: [] custom: []
name: name:
name: name name: name
description: 'The name of the server provider.' description: 'The name of the server.'
required: true required: true
example: est example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
token: os:
name: token name: os
description: 'The token if provider requires api token' description: 'The os of the server'
required: true required: true
example: rerum example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
key: webserver:
name: key name: webserver
description: 'The key if provider requires key' description: 'Web server'
required: true required: true
example: ut example: none
type: string type: string
enumValues: [] enumValues:
- none
- nginx
- caddy
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
secret: database:
name: secret name: database
description: 'The secret if provider requires key' description: Database
required: true required: true
example: sed example: mysql80
type: string type: string
enumValues: [] enumValues:
- none
- mysql57
- mysql80
- mariadb103
- mariadb104
- mariadb103
- postgresql12
- postgresql13
- postgresql14
- postgresql15
- postgresql16
exampleWasSpecified: false
nullable: false
custom: []
php:
name: php
description: 'PHP version'
required: true
example: '8.2'
type: string
enumValues:
- '7.0'
- '7.1'
- '7.2'
- '7.3'
- '7.4'
- '8.0'
- '8.1'
- '8.2'
- '8.3'
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
provider: corrupti provider: architecto
name: est server_provider: linode
token: rerum region: architecto
key: ut plan: architecto
secret: sed ip: architecto
port: architecto
name: architecto
os: architecto
webserver: none
database: mysql80
php: '8.2'
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":3,"project_id":null,"global":true,"name":"voluptas","provider":"vultr","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}' content: '{"id":7,"project_id":1,"services":[],"user_id":1,"provider_id":null,"name":"Ms. Elisabeth Okuneva","ssh_user":"vito","ssh_users":["root","vito"],"ip":"75.13.66.152","local_ip":"199.172.126.144","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":0,"last_update_check":null,"status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer 6g6vfEck83VaPhd5Zabe1D4'
controller: null controller: null
method: null method: null
route: null route: null
@ -163,18 +249,17 @@ endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/server-providers/{serverProvider_id}' uri: 'api/projects/{project_id}/servers/{id}'
metadata: metadata:
groupName: server-providers groupName: servers
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: '' description: 'Get a server by ID.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -188,11 +273,11 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
serverProvider_id: id:
name: serverProvider_id name: id
description: 'The ID of the serverProvider.' description: 'The ID of the server.'
required: true required: true
example: 1 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -200,7 +285,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
serverProvider_id: 1 id: 6
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -209,34 +294,30 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":3,"project_id":null,"global":true,"name":"et","provider":"digitalocean","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}' content: '{"id":7,"project_id":1,"services":[],"user_id":1,"provider_id":null,"name":"Belle Dickens","ssh_user":"vito","ssh_users":["root","vito"],"ip":"51.210.32.30","local_ip":"82.174.132.158","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":0,"last_update_check":null,"status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer va63cDe8dPf5Z4Vahb1E6kg'
controller: null controller: null
method: null method: null
route: null route: null
custom: [] custom: []
- -
httpMethods: httpMethods:
- PUT - POST
uri: 'api/projects/{project_id}/server-providers/{serverProvider_id}' uri: 'api/projects/{project_id}/servers/{server_id}/reboot'
metadata: metadata:
groupName: server-providers groupName: servers
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: update title: reboot
description: '' description: 'Reboot a server.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -250,11 +331,11 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
serverProvider_id: server_id:
name: serverProvider_id name: server_id
description: 'The ID of the serverProvider.' description: 'The ID of the server.'
required: true required: true
example: 1 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -262,93 +343,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
serverProvider_id: 1 server_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the server provider.'
required: true
example: earum
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
global:
name: global
description: 'Accessible in all projects'
required: true
example: false
type: string
enumValues:
- true
- false
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: earum
global: false
fileParameters: []
responses:
-
status: 200
content: '{"id":3,"project_id":null,"global":true,"name":"architecto","provider":"digitalocean","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer 4e1dghaV6D856P3ZbfkcEva'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/server-providers/{serverProvider_id}'
metadata:
groupName: server-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: ''
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
serverProvider_id:
name: serverProvider_id
description: 'The ID of the serverProvider.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
serverProvider_id: 1
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -362,10 +357,123 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers controller: null
- Authorization method: null
- 'Bearer fcVa8ev63gP5DaZbkdhE461' route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/upgrade'
metadata:
groupName: servers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: upgrade
description: 'Upgrade server.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}'
metadata:
groupName: servers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete server.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -1,23 +1,22 @@
## Autogenerated by Scribe. DO NOT MODIFY. ## Autogenerated by Scribe. DO NOT MODIFY.
name: ssh-keys name: server-providers
description: '' description: ''
endpoints: endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers/{server_id}/ssh-keys' uri: 'api/projects/{project_id}/server-providers'
metadata: metadata:
groupName: ssh-keys groupName: server-providers
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all ssh keys.' description: ''
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -31,19 +30,8 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -52,15 +40,12 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":null,"user":null,"name":"Santa Goyette","created_at":null,"updated_at":null},{"id":null,"user":null,"name":"Cecil Cummings","created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":4,"project_id":null,"global":true,"name":"ab","provider":"custom","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":5,"project_id":null,"global":true,"name":"incidunt","provider":"custom","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer 165aZvb46PhacEfke83dVgD'
controller: null controller: null
method: null method: null
route: null route: null
@ -68,18 +53,17 @@ endpoints:
- -
httpMethods: httpMethods:
- POST - POST
uri: 'api/projects/{project_id}/servers/{server_id}/ssh-keys' uri: 'api/projects/{project_id}/server-providers'
metadata: metadata:
groupName: ssh-keys groupName: server-providers
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Deploy ssh key to server.' description: ''
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -93,27 +77,16 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
key_id: provider:
name: key_id name: provider
description: 'The ID of the key.' description: 'The provider (aws, linode, hetzner, digitalocean, vultr, ...)'
required: true required: true
example: explicabo example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -121,60 +94,78 @@ endpoints:
custom: [] custom: []
name: name:
name: name name: name
description: 'Key name, required if key_id is not provided.' description: 'The name of the server provider.'
required: true required: true
example: deleniti example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
public_key: token:
name: public_key name: token
description: 'Public Key, required if key_id is not provided.' description: 'The token if provider requires api token'
required: true required: true
example: sapiente example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
key:
name: key
description: 'The key if provider requires key'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
secret:
name: secret
description: 'The secret if provider requires key'
required: true
example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
key_id: explicabo provider: architecto
name: deleniti name: architecto
public_key: sapiente token: architecto
key: architecto
secret: architecto
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":null,"user":null,"name":"Mr. Reagan Jacobson V","created_at":null,"updated_at":null}' content: '{"id":4,"project_id":null,"global":true,"name":"eius","provider":"custom","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer deDkf4E13PZb6cgaV58ha6v'
controller: null controller: null
method: null method: null
route: null route: null
custom: [] custom: []
- -
httpMethods: httpMethods:
- DELETE - GET
uri: 'api/projects/{project_id}/servers/{server_id}/ssh-keys/{sshKey_id}' uri: 'api/projects/{project_id}/server-providers/{serverProvider_id}'
metadata: metadata:
groupName: ssh-keys groupName: server-providers
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: delete title: show
description: 'Delete ssh key from server.' description: ''
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -188,21 +179,11 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
server_id: serverProvider_id:
name: server_id name: serverProvider_id
description: 'The ID of the server.' description: 'The ID of the serverProvider.'
required: true required: true
example: 29 example: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
sshKey_id:
name: sshKey_id
description: 'The ID of the sshKey.'
required: true
example: 1
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -210,8 +191,147 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29 serverProvider_id: 3
sshKey_id: 1 queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"id":4,"project_id":null,"global":true,"name":"mollitia","provider":"vultr","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- PUT
uri: 'api/projects/{project_id}/server-providers/{serverProvider_id}'
metadata:
groupName: server-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: update
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
serverProvider_id:
name: serverProvider_id
description: 'The ID of the serverProvider.'
required: true
example: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
serverProvider_id: 3
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the server provider.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
global:
name: global
description: 'Accessible in all projects'
required: true
example: false
type: string
enumValues:
- true
- false
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: architecto
global: false
fileParameters: []
responses:
-
status: 200
content: '{"id":4,"project_id":null,"global":true,"name":"eius","provider":"custom","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/server-providers/{serverProvider_id}'
metadata:
groupName: server-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
serverProvider_id:
name: serverProvider_id
description: 'The ID of the serverProvider.'
required: true
example: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
serverProvider_id: 3
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -225,10 +345,7 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer ec48fgVdZ6ah3kvPD16E5ab'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -1,23 +1,22 @@
## Autogenerated by Scribe. DO NOT MODIFY. ## Autogenerated by Scribe. DO NOT MODIFY.
name: services name: ssh-keys
description: '' description: ''
endpoints: endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers/{server_id}/services' uri: 'api/projects/{project_id}/servers/{server_id}/ssh-keys'
metadata: metadata:
groupName: services groupName: ssh-keys
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all services.' description: 'Get all ssh keys.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -35,7 +34,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 29 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -43,7 +42,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29 server_id: 6
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -52,34 +51,30 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":null,"server_id":null,"type":null,"type_data":null,"name":null,"version":null,"unit":null,"status":null,"is_default":null,"created_at":null,"updated_at":null},{"id":null,"server_id":null,"type":null,"type_data":null,"name":null,"version":null,"unit":null,"status":null,"is_default":null,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":3,"name":"Haven Romaguera","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":4,"name":"Viva Marquardt","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer gVEce46k8aZfaP3d15vbhD6'
controller: null controller: null
method: null method: null
route: null route: null
custom: [] custom: []
- -
httpMethods: httpMethods:
- GET - POST
uri: 'api/projects/{project_id}/servers/{server_id}/services/{id}' uri: 'api/projects/{project_id}/servers/{server_id}/ssh-keys'
metadata: metadata:
groupName: services groupName: ssh-keys
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: show title: create
description: 'Get a service by ID.' description: 'Deploy ssh key to server.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -97,17 +92,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 29 example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
id:
name: id
description: 'The ID of the service.'
required: true
example: 169
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -115,390 +100,54 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29 server_id: 6
id: 169
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters:
cleanBodyParameters: [] key_id:
name: key_id
description: 'The ID of the key.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
name:
name: name
description: 'Key name, required if key_id is not provided.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
public_key:
name: public_key
description: 'Public Key, required if key_id is not provided.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
key_id: architecto
name: architecto
public_key: architecto
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":null,"server_id":null,"type":null,"type_data":null,"name":null,"version":null,"unit":null,"status":null,"is_default":null,"created_at":null,"updated_at":null}' content: '{"id":3,"name":"Ms. Elisabeth Okuneva","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer Ef8D5gbV6cadk3Zh1vP46ea'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/start'
metadata:
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: start
description: 'Start service.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 169
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
service_id: 169
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer b3DckZ8g6ha6aPe4f5V1vdE'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/stop'
metadata:
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: stop
description: 'Stop service.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 169
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
service_id: 169
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer 1e8aZbfvE5643DacgkPhdV6'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/restart'
metadata:
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: restart
description: 'Restart service.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 169
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
service_id: 169
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer c46baVZEg5dv1Pfe8Dha6k3'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/enable'
metadata:
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: enable
description: 'Enable service.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 169
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
service_id: 169
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer EvcehkDbdV43f61P86Za5ga'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/disable'
metadata:
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: disable
description: 'Disable service.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 169
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
service_id: 169
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer k8E5gf6d4h31bevaa6cVPZD'
controller: null controller: null
method: null method: null
route: null route: null
@ -506,18 +155,17 @@ endpoints:
- -
httpMethods: httpMethods:
- DELETE - DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}' uri: 'api/projects/{project_id}/servers/{server_id}/ssh-keys/{sshKey_id}'
metadata: metadata:
groupName: services groupName: ssh-keys
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete service.' description: 'Delete ssh key from server.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -535,17 +183,17 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 29 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
service_id: sshKey_id:
name: service_id name: sshKey_id
description: 'The ID of the service.' description: 'The ID of the sshKey.'
required: true required: true
example: 169 example: 1
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -553,8 +201,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29 server_id: 6
service_id: 169 sshKey_id: 1
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -568,10 +216,7 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer Pekav16cd5ag486ZfD3EVbh'
controller: null controller: null
method: null method: null
route: null route: null

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,23 +1,22 @@
## Autogenerated by Scribe. DO NOT MODIFY. ## Autogenerated by Scribe. DO NOT MODIFY.
name: storage-providers name: source-controls
description: '' description: ''
endpoints: endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/storage-providers' uri: 'api/projects/{project_id}/source-controls'
metadata: metadata:
groupName: storage-providers groupName: source-controls
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: '' description: ''
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -41,15 +40,12 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":5,"project_id":null,"global":true,"name":"veritatis","provider":"ftp","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"},{"id":6,"project_id":null,"global":true,"name":"voluptas","provider":"dropbox","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":2,"project_id":null,"global":true,"name":"Ms. Elisabeth Okuneva","provider":"github","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":3,"project_id":null,"global":true,"name":"Aleen O''Kon","provider":"github","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer fgh4eV31dP58kvaDEaZbc66'
controller: null controller: null
method: null method: null
route: null route: null
@ -57,18 +53,17 @@ endpoints:
- -
httpMethods: httpMethods:
- POST - POST
uri: 'api/projects/{project_id}/storage-providers' uri: 'api/projects/{project_id}/source-controls'
metadata: metadata:
groupName: storage-providers groupName: source-controls
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: '' description: ''
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -89,11 +84,14 @@ endpoints:
bodyParameters: bodyParameters:
provider: provider:
name: provider name: provider
description: 'The provider (aws, linode, hetzner, digitalocean, vultr, ...)' description: 'The provider'
required: true required: true
example: ab example: gitlab
type: string type: string
enumValues: [] enumValues:
- gitlab
- github
- bitbucket
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
@ -101,7 +99,7 @@ endpoints:
name: name name: name
description: 'The name of the storage provider.' description: 'The name of the storage provider.'
required: true required: true
example: quo example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -111,51 +109,59 @@ endpoints:
name: token name: token
description: 'The token if provider requires api token' description: 'The token if provider requires api token'
required: true required: true
example: in example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
key: url:
name: key name: url
description: 'The key if provider requires key' description: 'The URL if the provider is Gitlab and it is self-hosted'
required: true required: true
example: sunt example: 'http://www.bailey.biz/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html'
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
secret: username:
name: secret name: username
description: 'The secret if provider requires key' description: 'The username if the provider is Bitbucket'
required: true required: true
example: molestias example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
password:
name: password
description: 'The password if the provider is Bitbucket'
required: true
example: '|]|{+-'
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
provider: ab provider: gitlab
name: quo name: architecto
token: in token: architecto
key: sunt url: 'http://www.bailey.biz/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html'
secret: molestias username: architecto
password: '|]|{+-'
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":5,"project_id":null,"global":true,"name":"asperiores","provider":"dropbox","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}' content: '{"id":2,"project_id":null,"global":true,"name":"Mrs. Justina Gaylord","provider":"github","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer e584613dkZaPDEVvgcahbf6'
controller: null controller: null
method: null method: null
route: null route: null
@ -163,18 +169,17 @@ endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/storage-providers/{storageProvider_id}' uri: 'api/projects/{project_id}/source-controls/{sourceControl_id}'
metadata: metadata:
groupName: storage-providers groupName: source-controls
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: '' description: ''
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -188,11 +193,11 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
storageProvider_id: sourceControl_id:
name: storageProvider_id name: sourceControl_id
description: 'The ID of the storageProvider.' description: 'The ID of the sourceControl.'
required: true required: true
example: 3 example: 1
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -200,7 +205,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
storageProvider_id: 3 sourceControl_id: 1
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -209,15 +214,12 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":5,"project_id":null,"global":true,"name":"ipsum","provider":"local","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}' content: '{"id":2,"project_id":null,"global":true,"name":"Misael Runte","provider":"github","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer h6Zk6834dDce5fbPa1VvagE'
controller: null controller: null
method: null method: null
route: null route: null
@ -225,18 +227,17 @@ endpoints:
- -
httpMethods: httpMethods:
- PUT - PUT
uri: 'api/projects/{project_id}/storage-providers/{storageProvider_id}' uri: 'api/projects/{project_id}/source-controls/{sourceControl_id}'
metadata: metadata:
groupName: storage-providers groupName: source-controls
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: update title: update
description: '' description: ''
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -250,11 +251,11 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
storageProvider_id: sourceControl_id:
name: storageProvider_id name: sourceControl_id
description: 'The ID of the storageProvider.' description: 'The ID of the sourceControl.'
required: true required: true
example: 3 example: 1
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -262,7 +263,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
storageProvider_id: 3 sourceControl_id: 1
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
@ -270,7 +271,47 @@ endpoints:
name: name name: name
description: 'The name of the storage provider.' description: 'The name of the storage provider.'
required: true required: true
example: voluptas example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
token:
name: token
description: 'The token if provider requires api token'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
url:
name: url
description: 'The URL if the provider is Gitlab and it is self-hosted'
required: true
example: 'http://www.bailey.biz/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
username:
name: username
description: 'The username if the provider is Bitbucket'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
password:
name: password
description: 'The password if the provider is Bitbucket'
required: true
example: '|]|{+-'
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -280,7 +321,7 @@ endpoints:
name: global name: global
description: 'Accessible in all projects' description: 'Accessible in all projects'
required: true required: true
example: true example: false
type: string type: string
enumValues: enumValues:
- true - true
@ -289,21 +330,22 @@ endpoints:
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
name: voluptas name: architecto
global: true token: architecto
url: 'http://www.bailey.biz/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html'
username: architecto
password: '|]|{+-'
global: false
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":5,"project_id":null,"global":true,"name":"minima","provider":"ftp","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}' content: '{"id":2,"project_id":null,"global":true,"name":"Mrs. Justina Gaylord","provider":"github","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer ak6fgd1Eba48chvPV3e5Z6D'
controller: null controller: null
method: null method: null
route: null route: null
@ -311,18 +353,17 @@ endpoints:
- -
httpMethods: httpMethods:
- DELETE - DELETE
uri: 'api/projects/{project_id}/storage-providers/{storageProvider_id}' uri: 'api/projects/{project_id}/source-controls/{sourceControl_id}'
metadata: metadata:
groupName: storage-providers groupName: source-controls
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: '' description: ''
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -336,11 +377,11 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
storageProvider_id: sourceControl_id:
name: storageProvider_id name: sourceControl_id
description: 'The ID of the storageProvider.' description: 'The ID of the sourceControl.'
required: true required: true
example: 3 example: 1
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -348,7 +389,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
storageProvider_id: 3 sourceControl_id: 1
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -362,10 +403,7 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer PcaDbh6ZE4aV1e8fdv56k3g'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -0,0 +1,352 @@
## Autogenerated by Scribe. DO NOT MODIFY.
name: storage-providers
description: ''
endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/storage-providers'
metadata:
groupName: storage-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: list
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"data":[{"id":4,"project_id":null,"global":true,"name":"harum","provider":"local","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":5,"project_id":null,"global":true,"name":"commodi","provider":"local","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/storage-providers'
metadata:
groupName: storage-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: create
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters:
provider:
name: provider
description: 'The provider (aws, linode, hetzner, digitalocean, vultr, ...)'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
name:
name: name
description: 'The name of the storage provider.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
token:
name: token
description: 'The token if provider requires api token'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
key:
name: key
description: 'The key if provider requires key'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
secret:
name: secret
description: 'The secret if provider requires key'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
provider: architecto
name: architecto
token: architecto
key: architecto
secret: architecto
fileParameters: []
responses:
-
status: 200
content: '{"id":4,"project_id":null,"global":true,"name":"eius","provider":"local","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/storage-providers/{storageProvider_id}'
metadata:
groupName: storage-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
storageProvider_id:
name: storageProvider_id
description: 'The ID of the storageProvider.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
storageProvider_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"id":4,"project_id":null,"global":true,"name":"et","provider":"dropbox","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- PUT
uri: 'api/projects/{project_id}/storage-providers/{storageProvider_id}'
metadata:
groupName: storage-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: update
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
storageProvider_id:
name: storageProvider_id
description: 'The ID of the storageProvider.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
storageProvider_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the storage provider.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
global:
name: global
description: 'Accessible in all projects'
required: true
example: true
type: string
enumValues:
- true
- false
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: architecto
global: true
fileParameters: []
responses:
-
status: 200
content: '{"id":4,"project_id":null,"global":true,"name":"eius","provider":"local","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/storage-providers/{storageProvider_id}'
metadata:
groupName: storage-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
storageProvider_id:
name: storageProvider_id
description: 'The ID of the storageProvider.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
storageProvider_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []

View File

@ -1,290 +1,158 @@
name: cron-jobs name: Endpoints
description: '' description: ''
endpoints: endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs'
metadata:
groupName: cron-jobs
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: list
description: 'Get all cron jobs.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"data":[{"id":null,"server_id":null,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","created_at":null,"updated_at":null},{"id":null,"server_id":null,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer eDa6Vdh1Z4vc35bP8E6gafk'
controller: null
method: null
route: null
custom: []
- -
httpMethods: httpMethods:
- POST - POST
uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs' uri: 'api/servers/{server_id}/agent/{id}'
metadata: metadata:
groupName: cron-jobs groupName: Endpoints
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: create title: ''
description: 'Create a new cron job.' description: ''
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id: server_id:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters:
command:
name: command
description: ''
required: true
example: quia
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
user:
name: user
description: ''
required: true
example: root
type: string
enumValues:
- root
- vito
exampleWasSpecified: false
nullable: false
custom: []
frequency:
name: frequency
description: 'Frequency of the cron job.'
required: true
example: '* * * * *'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
command: quia
user: root
frequency: '* * * * *'
fileParameters: []
responses:
-
status: 200
content: '{"id":null,"server_id":null,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer 66EeZvdh3kVaDP8f4ga5c1b'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs/{cronJob_id}'
metadata:
groupName: cron-jobs
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a cron job by ID.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cronJob_id:
name: cronJob_id
description: 'The ID of the cronJob.'
required: true
example: 6 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
id:
name: id
description: 'The ID of the agent.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 server_id: 6
server_id: 29 id: architecto
cronJob_id: 6
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters:
cleanBodyParameters: [] load:
fileParameters: [] name: load
responses:
-
status: 200
content: '{"id":null,"server_id":null,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","created_at":null,"updated_at":null}'
headers: []
description: '' description: ''
required: true
example: 4326.41688
type: number
enumValues: []
exampleWasSpecified: false
nullable: false
custom: [] custom: []
memory_total:
name: memory_total
description: ''
required: true
example: 4326.41688
type: number
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
memory_used:
name: memory_used
description: ''
required: true
example: 4326.41688
type: number
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
memory_free:
name: memory_free
description: ''
required: true
example: 4326.41688
type: number
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
disk_total:
name: disk_total
description: ''
required: true
example: 4326.41688
type: number
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
disk_used:
name: disk_used
description: ''
required: true
example: 4326.41688
type: number
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
disk_free:
name: disk_free
description: ''
required: true
example: 4326.41688
type: number
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
load: 4326.41688
memory_total: 4326.41688
memory_used: 4326.41688
memory_free: 4326.41688
disk_total: 4326.41688
disk_used: 4326.41688
disk_free: 4326.41688
fileParameters: []
responses: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer D4c3Z65ebv8E16fahaVgPdk'
controller: null controller: null
method: null method: null
route: null route: null
custom: [] custom: []
- -
httpMethods: httpMethods:
- DELETE 0: GET
uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs/{cronJob_id}' 2: POST
3: PUT
4: PATCH
5: DELETE
6: OPTIONS
uri: api/git-hooks
metadata: metadata:
groupName: cron-jobs groupName: Endpoints
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: delete title: ''
description: 'Delete cron job.' description: ''
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters: []
project_id: cleanUrlParameters: []
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cronJob_id:
name: cronJob_id
description: 'The ID of the cronJob.'
required: true
example: 13
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
cronJob_id: 13
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -292,16 +160,21 @@ endpoints:
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 204 status: 404
content: null content: |-
headers: [] {
description: '' "message": ""
}
headers:
cache-control: 'no-cache, private'
content-type: application/json
x-ratelimit-limit: '60'
x-ratelimit-remaining: '57'
access-control-allow-origin: '*'
description: null
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer h3cP4aZa1v8feDdEg5b6k6V'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -1,21 +1,20 @@
name: databases name: cron-jobs
description: '' description: ''
endpoints: endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers/{server_id}/databases' uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs'
metadata: metadata:
groupName: databases groupName: cron-jobs
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all databases.' description: 'Get all cron jobs.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -33,7 +32,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 29 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -41,7 +40,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29 server_id: 6
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -50,15 +49,12 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":null,"server_id":null,"name":"leffler.esther","status":"ready","created_at":null,"updated_at":null},{"id":null,"server_id":null,"name":"rhoda.rutherford","status":"ready","created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":3,"server_id":1,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":4,"server_id":1,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer E1VdfegZah4k86b53Dc6Pva'
controller: null controller: null
method: null method: null
route: null route: null
@ -66,18 +62,17 @@ endpoints:
- -
httpMethods: httpMethods:
- POST - POST
uri: 'api/projects/{project_id}/servers/{server_id}/databases' uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs'
metadata: metadata:
groupName: databases groupName: cron-jobs
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Create a new database.' description: 'Create a new cron job.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -95,7 +90,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 29 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -103,57 +98,56 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29 server_id: 6
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
name: command:
name: name name: command
description: '' description: ''
required: true required: true
example: quisquam example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
charset: user:
name: charset name: user
description: '' description: ''
required: true required: true
example: omnis example: vito
type: string type: string
enumValues: [] enumValues:
- root
- vito
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
collation: frequency:
name: collation name: frequency
description: '' description: 'Frequency of the cron job.'
required: true required: true
example: at example: '* * * * *'
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
name: quisquam command: architecto
charset: omnis user: vito
collation: at frequency: '* * * * *'
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":null,"server_id":null,"name":"csawayn","status":"ready","created_at":null,"updated_at":null}' content: '{"id":3,"server_id":1,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer PVgkZ35ca4afd1EbD8ehv66'
controller: null controller: null
method: null method: null
route: null route: null
@ -161,18 +155,17 @@ endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers/{server_id}/databases/{id}' uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs/{cronJob_id}'
metadata: metadata:
groupName: databases groupName: cron-jobs
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: 'Get a database by ID.' description: 'Get a cron job by ID.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -190,17 +183,17 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 29 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
id: cronJob_id:
name: id name: cronJob_id
description: 'The ID of the database.' description: 'The ID of the cronJob.'
required: true required: true
example: 8 example: 1
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -208,8 +201,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29 server_id: 6
id: 8 cronJob_id: 1
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -218,15 +211,12 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":null,"server_id":null,"name":"sandrine43","status":"ready","created_at":null,"updated_at":null}' content: '{"id":3,"server_id":1,"command":"ls -la","user":"root","frequency":"* * * * *","status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer EP64D8g51adf6hbceavVZ3k'
controller: null controller: null
method: null method: null
route: null route: null
@ -234,18 +224,17 @@ endpoints:
- -
httpMethods: httpMethods:
- DELETE - DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/databases/{database_id}' uri: 'api/projects/{project_id}/servers/{server_id}/cron-jobs/{cronJob_id}'
metadata: metadata:
groupName: databases groupName: cron-jobs
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete database.' description: 'Delete cron job.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -263,17 +252,17 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 29 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
database_id: cronJob_id:
name: database_id name: cronJob_id
description: 'The ID of the database.' description: 'The ID of the cronJob.'
required: true required: true
example: 8 example: 1
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -281,8 +270,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29 server_id: 6
database_id: 8 cronJob_id: 1
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -296,10 +285,7 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer 8dgEk3Zv1eaVP66bDhf4ac5'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -1,21 +1,20 @@
name: database-users name: databases
description: '' description: ''
endpoints: endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers/{server_id}/database-users' uri: 'api/projects/{project_id}/servers/{server_id}/databases'
metadata: metadata:
groupName: database-users groupName: databases
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all database users.' description: 'Get all databases.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -33,7 +32,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 29 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -41,7 +40,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29 server_id: 6
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -50,15 +49,12 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":null,"server_id":null,"username":"letha64","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null},{"id":null,"server_id":null,"username":"hagenes.lurline","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":9,"server_id":1,"name":"zbailey","collation":null,"charset":null,"status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":10,"server_id":1,"name":"rempel.chadrick","collation":null,"charset":null,"status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer d4g15bV3Pa6hDvck6eaEf8Z'
controller: null controller: null
method: null method: null
route: null route: null
@ -66,18 +62,17 @@ endpoints:
- -
httpMethods: httpMethods:
- POST - POST
uri: 'api/projects/{project_id}/servers/{server_id}/database-users' uri: 'api/projects/{project_id}/servers/{server_id}/databases'
metadata: metadata:
groupName: database-users groupName: databases
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Create a new database user.' description: 'Create a new database.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -95,7 +90,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 29 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -103,57 +98,54 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29 server_id: 6
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
username: name:
name: username name: name
description: '' description: ''
required: true required: true
example: qui example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
password: charset:
name: password name: charset
description: '' description: ''
required: true required: true
example: 'xYv*3,#HQ=5<w!' example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
host: collation:
name: host name: collation
description: 'Host, if it is a remote user.' description: ''
required: true required: true
example: '%' example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
username: qui name: architecto
password: 'xYv*3,#HQ=5<w!' charset: architecto
host: '%' collation: architecto
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":null,"server_id":null,"username":"marcelle95","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null}' content: '{"id":9,"server_id":1,"name":"zbailey","collation":null,"charset":null,"status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer 3vZ6f6kagacDEhV1Pde5b84'
controller: null controller: null
method: null method: null
route: null route: null
@ -161,18 +153,17 @@ endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers/{server_id}/database-users/{databaseUser_id}' uri: 'api/projects/{project_id}/servers/{server_id}/databases/{id}'
metadata: metadata:
groupName: database-users groupName: databases
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: 'Get a database user by ID.' description: 'Get a database by ID.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -190,17 +181,17 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 29 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
databaseUser_id: id:
name: databaseUser_id name: id
description: 'The ID of the databaseUser.' description: 'The ID of the database.'
required: true required: true
example: 1 example: 8
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -208,8 +199,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29 server_id: 6
databaseUser_id: 1 id: 8
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -218,99 +209,12 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":null,"server_id":null,"username":"brandi53","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null}' content: '{"id":9,"server_id":1,"name":"rempel.chadrick","collation":null,"charset":null,"status":"ready","status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer af3b5ac6dP8ZV4vE1hk6eDg'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/database-users/{databaseUser_id}/link'
metadata:
groupName: database-users
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: link
description: 'Link to databases'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
databaseUser_id:
name: databaseUser_id
description: 'The ID of the databaseUser.'
required: true
example: 4
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
databaseUser_id: 4
queryParameters: []
cleanQueryParameters: []
bodyParameters:
databases:
name: databases
description: 'Array of database names to link to the user.'
required: true
example: maiores
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
databases: maiores
fileParameters: []
responses:
-
status: 200
content: '{"id":null,"server_id":null,"username":"kschmidt","databases":[],"host":"%","status":null,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer b6f3Ed641gaZDcVa5k8vePh'
controller: null controller: null
method: null method: null
route: null route: null
@ -318,18 +222,17 @@ endpoints:
- -
httpMethods: httpMethods:
- DELETE - DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/database-users/{databaseUser_id}' uri: 'api/projects/{project_id}/servers/{server_id}/databases/{database_id}'
metadata: metadata:
groupName: database-users groupName: databases
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete database user.' description: 'Delete database.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -347,17 +250,17 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 29 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
databaseUser_id: database_id:
name: databaseUser_id name: database_id
description: 'The ID of the databaseUser.' description: 'The ID of the database.'
required: true required: true
example: 20 example: 8
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -365,8 +268,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29 server_id: 6
databaseUser_id: 20 database_id: 8
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -380,10 +283,7 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer Zka6fh15g6eaV8vE34cDPdb'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -1,21 +1,20 @@
name: firewall-rules name: database-users
description: '' description: ''
endpoints: endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules' uri: 'api/projects/{project_id}/servers/{server_id}/database-users'
metadata: metadata:
groupName: firewall-rules groupName: database-users
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all firewall rules.' description: 'Get all database users.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -33,7 +32,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 29 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -41,7 +40,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29 server_id: 6
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -50,15 +49,12 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":null,"name":"ut","server_id":null,"type":"allow","protocol":"tcp","port":35499,"source":"177.130.54.250","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null},{"id":null,"name":"totam","server_id":null,"type":"allow","protocol":"tcp","port":29448,"source":"181.194.26.13","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":4,"server_id":1,"username":"cartwright.maxine","databases":[],"host":"%","status":"creating","status_color":"warning","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":5,"server_id":1,"username":"gusikowski.eden","databases":[],"host":"%","status":"creating","status_color":"warning","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer eD368kaZfVEab4v61ghdP5c'
controller: null controller: null
method: null method: null
route: null route: null
@ -66,18 +62,17 @@ endpoints:
- -
httpMethods: httpMethods:
- POST - POST
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules' uri: 'api/projects/{project_id}/servers/{server_id}/database-users'
metadata: metadata:
groupName: firewall-rules groupName: database-users
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Create a new firewall rule.' description: 'Create a new database user.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -95,7 +90,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 29 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -103,237 +98,54 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29 server_id: 6
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
name: username:
name: name name: username
description: '' description: ''
required: true required: true
example: sapiente example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
type: password:
name: type name: password
description: '' description: ''
required: true required: true
example: allow example: '|]|{+-'
type: string
enumValues:
- allow
- deny
exampleWasSpecified: false
nullable: false
custom: []
protocol:
name: protocol
description: ''
required: true
example: tcp
type: string
enumValues:
- tcp
- udp
exampleWasSpecified: false
nullable: false
custom: []
port:
name: port
description: ''
required: true
example: et
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
source: host:
name: source name: host
description: '' description: 'Host, if it is a remote user.'
required: false
example: doloribus
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
mask:
name: mask
description: 'Mask for source IP.'
required: true required: true
example: '0' example: '%'
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
name: sapiente username: architecto
type: allow password: '|]|{+-'
protocol: tcp host: '%'
port: et
source: doloribus
mask: '0'
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":null,"name":"omnis","server_id":null,"type":"allow","protocol":"tcp","port":54634,"source":"246.242.9.65","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null}' content: '{"id":4,"server_id":1,"username":"justina.gaylord","databases":[],"host":"%","status":"creating","status_color":"warning","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer 3184PbED6aacZveV6hf5dgk'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- PUT
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules/{firewallRule_id}'
metadata:
groupName: firewall-rules
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: edit
description: 'Update an existing firewall rule.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
firewallRule_id:
name: firewallRule_id
description: 'The ID of the firewallRule.'
required: true
example: 85
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
firewallRule_id: 85
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: ''
required: true
example: et
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
type:
name: type
description: ''
required: true
example: allow
type: string
enumValues:
- allow
- deny
exampleWasSpecified: false
nullable: false
custom: []
protocol:
name: protocol
description: ''
required: true
example: tcp
type: string
enumValues:
- tcp
- udp
exampleWasSpecified: false
nullable: false
custom: []
port:
name: port
description: ''
required: true
example: aut
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
source:
name: source
description: ''
required: false
example: et
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
mask:
name: mask
description: 'Mask for source IP.'
required: true
example: '0'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: et
type: allow
protocol: tcp
port: aut
source: et
mask: '0'
fileParameters: []
responses:
-
status: 200
content: '{"id":null,"name":"consequatur","server_id":null,"type":"allow","protocol":"tcp","port":879,"source":"206.106.27.116","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer ad46E3egPDc51aV6hb8vkZf'
controller: null controller: null
method: null method: null
route: null route: null
@ -341,18 +153,17 @@ endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules/{firewallRule_id}' uri: 'api/projects/{project_id}/servers/{server_id}/database-users/{databaseUser_id}'
metadata: metadata:
groupName: firewall-rules groupName: database-users
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: 'Get a firewall rule by ID.' description: 'Get a database user by ID.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -370,17 +181,17 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 29 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
firewallRule_id: databaseUser_id:
name: firewallRule_id name: databaseUser_id
description: 'The ID of the firewallRule.' description: 'The ID of the databaseUser.'
required: true required: true
example: 85 example: 16
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -388,8 +199,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29 server_id: 6
firewallRule_id: 85 databaseUser_id: 16
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -398,34 +209,30 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":null,"name":"dolores","server_id":null,"type":"allow","protocol":"tcp","port":4691,"source":"147.108.28.144","mask":24,"note":"test","status":null,"created_at":null,"updated_at":null}' content: '{"id":4,"server_id":1,"username":"zbailey","databases":[],"host":"%","status":"creating","status_color":"warning","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer 6gkvbDae15a6f43EVPdZh8c'
controller: null controller: null
method: null method: null
route: null route: null
custom: [] custom: []
- -
httpMethods: httpMethods:
- DELETE - POST
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules/{firewallRule_id}' uri: 'api/projects/{project_id}/servers/{server_id}/database-users/{databaseUser_id}/link'
metadata: metadata:
groupName: firewall-rules groupName: database-users
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: delete title: link
description: 'Delete firewall rule.' description: 'Link to databases'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -443,17 +250,17 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 29 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
firewallRule_id: databaseUser_id:
name: firewallRule_id name: databaseUser_id
description: 'The ID of the firewallRule.' description: 'The ID of the databaseUser.'
required: true required: true
example: 85 example: 16
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -461,8 +268,88 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29 server_id: 6
firewallRule_id: 85 databaseUser_id: 16
queryParameters: []
cleanQueryParameters: []
bodyParameters:
databases:
name: databases
description: 'Array of database names to link to the user.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
databases: architecto
fileParameters: []
responses:
-
status: 200
content: '{"id":4,"server_id":1,"username":"zbailey","databases":[],"host":"%","status":"creating","status_color":"warning","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/database-users/{databaseUser_id}'
metadata:
groupName: database-users
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete database user.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
databaseUser_id:
name: databaseUser_id
description: 'The ID of the databaseUser.'
required: true
example: 16
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
databaseUser_id: 16
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -476,10 +363,7 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer ZVd1fk5E3e48hDvaa6g6cPb'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -1,24 +1,46 @@
name: general name: firewall-rules
description: '' description: ''
endpoints: endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: api/health uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules'
metadata: metadata:
groupName: general groupName: firewall-rules
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: health-check title: list
description: '' description: 'Get all firewall rules.'
authenticated: false authenticated: false
custom: [] custom: []
headers: headers:
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: [] urlParameters:
cleanUrlParameters: [] project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -27,14 +49,414 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"success":true,"version":"2.4.0"}' content: '{"data":[{"id":22,"name":"eius","server_id":1,"type":"allow","protocol":"tcp","port":9322,"source":"113.14.236.204","mask":"24","note":"test","status":"creating","status_color":"info","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":23,"name":"velit","server_id":1,"type":"allow","protocol":"tcp","port":2983,"source":"199.172.126.144","mask":"24","note":"test","status":"creating","status_color":"info","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: headers: []
cache-control: 'no-cache, private' description: ''
content-type: application/json custom: []
x-ratelimit-limit: '60' responseFields: []
x-ratelimit-remaining: '59' auth: []
access-control-allow-origin: '*' controller: null
description: null method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules'
metadata:
groupName: firewall-rules
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: create
description: 'Create a new firewall rule.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: ''
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
type:
name: type
description: ''
required: true
example: allow
type: string
enumValues:
- allow
- deny
exampleWasSpecified: false
nullable: false
custom: []
protocol:
name: protocol
description: ''
required: true
example: tcp
type: string
enumValues:
- tcp
- udp
exampleWasSpecified: false
nullable: false
custom: []
port:
name: port
description: ''
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
source:
name: source
description: ''
required: false
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
mask:
name: mask
description: 'Mask for source IP.'
required: true
example: '0'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: architecto
type: allow
protocol: tcp
port: architecto
source: architecto
mask: '0'
fileParameters: []
responses:
-
status: 200
content: '{"id":22,"name":"eius","server_id":1,"type":"allow","protocol":"tcp","port":9322,"source":"113.14.236.204","mask":"24","note":"test","status":"creating","status_color":"info","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- PUT
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules/{firewallRule_id}'
metadata:
groupName: firewall-rules
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: edit
description: 'Update an existing firewall rule.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
firewallRule_id:
name: firewallRule_id
description: 'The ID of the firewallRule.'
required: true
example: 19
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
firewallRule_id: 19
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: ''
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
type:
name: type
description: ''
required: true
example: deny
type: string
enumValues:
- allow
- deny
exampleWasSpecified: false
nullable: false
custom: []
protocol:
name: protocol
description: ''
required: true
example: udp
type: string
enumValues:
- tcp
- udp
exampleWasSpecified: false
nullable: false
custom: []
port:
name: port
description: ''
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
source:
name: source
description: ''
required: false
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
mask:
name: mask
description: 'Mask for source IP.'
required: true
example: '0'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: architecto
type: deny
protocol: udp
port: architecto
source: architecto
mask: '0'
fileParameters: []
responses:
-
status: 200
content: '{"id":22,"name":"eius","server_id":1,"type":"allow","protocol":"tcp","port":9322,"source":"113.14.236.204","mask":"24","note":"test","status":"creating","status_color":"info","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules/{firewallRule_id}'
metadata:
groupName: firewall-rules
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a firewall rule by ID.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
firewallRule_id:
name: firewallRule_id
description: 'The ID of the firewallRule.'
required: true
example: 19
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
firewallRule_id: 19
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"id":22,"name":"velit","server_id":1,"type":"allow","protocol":"tcp","port":2983,"source":"199.172.126.144","mask":"24","note":"test","status":"creating","status_color":"info","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/firewall-rules/{firewallRule_id}'
metadata:
groupName: firewall-rules
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete firewall rule.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
firewallRule_id:
name: firewallRule_id
description: 'The ID of the firewallRule.'
required: true
example: 19
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
firewallRule_id: 19
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: [] auth: []

View File

@ -1,21 +1,20 @@
name: projects name: general
description: '' description: ''
endpoints: endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: api/projects uri: api/health
metadata: metadata:
groupName: projects groupName: general
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: list title: health-check
description: 'Get all projects.' description: ''
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: [] urlParameters: []
@ -28,230 +27,17 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":3,"name":"Mr. Drake Nader","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"},{"id":4,"name":"Wilhelmine Jacobson","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"success":true,"version":"2.5.0"}'
headers: [] headers:
description: '' cache-control: 'no-cache, private'
content-type: application/json
x-ratelimit-limit: '60'
x-ratelimit-remaining: '56'
access-control-allow-origin: '*'
description: null
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer fbPE6haeDZ8v1gV5ak463dc'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: api/projects
metadata:
groupName: projects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: create
description: 'Create a new project.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters: []
cleanUrlParameters: []
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the project.'
required: true
example: dignissimos
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: dignissimos
fileParameters: []
responses:
-
status: 200
content: '{"id":3,"name":"Pattie Cole","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer 6ZkedcEfa5V6Dv4ab8P3g1h'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{id}'
metadata:
groupName: projects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a project by ID.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
id:
name: id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"id":3,"name":"Mr. Elias Bauch","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer P6ka4Zaefgh8Ec3dV15v6bD'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- PUT
uri: 'api/projects/{id}'
metadata:
groupName: projects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: update
description: 'Update project.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
id:
name: id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the project.'
required: true
example: sunt
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: sunt
fileParameters: []
responses:
-
status: 200
content: '{"id":3,"name":"Elfrieda Jakubowski","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer ecaDZkf5E4vgP1V86d6hb3a'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}'
metadata:
groupName: projects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete project.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer h5gZ63DPVbcevE4faka86d1'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -1,58 +1,24 @@
name: redirects name: projects
description: '' description: ''
endpoints: endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers/{server_id}/sites/{site_id}/redirects' uri: api/projects
metadata: metadata:
groupName: redirects groupName: projects
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: index title: list
description: 'Get all redirects.' description: 'Get all projects.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters: []
project_id: cleanUrlParameters: []
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
site_id:
name: site_id
description: 'The ID of the site.'
required: true
example: 44
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
site_id: 44
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -61,15 +27,12 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":null,"site_id":null,"mode":307,"from":"ipsum","to":"http:\/\/fritsch.biz\/","status":"ready","created_at":null,"updated_at":null},{"id":null,"site_id":null,"mode":302,"from":"culpa","to":"http:\/\/www.huels.net\/aut-ut-ut-porro-non-rerum-voluptatum.html","status":"ready","created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":3,"name":"Belle Dickens","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":4,"name":"Mittie Considine","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer cV16fevgEZhPadD43685akb'
controller: null controller: null
method: null method: null
route: null route: null
@ -77,23 +40,69 @@ endpoints:
- -
httpMethods: httpMethods:
- POST - POST
uri: 'api/projects/{project_id}/servers/{server_id}/sites/{site_id}/redirects' uri: api/projects
metadata: metadata:
groupName: redirects groupName: projects
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Create a new redirect.' description: 'Create a new project.'
authenticated: true authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters: []
cleanUrlParameters: []
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the project.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: architecto
fileParameters: []
responses:
-
status: 200
content: '{"id":3,"name":"Ms. Elisabeth Okuneva","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{id}'
metadata:
groupName: projects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a project by ID.'
authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
project_id: id:
name: project_id name: id
description: 'The ID of the project.' description: 'The ID of the project.'
required: true required: true
example: 1 example: 1
@ -102,84 +111,80 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
server_id: cleanUrlParameters:
name: server_id id: 1
description: 'The ID of the server.' queryParameters: []
required: true cleanQueryParameters: []
example: 29 bodyParameters: []
type: integer cleanBodyParameters: []
enumValues: [] fileParameters: []
exampleWasSpecified: false responses:
nullable: false -
status: 200
content: '{"id":3,"name":"Aleen O''Kon","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: [] custom: []
site_id: responseFields: []
name: site_id auth: []
description: 'The ID of the site.' controller: null
method: null
route: null
custom: []
-
httpMethods:
- PUT
uri: 'api/projects/{id}'
metadata:
groupName: projects
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: update
description: 'Update project.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
id:
name: id
description: 'The ID of the project.'
required: true required: true
example: 44 example: 1
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 id: 1
server_id: 29
site_id: 44
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
from: name:
name: from name: name
description: '' description: 'The name of the project.'
required: true required: true
example: odit example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
to:
name: to
description: ''
required: true
example: incidunt
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
mode:
name: mode
description: ''
required: true
example: 301
type: string
enumValues:
- 301
- 302
- 307
- 308
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters: cleanBodyParameters:
from: odit name: architecto
to: incidunt
mode: 301
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: null content: '{"id":3,"name":"Ms. Elisabeth Okuneva","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer ZD45hPk638abev61EVcagdf'
controller: null controller: null
method: null method: null
route: null route: null
@ -187,18 +192,17 @@ endpoints:
- -
httpMethods: httpMethods:
- DELETE - DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/sites/{site_id}/redirects/{redirect_id}' uri: 'api/projects/{project_id}'
metadata: metadata:
groupName: redirects groupName: projects
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete a redirect.' description: 'Delete project.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -212,41 +216,8 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
site_id:
name: site_id
description: 'The ID of the site.'
required: true
example: 44
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
redirect_id:
name: redirect_id
description: 'The ID of the redirect.'
required: true
example: 9
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29
site_id: 44
redirect_id: 9
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -260,10 +231,7 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer Ec3fDgdbae615aPh8k6vV4Z'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -1,72 +1,20 @@
name: servers name: redirects
description: '' description: ''
endpoints: endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers'
metadata:
groupName: servers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: list
description: 'Get all servers in a project.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"data":[{"id":null,"project_id":null,"user_id":null,"provider_id":null,"name":"Miss Bonita Vandervort IV","ssh_user":"vito","ip":"120.222.195.212","local_ip":"138.119.37.248","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":null,"last_update_check":null,"created_at":null,"updated_at":null},{"id":null,"project_id":null,"user_id":null,"provider_id":null,"name":"Dr. Shanie Batz IV","ssh_user":"vito","ip":"241.88.138.163","local_ip":"138.226.232.93","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":null,"last_update_check":null,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer Pg1Vk6cvadD8eb3ZhaEf564'
controller: null
method: null
route: null
custom: []
- -
httpMethods: httpMethods:
- POST - POST
uri: 'api/projects/{project_id}/servers' uri: 'api/projects/{project_id}/servers/{server_id}/sites/{site_id}/redirects'
metadata: metadata:
groupName: servers groupName: redirects
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Create a new server.' description: 'Create a new redirect.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -80,359 +28,81 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
site_id:
name: site_id
description: 'The ID of the site.'
required: true
example: 14
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 6
site_id: 14
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
provider: from:
name: provider name: from
description: 'The server provider type' description: ''
required: true required: true
example: fugiat example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
server_provider: to:
name: server_provider name: to
description: 'If the provider is not custom, the ID of the server provider profile' description: ''
required: true required: true
example: digitalocean example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
mode:
name: mode
description: ''
required: true
example: 307
type: string type: string
enumValues: enumValues:
- custom - 301
- hetzner - 302
- digitalocean - 307
- linode - 308
- vultr
exampleWasSpecified: false
nullable: false
custom: []
region:
name: region
description: 'Provider region if the provider is not custom'
required: true
example: itaque
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
plan:
name: plan
description: 'Provider plan if the provider is not custom'
required: true
example: voluptatum
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
ip:
name: ip
description: 'SSH IP address if the provider is custom'
required: true
example: ut
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
port:
name: port
description: 'SSH Port if the provider is custom'
required: true
example: reiciendis
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
name:
name: name
description: 'The name of the server.'
required: true
example: et
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
os:
name: os
description: 'The os of the server'
required: true
example: vel
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
webserver:
name: webserver
description: 'Web server'
required: true
example: nginx
type: string
enumValues:
- none
- nginx
exampleWasSpecified: false
nullable: false
custom: []
database:
name: database
description: Database
required: true
example: mysql80
type: string
enumValues:
- none
- mysql57
- mysql80
- mariadb103
- mariadb104
- mariadb103
- postgresql12
- postgresql13
- postgresql14
- postgresql15
- postgresql16
exampleWasSpecified: false
nullable: false
custom: []
php:
name: php
description: 'PHP version'
required: true
example: '7.2'
type: string
enumValues:
- '7.0'
- '7.1'
- '7.2'
- '7.3'
- '7.4'
- '8.0'
- '8.1'
- '8.2'
- '8.3'
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
provider: fugiat from: architecto
server_provider: digitalocean to: architecto
region: itaque mode: 307
plan: voluptatum
ip: ut
port: reiciendis
name: et
os: vel
webserver: nginx
database: mysql80
php: '7.2'
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":null,"project_id":null,"user_id":null,"provider_id":null,"name":"Jeromy Mann","ssh_user":"vito","ip":"128.70.209.89","local_ip":"150.217.250.187","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":null,"last_update_check":null,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer 5E61e4vfcgDbVkZd68aah3P'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{id}'
metadata:
groupName: servers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a server by ID.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
id:
name: id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
id: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"id":null,"project_id":null,"user_id":null,"provider_id":null,"name":"Miss Maya Schaden I","ssh_user":"vito","ip":"44.57.83.39","local_ip":"46.22.92.58","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":null,"last_update_check":null,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer hV3debf65aPD4E1ckag8Z6v'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/reboot'
metadata:
groupName: servers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: reboot
description: 'Reboot a server.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null content: null
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer b61aD6538PacZEkeghfvV4d'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/upgrade'
metadata:
groupName: servers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: upgrade
description: 'Upgrade server.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer dEZaa6cePVf3k86g45vbD1h'
controller: null controller: null
method: null method: null
route: null route: null
@ -440,18 +110,17 @@ endpoints:
- -
httpMethods: httpMethods:
- DELETE - DELETE
uri: 'api/projects/{project_id}/servers/{server_id}' uri: 'api/projects/{project_id}/servers/{server_id}/sites/{site_id}/redirects/{redirect_id}'
metadata: metadata:
groupName: servers groupName: redirects
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete server.' description: 'Delete a redirect.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -469,7 +138,27 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 29 example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
site_id:
name: site_id
description: 'The ID of the site.'
required: true
example: 14
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
redirect_id:
name: redirect_id
description: 'The ID of the redirect.'
required: true
example: 2
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -477,7 +166,9 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29 server_id: 6
site_id: 14
redirect_id: 2
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -491,10 +182,7 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer 6aDkZEfdP16V58gb43avhec'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -1,21 +1,20 @@
name: server-providers name: servers
description: '' description: ''
endpoints: endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/server-providers' uri: 'api/projects/{project_id}/servers'
metadata: metadata:
groupName: server-providers groupName: servers
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: '' description: 'Get all servers in a project.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -39,15 +38,12 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":3,"project_id":null,"global":true,"name":"aut","provider":"hetzner","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"},{"id":4,"project_id":null,"global":true,"name":"qui","provider":"aws","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":7,"project_id":1,"services":[],"user_id":1,"provider_id":null,"name":"Rhiannon Hackett","ssh_user":"vito","ssh_users":["root","vito"],"ip":"15.21.182.27","local_ip":"15.126.47.30","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":0,"last_update_check":null,"status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":8,"project_id":1,"services":[],"user_id":1,"provider_id":null,"name":"Maya Bins","ssh_user":"vito","ssh_users":["root","vito"],"ip":"88.63.32.129","local_ip":"161.58.4.234","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":0,"last_update_check":null,"status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer 3evaP8h6VEZkbfgaD6d1c45'
controller: null controller: null
method: null method: null
route: null route: null
@ -55,18 +51,17 @@ endpoints:
- -
httpMethods: httpMethods:
- POST - POST
uri: 'api/projects/{project_id}/server-providers' uri: 'api/projects/{project_id}/servers'
metadata: metadata:
groupName: server-providers groupName: servers
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: '' description: 'Create a new server.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -87,9 +82,64 @@ endpoints:
bodyParameters: bodyParameters:
provider: provider:
name: provider name: provider
description: 'The provider (aws, linode, hetzner, digitalocean, vultr, ...)' description: 'The server provider type'
required: true required: true
example: corrupti example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_provider:
name: server_provider
description: 'If the provider is not custom, the ID of the server provider profile'
required: true
example: linode
type: string
enumValues:
- custom
- hetzner
- digitalocean
- linode
- vultr
exampleWasSpecified: false
nullable: false
custom: []
region:
name: region
description: 'Provider region if the provider is not custom'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
plan:
name: plan
description: 'Provider plan if the provider is not custom'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
ip:
name: ip
description: 'SSH IP address if the provider is custom'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
port:
name: port
description: 'SSH Port if the provider is custom'
required: true
example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -97,63 +147,99 @@ endpoints:
custom: [] custom: []
name: name:
name: name name: name
description: 'The name of the server provider.' description: 'The name of the server.'
required: true required: true
example: est example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
token: os:
name: token name: os
description: 'The token if provider requires api token' description: 'The os of the server'
required: true required: true
example: rerum example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
key: webserver:
name: key name: webserver
description: 'The key if provider requires key' description: 'Web server'
required: true required: true
example: ut example: none
type: string type: string
enumValues: [] enumValues:
- none
- nginx
- caddy
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
secret: database:
name: secret name: database
description: 'The secret if provider requires key' description: Database
required: true required: true
example: sed example: mysql80
type: string type: string
enumValues: [] enumValues:
- none
- mysql57
- mysql80
- mariadb103
- mariadb104
- mariadb103
- postgresql12
- postgresql13
- postgresql14
- postgresql15
- postgresql16
exampleWasSpecified: false
nullable: false
custom: []
php:
name: php
description: 'PHP version'
required: true
example: '8.2'
type: string
enumValues:
- '7.0'
- '7.1'
- '7.2'
- '7.3'
- '7.4'
- '8.0'
- '8.1'
- '8.2'
- '8.3'
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
provider: corrupti provider: architecto
name: est server_provider: linode
token: rerum region: architecto
key: ut plan: architecto
secret: sed ip: architecto
port: architecto
name: architecto
os: architecto
webserver: none
database: mysql80
php: '8.2'
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":3,"project_id":null,"global":true,"name":"voluptas","provider":"vultr","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}' content: '{"id":7,"project_id":1,"services":[],"user_id":1,"provider_id":null,"name":"Ms. Elisabeth Okuneva","ssh_user":"vito","ssh_users":["root","vito"],"ip":"75.13.66.152","local_ip":"199.172.126.144","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":0,"last_update_check":null,"status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer 6g6vfEck83VaPhd5Zabe1D4'
controller: null controller: null
method: null method: null
route: null route: null
@ -161,18 +247,17 @@ endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/server-providers/{serverProvider_id}' uri: 'api/projects/{project_id}/servers/{id}'
metadata: metadata:
groupName: server-providers groupName: servers
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: '' description: 'Get a server by ID.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -186,11 +271,11 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
serverProvider_id: id:
name: serverProvider_id name: id
description: 'The ID of the serverProvider.' description: 'The ID of the server.'
required: true required: true
example: 1 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -198,7 +283,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
serverProvider_id: 1 id: 6
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -207,34 +292,30 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":3,"project_id":null,"global":true,"name":"et","provider":"digitalocean","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}' content: '{"id":7,"project_id":1,"services":[],"user_id":1,"provider_id":null,"name":"Belle Dickens","ssh_user":"vito","ssh_users":["root","vito"],"ip":"51.210.32.30","local_ip":"82.174.132.158","port":22,"os":"ubuntu_22","type":"regular","type_data":null,"provider":"custom","provider_data":null,"public_key":"test","status":"ready","auto_update":null,"available_updates":0,"security_updates":null,"progress":100,"progress_step":null,"updates":0,"last_update_check":null,"status_color":"success","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer va63cDe8dPf5Z4Vahb1E6kg'
controller: null controller: null
method: null method: null
route: null route: null
custom: [] custom: []
- -
httpMethods: httpMethods:
- PUT - POST
uri: 'api/projects/{project_id}/server-providers/{serverProvider_id}' uri: 'api/projects/{project_id}/servers/{server_id}/reboot'
metadata: metadata:
groupName: server-providers groupName: servers
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: update title: reboot
description: '' description: 'Reboot a server.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -248,11 +329,11 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
serverProvider_id: server_id:
name: serverProvider_id name: server_id
description: 'The ID of the serverProvider.' description: 'The ID of the server.'
required: true required: true
example: 1 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -260,93 +341,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
serverProvider_id: 1 server_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the server provider.'
required: true
example: earum
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
global:
name: global
description: 'Accessible in all projects'
required: true
example: false
type: string
enumValues:
- true
- false
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: earum
global: false
fileParameters: []
responses:
-
status: 200
content: '{"id":3,"project_id":null,"global":true,"name":"architecto","provider":"digitalocean","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer 4e1dghaV6D856P3ZbfkcEva'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/server-providers/{serverProvider_id}'
metadata:
groupName: server-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: ''
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
serverProvider_id:
name: serverProvider_id
description: 'The ID of the serverProvider.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
serverProvider_id: 1
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -360,10 +355,123 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers controller: null
- Authorization method: null
- 'Bearer fcVa8ev63gP5DaZbkdhE461' route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/upgrade'
metadata:
groupName: servers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: upgrade
description: 'Upgrade server.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}'
metadata:
groupName: servers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete server.'
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 6
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -1,21 +1,20 @@
name: ssh-keys name: server-providers
description: '' description: ''
endpoints: endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers/{server_id}/ssh-keys' uri: 'api/projects/{project_id}/server-providers'
metadata: metadata:
groupName: ssh-keys groupName: server-providers
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all ssh keys.' description: ''
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -29,19 +28,8 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -50,15 +38,12 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":null,"user":null,"name":"Santa Goyette","created_at":null,"updated_at":null},{"id":null,"user":null,"name":"Cecil Cummings","created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":4,"project_id":null,"global":true,"name":"ab","provider":"custom","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":5,"project_id":null,"global":true,"name":"incidunt","provider":"custom","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer 165aZvb46PhacEfke83dVgD'
controller: null controller: null
method: null method: null
route: null route: null
@ -66,18 +51,17 @@ endpoints:
- -
httpMethods: httpMethods:
- POST - POST
uri: 'api/projects/{project_id}/servers/{server_id}/ssh-keys' uri: 'api/projects/{project_id}/server-providers'
metadata: metadata:
groupName: ssh-keys groupName: server-providers
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: 'Deploy ssh key to server.' description: ''
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -91,27 +75,16 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
key_id: provider:
name: key_id name: provider
description: 'The ID of the key.' description: 'The provider (aws, linode, hetzner, digitalocean, vultr, ...)'
required: true required: true
example: explicabo example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -119,60 +92,78 @@ endpoints:
custom: [] custom: []
name: name:
name: name name: name
description: 'Key name, required if key_id is not provided.' description: 'The name of the server provider.'
required: true required: true
example: deleniti example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
public_key: token:
name: public_key name: token
description: 'Public Key, required if key_id is not provided.' description: 'The token if provider requires api token'
required: true required: true
example: sapiente example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
key:
name: key
description: 'The key if provider requires key'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
secret:
name: secret
description: 'The secret if provider requires key'
required: true
example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
key_id: explicabo provider: architecto
name: deleniti name: architecto
public_key: sapiente token: architecto
key: architecto
secret: architecto
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":null,"user":null,"name":"Mr. Reagan Jacobson V","created_at":null,"updated_at":null}' content: '{"id":4,"project_id":null,"global":true,"name":"eius","provider":"custom","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer deDkf4E13PZb6cgaV58ha6v'
controller: null controller: null
method: null method: null
route: null route: null
custom: [] custom: []
- -
httpMethods: httpMethods:
- DELETE - GET
uri: 'api/projects/{project_id}/servers/{server_id}/ssh-keys/{sshKey_id}' uri: 'api/projects/{project_id}/server-providers/{serverProvider_id}'
metadata: metadata:
groupName: ssh-keys groupName: server-providers
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: delete title: show
description: 'Delete ssh key from server.' description: ''
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -186,21 +177,11 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
server_id: serverProvider_id:
name: server_id name: serverProvider_id
description: 'The ID of the server.' description: 'The ID of the serverProvider.'
required: true required: true
example: 29 example: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
sshKey_id:
name: sshKey_id
description: 'The ID of the sshKey.'
required: true
example: 1
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -208,8 +189,147 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29 serverProvider_id: 3
sshKey_id: 1 queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"id":4,"project_id":null,"global":true,"name":"mollitia","provider":"vultr","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- PUT
uri: 'api/projects/{project_id}/server-providers/{serverProvider_id}'
metadata:
groupName: server-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: update
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
serverProvider_id:
name: serverProvider_id
description: 'The ID of the serverProvider.'
required: true
example: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
serverProvider_id: 3
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the server provider.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
global:
name: global
description: 'Accessible in all projects'
required: true
example: false
type: string
enumValues:
- true
- false
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: architecto
global: false
fileParameters: []
responses:
-
status: 200
content: '{"id":4,"project_id":null,"global":true,"name":"eius","provider":"custom","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/server-providers/{serverProvider_id}'
metadata:
groupName: server-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
serverProvider_id:
name: serverProvider_id
description: 'The ID of the serverProvider.'
required: true
example: 3
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
serverProvider_id: 3
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -223,10 +343,7 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer ec48fgVdZ6ah3kvPD16E5ab'
controller: null controller: null
method: null method: null
route: null route: null

View File

@ -1,21 +1,20 @@
name: services name: ssh-keys
description: '' description: ''
endpoints: endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/servers/{server_id}/services' uri: 'api/projects/{project_id}/servers/{server_id}/ssh-keys'
metadata: metadata:
groupName: services groupName: ssh-keys
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: 'Get all services.' description: 'Get all ssh keys.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -33,7 +32,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 29 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -41,7 +40,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29 server_id: 6
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -50,34 +49,30 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":null,"server_id":null,"type":null,"type_data":null,"name":null,"version":null,"unit":null,"status":null,"is_default":null,"created_at":null,"updated_at":null},{"id":null,"server_id":null,"type":null,"type_data":null,"name":null,"version":null,"unit":null,"status":null,"is_default":null,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":3,"name":"Haven Romaguera","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":4,"name":"Viva Marquardt","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer gVEce46k8aZfaP3d15vbhD6'
controller: null controller: null
method: null method: null
route: null route: null
custom: [] custom: []
- -
httpMethods: httpMethods:
- GET - POST
uri: 'api/projects/{project_id}/servers/{server_id}/services/{id}' uri: 'api/projects/{project_id}/servers/{server_id}/ssh-keys'
metadata: metadata:
groupName: services groupName: ssh-keys
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: show title: create
description: 'Get a service by ID.' description: 'Deploy ssh key to server.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -95,17 +90,7 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 29 example: 6
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
id:
name: id
description: 'The ID of the service.'
required: true
example: 169
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -113,390 +98,54 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29 server_id: 6
id: 169
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters:
cleanBodyParameters: [] key_id:
name: key_id
description: 'The ID of the key.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
name:
name: name
description: 'Key name, required if key_id is not provided.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
public_key:
name: public_key
description: 'Public Key, required if key_id is not provided.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
key_id: architecto
name: architecto
public_key: architecto
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":null,"server_id":null,"type":null,"type_data":null,"name":null,"version":null,"unit":null,"status":null,"is_default":null,"created_at":null,"updated_at":null}' content: '{"id":3,"name":"Ms. Elisabeth Okuneva","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer Ef8D5gbV6cadk3Zh1vP46ea'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/start'
metadata:
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: start
description: 'Start service.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 169
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
service_id: 169
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer b3DckZ8g6ha6aPe4f5V1vdE'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/stop'
metadata:
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: stop
description: 'Stop service.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 169
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
service_id: 169
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer 1e8aZbfvE5643DacgkPhdV6'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/restart'
metadata:
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: restart
description: 'Restart service.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 169
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
service_id: 169
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer c46baVZEg5dv1Pfe8Dha6k3'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/enable'
metadata:
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: enable
description: 'Enable service.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 169
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
service_id: 169
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer EvcehkDbdV43f61P86Za5ga'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/disable'
metadata:
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: disable
description: 'Disable service.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 169
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
service_id: 169
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer k8E5gf6d4h31bevaa6cVPZD'
controller: null controller: null
method: null method: null
route: null route: null
@ -504,18 +153,17 @@ endpoints:
- -
httpMethods: httpMethods:
- DELETE - DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}' uri: 'api/projects/{project_id}/servers/{server_id}/ssh-keys/{sshKey_id}'
metadata: metadata:
groupName: services groupName: ssh-keys
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: 'Delete service.' description: 'Delete ssh key from server.'
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -533,17 +181,17 @@ endpoints:
name: server_id name: server_id
description: 'The ID of the server.' description: 'The ID of the server.'
required: true required: true
example: 29 example: 6
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
service_id: sshKey_id:
name: service_id name: sshKey_id
description: 'The ID of the service.' description: 'The ID of the sshKey.'
required: true required: true
example: 169 example: 1
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -551,8 +199,8 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
server_id: 29 server_id: 6
service_id: 169 sshKey_id: 1
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -566,10 +214,7 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer Pekav16cd5ag486ZfD3EVbh'
controller: null controller: null
method: null method: null
route: null route: null

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,21 +1,20 @@
name: storage-providers name: source-controls
description: '' description: ''
endpoints: endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/storage-providers' uri: 'api/projects/{project_id}/source-controls'
metadata: metadata:
groupName: storage-providers groupName: source-controls
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: list title: list
description: '' description: ''
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -39,15 +38,12 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"data":[{"id":5,"project_id":null,"global":true,"name":"veritatis","provider":"ftp","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"},{"id":6,"project_id":null,"global":true,"name":"voluptas","provider":"dropbox","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}' content: '{"data":[{"id":2,"project_id":null,"global":true,"name":"Ms. Elisabeth Okuneva","provider":"github","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":3,"project_id":null,"global":true,"name":"Aleen O''Kon","provider":"github","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer fgh4eV31dP58kvaDEaZbc66'
controller: null controller: null
method: null method: null
route: null route: null
@ -55,18 +51,17 @@ endpoints:
- -
httpMethods: httpMethods:
- POST - POST
uri: 'api/projects/{project_id}/storage-providers' uri: 'api/projects/{project_id}/source-controls'
metadata: metadata:
groupName: storage-providers groupName: source-controls
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: create title: create
description: '' description: ''
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -87,11 +82,14 @@ endpoints:
bodyParameters: bodyParameters:
provider: provider:
name: provider name: provider
description: 'The provider (aws, linode, hetzner, digitalocean, vultr, ...)' description: 'The provider'
required: true required: true
example: ab example: gitlab
type: string type: string
enumValues: [] enumValues:
- gitlab
- github
- bitbucket
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
@ -99,7 +97,7 @@ endpoints:
name: name name: name
description: 'The name of the storage provider.' description: 'The name of the storage provider.'
required: true required: true
example: quo example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -109,51 +107,59 @@ endpoints:
name: token name: token
description: 'The token if provider requires api token' description: 'The token if provider requires api token'
required: true required: true
example: in example: architecto
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
key: url:
name: key name: url
description: 'The key if provider requires key' description: 'The URL if the provider is Gitlab and it is self-hosted'
required: true required: true
example: sunt example: 'http://www.bailey.biz/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html'
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
secret: username:
name: secret name: username
description: 'The secret if provider requires key' description: 'The username if the provider is Bitbucket'
required: true required: true
example: molestias example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
password:
name: password
description: 'The password if the provider is Bitbucket'
required: true
example: '|]|{+-'
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
provider: ab provider: gitlab
name: quo name: architecto
token: in token: architecto
key: sunt url: 'http://www.bailey.biz/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html'
secret: molestias username: architecto
password: '|]|{+-'
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":5,"project_id":null,"global":true,"name":"asperiores","provider":"dropbox","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}' content: '{"id":2,"project_id":null,"global":true,"name":"Mrs. Justina Gaylord","provider":"github","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer e584613dkZaPDEVvgcahbf6'
controller: null controller: null
method: null method: null
route: null route: null
@ -161,18 +167,17 @@ endpoints:
- -
httpMethods: httpMethods:
- GET - GET
uri: 'api/projects/{project_id}/storage-providers/{storageProvider_id}' uri: 'api/projects/{project_id}/source-controls/{sourceControl_id}'
metadata: metadata:
groupName: storage-providers groupName: source-controls
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: show title: show
description: '' description: ''
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -186,11 +191,11 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
storageProvider_id: sourceControl_id:
name: storageProvider_id name: sourceControl_id
description: 'The ID of the storageProvider.' description: 'The ID of the sourceControl.'
required: true required: true
example: 3 example: 1
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -198,7 +203,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
storageProvider_id: 3 sourceControl_id: 1
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -207,15 +212,12 @@ endpoints:
responses: responses:
- -
status: 200 status: 200
content: '{"id":5,"project_id":null,"global":true,"name":"ipsum","provider":"local","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}' content: '{"id":2,"project_id":null,"global":true,"name":"Misael Runte","provider":"github","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer h6Zk6834dDce5fbPa1VvagE'
controller: null controller: null
method: null method: null
route: null route: null
@ -223,18 +225,17 @@ endpoints:
- -
httpMethods: httpMethods:
- PUT - PUT
uri: 'api/projects/{project_id}/storage-providers/{storageProvider_id}' uri: 'api/projects/{project_id}/source-controls/{sourceControl_id}'
metadata: metadata:
groupName: storage-providers groupName: source-controls
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: update title: update
description: '' description: ''
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -248,11 +249,11 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
storageProvider_id: sourceControl_id:
name: storageProvider_id name: sourceControl_id
description: 'The ID of the storageProvider.' description: 'The ID of the sourceControl.'
required: true required: true
example: 3 example: 1
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -260,7 +261,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
storageProvider_id: 3 sourceControl_id: 1
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: bodyParameters:
@ -268,7 +269,47 @@ endpoints:
name: name name: name
description: 'The name of the storage provider.' description: 'The name of the storage provider.'
required: true required: true
example: voluptas example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
token:
name: token
description: 'The token if provider requires api token'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
url:
name: url
description: 'The URL if the provider is Gitlab and it is self-hosted'
required: true
example: 'http://www.bailey.biz/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
username:
name: username
description: 'The username if the provider is Bitbucket'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
password:
name: password
description: 'The password if the provider is Bitbucket'
required: true
example: '|]|{+-'
type: string type: string
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -278,7 +319,7 @@ endpoints:
name: global name: global
description: 'Accessible in all projects' description: 'Accessible in all projects'
required: true required: true
example: true example: false
type: string type: string
enumValues: enumValues:
- true - true
@ -287,21 +328,22 @@ endpoints:
nullable: false nullable: false
custom: [] custom: []
cleanBodyParameters: cleanBodyParameters:
name: voluptas name: architecto
global: true token: architecto
url: 'http://www.bailey.biz/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html'
username: architecto
password: '|]|{+-'
global: false
fileParameters: [] fileParameters: []
responses: responses:
- -
status: 200 status: 200
content: '{"id":5,"project_id":null,"global":true,"name":"minima","provider":"ftp","created_at":"2025-04-05T17:48:03.000000Z","updated_at":"2025-04-05T17:48:03.000000Z"}' content: '{"id":2,"project_id":null,"global":true,"name":"Mrs. Justina Gaylord","provider":"github","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: [] headers: []
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer ak6fgd1Eba48chvPV3e5Z6D'
controller: null controller: null
method: null method: null
route: null route: null
@ -309,18 +351,17 @@ endpoints:
- -
httpMethods: httpMethods:
- DELETE - DELETE
uri: 'api/projects/{project_id}/storage-providers/{storageProvider_id}' uri: 'api/projects/{project_id}/source-controls/{sourceControl_id}'
metadata: metadata:
groupName: storage-providers groupName: source-controls
groupDescription: '' groupDescription: ''
subgroup: '' subgroup: ''
subgroupDescription: '' subgroupDescription: ''
title: delete title: delete
description: '' description: ''
authenticated: true authenticated: false
custom: [] custom: []
headers: headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json Content-Type: application/json
Accept: application/json Accept: application/json
urlParameters: urlParameters:
@ -334,11 +375,11 @@ endpoints:
exampleWasSpecified: false exampleWasSpecified: false
nullable: false nullable: false
custom: [] custom: []
storageProvider_id: sourceControl_id:
name: storageProvider_id name: sourceControl_id
description: 'The ID of the storageProvider.' description: 'The ID of the sourceControl.'
required: true required: true
example: 3 example: 1
type: integer type: integer
enumValues: [] enumValues: []
exampleWasSpecified: false exampleWasSpecified: false
@ -346,7 +387,7 @@ endpoints:
custom: [] custom: []
cleanUrlParameters: cleanUrlParameters:
project_id: 1 project_id: 1
storageProvider_id: 3 sourceControl_id: 1
queryParameters: [] queryParameters: []
cleanQueryParameters: [] cleanQueryParameters: []
bodyParameters: [] bodyParameters: []
@ -360,10 +401,7 @@ endpoints:
description: '' description: ''
custom: [] custom: []
responseFields: [] responseFields: []
auth: auth: []
- headers
- Authorization
- 'Bearer PcaDbh6ZE4aV1e8fdv56k3g'
controller: null controller: null
method: null method: null
route: null route: null

350
.scribe/endpoints/14.yaml Normal file
View File

@ -0,0 +1,350 @@
name: storage-providers
description: ''
endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/storage-providers'
metadata:
groupName: storage-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: list
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"data":[{"id":4,"project_id":null,"global":true,"name":"harum","provider":"local","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"},{"id":5,"project_id":null,"global":true,"name":"commodi","provider":"local","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/storage-providers'
metadata:
groupName: storage-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: create
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters:
provider:
name: provider
description: 'The provider (aws, linode, hetzner, digitalocean, vultr, ...)'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
name:
name: name
description: 'The name of the storage provider.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
token:
name: token
description: 'The token if provider requires api token'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
key:
name: key
description: 'The key if provider requires key'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
secret:
name: secret
description: 'The secret if provider requires key'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
provider: architecto
name: architecto
token: architecto
key: architecto
secret: architecto
fileParameters: []
responses:
-
status: 200
content: '{"id":4,"project_id":null,"global":true,"name":"eius","provider":"local","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/storage-providers/{storageProvider_id}'
metadata:
groupName: storage-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
storageProvider_id:
name: storageProvider_id
description: 'The ID of the storageProvider.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
storageProvider_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 200
content: '{"id":4,"project_id":null,"global":true,"name":"et","provider":"dropbox","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- PUT
uri: 'api/projects/{project_id}/storage-providers/{storageProvider_id}'
metadata:
groupName: storage-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: update
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
storageProvider_id:
name: storageProvider_id
description: 'The ID of the storageProvider.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
storageProvider_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters:
name:
name: name
description: 'The name of the storage provider.'
required: true
example: architecto
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
global:
name: global
description: 'Accessible in all projects'
required: true
example: true
type: string
enumValues:
- true
- false
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
name: architecto
global: true
fileParameters: []
responses:
-
status: 200
content: '{"id":4,"project_id":null,"global":true,"name":"eius","provider":"local","created_at":"2025-06-10T10:21:56.000000Z","updated_at":"2025-06-10T10:21:56.000000Z"}'
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/storage-providers/{storageProvider_id}'
metadata:
groupName: storage-providers
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: ''
authenticated: false
custom: []
headers:
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
storageProvider_id:
name: storageProvider_id
description: 'The ID of the storageProvider.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
storageProvider_id: 1
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth: []
controller: null
method: null
route: null
custom: []

View File

@ -3,11 +3,11 @@ # Introduction
VitoDeploy's API documentation. VitoDeploy's API documentation.
<aside> <aside>
<strong>Base URL</strong>: <code>https://your-vito-url</code> <strong>Base URL</strong>: <code>https://vito.test</code>
</aside> </aside>
This documentation aims to provide all the information you need to work with our API. This documentation aims to provide all the information you need to work with our API.
<aside>As you scroll, you'll see code examples for working with the API in different programming languages in the dark area to the right (or as part of the content on mobile). <aside>As you scroll, you'll see code examples for working with the API in different programming languages in the dark area to the right (or as part of the content on mobile).
You can switch the language used with the tabs at the top right (or from the nav menu at the top left on mobile).</aside> You can switch the language used with the tabs at the top right (or from the nav menu at the top left on mobile).</aside>

View File

@ -15,7 +15,7 @@ ## About Vito
## Quick Start ## Quick Start
```sh ```sh
bash <(curl -Ls https://raw.githubusercontent.com/vitodeploy/vito/2.x/scripts/install.sh) bash <(curl -Ls https://raw.githubusercontent.com/vitodeploy/vito/3.x/scripts/install.sh)
``` ```
## Features ## Features
@ -45,14 +45,11 @@ ## Useful Links
## Credits ## Credits
- Laravel - Laravel
- InertiaJS
- Shadcn UI
- PHPSecLib - PHPSecLib
- PHPUnit - PHPUnit
- Tailwindcss - Tailwindcss
- Alpinejs
- Livewire
- Vite - Vite
- Prettier - Prettier
- Postcss
- FilamentPHP
- Mobiledetect
- Spatie - Spatie

View File

@ -3,18 +3,24 @@
namespace App\Actions\CronJob; namespace App\Actions\CronJob;
use App\Enums\CronjobStatus; use App\Enums\CronjobStatus;
use App\Exceptions\SSHError;
use App\Models\CronJob; use App\Models\CronJob;
use App\Models\Server; use App\Models\Server;
use App\ValidationRules\CronRule; use App\ValidationRules\CronRule;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
class CreateCronJob class CreateCronJob
{ {
/** /**
* @param array<string, mixed> $input * @param array<string, mixed> $input
*
* @throws SSHError
*/ */
public function create(Server $server, array $input): CronJob public function create(Server $server, array $input): CronJob
{ {
Validator::make($input, self::rules($input, $server))->validate();
$cronJob = new CronJob([ $cronJob = new CronJob([
'server_id' => $server->id, 'server_id' => $server->id,
'user' => $input['user'], 'user' => $input['user'],
@ -33,7 +39,7 @@ public function create(Server $server, array $input): CronJob
/** /**
* @param array<string, mixed> $input * @param array<string, mixed> $input
* @return array<string, array<mixed>> * @return array<string, array<int, mixed>>
*/ */
public static function rules(array $input, Server $server): array public static function rules(array $input, Server $server): array
{ {

View File

@ -3,11 +3,15 @@
namespace App\Actions\CronJob; namespace App\Actions\CronJob;
use App\Enums\CronjobStatus; use App\Enums\CronjobStatus;
use App\Exceptions\SSHError;
use App\Models\CronJob; use App\Models\CronJob;
use App\Models\Server; use App\Models\Server;
class DeleteCronJob class DeleteCronJob
{ {
/**
* @throws SSHError
*/
public function delete(Server $server, CronJob $cronJob): void public function delete(Server $server, CronJob $cronJob): void
{ {
$user = $cronJob->user; $user = $cronJob->user;

View File

@ -3,11 +3,15 @@
namespace App\Actions\CronJob; namespace App\Actions\CronJob;
use App\Enums\CronjobStatus; use App\Enums\CronjobStatus;
use App\Exceptions\SSHError;
use App\Models\CronJob; use App\Models\CronJob;
use App\Models\Server; use App\Models\Server;
class DisableCronJob class DisableCronJob
{ {
/**
* @throws SSHError
*/
public function disable(Server $server, CronJob $cronJob): void public function disable(Server $server, CronJob $cronJob): void
{ {
$cronJob->status = CronjobStatus::DISABLING; $cronJob->status = CronjobStatus::DISABLING;

View File

@ -0,0 +1,68 @@
<?php
namespace App\Actions\CronJob;
use App\Enums\CronjobStatus;
use App\Exceptions\SSHError;
use App\Models\CronJob;
use App\Models\Server;
use App\ValidationRules\CronRule;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
class EditCronJob
{
/**
* @param array<string, mixed> $input
*
* @throws SSHError
*/
public function edit(Server $server, CronJob $cronJob, array $input): CronJob
{
Validator::make($input, self::rules($input, $server))->validate();
$cronJob->update([
'user' => $input['user'],
'command' => $input['command'],
'frequency' => $input['frequency'] == 'custom' ? $input['custom'] : $input['frequency'],
'status' => CronjobStatus::UPDATING,
]);
$cronJob->save();
$server->cron()->update($cronJob->user, CronJob::crontab($server, $cronJob->user));
$cronJob->status = CronjobStatus::READY;
$cronJob->save();
return $cronJob;
}
/**
* @param array<string, mixed> $input
* @return array<string, array<int, mixed>>
*/
public static function rules(array $input, Server $server): array
{
$rules = [
'command' => [
'required',
],
'user' => [
'required',
Rule::in($server->getSshUsers()),
],
'frequency' => [
'required',
new CronRule(acceptCustom: true),
],
];
if (isset($input['frequency']) && $input['frequency'] == 'custom') {
$rules['custom'] = [
'required',
new CronRule,
];
}
return $rules;
}
}

View File

@ -3,11 +3,15 @@
namespace App\Actions\CronJob; namespace App\Actions\CronJob;
use App\Enums\CronjobStatus; use App\Enums\CronjobStatus;
use App\Exceptions\SSHError;
use App\Models\CronJob; use App\Models\CronJob;
use App\Models\Server; use App\Models\Server;
class EnableCronJob class EnableCronJob
{ {
/**
* @throws SSHError
*/
public function enable(Server $server, CronJob $cronJob): void public function enable(Server $server, CronJob $cronJob): void
{ {
$cronJob->status = CronjobStatus::ENABLING; $cronJob->status = CronjobStatus::ENABLING;

View File

@ -6,6 +6,7 @@
use App\Models\Database; use App\Models\Database;
use App\Models\Server; use App\Models\Server;
use App\Models\Service; use App\Models\Service;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
@ -16,6 +17,8 @@ class CreateDatabase
*/ */
public function create(Server $server, array $input): Database public function create(Server $server, array $input): Database
{ {
Validator::make($input, self::rules($server, $input))->validate();
$database = new Database([ $database = new Database([
'server_id' => $server->id, 'server_id' => $server->id,
'charset' => $input['charset'], 'charset' => $input['charset'],
@ -26,7 +29,7 @@ public function create(Server $server, array $input): Database
/** @var Service $service */ /** @var Service $service */
$service = $server->database(); $service = $server->database();
/** @var \App\SSH\Services\Database\Database $databaseHandler */ /** @var \App\Services\Database\Database $databaseHandler */
$databaseHandler = $service->handler(); $databaseHandler = $service->handler();
$databaseHandler->create($database->name, $database->charset, $database->collation); $databaseHandler->create($database->name, $database->charset, $database->collation);
$database->status = DatabaseStatus::READY; $database->status = DatabaseStatus::READY;

View File

@ -6,7 +6,8 @@
use App\Models\DatabaseUser; use App\Models\DatabaseUser;
use App\Models\Server; use App\Models\Server;
use App\Models\Service; use App\Models\Service;
use App\SSH\Services\Database\Database; use App\Services\Database\Database;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
@ -20,6 +21,8 @@ class CreateDatabaseUser
*/ */
public function create(Server $server, array $input, array $links = []): DatabaseUser public function create(Server $server, array $input, array $links = []): DatabaseUser
{ {
Validator::make($input, self::rules($server, $input))->validate();
$databaseUser = new DatabaseUser([ $databaseUser = new DatabaseUser([
'server_id' => $server->id, 'server_id' => $server->id,
'username' => $input['username'], 'username' => $input['username'],

View File

@ -13,7 +13,7 @@ public function delete(Server $server, Database $database): void
{ {
/** @var Service $service */ /** @var Service $service */
$service = $server->database(); $service = $server->database();
/** @var \App\SSH\Services\Database\Database $handler */ /** @var \App\Services\Database\Database $handler */
$handler = $service->handler(); $handler = $service->handler();
$handler->delete($database->name); $handler->delete($database->name);
$database->delete(); $database->delete();

View File

@ -5,7 +5,7 @@
use App\Models\DatabaseUser; use App\Models\DatabaseUser;
use App\Models\Server; use App\Models\Server;
use App\Models\Service; use App\Models\Service;
use App\SSH\Services\Database\Database; use App\Services\Database\Database;
class DeleteDatabaseUser class DeleteDatabaseUser
{ {

View File

@ -6,6 +6,7 @@
use App\Models\DatabaseUser; use App\Models\DatabaseUser;
use App\Models\Server; use App\Models\Server;
use App\Models\Service; use App\Models\Service;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
@ -19,6 +20,8 @@ class LinkUser
*/ */
public function link(DatabaseUser $databaseUser, array $input): DatabaseUser public function link(DatabaseUser $databaseUser, array $input): DatabaseUser
{ {
Validator::make($input, self::rules($databaseUser->server))->validate();
if (! isset($input['databases']) || ! is_array($input['databases'])) { if (! isset($input['databases']) || ! is_array($input['databases'])) {
$input['databases'] = []; $input['databases'] = [];
} }
@ -36,7 +39,7 @@ public function link(DatabaseUser $databaseUser, array $input): DatabaseUser
/** @var Service $service */ /** @var Service $service */
$service = $databaseUser->server->database(); $service = $databaseUser->server->database();
/** @var \App\SSH\Services\Database\Database $handler */ /** @var \App\Services\Database\Database $handler */
$handler = $service->handler(); $handler = $service->handler();
// Unlink the user from all databases // Unlink the user from all databases
@ -60,10 +63,9 @@ public function link(DatabaseUser $databaseUser, array $input): DatabaseUser
} }
/** /**
* @param array<string, mixed> $input
* @return array<string, mixed> * @return array<string, mixed>
*/ */
public static function rules(Server $server, array $input): array public static function rules(Server $server): array
{ {
return [ return [
'databases.*' => [ 'databases.*' => [

View File

@ -8,6 +8,7 @@
use App\Models\Backup; use App\Models\Backup;
use App\Models\Server; use App\Models\Server;
use Illuminate\Auth\Access\AuthorizationException; use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
@ -21,6 +22,8 @@ class ManageBackup
*/ */
public function create(Server $server, array $input): Backup public function create(Server $server, array $input): Backup
{ {
Validator::make($input, self::rules($server, $input))->validate();
$backup = new Backup([ $backup = new Backup([
'type' => 'database', 'type' => 'database',
'server_id' => $server->id, 'server_id' => $server->id,
@ -92,7 +95,7 @@ public static function rules(Server $server, array $input): array
->where('status', DatabaseStatus::READY), ->where('status', DatabaseStatus::READY),
], ],
]; ];
if ($input['interval'] == 'custom') { if (isset($input['interval']) && $input['interval'] == 'custom') {
$rules['custom_interval'] = [ $rules['custom_interval'] = [
'required', 'required',
]; ];

View File

@ -5,7 +5,10 @@
use App\Enums\BackupFileStatus; use App\Enums\BackupFileStatus;
use App\Models\BackupFile; use App\Models\BackupFile;
use App\Models\Database; use App\Models\Database;
use App\Models\Server;
use App\Models\Service; use App\Models\Service;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
class RestoreBackup class RestoreBackup
{ {
@ -14,6 +17,8 @@ class RestoreBackup
*/ */
public function restore(BackupFile $backupFile, array $input): void public function restore(BackupFile $backupFile, array $input): void
{ {
Validator::make($input, self::rules($backupFile->backup->server))->validate();
/** @var Database $database */ /** @var Database $database */
$database = Database::query()->findOrFail($input['database']); $database = Database::query()->findOrFail($input['database']);
$backupFile->status = BackupFileStatus::RESTORING; $backupFile->status = BackupFileStatus::RESTORING;
@ -23,7 +28,7 @@ public function restore(BackupFile $backupFile, array $input): void
dispatch(function () use ($backupFile, $database): void { dispatch(function () use ($backupFile, $database): void {
/** @var Service $service */ /** @var Service $service */
$service = $database->server->database(); $service = $database->server->database();
/** @var \App\SSH\Services\Database\Database $databaseHandler */ /** @var \App\Services\Database\Database $databaseHandler */
$databaseHandler = $service->handler(); $databaseHandler = $service->handler();
$databaseHandler->restoreBackup($backupFile, $database->name); $databaseHandler->restoreBackup($backupFile, $database->name);
$backupFile->status = BackupFileStatus::RESTORED; $backupFile->status = BackupFileStatus::RESTORED;
@ -38,12 +43,12 @@ public function restore(BackupFile $backupFile, array $input): void
/** /**
* @return array<string, array<string>> * @return array<string, array<string>>
*/ */
public static function rules(): array public static function rules(Server $server): array
{ {
return [ return [
'database' => [ 'database' => [
'required', 'required',
'exists:databases,id', Rule::exists('databases', 'id')->where('server_id', $server->id),
], ],
]; ];
} }

View File

@ -7,7 +7,7 @@
use App\Models\Backup; use App\Models\Backup;
use App\Models\BackupFile; use App\Models\BackupFile;
use App\Models\Service; use App\Models\Service;
use App\SSH\Services\Database\Database; use App\Services\Database\Database;
use Illuminate\Support\Str; use Illuminate\Support\Str;
class RunBackup class RunBackup

View File

@ -5,14 +5,15 @@
use App\Enums\DatabaseUserStatus; use App\Enums\DatabaseUserStatus;
use App\Models\DatabaseUser; use App\Models\DatabaseUser;
use App\Models\Server; use App\Models\Server;
use App\SSH\Services\Database\Database; use App\Models\Service;
use App\Services\Database\Database;
class SyncDatabaseUsers class SyncDatabaseUsers
{ {
public function sync(Server $server): void public function sync(Server $server): void
{ {
$service = $server->database(); $service = $server->database();
if (! $service instanceof \App\Models\Service) { if (! $service instanceof Service) {
return; return;
} }
/** @var Database $handler */ /** @var Database $handler */

View File

@ -5,14 +5,14 @@
use App\Enums\DatabaseStatus; use App\Enums\DatabaseStatus;
use App\Models\Server; use App\Models\Server;
use App\Models\Service; use App\Models\Service;
use App\SSH\Services\Database\Database; use App\Services\Database\Database;
class SyncDatabases class SyncDatabases
{ {
public function sync(Server $server): void public function sync(Server $server): void
{ {
$service = $server->database(); $service = $server->database();
if (! $service instanceof \App\Models\Service) { if (! $service instanceof Service) {
return; return;
} }
/** @var Database $handler */ /** @var Database $handler */

View File

@ -6,8 +6,9 @@
use App\Models\FirewallRule; use App\Models\FirewallRule;
use App\Models\Server; use App\Models\Server;
use App\Models\Service; use App\Models\Service;
use App\SSH\Services\Firewall\Firewall; use App\Services\Firewall\Firewall;
use Exception; use Exception;
use Illuminate\Support\Facades\Validator;
class ManageRule class ManageRule
{ {
@ -17,6 +18,8 @@ class ManageRule
*/ */
public function create(Server $server, array $input): FirewallRule public function create(Server $server, array $input): FirewallRule
{ {
Validator::make($input, self::rules($input))->validate();
$sourceAny = $input['source_any'] ?? empty($input['source'] ?? null); $sourceAny = $input['source_any'] ?? empty($input['source'] ?? null);
$rule = new FirewallRule([ $rule = new FirewallRule([
'name' => $input['name'], 'name' => $input['name'],
@ -42,6 +45,8 @@ public function create(Server $server, array $input): FirewallRule
*/ */
public function update(FirewallRule $rule, array $input): FirewallRule public function update(FirewallRule $rule, array $input): FirewallRule
{ {
Validator::make($input, self::rules($input))->validate();
$sourceAny = $input['source_any'] ?? empty($input['source'] ?? null); $sourceAny = $input['source_any'] ?? empty($input['source'] ?? null);
$rule->update([ $rule->update([
'name' => $input['name'], 'name' => $input['name'],
@ -93,11 +98,12 @@ protected function applyRule(FirewallRule $rule): void
} }
/** /**
* @param array<string, mixed> $input
* @return array<string, array<string>> * @return array<string, array<string>>
*/ */
public static function rules(): array public static function rules(array $input): array
{ {
return [ $rules = [
'name' => [ 'name' => [
'required', 'required',
'string', 'string',
@ -128,5 +134,12 @@ public static function rules(): array
'max:32', 'max:32',
], ],
]; ];
if (isset($input['source_any']) && $input['source_any'] === false) {
$rules['source'] = ['required', 'ip'];
$rules['mask'] = ['required', 'numeric', 'min:1', 'max:32'];
}
return $rules;
} }
} }

View File

@ -7,7 +7,9 @@
use Illuminate\Contracts\Database\Query\Expression; use Illuminate\Contracts\Database\Query\Expression;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
use stdClass;
class GetMetrics class GetMetrics
{ {
@ -17,8 +19,13 @@ class GetMetrics
*/ */
public function filter(Server $server, array $input): Collection public function filter(Server $server, array $input): Collection
{ {
if (isset($input['from']) && isset($input['to']) && $input['from'] === $input['to']) { Validator::make($input, self::rules($input))->validate();
if (isset($input['from'])) {
$input['from'] = Carbon::parse($input['from'])->format('Y-m-d').' 00:00:00'; $input['from'] = Carbon::parse($input['from'])->format('Y-m-d').' 00:00:00';
}
if (isset($input['to'])) {
$input['to'] = Carbon::parse($input['to'])->format('Y-m-d').' 23:59:59'; $input['to'] = Carbon::parse($input['to'])->format('Y-m-d').' 23:59:59';
} }
@ -64,7 +71,7 @@ private function metrics(
->groupByRaw('date_interval') ->groupByRaw('date_interval')
->orderBy('date_interval') ->orderBy('date_interval')
->get() ->get()
->map(function ($item): \stdClass { ->map(function ($item): stdClass {
$item->date = Carbon::parse($item->date)->format('Y-m-d H:i'); $item->date = Carbon::parse($item->date)->format('Y-m-d H:i');
return $item; return $item;
@ -145,8 +152,8 @@ public static function rules(array $input): array
]; ];
if (isset($input['period']) && $input['period'] === 'custom') { if (isset($input['period']) && $input['period'] === 'custom') {
$rules['from'] = ['required', 'date', 'before:to']; $rules['from'] = ['required', 'date', 'before_or_equal:to'];
$rules['to'] = ['required', 'date', 'after:from']; $rules['to'] = ['required', 'date', 'after_or_equal:from'];
} }
return $rules; return $rules;

View File

@ -4,7 +4,8 @@
use App\Models\Server; use App\Models\Server;
use App\Models\Service; use App\Models\Service;
use App\SSH\Services\ServiceInterface; use App\Services\ServiceInterface;
use Illuminate\Support\Facades\Validator;
class UpdateMetricSettings class UpdateMetricSettings
{ {
@ -13,6 +14,8 @@ class UpdateMetricSettings
*/ */
public function update(Server $server, array $input): void public function update(Server $server, array $input): void
{ {
Validator::make($input, self::rules())->validate();
/** @var Service $service */ /** @var Service $service */
$service = $server->monitoring(); $service = $server->monitoring();
/** @var ServiceInterface $handler */ /** @var ServiceInterface $handler */

View File

@ -6,7 +6,7 @@
use App\Exceptions\SSHError; use App\Exceptions\SSHError;
use App\Models\Server; use App\Models\Server;
use App\Models\Service; use App\Models\Service;
use App\SSH\Services\NodeJS\NodeJS; use App\Services\NodeJS\NodeJS;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
class ChangeDefaultCli class ChangeDefaultCli

View File

@ -1,51 +0,0 @@
<?php
namespace App\Actions\NodeJS;
use App\Enums\NodeJS;
use App\Enums\ServiceStatus;
use App\Models\Server;
use App\Models\Service;
use Illuminate\Validation\Rule;
class InstallNewNodeJsVersion
{
/**
* @param array<string, mixed> $input
*/
public function install(Server $server, array $input): void
{
$nodejs = new Service([
'server_id' => $server->id,
'type' => 'nodejs',
'type_data' => [],
'name' => 'nodejs',
'version' => $input['version'],
'status' => ServiceStatus::INSTALLING,
'is_default' => false,
]);
$nodejs->save();
dispatch(function () use ($nodejs): void {
$nodejs->handler()->install();
$nodejs->status = ServiceStatus::READY;
$nodejs->save();
})->catch(function () use ($nodejs): void {
$nodejs->delete();
})->onConnection('ssh');
}
/**
* @return array<string, array<string>>
*/
public static function rules(Server $server): array
{
return [
'version' => [
'required',
Rule::in(config('core.nodejs_versions')),
Rule::notIn(array_merge($server->installedNodejsVersions(), [NodeJS::NONE])),
],
];
}
}

View File

@ -1,60 +0,0 @@
<?php
namespace App\Actions\NodeJS;
use App\Enums\ServiceStatus;
use App\Models\Server;
use App\Models\Service;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\ValidationException;
class UninstallNodeJS
{
/**
* @param array<string, mixed> $input
*
* @throws ValidationException
*/
public function uninstall(Server $server, array $input): void
{
$this->validate($server, $input);
/** @var Service $nodejs */
$nodejs = $server->nodejs($input['version']);
$nodejs->status = ServiceStatus::UNINSTALLING;
$nodejs->save();
dispatch(function () use ($nodejs): void {
$nodejs->handler()->uninstall();
$nodejs->delete();
})->catch(function () use ($nodejs): void {
$nodejs->status = ServiceStatus::FAILED;
$nodejs->save();
})->onConnection('ssh');
}
/**
* @param array<string, mixed> $input
*
* @throws ValidationException
*/
private function validate(Server $server, array $input): void
{
Validator::make($input, [
'version' => 'required|string',
])->validate();
if (! in_array($input['version'], $server->installedNodejsVersions())) {
throw ValidationException::withMessages(
['version' => __('This version is not installed')]
);
}
$hasSite = $server->sites()->where('nodejs_version', $input['version'])->first();
if ($hasSite) {
throw ValidationException::withMessages(
['version' => __('Cannot uninstall this version because some sites are using it!')]
);
}
}
}

View File

@ -4,7 +4,9 @@
use App\Models\NotificationChannel; use App\Models\NotificationChannel;
use App\Models\User; use App\Models\User;
use App\NotificationChannels\Email;
use Exception; use Exception;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
@ -17,10 +19,12 @@ class AddChannel
*/ */
public function add(User $user, array $input): void public function add(User $user, array $input): void
{ {
Validator::make($input, self::rules($input))->validate();
$channel = new NotificationChannel([ $channel = new NotificationChannel([
'user_id' => $user->id, 'user_id' => $user->id,
'provider' => $input['provider'], 'provider' => $input['provider'],
'label' => $input['label'], 'label' => $input['name'],
'project_id' => isset($input['global']) && $input['global'] ? null : $user->current_project_id, 'project_id' => isset($input['global']) && $input['global'] ? null : $user->current_project_id,
]); ]);
$channel->data = $channel->provider()->createData($input); $channel->data = $channel->provider()->createData($input);
@ -30,7 +34,7 @@ public function add(User $user, array $input): void
if (! $channel->provider()->connect()) { if (! $channel->provider()->connect()) {
$channel->delete(); $channel->delete();
if ($channel->provider === \App\Enums\NotificationChannel::EMAIL) { if ($channel->provider === Email::id()) {
throw ValidationException::withMessages([ throw ValidationException::withMessages([
'email' => __('Could not connect! Make sure you configured `.env` file correctly.'), 'email' => __('Could not connect! Make sure you configured `.env` file correctly.'),
]); ]);
@ -61,9 +65,9 @@ public static function rules(array $input): array
$rules = [ $rules = [
'provider' => [ 'provider' => [
'required', 'required',
Rule::in(config('core.notification_channels_providers')), Rule::in(array_keys(config('notification-channel.providers'))),
], ],
'label' => 'required', 'name' => 'required',
]; ];
return array_merge($rules, self::providerRules($input)); return array_merge($rules, self::providerRules($input));

View File

@ -13,7 +13,7 @@ class EditChannel
public function edit(NotificationChannel $notificationChannel, User $user, array $input): void public function edit(NotificationChannel $notificationChannel, User $user, array $input): void
{ {
$notificationChannel->fill([ $notificationChannel->fill([
'label' => $input['label'], 'label' => $input['name'],
'project_id' => isset($input['global']) && $input['global'] ? null : $user->current_project_id, 'project_id' => isset($input['global']) && $input['global'] ? null : $user->current_project_id,
]); ]);
$notificationChannel->save(); $notificationChannel->save();
@ -26,7 +26,7 @@ public function edit(NotificationChannel $notificationChannel, User $user, array
public static function rules(array $input): array public static function rules(array $input): array
{ {
return [ return [
'label' => 'required', 'name' => 'required',
]; ];
} }
} }

View File

@ -6,7 +6,7 @@
use App\Exceptions\SSHError; use App\Exceptions\SSHError;
use App\Models\Server; use App\Models\Server;
use App\Models\Service; use App\Models\Service;
use App\SSH\Services\PHP\PHP; use App\Services\PHP\PHP;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
class ChangeDefaultCli class ChangeDefaultCli
@ -21,6 +21,13 @@ public function change(Server $server, array $input): void
$this->validate($server, $input); $this->validate($server, $input);
/** @var Service $service */ /** @var Service $service */
$service = $server->php($input['version']); $service = $server->php($input['version']);
if ($service->is_default) {
throw ValidationException::withMessages(
['version' => __('This version is already the default CLI')]
);
}
/** @var PHP $handler */ /** @var PHP $handler */
$handler = $service->handler(); $handler = $service->handler();
$handler->setDefaultCli(); $handler->setDefaultCli();

View File

@ -5,7 +5,7 @@
use App\Enums\PHPIniType; use App\Enums\PHPIniType;
use App\Models\Server; use App\Models\Server;
use App\Models\Service; use App\Models\Service;
use App\SSH\Services\PHP\PHP; use App\Services\PHP\PHP;
use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;

View File

@ -1,54 +0,0 @@
<?php
namespace App\Actions\PHP;
use App\Enums\PHP;
use App\Enums\ServiceStatus;
use App\Models\Server;
use App\Models\Service;
use Illuminate\Validation\Rule;
class InstallNewPHP
{
/**
* @param array<string, mixed> $input
*/
public function install(Server $server, array $input): void
{
$php = new Service([
'server_id' => $server->id,
'type' => 'php',
'type_data' => [
'extensions' => [],
'settings' => config('core.php_settings'),
],
'name' => 'php',
'version' => $input['version'],
'status' => ServiceStatus::INSTALLING,
'is_default' => false,
]);
$php->save();
dispatch(function () use ($php): void {
$php->handler()->install();
$php->status = ServiceStatus::READY;
$php->save();
})->catch(function () use ($php): void {
$php->delete();
})->onConnection('ssh');
}
/**
* @return array<string, array<string>>
*/
public static function rules(Server $server): array
{
return [
'version' => [
'required',
Rule::in(config('core.php_versions')),
Rule::notIn(array_merge($server->installedPHPVersions(), [PHP::NONE])),
],
];
}
}

View File

@ -4,7 +4,8 @@
use App\Models\Server; use App\Models\Server;
use App\Models\Service; use App\Models\Service;
use App\SSH\Services\PHP\PHP; use App\Services\PHP\PHP;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
@ -12,11 +13,11 @@ class InstallPHPExtension
{ {
/** /**
* @param array<string, mixed> $input * @param array<string, mixed> $input
*
* @throws ValidationException
*/ */
public function install(Server $server, array $input): Service public function install(Server $server, array $input): Service
{ {
Validator::make($input, self::rules($server))->validate();
/** @var Service $service */ /** @var Service $service */
$service = $server->php($input['version']); $service = $server->php($input['version']);
@ -56,7 +57,7 @@ public static function rules(Server $server): array
return [ return [
'extension' => [ 'extension' => [
'required', 'required',
Rule::in(config('core.php_extensions')), Rule::in(config('service.services.php.data.extensions', []) ?? []),
], ],
'version' => [ 'version' => [
'required', 'required',

View File

@ -1,60 +0,0 @@
<?php
namespace App\Actions\PHP;
use App\Enums\ServiceStatus;
use App\Models\Server;
use App\Models\Service;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\ValidationException;
class UninstallPHP
{
/**
* @param array<string, mixed> $input
*
* @throws ValidationException
*/
public function uninstall(Server $server, array $input): void
{
$this->validate($server, $input);
/** @var Service $php */
$php = $server->php($input['version']);
$php->status = ServiceStatus::UNINSTALLING;
$php->save();
dispatch(function () use ($php): void {
$php->handler()->uninstall();
$php->delete();
})->catch(function () use ($php): void {
$php->status = ServiceStatus::FAILED;
$php->save();
})->onConnection('ssh');
}
/**
* @param array<string, mixed> $input
*
* @throws ValidationException
*/
private function validate(Server $server, array $input): void
{
Validator::make($input, [
'version' => 'required|string',
])->validate();
if (! in_array($input['version'], $server->installedPHPVersions())) {
throw ValidationException::withMessages(
['version' => __('This version is not installed')]
);
}
$hasSite = $server->sites()->where('php_version', $input['version'])->first();
if ($hasSite) {
throw ValidationException::withMessages(
['version' => __('Cannot uninstall this version because some sites are using it!')]
);
}
}
}

View File

@ -7,6 +7,7 @@
use App\Models\Service; use App\Models\Service;
use Illuminate\Filesystem\FilesystemAdapter; use Illuminate\Filesystem\FilesystemAdapter;
use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Str; use Illuminate\Support\Str;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
@ -21,6 +22,8 @@ class UpdatePHPIni
*/ */
public function update(Server $server, array $input): void public function update(Server $server, array $input): void
{ {
Validator::make($input, self::rules($server))->validate();
/** @var Service $service */ /** @var Service $service */
$service = $server->php($input['version']); $service = $server->php($input['version']);

View File

@ -5,6 +5,7 @@
use App\Models\Project; use App\Models\Project;
use App\Models\User; use App\Models\User;
use Illuminate\Database\Query\Builder; use Illuminate\Database\Query\Builder;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
class AddUser class AddUser
@ -14,6 +15,8 @@ class AddUser
*/ */
public function add(Project $project, array $input): void public function add(Project $project, array $input): void
{ {
Validator::make($input, self::rules($project))->validate();
/** @var User $user */ /** @var User $user */
$user = User::query()->findOrFail($input['user']); $user = User::query()->findOrFail($input['user']);

View File

@ -13,6 +13,8 @@ class CreateProject
*/ */
public function create(User $user, array $input): Project public function create(User $user, array $input): Project
{ {
Validator::make($input, self::rules())->validate();
if (isset($input['name'])) { if (isset($input['name'])) {
$input['name'] = strtolower((string) $input['name']); $input['name'] = strtolower((string) $input['name']);
} }

View File

@ -4,21 +4,29 @@
use App\Models\Project; use App\Models\Project;
use App\Models\User; use App\Models\User;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
class DeleteProject class DeleteProject
{ {
public function delete(User $user, Project $project): void /**
* @param array<string, mixed> $input
*/
public function delete(User $user, Project $project, array $input): void
{ {
Validator::make($input, [
'name' => 'required',
])->validate();
if ($user->projects()->count() === 1) { if ($user->projects()->count() === 1) {
throw ValidationException::withMessages([ throw ValidationException::withMessages([
'project' => __('Cannot delete the last project.'), 'name' => __('Cannot delete the last project.'),
]); ]);
} }
if ($user->current_project_id == $project->id) { if ($user->current_project_id == $project->id) {
throw ValidationException::withMessages([ throw ValidationException::withMessages([
'project' => __('Cannot delete your current project.'), 'name' => __('Cannot delete your current project.'),
]); ]);
} }

View File

@ -6,7 +6,8 @@
use App\Models\Redirect; use App\Models\Redirect;
use App\Models\Service; use App\Models\Service;
use App\Models\Site; use App\Models\Site;
use App\SSH\Services\Webserver\Webserver; use App\Services\Webserver\Webserver;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
class CreateRedirect class CreateRedirect
@ -16,6 +17,8 @@ class CreateRedirect
*/ */
public function create(Site $site, array $input): Redirect public function create(Site $site, array $input): Redirect
{ {
Validator::make($input, self::rules($site))->validate();
$redirect = new Redirect; $redirect = new Redirect;
$redirect->site_id = $site->id; $redirect->site_id = $site->id;
@ -30,7 +33,9 @@ public function create(Site $site, array $input): Redirect
$service = $site->server->webserver(); $service = $site->server->webserver();
/** @var Webserver $webserver */ /** @var Webserver $webserver */
$webserver = $service->handler(); $webserver = $service->handler();
$webserver->updateVHost($site); $webserver->updateVHost($site, regenerate: [
'redirects',
]);
$redirect->status = RedirectStatus::READY; $redirect->status = RedirectStatus::READY;
$redirect->save(); $redirect->save();
}) })

View File

@ -6,7 +6,7 @@
use App\Models\Redirect; use App\Models\Redirect;
use App\Models\Service; use App\Models\Service;
use App\Models\Site; use App\Models\Site;
use App\SSH\Services\Webserver\Webserver; use App\Services\Webserver\Webserver;
class DeleteRedirect class DeleteRedirect
{ {
@ -20,7 +20,9 @@ public function delete(Site $site, Redirect $redirect): void
$service = $site->server->webserver(); $service = $site->server->webserver();
/** @var Webserver $webserver */ /** @var Webserver $webserver */
$webserver = $service->handler(); $webserver = $service->handler();
$webserver->updateVHost($site); $webserver->updateVHost($site, regenerate: [
'redirects',
]);
$redirect->delete(); $redirect->delete();
})->catch(function () use ($redirect): void { })->catch(function () use ($redirect): void {
$redirect->status = RedirectStatus::FAILED; $redirect->status = RedirectStatus::FAILED;

View File

@ -11,6 +11,8 @@ public function activate(Ssl $ssl): void
$ssl->site->ssls()->update(['is_active' => false]); $ssl->site->ssls()->update(['is_active' => false]);
$ssl->is_active = true; $ssl->is_active = true;
$ssl->save(); $ssl->save();
$ssl->site->webserver()->updateVHost($ssl->site); $ssl->site->webserver()->updateVHost($ssl->site, regenerate: [
'port',
]);
} }
} }

View File

@ -8,7 +8,8 @@
use App\Models\Service; use App\Models\Service;
use App\Models\Site; use App\Models\Site;
use App\Models\Ssl; use App\Models\Ssl;
use App\SSH\Services\Webserver\Webserver; use App\Services\Webserver\Webserver;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
@ -21,6 +22,8 @@ class CreateSSL
*/ */
public function create(Site $site, array $input): void public function create(Site $site, array $input): void
{ {
Validator::make($input, self::rules($input))->validate();
$site->ssls() $site->ssls()
->where('type', $input['type']) ->where('type', $input['type'])
->where('status', SslStatus::FAILED) ->where('status', SslStatus::FAILED)
@ -51,7 +54,9 @@ public function create(Site $site, array $input): void
$webserver->setupSSL($ssl); $webserver->setupSSL($ssl);
$ssl->status = SslStatus::CREATED; $ssl->status = SslStatus::CREATED;
$ssl->save(); $ssl->save();
$webserver->updateVHost($site); $webserver->updateVHost($site, regenerate: [
'port',
]);
})->catch(function () use ($ssl): void { })->catch(function () use ($ssl): void {
$ssl->status = SslStatus::FAILED; $ssl->status = SslStatus::FAILED;
$ssl->save(); $ssl->save();

View File

@ -0,0 +1,17 @@
<?php
namespace App\Actions\SSL;
use App\Models\Ssl;
class DeactivateSSL
{
public function deactivate(Ssl $ssl): void
{
$ssl->is_active = false;
$ssl->save();
$ssl->site->webserver()->updateVHost($ssl->site, regenerate: [
'port',
]);
}
}

View File

@ -5,7 +5,7 @@
use App\Enums\SslStatus; use App\Enums\SslStatus;
use App\Models\Service; use App\Models\Service;
use App\Models\Ssl; use App\Models\Ssl;
use App\SSH\Services\Webserver\Webserver; use App\Services\Webserver\Webserver;
class DeleteSSL class DeleteSSL
{ {

View File

@ -4,6 +4,7 @@
use App\Models\Script; use App\Models\Script;
use App\Models\User; use App\Models\User;
use Illuminate\Support\Facades\Validator;
class CreateScript class CreateScript
{ {
@ -12,6 +13,8 @@ class CreateScript
*/ */
public function create(User $user, array $input): Script public function create(User $user, array $input): Script
{ {
Validator::make($input, self::rules())->validate();
$script = new Script([ $script = new Script([
'user_id' => $user->id, 'user_id' => $user->id,
'name' => $input['name'], 'name' => $input['name'],

View File

@ -7,6 +7,8 @@
use App\Models\ScriptExecution; use App\Models\ScriptExecution;
use App\Models\Server; use App\Models\Server;
use App\Models\ServerLog; use App\Models\ServerLog;
use App\Models\User;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
class ExecuteScript class ExecuteScript
@ -14,24 +16,44 @@ class ExecuteScript
/** /**
* @param array<string, mixed> $input * @param array<string, mixed> $input
*/ */
public function execute(Script $script, array $input): ScriptExecution public function execute(Script $script, User $user, array $input): ScriptExecution
{ {
Validator::make($input, self::rules($script, $input))->validate();
$variables = [];
foreach ($script->getVariables() as $variable) {
if (array_key_exists($variable, $input)) {
$variables[$variable] = $input[$variable] ?? '';
}
}
/** @var Server $server */
$server = Server::query()->findOrFail($input['server']);
if (! $user->can('update', $server)) {
abort(403, 'You do not have permission to execute scripts on this server.');
}
$execution = new ScriptExecution([ $execution = new ScriptExecution([
'script_id' => $script->id, 'script_id' => $script->id,
'server_id' => $input['server'], 'server_id' => $input['server'],
'user' => $input['user'], 'user' => $input['user'],
'variables' => $input['variables'] ?? [], 'variables' => $variables,
'status' => ScriptExecutionStatus::EXECUTING, 'status' => ScriptExecutionStatus::EXECUTING,
]); ]);
$execution->save(); $execution->save();
dispatch(function () use ($execution, $script): void { $log = ServerLog::newLog($execution->server, 'script-'.$script->id.'-'.strtotime('now'));
$log->save();
$execution->server_log_id = $log->id;
$execution->save();
dispatch(function () use ($execution, $log): void {
/** @var Server $server */ /** @var Server $server */
$server = $execution->server; $server = $execution->server;
$content = $execution->getContent(); $content = $execution->getContent();
$log = ServerLog::newLog($server, 'script-'.$script->id.'-'.strtotime('now'));
$log->save();
$execution->server_log_id = $log->id; $execution->server_log_id = $log->id;
$execution->save(); $execution->save();
$server->os()->runScript('~/', $content, $log, $execution->user); $server->os()->runScript('~/', $content, $log, $execution->user);
@ -49,7 +71,7 @@ public function execute(Script $script, array $input): ScriptExecution
* @param array<string, mixed> $input * @param array<string, mixed> $input
* @return array<string, mixed> * @return array<string, mixed>
*/ */
public static function rules(array $input): array public static function rules(Script $script, array $input): array
{ {
$users = ['root']; $users = ['root'];
if (isset($input['server'])) { if (isset($input['server'])) {
@ -58,7 +80,7 @@ public static function rules(array $input): array
$users = $server->getSshUsers(); $users = $server->getSshUsers();
} }
return [ $rules = [
'server' => [ 'server' => [
'required', 'required',
Rule::exists('servers', 'id'), Rule::exists('servers', 'id'),
@ -67,12 +89,16 @@ public static function rules(array $input): array
'required', 'required',
Rule::in($users), Rule::in($users),
], ],
'variables' => 'array', ];
'variables.*' => [
foreach ($script->getVariables() as $variable) {
$rules[$variable] = [
'required', 'required',
'string', 'string',
'max:255', 'max:255',
], ];
]; }
return $rules;
} }
} }

View File

@ -3,20 +3,18 @@
namespace App\Actions\Server; namespace App\Actions\Server;
use App\Enums\FirewallRuleStatus; use App\Enums\FirewallRuleStatus;
use App\Enums\ServerProvider;
use App\Enums\ServerStatus; use App\Enums\ServerStatus;
use App\Enums\ServerType;
use App\Exceptions\SSHConnectionError;
use App\Facades\Notifier; use App\Facades\Notifier;
use App\Models\Project; use App\Models\Project;
use App\Models\Server; use App\Models\Server;
use App\Models\User; use App\Models\User;
use App\Notifications\ServerInstallationFailed; use App\Notifications\ServerInstallationFailed;
use App\Notifications\ServerInstallationSucceed; use App\ServerProviders\Custom;
use App\ValidationRules\RestrictedIPAddressesRule; use App\ValidationRules\RestrictedIPAddressesRule;
use Exception; use Exception;
use Illuminate\Database\Query\Builder; use Illuminate\Database\Query\Builder;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Str; use Illuminate\Support\Str;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
@ -24,20 +22,23 @@
class CreateServer class CreateServer
{ {
protected Server $server;
/** /**
* @param array<string, mixed> $input * @param array<string, mixed> $input
*/ */
public function create(User $creator, Project $project, array $input): Server public function create(User $creator, Project $project, array $input): Server
{ {
$server = new Server([ Validator::make($input, self::rules($project, $input))->validate();
$this->server = new Server([
'project_id' => $project->id, 'project_id' => $project->id,
'user_id' => $creator->id, 'user_id' => $creator->id,
'name' => $input['name'], 'name' => $input['name'],
'ssh_user' => config('core.server_providers_default_user')[$input['provider']][$input['os']], 'ssh_user' => data_get(config('server-provider.providers'), $input['provider'].'.default_user') ?? 'root',
'ip' => $input['ip'] ?? '', 'ip' => $input['ip'] ?? '',
'port' => $input['port'] ?? 22, 'port' => $input['port'] ?? 22,
'os' => $input['os'], 'os' => $input['os'],
'type' => ServerType::REGULAR,
'provider' => $input['provider'], 'provider' => $input['provider'],
'authentication' => [ 'authentication' => [
'user' => config('core.ssh_user'), 'user' => config('core.ssh_user'),
@ -49,32 +50,42 @@ public function create(User $creator, Project $project, array $input): Server
]); ]);
try { try {
if ($server->provider != 'custom') { if ($this->server->provider != 'custom') {
$server->provider_id = $input['server_provider']; $this->server->provider_id = $input['server_provider'];
} }
$server->type_data = $server->type()->data($input); $this->server->provider_data = $this->server->provider()->data($input);
$server->provider_data = $server->provider()->data($input);
// save // save
$server->save(); $this->server->save();
// create firewall rules // create firewall rules
$this->createFirewallRules($server); $this->createFirewallRules($this->server);
// create instance // create instance
$server->provider()->create(); $this->server->provider()->create();
// add services // create services
$server->type()->createServices($input); $this->createServices();
// install server // install server
$this->install($server); dispatch(function (): void {
app(InstallServer::class)->run($this->server);
})
->catch(function (Throwable $e): void {
$this->server->update([
'status' => ServerStatus::INSTALLATION_FAILED,
]);
Notifier::send($this->server, new ServerInstallationFailed($this->server));
Log::error('server-installation-error', [
'error' => (string) $e,
]);
})
->onConnection('ssh');
return $server; return $this->server;
} catch (Exception $e) { } catch (Exception $e) {
$server->delete(); $this->server->delete();
throw ValidationException::withMessages([ throw ValidationException::withMessages([
'provider' => $e->getMessage(), 'provider' => $e->getMessage(),
@ -82,41 +93,6 @@ public function create(User $creator, Project $project, array $input): Server
} }
} }
private function install(Server $server): void
{
dispatch(function () use ($server): void {
$maxWait = 180;
while ($maxWait > 0) {
sleep(10);
$maxWait -= 10;
if (! $server->provider()->isRunning()) {
continue;
}
try {
$server->ssh()->connect();
break;
} catch (SSHConnectionError) {
// ignore
}
}
$server->type()->install();
$server->update([
'status' => ServerStatus::READY,
]);
Notifier::send($server, new ServerInstallationSucceed($server));
})
->catch(function (Throwable $e) use ($server): void {
$server->update([
'status' => ServerStatus::INSTALLATION_FAILED,
]);
Notifier::send($server, new ServerInstallationFailed($server));
Log::error('server-installation-error', [
'error' => (string) $e,
]);
})
->onConnection('ssh');
}
/** /**
* @param array<string, mixed> $input * @param array<string, mixed> $input
* @return array<string, mixed> * @return array<string, mixed>
@ -126,7 +102,7 @@ public static function rules(Project $project, array $input): array
$rules = [ $rules = [
'provider' => [ 'provider' => [
'required', 'required',
Rule::in(config('core.server_providers')), Rule::in(array_keys(config('server-provider.providers'))),
], ],
'name' => [ 'name' => [
'required', 'required',
@ -136,7 +112,7 @@ public static function rules(Project $project, array $input): array
Rule::in(config('core.operating_systems')), Rule::in(config('core.operating_systems')),
], ],
'server_provider' => [ 'server_provider' => [
Rule::when(fn (): bool => isset($input['provider']) && $input['provider'] != ServerProvider::CUSTOM, [ Rule::when(fn (): bool => isset($input['provider']) && $input['provider'] != Custom::id(), [
'required', 'required',
Rule::exists('server_providers', 'id')->where(function (Builder $query) use ($project): void { Rule::exists('server_providers', 'id')->where(function (Builder $query) use ($project): void {
$query->where('project_id', $project->id) $query->where('project_id', $project->id)
@ -145,13 +121,13 @@ public static function rules(Project $project, array $input): array
]), ]),
], ],
'ip' => [ 'ip' => [
Rule::when(fn (): bool => isset($input['provider']) && $input['provider'] == ServerProvider::CUSTOM, [ Rule::when(fn (): bool => isset($input['provider']) && $input['provider'] == Custom::id(), [
'required', 'required',
new RestrictedIPAddressesRule, new RestrictedIPAddressesRule,
]), ]),
], ],
'port' => [ 'port' => [
Rule::when(fn (): bool => isset($input['provider']) && $input['provider'] == ServerProvider::CUSTOM, [ Rule::when(fn (): bool => isset($input['provider']) && $input['provider'] == Custom::id(), [
'required', 'required',
'numeric', 'numeric',
'min:1', 'min:1',
@ -160,22 +136,7 @@ public static function rules(Project $project, array $input): array
], ],
]; ];
return array_merge($rules, self::typeRules($input), self::providerRules($input)); return array_merge($rules, self::providerRules($input));
}
/**
* @param array<string, mixed> $input
* @return array<string, array<string>>
*/
private static function typeRules(array $input): array
{
if (! isset($input['type']) || ! in_array($input['type'], config('core.server_types'))) {
return [];
}
$server = new Server(['type' => $input['type']]);
return $server->type()->createRules($input);
} }
/** /**
@ -187,8 +148,8 @@ private static function providerRules(array $input): array
if ( if (
! isset($input['provider']) || ! isset($input['provider']) ||
! isset($input['server_provider']) || ! isset($input['server_provider']) ||
! in_array($input['provider'], config('core.server_providers')) || ! config('server-provider.providers.'.$input['provider']) ||
$input['provider'] == ServerProvider::CUSTOM $input['provider'] == Custom::id()
) { ) {
return []; return [];
} }
@ -233,4 +194,49 @@ public function createFirewallRules(Server $server): void
], ],
]); ]);
} }
private function createServices(): void
{
$this->server->services()->forceDelete();
$this->addSupervisor();
$this->addRedis();
$this->addUfw();
$this->addMonitoring();
}
private function addSupervisor(): void
{
$this->server->services()->create([
'type' => 'process_manager',
'name' => 'supervisor',
'version' => 'latest',
]);
}
private function addRedis(): void
{
$this->server->services()->create([
'type' => 'memory_database',
'name' => 'redis',
'version' => 'latest',
]);
}
private function addUfw(): void
{
$this->server->services()->create([
'type' => 'firewall',
'name' => 'ufw',
'version' => 'latest',
]);
}
private function addMonitoring(): void
{
$this->server->services()->create([
'type' => 'monitoring',
'name' => 'remote-monitor',
'version' => 'latest',
]);
}
} }

View File

@ -4,6 +4,7 @@
use App\Models\Server; use App\Models\Server;
use App\ValidationRules\RestrictedIPAddressesRule; use App\ValidationRules\RestrictedIPAddressesRule;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
@ -17,6 +18,8 @@ class EditServer
*/ */
public function edit(Server $server, array $input): Server public function edit(Server $server, array $input): Server
{ {
Validator::make($input, self::rules($server))->validate();
$checkConnection = false; $checkConnection = false;
if (isset($input['name'])) { if (isset($input['name'])) {
$server->name = $input['name']; $server->name = $input['name'];
@ -62,6 +65,7 @@ public static function rules(Server $server): array
Rule::unique('servers')->where('project_id', $server->project_id)->ignore($server->id), Rule::unique('servers')->where('project_id', $server->project_id)->ignore($server->id),
], ],
'local_ip' => [ 'local_ip' => [
'nullable',
'string', 'string',
Rule::unique('servers')->where('project_id', $server->project_id)->ignore($server->id), Rule::unique('servers')->where('project_id', $server->project_id)->ignore($server->id),
], ],

View File

@ -1,15 +1,47 @@
<?php <?php
namespace App\ServerTypes; namespace App\Actions\Server;
use App\Enums\ServerStatus;
use App\Enums\ServiceStatus; use App\Enums\ServiceStatus;
use App\Exceptions\SSHConnectionError;
use App\Exceptions\SSHError; use App\Exceptions\SSHError;
use App\Facades\Notifier;
use App\Models\Server; use App\Models\Server;
use App\SSH\Services\PHP\PHP; use App\Notifications\ServerInstallationSucceed;
use App\Services\PHP\PHP;
abstract class AbstractType implements ServerType class InstallServer
{ {
public function __construct(protected Server $server) {} protected Server $server;
/**
* @throws SSHError
*/
public function run(Server $server): void
{
$this->server = $server;
$maxWait = 180;
while ($maxWait > 0) {
if (! $this->server->provider()->isRunning()) {
continue;
}
try {
$this->server->ssh()->connect();
break;
} catch (SSHConnectionError) {
// ignore
}
sleep(10);
$maxWait -= 10;
}
$this->install();
$this->server->update([
'status' => ServerStatus::READY,
]);
Notifier::send($this->server, new ServerInstallationSucceed($this->server));
}
/** /**
* @throws SSHError * @throws SSHError
@ -39,6 +71,9 @@ public function install(): void
$this->progress(100, 'finishing'); $this->progress(100, 'finishing');
} }
/**
* @throws SSHError
*/
protected function createUser(): void protected function createUser(): void
{ {
$this->server->os()->createUser( $this->server->os()->createUser(
@ -59,67 +94,4 @@ protected function progress(int|float $percentage, ?string $step = null): void
$this->server->progress_step = $step; $this->server->progress_step = $step;
$this->server->save(); $this->server->save();
} }
protected function addWebserver(string $service): void
{
if ($service !== 'none') {
$this->server->services()->create([
'type' => 'webserver',
'name' => $service,
'version' => 'latest',
]);
}
}
protected function addDatabase(string $service): void
{
if ($service !== 'none') {
$this->server->services()->create([
'type' => 'database',
'name' => config('core.databases_name.'.$service),
'version' => config('core.databases_version.'.$service),
]);
}
}
protected function addPHP(string $version): void
{
if ($version !== 'none') {
$this->server->services()->create([
'type' => 'php',
'type_data' => [
'extensions' => [],
],
'name' => 'php',
'version' => $version,
]);
}
}
protected function addSupervisor(): void
{
$this->server->services()->create([
'type' => 'process_manager',
'name' => 'supervisor',
'version' => 'latest',
]);
}
protected function addRedis(): void
{
$this->server->services()->create([
'type' => 'memory_database',
'name' => 'redis',
'version' => 'latest',
]);
}
protected function addUfw(): void
{
$this->server->services()->create([
'type' => 'firewall',
'name' => 'ufw',
'version' => 'latest',
]);
}
} }

View File

@ -1,11 +1,12 @@
<?php <?php
namespace App\Actions\Server; namespace App\Actions\ServerLog;
use App\Models\Server; use App\Models\Server;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
class CreateServerLog class CreateLog
{ {
/** /**
* @param array<string, mixed> $input * @param array<string, mixed> $input
@ -14,6 +15,8 @@ class CreateServerLog
*/ */
public function create(Server $server, array $input): void public function create(Server $server, array $input): void
{ {
Validator::make($input, self::rules())->validate();
$server->logs()->create([ $server->logs()->create([
'is_remote' => true, 'is_remote' => true,
'name' => $input['path'], 'name' => $input['path'],

View File

@ -0,0 +1,34 @@
<?php
namespace App\Actions\ServerLog;
use App\Models\ServerLog;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\ValidationException;
class UpdateLog
{
/**
* @param array<string, mixed> $input
*
* @throws ValidationException
*/
public function update(ServerLog $serverLog, array $input): void
{
Validator::make($input, self::rules())->validate();
$serverLog->update([
'name' => $input['path'],
]);
}
/**
* @return array<string, string>
*/
public static function rules(): array
{
return [
'path' => 'required',
];
}
}

View File

@ -8,6 +8,7 @@
use App\Models\User; use App\Models\User;
use App\ServerProviders\ServerProvider as ServerProviderContract; use App\ServerProviders\ServerProvider as ServerProviderContract;
use Exception; use Exception;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
@ -20,6 +21,8 @@ class CreateServerProvider
*/ */
public function create(User $user, Project $project, array $input): ServerProvider public function create(User $user, Project $project, array $input): ServerProvider
{ {
Validator::make($input, self::rules($input))->validate();
$provider = self::getProvider($input['provider']); $provider = self::getProvider($input['provider']);
try { try {
@ -45,7 +48,7 @@ public function create(User $user, Project $project, array $input): ServerProvid
private static function getProvider(string $name): ServerProviderContract private static function getProvider(string $name): ServerProviderContract
{ {
$providerClass = config('core.server_providers_class.'.$name); $providerClass = config('server-provider.providers.'.$name.'.handler');
/** @var ServerProviderContract $provider */ /** @var ServerProviderContract $provider */
$provider = new $providerClass(new ServerProvider, new Server); $provider = new $providerClass(new ServerProvider, new Server);
@ -64,7 +67,7 @@ public static function rules(array $input): array
], ],
'provider' => [ 'provider' => [
'required', 'required',
Rule::in(config('core.server_providers')), Rule::in(array_keys(config('server-provider.providers'))),
Rule::notIn('custom'), Rule::notIn('custom'),
], ],
]; ];

View File

@ -4,6 +4,7 @@
use App\Models\Project; use App\Models\Project;
use App\Models\ServerProvider; use App\Models\ServerProvider;
use Illuminate\Support\Facades\Validator;
class EditServerProvider class EditServerProvider
{ {
@ -12,6 +13,8 @@ class EditServerProvider
*/ */
public function edit(ServerProvider $serverProvider, Project $project, array $input): ServerProvider public function edit(ServerProvider $serverProvider, Project $project, array $input): ServerProvider
{ {
Validator::make($input, self::rules())->validate();
$serverProvider->profile = $input['name']; $serverProvider->profile = $input['name'];
$serverProvider->project_id = isset($input['global']) && $input['global'] ? null : $project->id; $serverProvider->project_id = isset($input['global']) && $input['global'] ? null : $project->id;

View File

@ -15,7 +15,14 @@ class Install
*/ */
public function install(Server $server, array $input): Service public function install(Server $server, array $input): Service
{ {
$input['type'] = config('core.service_types')[$input['name']]; Validator::make($input, self::rules($input))->validate();
$name = $input['name'];
$input['type'] = config("service.services.$name.type");
if (! $input['type']) {
throw new \InvalidArgumentException("Service type is not defined for $name");
}
$service = new Service([ $service = new Service([
'server_id' => $server->id, 'server_id' => $server->id,
@ -24,6 +31,7 @@ public function install(Server $server, array $input): Service
'version' => $input['version'], 'version' => $input['version'],
'status' => ServiceStatus::INSTALLING, 'status' => ServiceStatus::INSTALLING,
]); ]);
$service->is_default = ! $server->defaultService($input['type']);
Validator::make($input, $service->handler()->creationRules($input))->validate(); Validator::make($input, $service->handler()->creationRules($input))->validate();
@ -52,14 +60,14 @@ public static function rules(array $input): array
$rules = [ $rules = [
'name' => [ 'name' => [
'required', 'required',
Rule::in(array_keys(config('core.service_types'))), Rule::in(array_keys(config('service.services'))),
], ],
'version' => [ 'version' => [
'required', 'required',
], ],
]; ];
if (isset($input['name'])) { if (isset($input['name'])) {
$rules['version'][] = Rule::in(config("core.service_versions.{$input['name']}")); $rules['version'][] = Rule::in(config("service.services.{$input['name']}.versions", []));
} }
return $rules; return $rules;

View File

@ -4,15 +4,17 @@
use App\Enums\ServiceStatus; use App\Enums\ServiceStatus;
use App\Models\Service; use App\Models\Service;
use Illuminate\Validation\ValidationException;
class Manage class Manage
{ {
public function start(Service $service): void public function start(Service $service): void
{ {
$this->validate($service);
$service->status = ServiceStatus::STARTING; $service->status = ServiceStatus::STARTING;
$service->save(); $service->save();
dispatch(function () use ($service): void { dispatch(function () use ($service): void {
$status = $service->server->systemd()->start($service->unit); $status = $service->server->systemd()->start($service->handler()->unit());
if (str($status)->contains('Active: active')) { if (str($status)->contains('Active: active')) {
$service->status = ServiceStatus::READY; $service->status = ServiceStatus::READY;
} else { } else {
@ -24,10 +26,11 @@ public function start(Service $service): void
public function stop(Service $service): void public function stop(Service $service): void
{ {
$this->validate($service);
$service->status = ServiceStatus::STOPPING; $service->status = ServiceStatus::STOPPING;
$service->save(); $service->save();
dispatch(function () use ($service): void { dispatch(function () use ($service): void {
$status = $service->server->systemd()->stop($service->unit); $status = $service->server->systemd()->stop($service->handler()->unit());
if (str($status)->contains('Active: inactive')) { if (str($status)->contains('Active: inactive')) {
$service->status = ServiceStatus::STOPPED; $service->status = ServiceStatus::STOPPED;
} else { } else {
@ -39,10 +42,11 @@ public function stop(Service $service): void
public function restart(Service $service): void public function restart(Service $service): void
{ {
$this->validate($service);
$service->status = ServiceStatus::RESTARTING; $service->status = ServiceStatus::RESTARTING;
$service->save(); $service->save();
dispatch(function () use ($service): void { dispatch(function () use ($service): void {
$status = $service->server->systemd()->restart($service->unit); $status = $service->server->systemd()->restart($service->handler()->unit());
if (str($status)->contains('Active: active')) { if (str($status)->contains('Active: active')) {
$service->status = ServiceStatus::READY; $service->status = ServiceStatus::READY;
} else { } else {
@ -54,10 +58,11 @@ public function restart(Service $service): void
public function enable(Service $service): void public function enable(Service $service): void
{ {
$this->validate($service);
$service->status = ServiceStatus::ENABLING; $service->status = ServiceStatus::ENABLING;
$service->save(); $service->save();
dispatch(function () use ($service): void { dispatch(function () use ($service): void {
$status = $service->server->systemd()->enable($service->unit); $status = $service->server->systemd()->enable($service->handler()->unit());
if (str($status)->contains('Active: active')) { if (str($status)->contains('Active: active')) {
$service->status = ServiceStatus::READY; $service->status = ServiceStatus::READY;
} else { } else {
@ -69,10 +74,11 @@ public function enable(Service $service): void
public function disable(Service $service): void public function disable(Service $service): void
{ {
$this->validate($service);
$service->status = ServiceStatus::DISABLING; $service->status = ServiceStatus::DISABLING;
$service->save(); $service->save();
dispatch(function () use ($service): void { dispatch(function () use ($service): void {
$status = $service->server->systemd()->disable($service->unit); $status = $service->server->systemd()->disable($service->handler()->unit());
if (str($status)->contains('Active: inactive')) { if (str($status)->contains('Active: inactive')) {
$service->status = ServiceStatus::DISABLED; $service->status = ServiceStatus::DISABLED;
} else { } else {
@ -81,4 +87,13 @@ public function disable(Service $service): void
$service->save(); $service->save();
})->onConnection('ssh'); })->onConnection('ssh');
} }
private function validate(Service $service): void
{
if (! $service->handler()->unit()) {
throw ValidationException::withMessages([
'service' => __('This service does not have a systemd unit configured.'),
]);
}
}
} }

View File

@ -4,6 +4,7 @@
use App\Models\Command; use App\Models\Command;
use App\Models\Site; use App\Models\Site;
use Illuminate\Support\Facades\Validator;
class CreateCommand class CreateCommand
{ {
@ -12,6 +13,8 @@ class CreateCommand
*/ */
public function create(Site $site, array $input): Command public function create(Site $site, array $input): Command
{ {
Validator::make($input, self::rules())->validate();
$script = new Command([ $script = new Command([
'site_id' => $site->id, 'site_id' => $site->id,
'name' => $input['name'], 'name' => $input['name'],

View File

@ -14,18 +14,22 @@
use App\ValidationRules\DomainRule; use App\ValidationRules\DomainRule;
use Exception; use Exception;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
use Throwable;
class CreateSite class CreateSite
{ {
/** /**
* @param array<string, mixed> $input * @param array<string, mixed> $input
* *
* @throws ValidationException * @throws Throwable
*/ */
public function create(Server $server, array $input): Site public function create(Server $server, array $input): Site
{ {
Validator::make($input, self::rules($server, $input))->validate();
DB::beginTransaction(); DB::beginTransaction();
try { try {
$user = $input['user'] ?? $server->getSshUser(); $user = $input['user'] ?? $server->getSshUser();
@ -110,7 +114,7 @@ public static function rules(Server $server, array $input): array
$rules = [ $rules = [
'type' => [ 'type' => [
'required', 'required',
Rule::in(config('core.site_types')), Rule::in(array_keys(config('site.types'))),
], ],
'domain' => [ 'domain' => [
'required', 'required',
@ -121,6 +125,7 @@ public static function rules(Server $server, array $input): array
new DomainRule, new DomainRule,
], ],
'user' => [ 'user' => [
'nullable',
'regex:/^[a-z_][a-z0-9_-]*[a-z0-9]$/', 'regex:/^[a-z_][a-z0-9_-]*[a-z0-9]$/',
'min:3', 'min:3',
'max:32', 'max:32',
@ -138,7 +143,7 @@ public static function rules(Server $server, array $input): array
*/ */
private static function typeRules(Server $server, array $input): array private static function typeRules(Server $server, array $input): array
{ {
if (! isset($input['type']) || ! in_array($input['type'], config('core.site_types'))) { if (! isset($input['type']) || ! config('site.types.'.$input['type'])) {
return []; return [];
} }

View File

@ -5,16 +5,22 @@
use App\Exceptions\SSHError; use App\Exceptions\SSHError;
use App\Models\Service; use App\Models\Service;
use App\Models\Site; use App\Models\Site;
use App\SSH\Services\PHP\PHP; use App\Services\PHP\PHP;
use App\SSH\Services\Webserver\Webserver; use App\Services\Webserver\Webserver;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
class DeleteSite class DeleteSite
{ {
/** /**
* @param array<string, mixed> $input
*
* @throws SSHError * @throws SSHError
*/ */
public function delete(Site $site): void public function delete(Site $site, array $input): void
{ {
$this->validate($site, $input);
/** @var Service $service */ /** @var Service $service */
$service = $site->server->webserver(); $service = $site->server->webserver();
@ -35,4 +41,17 @@ public function delete(Site $site): void
$site->delete(); $site->delete();
} }
/**
* @param array<string, mixed> $input
*/
private function validate(Site $site, array $input): void
{
Validator::make($input, [
'domain' => [
'required',
Rule::in($site->domain),
],
])->validate();
}
} }

View File

@ -4,7 +4,6 @@
use App\Enums\DeploymentStatus; use App\Enums\DeploymentStatus;
use App\Exceptions\DeploymentScriptIsEmptyException; use App\Exceptions\DeploymentScriptIsEmptyException;
use App\Exceptions\SSHError;
use App\Facades\Notifier; use App\Facades\Notifier;
use App\Models\Deployment; use App\Models\Deployment;
use App\Models\ServerLog; use App\Models\ServerLog;
@ -15,7 +14,6 @@ class Deploy
{ {
/** /**
* @throws DeploymentScriptIsEmptyException * @throws DeploymentScriptIsEmptyException
* @throws SSHError
*/ */
public function run(Site $site): Deployment public function run(Site $site): Deployment
{ {
@ -32,6 +30,11 @@ public function run(Site $site): Deployment
'deployment_script_id' => $site->deploymentScript->id, 'deployment_script_id' => $site->deploymentScript->id,
'status' => DeploymentStatus::DEPLOYING, 'status' => DeploymentStatus::DEPLOYING,
]); ]);
$log = ServerLog::newLog($site->server, 'deploy-'.strtotime('now'))
->forSite($site);
$log->save();
$deployment->log_id = $log->id;
$deployment->save();
$lastCommit = $site->sourceControl?->provider()?->getLastCommit($site->repository, $site->branch); $lastCommit = $site->sourceControl?->provider()?->getLastCommit($site->repository, $site->branch);
if ($lastCommit) { if ($lastCommit) {
$deployment->commit_id = $lastCommit['commit_id']; $deployment->commit_id = $lastCommit['commit_id'];
@ -39,12 +42,7 @@ public function run(Site $site): Deployment
} }
$deployment->save(); $deployment->save();
dispatch(function () use ($site, $deployment): void { dispatch(function () use ($site, $deployment, $log): void {
$log = ServerLog::newLog($site->server, 'deploy-'.strtotime('now'))
->forSite($site);
$log->save();
$deployment->log_id = $log->id;
$deployment->save();
$site->server->os()->runScript( $site->server->os()->runScript(
path: $site->path, path: $site->path,
script: $site->deploymentScript->content, script: $site->deploymentScript->content,

View File

@ -3,6 +3,7 @@
namespace App\Actions\Site; namespace App\Actions\Site;
use App\Models\Command; use App\Models\Command;
use Illuminate\Support\Facades\Validator;
class EditCommand class EditCommand
{ {
@ -11,6 +12,8 @@ class EditCommand
*/ */
public function edit(Command $command, array $input): Command public function edit(Command $command, array $input): Command
{ {
Validator::make($input, self::rules())->validate();
$command->name = $input['name']; $command->name = $input['name'];
$command->command = $input['command']; $command->command = $input['command'];
$command->save(); $command->save();

View File

@ -7,6 +7,7 @@
use App\Models\CommandExecution; use App\Models\CommandExecution;
use App\Models\ServerLog; use App\Models\ServerLog;
use App\Models\User; use App\Models\User;
use Illuminate\Support\Facades\Validator;
class ExecuteCommand class ExecuteCommand
{ {
@ -15,19 +16,31 @@ class ExecuteCommand
*/ */
public function execute(Command $command, User $user, array $input): CommandExecution public function execute(Command $command, User $user, array $input): CommandExecution
{ {
Validator::make($input, self::rules($command))->validate();
$variables = [];
foreach ($command->getVariables() as $variable) {
if (array_key_exists($variable, $input)) {
$variables[$variable] = $input[$variable] ?? '';
}
}
$execution = new CommandExecution([ $execution = new CommandExecution([
'command_id' => $command->id, 'command_id' => $command->id,
'server_id' => $command->site->server_id, 'server_id' => $command->site->server_id,
'user_id' => $user->id, 'user_id' => $user->id,
'variables' => $input['variables'] ?? [], 'variables' => $variables,
'status' => CommandExecutionStatus::EXECUTING, 'status' => CommandExecutionStatus::EXECUTING,
]); ]);
$execution->save(); $execution->save();
dispatch(function () use ($execution, $command): void { $log = ServerLog::newLog($execution->server, 'command-'.$command->id.'-'.strtotime('now'));
$log->save();
$execution->server_log_id = $log->id;
$execution->save();
dispatch(function () use ($execution, $command, $log): void {
$content = $execution->getContent(); $content = $execution->getContent();
$log = ServerLog::newLog($execution->server, 'command-'.$command->id.'-'.strtotime('now'));
$log->save();
$execution->server_log_id = $log->id; $execution->server_log_id = $log->id;
$execution->save(); $execution->save();
$execution->server->os()->runScript( $execution->server->os()->runScript(
@ -48,18 +61,19 @@ public function execute(Command $command, User $user, array $input): CommandExec
} }
/** /**
* @param array<string, mixed> $input
* @return array<string, string|array<int, mixed>> * @return array<string, string|array<int, mixed>>
*/ */
public static function rules(array $input): array public static function rules(Command $command): array
{ {
return [ $rules = [];
'variables' => 'array', foreach ($command->getVariables() as $variable) {
'variables.*' => [ $rules[$variable] = [
'required', 'required',
'string', 'string',
'max:255', 'max:255',
], ];
]; }
return $rules;
} }
} }

View File

@ -4,7 +4,7 @@
use App\Models\Service; use App\Models\Service;
use App\Models\Site; use App\Models\Site;
use App\SSH\Services\Webserver\Webserver; use App\Services\Webserver\Webserver;
use App\ValidationRules\DomainRule; use App\ValidationRules\DomainRule;
class UpdateAliases class UpdateAliases
@ -21,7 +21,9 @@ public function update(Site $site, array $input): void
/** @var Webserver $webserver */ /** @var Webserver $webserver */
$webserver = $service->handler(); $webserver = $service->handler();
$webserver->updateVHost($site); $webserver->updateVHost($site, regenerate: [
'core',
]);
$site->save(); $site->save();
} }

View File

@ -4,7 +4,8 @@
use App\Exceptions\SSHError; use App\Exceptions\SSHError;
use App\Models\Site; use App\Models\Site;
use App\SSH\Git\Git; use App\SSH\OS\Git;
use Illuminate\Support\Facades\Validator;
class UpdateBranch class UpdateBranch
{ {
@ -15,6 +16,8 @@ class UpdateBranch
*/ */
public function update(Site $site, array $input): void public function update(Site $site, array $input): void
{ {
Validator::make($input, self::rules())->validate();
$site->branch = $input['branch']; $site->branch = $input['branch'];
app(Git::class)->fetchOrigin($site); app(Git::class)->fetchOrigin($site);
app(Git::class)->checkout($site); app(Git::class)->checkout($site);

View File

@ -4,6 +4,7 @@
use App\Models\DeploymentScript; use App\Models\DeploymentScript;
use App\Models\Site; use App\Models\Site;
use Illuminate\Support\Facades\Validator;
class UpdateDeploymentScript class UpdateDeploymentScript
{ {
@ -12,6 +13,8 @@ class UpdateDeploymentScript
*/ */
public function update(Site $site, array $input): void public function update(Site $site, array $input): void
{ {
Validator::make($input, self::rules())->validate();
/** @var DeploymentScript $script */ /** @var DeploymentScript $script */
$script = $site->deploymentScript; $script = $site->deploymentScript;
$script->content = $input['script']; $script->content = $input['script'];

Some files were not shown because too many files have changed in this diff Show More