Introduction
This api lets you control nearly everything related to prepaid-hoster services. Be aware that this API is still in dev status and its endpoints is subject to change.
This documentation aims to provide all the information you need to work with our API.
Base URL
https://api.pph.sh
Authenticating requests
Authenticate requests to this API's endpoints by sending a X-Token
header with the value "{YOUR_ACCESS_TOKEN}"
.
All authenticated endpoints are marked with a requires authentication
badge in the documentation below.
You can retrieve your token by visiting your dashboard and clicking Generate API token.
Affiliate
Get a list of official banners
requires authentication
Get banner html code
requires authentication
Get affiliate details
requires authentication
Returns affiliate details. Creates an affiliate account when not yet created.
Example request:
curl --request GET \
--get "https://api.pph.sh/client/affiliate" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/affiliate"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": {
"affiliate_id": 41003,
"enabled": 0,
"activated": 1,
"plan": "community",
"minimum_payout_value": 5,
"confirmation_window": 15,
"banner_views": 6423,
"clicks": 39,
"conversion30": 0,
"conversions": {
"confirmed": 10,
"unconfirmed": 3
},
"payout": {
"type": "credit",
"unconfirmed": 0.57,
"available": 8.22,
"payout_available": false,
"minimum": 5
},
"pending_payout": false,
"urls": [
"https://pph.sh/partner/41003"
]
}
}
Received response:
Request failed with error:
Get affiliate details
requires authentication
Returns affiliate details. Creates an affiliate account when not yet created.
Example request:
curl --request POST \
"https://api.pph.sh/client/affiliate/activate" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/affiliate/activate"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
Check if affiliate account exists.
requires authentication
*
Example request:
curl --request GET \
--get "https://api.pph.sh/client/affiliate/exists" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/affiliate/exists"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": {
"exists": true,
"debug": {
"e": true,
"s": 1
}
}
}
Received response:
Request failed with error:
Get conversions
requires authentication
Example request:
curl --request GET \
--get "https://api.pph.sh/client/affiliate/conversions" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/affiliate/conversions"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
{
"data": [
{
"ordernum": 3771055779,
"type": "hosting",
"tier": "tier_1",
"confirmed": 0,
"dismissed": 0,
"paid_out": 0,
"order_date": "2022-01-31",
"description": "Bestellung: Linux vServer",
"payout": null,
"provision": {
"full_value": 2.86,
"affiliate_value": 0.57,
"percentage": 20,
"available_at": "2022-02-15"
}
}
]
}
Received response:
Request failed with error:
Get payouts
requires authentication
Example request:
curl --request GET \
--get "https://api.pph.sh/client/affiliate/payouts" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/affiliate/payouts"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": [
{
"id": 7,
"uuid": "adace2ae-627b-4f26-8c87-e920c0ca08c0",
"value": 11.57,
"status": "done",
"review": "done",
"ticket_id": 975612,
"type": "credit",
"invoice_id": 171345,
"created_at": "2021-10-13T14:05:47.000000Z",
"conversions_count": 6,
"partner": {
"id": 41003,
"firstname": "Dennis",
"lastname": "Ziolkowski!"
}
}
],
"links": {
"first": "https://fsn-01.api.pph.sh/client/affiliate/payouts?page=1",
"last": "https://fsn-01.api.pph.sh/client/affiliate/payouts?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"active": false
},
{
"url": "https://fsn-01.api.pph.sh/client/affiliate/payouts?page=1",
"label": "1",
"active": true
},
{
"url": null,
"label": "Next »",
"active": false
}
],
"path": "https://fsn-01.api.pph.sh/client/affiliate/payouts",
"per_page": 15,
"to": 1,
"total": 1
}
}
Received response:
Request failed with error:
Get clicks
requires authentication
Example request:
curl --request GET \
--get "https://api.pph.sh/client/affiliate/clicks" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/affiliate/clicks"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
{
"data": [
{
"hash": "d23889c2873273e7047d0b232dffa84b",
"first_click": "2022-01-18T13:37:34.000000Z",
"last_click": "2022-01-18T13:37:34.000000Z",
"views": 1
}
]
}
Received response:
Request failed with error:
Response
Response Fields
data[].hash
The session id
data[].first_click
The first click
data[].last_click
The last click
data[].views
The number of views
Get default provisions
Example request:
curl --request GET \
--get "https://api.pph.sh/client/affiliate/provisions" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/affiliate/provisions"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": {
"webhosting": {
"group": "webhosting",
"label": "Webhosting",
"provision": 30
},
"kvm-server": {
"group": "kvm-server",
"label": "KVM Server (konfigurierbar)",
"provision": 25
},
"domains": {
"group": "domains",
"label": "Domains",
"provision": 5
},
"dedicated": {
"group": "dedicated",
"label": "Dedicated Server",
"provision": 5
},
"cloud-server": {
"group": "cloud-server",
"label": "Cloud Server (OpenVZ)",
"provision": 20
}
}
}
Received response:
Request failed with error:
Get available payout summary
Example request:
curl --request GET \
--get "https://api.pph.sh/client/affiliate/payout/availability" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/affiliate/payout/availability"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": {
"type": "credit",
"unconfirmed": 0.57,
"available": 8.22,
"payout_available": false,
"minimum": 5
}
}
Received response:
Request failed with error:
Request a payout
Example request:
curl --request POST \
"https://api.pph.sh/client/affiliate/payout/request" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/affiliate/payout/request"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
Bonus events
Information about next bonus event
Example request:
curl --request GET \
--get "https://api.pph.sh/public/bonus" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/public/bonus"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"bonus": {
"name": "BLACK FRIDAY 2023",
"start": "2023-11-23 22:22:22",
"end": "2023-11-26 23:59:59",
"active": false,
"start_in": "vor 4 Monaten 3 Wochen 6 Stunden",
"end_in": "vor 4 Monaten 2 Wochen 4 Tagen",
"description": "Erhalte von 23.11.2023 22:22 bis 26.11.2023 23:59 auf jede Aufladung Extra-Guthaben!"
}
}
Received response:
Request failed with error:
Response
Response Fields
bonus.name
string
The bonus event name
bonus.start
string
The bonus event start date
bonus.end
string
The bonus event end date
bonus.active
boolean
Is the bonus event active
bonus.handler
string
The bonus event handler class
bonus.description
string
The bonus event description
bonus.banner
string
The bonus event banner
Calculate bonus amount
Example request:
curl --request GET \
--get "https://api.pph.sh/public/bonus/credit" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5" \
--data "{
\"amount\": 15
}"
const url = new URL(
"https://api.pph.sh/public/bonus/credit"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
let body = {
"amount": 15
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"bonus": false
}
Received response:
Request failed with error:
Response
Response Fields
extra
number
The bonus amount
Client Account
Class CreditActionController
Account
requires authentication
Returns information about the client.
Example request:
curl --request GET \
--get "https://api.pph.sh/client" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": {
"id": 41003,
"firstname": "Dennis",
"lastname": "Ziolkowski!",
"full_name": "Dennis Ziolkowski!",
"email": "dezio1991@gmail.com",
"company": "",
"address1": "Am Sonnenhang 20",
"address2": "",
"postcode": "23730",
"city": "Neustadt in Holstein",
"country": "DE",
"phonenumber": "0160 4047244",
"datecreated": "2020-06-26T22:00:00.000000Z",
"lastlogin": "2024-04-14T02:15:05.000000Z",
"credit": 7.68,
"credit_on_open_invoices": 0,
"currency": {
"id": 1,
"code": "EUR",
"prefix": "",
"suffix": "€",
"format": 3,
"rate": "1.00000",
"default": 1
},
"projected_hosting_value": 175.92,
"avatar": "https://www.gravatar.com/avatar/41d76aabf67b9b197ca5523541a909e7"
}
}
Received response:
Request failed with error:
Web interface login
requires authentication
Returns a link for direct login to vionity. The link expires after 30 seconds.
Example request:
curl --request GET \
--get "https://api.pph.sh/client/webinterface" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/webinterface"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": {
"url": "https://vionity.de/userlogin/b8c9bc363c7f9e33154dfa7ab154a21d/c7116c5e521d31321c2c26d09650b7f6?m=dezio1991%40gmail.com&h=b0f98dd8ed741decca002d58b4061c82&t=1713063600&v=eyJpdiI6InZrOUhwWEVHeXY1M2dqeWV0ektGZXc9PSIsInZhbHVlIjoiTzRkWnN0NEdmV0lCR3RZWTdVdFNTUT09IiwibWFjIjoiODQwOTQ5ZTg5MWQ4YTUwOGE1MTRjYjEzZDNlOGU5MjMzMzBkMGNkNjFkYzU5ZTcxYTQzNjA5MDBiYzFmYzA5ZSIsInRhZyI6IiJ9"
}
}
Received response:
Request failed with error:
Update account
requires authentication
Update client account information. Be aware: All changes are logged internally. Fields labelled with "May be required" are required when the client has an active domain.
Changing the email address is not possible via api. Consult support when required.
Example request:
curl --request POST \
"https://api.pph.sh/client" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5" \
--data "{
\"firstname\": \"John\",
\"lastname\": \"Doe\",
\"country\": \"de\",
\"phonenumber\": \"0123 456789\",
\"newsletter\": true
}"
const url = new URL(
"https://api.pph.sh/client"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
let body = {
"firstname": "John",
"lastname": "Doe",
"country": "de",
"phonenumber": "0123 456789",
"newsletter": true
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
Contact details
requires authentication
Returns only the contact details for a client.
Example request:
curl --request GET \
--get "https://api.pph.sh/client/contact" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/contact"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": {
"firstname": "Dennis",
"lastname": "Ziolkowski!",
"companyname": "",
"email": "dezio1991@gmail.com",
"address1": "Am Sonnenhang 20",
"address2": "",
"postcode": "23730",
"city": "Neustadt in Holstein",
"country": "DE",
"phonenumber": "0160 4047244",
"validation": true
}
}
Received response:
Request failed with error:
Short summary
requires authentication
Returns a short summary about the client.
Example request:
curl --request GET \
--get "https://api.pph.sh/client/summary" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/summary"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": {
"credit": 7.68,
"hostings": 15,
"domains": 7,
"support": 0,
"invoices": 2
}
}
Received response:
Request failed with error:
Response
Response Fields
credit
number
Available credit.
hostings
integer
Number of active hostings.
domains
integer
Number of active domains.
support
integer
Number of active support requests.
invoices
integer
Number of unpaid invoices.
Available credit actions
Returns a list of available actions for available credit
Example request:
curl --request GET \
--get "https://api.pph.sh/client/credit/actions" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/credit/actions"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": {
"credit": 7.68,
"actions": [],
"others": [
{
"invoice": 262775,
"amount": 63.99,
"missing_credit": 56.31,
"items": [
"Dedicated Server - 28770-62311.mein-dedicated.de (14.04.2024 - 13.05.2024)"
]
},
{
"invoice": 263160,
"amount": 20.38,
"missing_credit": 12.7,
"items": [
"KVM Konfigurierbar 2.0 - 99366-41003.pph-server.de (18.04.2024 - 17.05.2024)"
]
}
],
"missing_credit": 69.01
}
}
Received response:
Request failed with error:
GET client/token/verify
requires authentication
Example request:
curl --request GET \
--get "https://api.pph.sh/client/token/verify" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/token/verify"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
x-ratelimit-limit: 60
x-ratelimit-remaining: 59
{
"data": {
"token": "0755ae85044245f5c9348bc2ae1155ba08709fb87b1abd48ddb61d78ad4e556d",
"valid": true
}
}
Received response:
Request failed with error:
Response
Response Fields
data.token
string
The token from the request.
data.valid
boolean
Whether the token is valid.
Client Domains
Active domains
requires authentication
Returns a list of active domains.
Example request:
curl --request GET \
--get "https://api.pph.sh/client/domains" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/domains"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": [
{
"id": 7828,
"domain": "laravel-cloud.de",
"domain_idn": "laravel-cloud.de",
"firstamount": 3.99,
"recurringamount": 3.99,
"status": "Active",
"register_date": "2024-03-14T23:00:00.000000Z",
"next_due_date": "2025-03-14T23:00:00.000000Z",
"next_due_in": 334,
"next_due_human": "in 11 Monaten"
},
{
"id": 7770,
"domain": "neos-builder.de",
"domain_idn": "neos-builder.de",
"firstamount": 3.99,
"recurringamount": 3.99,
"status": "Active",
"register_date": "2024-02-21T23:00:00.000000Z",
"next_due_date": "2025-02-21T23:00:00.000000Z",
"next_due_in": 313,
"next_due_human": "in 10 Monaten"
},
{
"id": 7283,
"domain": "twitter-preview.de",
"domain_idn": "twitter-preview.de",
"firstamount": 8.99,
"recurringamount": 8.99,
"status": "Active",
"register_date": "2023-10-24T22:00:00.000000Z",
"next_due_date": "2024-10-24T22:00:00.000000Z",
"next_due_in": 193,
"next_due_human": "in 6 Monaten"
},
{
"id": 6659,
"domain": "radio-app.eu",
"domain_idn": "radio-app.eu",
"firstamount": 8.99,
"recurringamount": 8.99,
"status": "Active",
"register_date": "2023-03-26T22:00:00.000000Z",
"next_due_date": "2025-03-26T23:00:00.000000Z",
"next_due_in": 346,
"next_due_human": "in 11 Monaten"
},
{
"id": 6129,
"domain": "clientify.de",
"domain_idn": "clientify.de",
"firstamount": 8.99,
"recurringamount": 8.99,
"status": "Active",
"register_date": "2022-08-24T22:00:00.000000Z",
"next_due_date": "2025-02-14T23:00:00.000000Z",
"next_due_in": 306,
"next_due_human": "in 10 Monaten"
},
{
"id": 5373,
"domain": "pph.sh",
"domain_idn": "pph.sh",
"firstamount": 0,
"recurringamount": 0,
"status": "Expired",
"register_date": "2021-12-26T23:00:00.000000Z",
"next_due_date": "2023-12-26T23:00:00.000000Z",
"next_due_in": 109,
"next_due_human": "vor 3 Monaten"
},
{
"id": 5082,
"domain": "pph.systems",
"domain_idn": "pph.systems",
"firstamount": 4.99,
"recurringamount": 11.99,
"status": "Expired",
"register_date": "2021-08-31T22:00:00.000000Z",
"next_due_date": "2022-08-31T22:00:00.000000Z",
"next_due_in": 591,
"next_due_human": "vor 1 Jahr"
},
{
"id": 4953,
"domain": "trashmail-api.de",
"domain_idn": "trashmail-api.de",
"firstamount": 0,
"recurringamount": 0,
"status": "Expired",
"register_date": "2021-07-14T22:00:00.000000Z",
"next_due_date": "2024-07-14T22:00:00.000000Z",
"next_due_in": 91,
"next_due_human": "in 3 Monaten"
},
{
"id": 4099,
"domain": "brotime-twitch.de",
"domain_idn": "brotime-twitch.de",
"firstamount": 0,
"recurringamount": 0,
"status": "Active",
"register_date": "2020-08-21T22:00:00.000000Z",
"next_due_date": "2024-08-21T22:00:00.000000Z",
"next_due_in": 129,
"next_due_human": "in 4 Monaten"
},
{
"id": 4040,
"domain": "übertragungsdauer.de",
"domain_idn": "xn--bertragungsdauer-izb.de",
"firstamount": 0,
"recurringamount": 0,
"status": "Active",
"register_date": "2020-07-15T22:00:00.000000Z",
"next_due_date": "2024-07-15T22:00:00.000000Z",
"next_due_in": 92,
"next_due_human": "in 3 Monaten"
}
]
}
Received response:
Request failed with error:
Response
Response Fields
data[].id
integer
Domain ID
data[].domain
string
Domain name
data[].domain_idn
string
Domain name in IDN format
data[].firstamount
number
First payment amount
data[].recurringamount
number
Recurring payment amount
data[].status
string
Domain status (Active, Pending, Pending Transfer, Expired, Cancelled, Transferred Away, Fraud)
data[].register_date
string
Domain registration date
data[].next_due_date
string
Domain expiry date
data[].next_due_human
string
Domain expiry date in human readable format
Single domain
requires authentication
Returns information about a single domain.
Example request:
curl --request GET \
--get "https://api.pph.sh/client/domains/6129" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/domains/6129"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": {
"id": 6129,
"domain": "clientify.de",
"domain_idn": "clientify.de",
"firstamount": 8.99,
"recurringamount": 8.99,
"status": "Active",
"register_date": "2022-08-24T22:00:00.000000Z",
"next_due_date": "2025-02-14T23:00:00.000000Z",
"next_due_in": 306,
"next_due_human": "in 10 Monaten"
}
}
Received response:
Request failed with error:
Response
Response Fields
data.id
integer
Domain ID
data.domain
string
Domain name
data.domain_idn
string
Domain name in IDN format
data.firstamount
number
First payment amount
data.recurringamount
number
Recurring payment amount
data.status
string
Domain status (Active, Pending, Expired, etc.)
data.register_date
string
Domain registration date
data.next_due_date
string
Domain expiry date
data.next_due_human
string
Domain expiry date in human readable format
Domain invoices
requires authentication
Returns a list of invoices connected to a domain
Example request:
curl --request GET \
--get "https://api.pph.sh/client/domains/6129/invoices" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/domains/6129/invoices"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": [
{
"id": 203625,
"duedate": "2022-08-24T22:00:00.000000Z",
"datepaid": "2022-08-25T14:38:57.000000Z",
"date": "2022-08-24T22:00:00.000000Z",
"subtotal": 7.55,
"credit": 8.99,
"tax": 1.44,
"taxrate": 19,
"total": 8.99,
"status": "Paid",
"status_label": "Bezahlt",
"is_open": false,
"items": [
{
"id": 235213,
"invoiceid": 203625,
"type": "DomainRegister",
"short_description": "Domainregistrierung - clientify.de - 1 Jahr(e) (25.08.2022 - 24.08.2023)",
"description": "Domainregistrierung - clientify.de - 1 Jahr(e) (25.08.2022 - 24.08.2023)",
"relid": 6129,
"amount": 8.99,
"taxed": 1,
"donation": false
}
],
"donation_invoice": false,
"resources": {
"invoice": "https://api.pph.sh/client/invoices/203625",
"download": "https://api.pph.sh/client/invoices/203625/download"
}
},
{
"id": 220492,
"duedate": "2023-02-14T23:00:00.000000Z",
"datepaid": "2023-02-05T13:14:00.000000Z",
"date": "2023-02-04T23:00:00.000000Z",
"subtotal": 7.55,
"credit": 8.99,
"tax": 1.44,
"taxrate": 19,
"total": 8.99,
"status": "Paid",
"status_label": "Bezahlt",
"is_open": false,
"items": [
{
"id": 258393,
"invoiceid": 220492,
"type": "Domain",
"short_description": "Domain Verlängerung - clientify.de - 1 Jahr(e) (15.02.2023 - 14.02.2024)",
"description": "Domain Verlängerung - clientify.de - 1 Jahr(e) (15.02.2023 - 14.02.2024)",
"relid": 6129,
"amount": 8.99,
"taxed": 1,
"donation": false
}
],
"donation_invoice": false,
"resources": {
"invoice": "https://api.pph.sh/client/invoices/220492",
"download": "https://api.pph.sh/client/invoices/220492/download"
}
},
{
"id": 253514,
"duedate": "2024-02-14T23:00:00.000000Z",
"datepaid": "2024-01-06T03:00:34.000000Z",
"date": "2024-01-05T23:00:00.000000Z",
"subtotal": 7.55,
"credit": 8.99,
"tax": 1.44,
"taxrate": 19,
"total": 8.99,
"status": "Paid",
"status_label": "Bezahlt",
"is_open": false,
"items": [
{
"id": 306238,
"invoiceid": 253514,
"type": "Domain",
"short_description": "Domain Verlängerung - clientify.de - 1 Jahr(e) (15.02.2024 - 14.02.2025)",
"description": "Domain Verlängerung - clientify.de - 1 Jahr(e) (15.02.2024 - 14.02.2025)",
"relid": 6129,
"amount": 8.99,
"taxed": 1,
"donation": false
}
],
"donation_invoice": false,
"resources": {
"invoice": "https://api.pph.sh/client/invoices/253514",
"download": "https://api.pph.sh/client/invoices/253514/download"
}
}
],
"links": {
"first": "https://fsn-01.api.pph.sh/client/domains/6129/invoices?page=1",
"last": "https://fsn-01.api.pph.sh/client/domains/6129/invoices?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"active": false
},
{
"url": "https://fsn-01.api.pph.sh/client/domains/6129/invoices?page=1",
"label": "1",
"active": true
},
{
"url": null,
"label": "Next »",
"active": false
}
],
"path": "https://fsn-01.api.pph.sh/client/domains/6129/invoices",
"per_page": 15,
"to": 3,
"total": 3
}
}
Received response:
Request failed with error:
Get redirects
Example request:
curl --request GET \
--get "https://api.pph.sh/client/domains/6129/dns/redirect/subdomains" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/domains/6129/dns/redirect/subdomains"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": {
"domain": "6129",
"subDomains": []
}
}
Received response:
Request failed with error:
Get all redirects
Example request:
curl --request GET \
--get "https://api.pph.sh/client/domains/6129/dns/redirect" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/domains/6129/dns/redirect"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": {
"redirects": []
}
}
Received response:
Request failed with error:
Rebuild redirects on the server
Example request:
curl --request GET \
--get "https://api.pph.sh/client/domains/6129/dns/redirect/build" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/domains/6129/dns/redirect/build"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
content-type: text/html; charset=UTF-8
cache-control: no-cache, private
access-control-allow-origin: *
Received response:
Request failed with error:
Receive nameservers
requires authentication
Returns a domains nameservers as set by the registrar.
Example request:
curl --request GET \
--get "https://api.pph.sh/client/domains/6129/dns/nameserver" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/domains/6129/dns/nameserver"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": {
"domain": "clientify.de",
"nameservers": [
"ns1.kramer-dns.de",
"ns2.kramer-dns.de",
"ns3.kramer-dns.de"
]
}
}
Received response:
Request failed with error:
Response
Response Fields
nameservers
string[]
The nameservers of the domain
Set nameservers
requires authentication
Set the nameservers of a domain.
Example request:
curl --request POST \
"https://api.pph.sh/client/domains/6129/dns/nameserver" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5" \
--data "{
\"nameservers\": null
}"
const url = new URL(
"https://api.pph.sh/client/domains/6129/dns/nameserver"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
let body = {
"nameservers": null
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
Autocomplete Nameservers
requires authentication
Example request:
curl --request GET \
--get "https://api.pph.sh/client/domains/6129/dns/nameserver/autocomplete?nameserver=ns1.kramer-dns.de" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/domains/6129/dns/nameserver/autocomplete"
);
const params = {
"nameserver": "ns1.kramer-dns.de",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": {
"nameservers": [
"ns1.kramer-dns.de",
"ns2.kramer-dns.de",
"ns3.kramer-dns.de"
]
}
}
Received response:
Request failed with error:
Response
Response Fields
data.nameservers
string[]
The nameservers as responded by the first NS
DNS Records
requires authentication
Returns a list of DNS records in kramer-dns for a domain.
Example request:
curl --request GET \
--get "https://api.pph.sh/client/domains/6129/dns/records?all=1" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/domains/6129/dns/records"
);
const params = {
"all": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": {
"domain": "clientify.de",
"records": [
{
"id": 369217,
"name": "mon",
"full_name": "mon.clientify.de",
"type": "A",
"content": "91.39.108.120",
"last_changed": 1712248744,
"ttl": 3800,
"ret": "0",
"editable": true
},
{
"id": 367211,
"name": "",
"full_name": "clientify.de",
"type": "A",
"content": "212.87.215.83",
"last_changed": 1704585977,
"ttl": 43200,
"ret": "0",
"editable": true
},
{
"id": 373093,
"name": "autodiscover",
"full_name": "autodiscover.clientify.de",
"type": "A",
"content": "127.0.13.37",
"last_changed": 1708901130,
"ttl": 43200,
"ret": "0",
"editable": true
},
{
"id": 367212,
"name": "*",
"full_name": "*.clientify.de",
"type": "A",
"content": "212.87.215.83",
"last_changed": 1704585977,
"ttl": 43200,
"ret": "0",
"editable": true
},
{
"id": 369216,
"name": "mon",
"full_name": "mon.clientify.de",
"type": "AAAA",
"content": "2003:db:57ff:4b05:66fd:96ff:fe4b:933d",
"last_changed": 1712248744,
"ttl": 3800,
"ret": "0",
"editable": true
},
{
"id": 367208,
"name": "webmail",
"full_name": "webmail.clientify.de",
"type": "CNAME",
"content": "webmail.kramer-hosting.de",
"last_changed": 1704585966,
"ttl": 86400,
"ret": "0",
"editable": true
},
{
"id": 367205,
"name": "",
"full_name": "clientify.de",
"type": "MX",
"content": "mail.clientify.de",
"last_changed": 1704585966,
"ttl": 86400,
"ret": "0",
"editable": true,
"priority": 10
},
{
"id": 367202,
"name": "",
"full_name": "clientify.de",
"type": "NS",
"content": "ns1.kramer-dns.de",
"last_changed": 1704585966,
"ttl": 86400,
"ret": "0",
"editable": false
},
{
"id": 367203,
"name": "",
"full_name": "clientify.de",
"type": "NS",
"content": "ns2.kramer-dns.de",
"last_changed": 1704585966,
"ttl": 86400,
"ret": "0",
"editable": false
},
{
"id": 367209,
"name": "",
"full_name": "clientify.de",
"type": "NS",
"content": "ns3.kramer-dns.de",
"last_changed": 1704585966,
"ttl": 86400,
"ret": "0",
"editable": false
},
{
"id": 367201,
"name": "",
"full_name": "clientify.de",
"type": "SOA",
"content": "ns1.kramer-dns.de. hostmaster.kramer-dns.de. 2024040403 43200 7200 1209600 86400",
"last_changed": 1712248744,
"ttl": 86400,
"ret": "0",
"editable": false
},
{
"id": 373094,
"name": "_autodiscover._tcp",
"full_name": "_autodiscover._tcp.clientify.de",
"type": "SRV",
"content": "0 0 443 autodiscover.clientify.de",
"last_changed": 1708901282,
"ttl": 43200,
"ret": "0",
"editable": true,
"srv": {
"weight": "0",
"target": "autodiscover.clientify.de",
"name": "clientify.de",
"type": "_autodiscover",
"port": "443",
"record": {
"name": "autodiscover.clientify.de",
"type": "A",
"content": "127.0.13.37"
}
}
},
{
"id": 367210,
"name": "_dmarc",
"full_name": "_dmarc.clientify.de",
"type": "TXT",
"content": "\"v=DMARC1; p=none\"",
"last_changed": 1704585966,
"ttl": 86400,
"ret": "0",
"editable": true,
"txt": []
}
]
}
}
Received response:
Request failed with error:
Response
Response Fields
domain
string
Domain name
records
object[]
DNS records
records[].id
DNS record ID
records[].name
DNS record name
records[].full_name
DNS record full name
records[].type
DNS record type
records[].content
DNS record content
records[].ttl
DNS record ttl
records[].editable
Whether this dns record is editable
records[].priority
DNS record priority
Connectable hostings
requires authentication
Example request:
curl --request GET \
--get "https://api.pph.sh/client/domains/6129/dns/connect" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/domains/6129/dns/connect"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": [
{
"id": 44410,
"label": "Webspace",
"product": "Website Hosting 3",
"ips": [
"51.89.85.76"
]
},
{
"id": 43651,
"label": "Debian 12 Tests",
"product": "KVM Konfigurierbar 2.0",
"ips": [
"212.87.215.83",
"2a12:edc0:4:42bc::1"
]
},
{
"id": 48262,
"label": "28770-62311.mein-dedicated.de",
"product": "Dedicated Server",
"ips": [
"88.99.162.174"
]
},
{
"id": 44180,
"label": "54226-41003",
"product": "Prepaid Hoster PRO (Gen 1)",
"ips": [
""
]
},
{
"id": 48533,
"label": "92020-41003.storage.pph.sh",
"product": "Netzwerkspeicher (beta)",
"ips": [
""
]
},
{
"id": 43689,
"label": "Meine ISO",
"product": "KVM Konfigurierbar 2.0",
"ips": [
"212.87.215.173",
"2a12:edc0:4:39bc::1"
]
},
{
"id": 46254,
"label": "19526-41003.storage.pph.sh",
"product": "Netzwerkspeicher (beta)",
"ips": [
""
]
},
{
"id": 43698,
"label": "39867-41003",
"product": "Netzwerkspeicher (beta)",
"ips": [
""
]
},
{
"id": 45749,
"label": "71313-12468.pph-server.de",
"product": "KVM Konfigurierbar 2.0",
"ips": [
"45.131.109.171",
"2a12:edc0:4:e7b5::1"
]
},
{
"id": 48323,
"label": "31293-59355.pph-server.de",
"product": "Mini 1",
"ips": [
"2a12:edc0:4:a8::1"
]
},
{
"id": 47820,
"label": "71744-20816.mein-dedicated.de",
"product": "Dedicated Server",
"ips": [
"138.201.33.76"
]
},
{
"id": 48592,
"label": "76485-20469.pph-server.de",
"product": "KVM Konfigurierbar 3.0",
"ips": [
"45.145.224.239",
"2a12:edc0:4:bc48::1"
]
},
{
"id": 43474,
"label": "NATHIX MC ROOT! DO NOT DELETE!",
"product": "Game Root 2",
"ips": [
"45.84.199.3",
"2a12:edc0:4:2511::1"
]
},
{
"id": 48094,
"label": "31343-41003.pph-server.de",
"product": "KVM Konfigurierbar 2.0",
"ips": [
"212.87.215.26",
"2a12:edc0:4:8f3a::1"
]
},
{
"id": 46844,
"label": "IPv6 Only",
"product": "Unbekanntes Produkt",
"ips": [
""
]
}
]
}
Received response:
Request failed with error:
Connect to hosting
requires authentication
Example request:
curl --request POST \
"https://api.pph.sh/client/domains/6129/dns/connect/43651?reset=" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/domains/6129/dns/connect/43651"
);
const params = {
"reset": "0",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
Create a new srv record
requires authentication
You can automatically connect minecraft and teamspeak servers with your domain without losing its possibility to connect to another server (like a webpage) in the browser.
This will create a new A-Record in the domain and use it in the target field for the srv record.
Example: Connect domain.com with 127.0.0.1:25565
-> Creates new A-Record with "name" mc-127-0-0-1.domain.com
and content 127.0.0.1
-> Creates new SRV-Record with "name" $subdomain
and content 0 25565 mc-127-0-0-1.domain.com
Example request:
curl --request POST \
"https://api.pph.sh/client/domains/6129/dns/record/srv" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5" \
--data "{
\"type\": \"minecraft\",
\"ip\": \"127.0.0.1\",
\"port\": \"25565\"
}"
const url = new URL(
"https://api.pph.sh/client/domains/6129/dns/record/srv"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
let body = {
"type": "minecraft",
"ip": "127.0.0.1",
"port": "25565"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
Create record
requires authentication
Example request:
curl --request POST \
"https://api.pph.sh/client/domains/6129/dns/record/create" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5" \
--data "{
\"record\": {
\"name\": \"omnis\",
\"content\": \"fkilzrhezhkqzpsbhnetlucscwekuvtujiqpzsnxelufmqixqzmyutkcqxrjqswttheyscwvwqijtteoypfiwdqmrqynpjelsszvgqjjgobvmhvbghybxuqustzurcwgotnsdwofznrdgtjfohxmvblhxzwyemmojzqdhemfhzsbpygpllimvnbtgcosmjgkaudgtudskeuzknvnpixfcdyamjfqsapaqfavkhbyeuyhgfvvlahlehoweolbgleygpqjvxctcorexydqluholsubkrixkhreemzdkameoxjzubhazpnungcppchadsftcrsuaxwnltrofwhuafxrfiwstbajrwgiclx\",
\"type\": \"modi\",
\"replace\": false,
\"priority\": 42816.97,
\"ttl\": 48.19899608
},
\"record[name]\": \"minecraft\",
\"record[replace]\": \"true\",
\"record[content]\": \"127.0.0.1\",
\"record[type]\": \"A\",
\"record[priority]\": \"0\",
\"record[ttl]\": \"1880\"
}"
const url = new URL(
"https://api.pph.sh/client/domains/6129/dns/record/create"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
let body = {
"record": {
"name": "omnis",
"content": "fkilzrhezhkqzpsbhnetlucscwekuvtujiqpzsnxelufmqixqzmyutkcqxrjqswttheyscwvwqijtteoypfiwdqmrqynpjelsszvgqjjgobvmhvbghybxuqustzurcwgotnsdwofznrdgtjfohxmvblhxzwyemmojzqdhemfhzsbpygpllimvnbtgcosmjgkaudgtudskeuzknvnpixfcdyamjfqsapaqfavkhbyeuyhgfvvlahlehoweolbgleygpqjvxctcorexydqluholsubkrixkhreemzdkameoxjzubhazpnungcppchadsftcrsuaxwnltrofwhuafxrfiwstbajrwgiclx",
"type": "modi",
"replace": false,
"priority": 42816.97,
"ttl": 48.19899608
},
"record[name]": "minecraft",
"record[replace]": "true",
"record[content]": "127.0.0.1",
"record[type]": "A",
"record[priority]": "0",
"record[ttl]": "1880"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
Update DNS Record
requires authentication
Updates a single kramer dns record for a domain.
Example request:
curl --request POST \
"https://api.pph.sh/client/domains/6129/dns/record/update" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5" \
--data "{
\"record\": {
\"name\": \"reprehenderit\",
\"content\": \"quojxaobgbxgihcqjlxkihwpfoukrisqmkaxkkmkfjuzehltngmkqcigjrzsdkmjhdgyfqqofszwwdxfyejvhuvdedjdnctidllwujzcpwegecjy\",
\"type\": \"impedit\",
\"priority\": 3812.5,
\"ttl\": 3128117,
\"where\": {
\"type\": \"suscipit\",
\"name\": \"dolore\",
\"content\": \"eum\"
}
},
\"force\": true
}"
const url = new URL(
"https://api.pph.sh/client/domains/6129/dns/record/update"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
let body = {
"record": {
"name": "reprehenderit",
"content": "quojxaobgbxgihcqjlxkihwpfoukrisqmkaxkkmkfjuzehltngmkqcigjrzsdkmjhdgyfqqofszwwdxfyejvhuvdedjdnctidllwujzcpwegecjy",
"type": "impedit",
"priority": 3812.5,
"ttl": 3128117,
"where": {
"type": "suscipit",
"name": "dolore",
"content": "eum"
}
},
"force": true
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
Replace IP
requires authentication
Replaces an IP address with another IP address in all dns records.
Example request:
curl --request POST \
"https://api.pph.sh/client/domains/6129/dns/record/replace-ip" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5" \
--data "{
\"old_ip\": \"149.202.17.134\",
\"new_ip\": \"51.89.85.77\"
}"
const url = new URL(
"https://api.pph.sh/client/domains/6129/dns/record/replace-ip"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
let body = {
"old_ip": "149.202.17.134",
"new_ip": "51.89.85.77"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
Remove record
requires authentication
Permanently removes a dns record from kramer dns for a domain
Example request:
curl --request POST \
"https://api.pph.sh/client/domains/6129/dns/record/delete" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5" \
const url = new URL(
"https://api.pph.sh/client/domains/6129/dns/record/delete"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
Reset DNS records
requires authentication
Completely resets dns records in kramer dns for a domain
Example request:
curl --request POST \
"https://api.pph.sh/client/domains/6129/dns/record/reset" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5" \
--data "{
\"default_ip\": \"127.0.0.1\",
\"default_ip6\": \"quidem\"
}"
const url = new URL(
"https://api.pph.sh/client/domains/6129/dns/record/reset"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
let body = {
"default_ip": "127.0.0.1",
"default_ip6": "quidem"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
GET client/domains/{domainId}/registry/history
requires authentication
Example request:
curl --request GET \
--get "https://api.pph.sh/client/domains/6129/registry/history" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/domains/6129/registry/history"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": []
}
Received response:
Request failed with error:
GET client/domains/{domainId}/registry/dnssec
requires authentication
Example request:
curl --request GET \
--get "https://api.pph.sh/client/domains/6129/registry/dnssec" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/domains/6129/registry/dnssec"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"dnssec": false,
"dnssecData": [],
"dnssec_available": false
}
Received response:
Request failed with error:
POST client/domains/{domainId}/registry/dnssec
requires authentication
Example request:
curl --request POST \
"https://api.pph.sh/client/domains/6129/registry/dnssec" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/domains/6129/registry/dnssec"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
Export records to text format
requires authentication
Example request:
curl --request GET \
--get "https://api.pph.sh/client/domains/6129/dns/records/export" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/domains/6129/dns/records/export"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
A * 127.0.0.1
A @ 127.0.0.1
A local 217.249.40.72
A mail 127.0.0.1
A www 127.0.0.1
AAAA local 2003:db:57ff:7e9:66fd:96ff:fe4b:933d
CNAME webmail webmail.kramer-hosting.de
MX @ mail.clientify.de
NS @ ns3.kramer-dns.de
NS @ ns2.kramer-dns.de
NS @ ns1.kramer-dns.de
SOA @ ns1.kramer-dns.de. hostmaster.kramer-dns.de. 2023013103 43200 7200 1209600 86400
SOA @ ns1.kramer-dns.de. hostmaster.kramer-dns.de. 2022120200 43200 7200 1209600 86400
TXT _dmarc "v=DMARC1; p=none"
Received response:
Request failed with error:
POST client/domains/{domainId}/dns/records/easy-connect
requires authentication
Example request:
curl --request POST \
"https://api.pph.sh/client/domains/6129/dns/records/easy-connect" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/domains/6129/dns/records/easy-connect"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
Reset DNS records
requires authentication
Completely resets dns records in kramer dns for a domain
Example request:
curl --request POST \
"https://api.pph.sh/client/domains/6129/dns/records/reset" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5" \
--data "{
\"default_ip\": \"127.0.0.1\",
\"default_ip6\": \"totam\"
}"
const url = new URL(
"https://api.pph.sh/client/domains/6129/dns/records/reset"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
let body = {
"default_ip": "127.0.0.1",
"default_ip6": "totam"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
Import records by text
requires authentication
Example request:
curl --request POST \
"https://api.pph.sh/client/domains/6129/dns/records/import" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5" \
--data "{
\"records\": \"et\"
}"
const url = new URL(
"https://api.pph.sh/client/domains/6129/dns/records/import"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
let body = {
"records": "et"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
Client Hosting
Plesk licenses
Returns all Plesk licenses, available and used
Example request:
curl --request GET \
--get "https://api.pph.sh/client/plesk/licenses" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/plesk/licenses"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": {
"used": [],
"unused": []
}
}
Received response:
Request failed with error:
Assign license to hosting
Assigns an unused Plesk license to a hosting.
Example request:
curl --request POST \
"https://api.pph.sh/client/plesk/licenses/assign" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/plesk/licenses/assign"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
List Hostings
requires authentication
Returns a list of a clients hostings.
Example request:
curl --request GET \
--get "https://api.pph.sh/client/hostings?active=1&per_page=15" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/hostings"
);
const params = {
"active": "1",
"per_page": "15",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": [
{
"id": 44410,
"product_name": "Website Hosting 3",
"product_group": "Website Hosting",
"label": "Webspace",
"module": "plesk",
"package_id": 299,
"order_id": 78121,
"ipaddress": "51.89.85.76",
"description": [],
"active": true,
"suspended": false,
"domain": "60476-85169.76.prepaid-webspace.de",
"status": "Active",
"billingcycle": "Monthly",
"has_invoices": true,
"has_unpaid_invoice": false,
"created_at": "2023-07-11T22:00:00.000000Z",
"next_due_date": "2024-05-11T22:00:00.000000Z",
"next_due_in": 27,
"next_due_human": "in 3 Wo.",
"amount": 0,
"firstpaymentamount": 0,
"cancellation": false,
"management_url": "https://api.pph.sh/client/routes?hosting=44410&tab=main",
"addons": []
},
{
"id": 43651,
"product_name": "KVM Konfigurierbar 2.0",
"product_group": "AMD SSD KVM vServer",
"label": "Debian 12 Tests",
"module": "virtualizor",
"package_id": 269,
"order_id": 76975,
"ipaddress": "212.87.215.83",
"description": [
"Linux",
"8 Cores",
"16 GB RAM",
"50 GB SSD"
],
"active": true,
"suspended": false,
"domain": "99366-41003.pph-server.de",
"status": "Active",
"billingcycle": "Monthly",
"has_invoices": true,
"has_unpaid_invoice": true,
"created_at": "2023-05-17T22:00:00.000000Z",
"next_due_date": "2024-04-17T22:00:00.000000Z",
"next_due_in": 3,
"next_due_human": "in 3 Tg.",
"amount": 20.38,
"firstpaymentamount": 5.34,
"cancellation": false,
"promotion": {
"code": "KVM2024",
"label": "KVM2024 = wiederkehrend 30%",
"description": "30% Rabatt ges. Laufzeit",
"recurring": true,
"recurring_for": 0,
"recurring_infinite": true,
"value": 30,
"type": "Percentage"
},
"management_url": "https://api.pph.sh/client/routes?hosting=43651&tab=main",
"options": [
{
"config": {
"id": 296,
"label": "Betriebssystem",
"default": 1018
},
"option": {
"id": 1018,
"label": "Linux"
}
},
{
"config": {
"id": 293,
"label": "Prozessor",
"default": 880
},
"option": {
"id": 887,
"label": "8 Kerne reserviert"
}
},
{
"config": {
"id": 294,
"label": "RAM",
"default": 985
},
"option": {
"id": 899,
"label": "16GB RAM garantiert"
}
},
{
"config": {
"id": 295,
"label": "NVMe SSD Speicher",
"default": 912
},
"option": {
"id": 912,
"label": "50GB SSD"
}
},
{
"config": {
"id": 297,
"label": "Netzwerkgeschwindigkeit",
"default": 927
},
"option": {
"id": 927,
"label": "bis zu 1 GBit/s"
}
},
{
"config": {
"id": 310,
"label": "IPv4-Adressen",
"default": 990
},
"option": {
"id": 990,
"label": "1 IPv4 Adresse"
}
}
],
"addons": []
},
{
"id": 48262,
"product_name": "Dedicated Server",
"product_group": "Dedicated Server",
"label": "",
"module": "dedicated_hetzner",
"package_id": 258,
"order_id": 84120,
"ipaddress": "88.99.162.174",
"description": [],
"active": true,
"suspended": false,
"domain": "28770-62311.mein-dedicated.de",
"status": "Active",
"billingcycle": "Monthly",
"has_invoices": true,
"has_unpaid_invoice": true,
"created_at": "2024-03-13T23:00:00.000000Z",
"next_due_date": "2024-04-13T22:00:00.000000Z",
"next_due_in": 0,
"next_due_human": "vor 1 Std.",
"amount": 63.99,
"firstpaymentamount": 73.99,
"cancellation": false,
"management_url": "https://api.pph.sh/client/routes?hosting=48262&tab=main",
"addons": []
},
{
"id": 44180,
"product_name": "Prepaid Hoster PRO (Gen 1)",
"product_group": "Prepaid-Hoster PRO",
"label": "",
"module": "pphpro",
"package_id": 304,
"order_id": 77817,
"ipaddress": "",
"description": [],
"active": true,
"suspended": false,
"domain": "54226-41003",
"status": "Active",
"billingcycle": "Monthly",
"has_invoices": true,
"has_unpaid_invoice": false,
"created_at": "2023-06-25T22:00:00.000000Z",
"next_due_date": "2024-10-25T22:00:00.000000Z",
"next_due_in": 194,
"next_due_human": "in 6 Mon.",
"amount": 6.49,
"firstpaymentamount": 6.49,
"cancellation": false,
"management_url": "https://api.pph.sh/client/routes?hosting=44180&tab=main",
"addons": []
},
{
"id": 48533,
"product_name": "Netzwerkspeicher (beta)",
"product_group": "Netzwerkspeicher",
"label": "",
"module": "remotespace",
"package_id": 311,
"order_id": 84521,
"ipaddress": "",
"description": [],
"active": true,
"suspended": false,
"domain": "92020-41003.storage.pph.sh",
"status": "Active",
"billingcycle": "Monthly",
"has_invoices": true,
"has_unpaid_invoice": false,
"created_at": "2024-04-04T22:00:00.000000Z",
"next_due_date": "2024-05-04T22:00:00.000000Z",
"next_due_in": 20,
"next_due_human": "in 2 Wo.",
"amount": 3.99,
"firstpaymentamount": 3.99,
"cancellation": false,
"management_url": "https://api.pph.sh/client/routes?hosting=48533&tab=main",
"options": [
{
"config": {
"id": 322,
"label": "Speicher",
"default": 1020
},
"option": {
"id": 1024,
"label": "5000 GB"
}
},
{
"config": {
"id": 323,
"label": "Zugriff",
"default": 1025
},
"option": {
"id": 1025,
"label": "Nur PPH Server"
}
},
{
"config": {
"id": 324,
"label": "Protokolle",
"default": 1026
},
"option": {
"id": 1026,
"label": "NFS, SMB (Linux, Windows)"
}
}
],
"addons": []
},
{
"id": 43689,
"product_name": "KVM Konfigurierbar 2.0",
"product_group": "AMD SSD KVM vServer",
"label": "Meine ISO",
"module": "virtualizor",
"package_id": 269,
"order_id": 77047,
"ipaddress": "212.87.215.173",
"description": [
"Linux",
"6 Cores",
"6 GB RAM",
"50 GB SSD"
],
"active": true,
"suspended": false,
"domain": "62457-41003.pph-server.de",
"status": "Active",
"billingcycle": "Monthly",
"has_invoices": true,
"has_unpaid_invoice": false,
"created_at": "2023-05-21T22:00:00.000000Z",
"next_due_date": "2024-04-21T22:00:00.000000Z",
"next_due_in": 7,
"next_due_human": "in 1 Wo.",
"amount": 13.3,
"firstpaymentamount": 13.3,
"cancellation": false,
"promotion": {
"code": "KVM20SPAREN",
"label": "KVM20SPAREN = wiederkehrend 20%",
"description": "20% Rabatt ges. Laufzeit",
"recurring": true,
"recurring_for": 0,
"recurring_infinite": true,
"value": 20,
"type": "Percentage"
},
"management_url": "https://api.pph.sh/client/routes?hosting=43689&tab=main",
"options": [
{
"config": {
"id": 296,
"label": "Betriebssystem",
"default": 1018
},
"option": {
"id": 1018,
"label": "Linux"
}
},
{
"config": {
"id": 293,
"label": "Prozessor",
"default": 880
},
"option": {
"id": 885,
"label": "6 Kerne reserviert"
}
},
{
"config": {
"id": 294,
"label": "RAM",
"default": 985
},
"option": {
"id": 894,
"label": "6GB RAM garantiert"
}
},
{
"config": {
"id": 295,
"label": "NVMe SSD Speicher",
"default": 912
},
"option": {
"id": 912,
"label": "50GB SSD"
}
},
{
"config": {
"id": 297,
"label": "Netzwerkgeschwindigkeit",
"default": 927
},
"option": {
"id": 927,
"label": "bis zu 1 GBit/s"
}
},
{
"config": {
"id": 310,
"label": "IPv4-Adressen",
"default": 990
},
"option": {
"id": 990,
"label": "1 IPv4 Adresse"
}
}
],
"addons": []
},
{
"id": 46254,
"product_name": "Netzwerkspeicher (beta)",
"product_group": "Netzwerkspeicher",
"label": "",
"module": "remotespace",
"package_id": 311,
"order_id": 80857,
"ipaddress": "",
"description": [],
"active": true,
"suspended": false,
"domain": "19526-41003.storage.pph.sh",
"status": "Active",
"billingcycle": "Monthly",
"has_invoices": true,
"has_unpaid_invoice": false,
"created_at": "2023-11-02T23:00:00.000000Z",
"next_due_date": "2024-05-02T22:00:00.000000Z",
"next_due_in": 18,
"next_due_human": "in 2 Wo.",
"amount": 0,
"firstpaymentamount": 0,
"cancellation": false,
"management_url": "https://api.pph.sh/client/routes?hosting=46254&tab=main",
"options": [
{
"config": {
"id": 322,
"label": "Speicher",
"default": 1020
},
"option": {
"id": 1024,
"label": "5000 GB"
}
},
{
"config": {
"id": 323,
"label": "Zugriff",
"default": 1025
},
"option": {
"id": 1025,
"label": "Nur PPH Server"
}
},
{
"config": {
"id": 324,
"label": "Protokolle",
"default": 1026
},
"option": {
"id": 1026,
"label": "NFS, SMB (Linux, Windows)"
}
}
],
"addons": []
},
{
"id": 43698,
"product_name": "Netzwerkspeicher (beta)",
"product_group": "Netzwerkspeicher",
"label": "",
"module": "remotespace",
"package_id": 311,
"order_id": 77064,
"ipaddress": "",
"description": [],
"active": true,
"suspended": false,
"domain": "39867-41003",
"status": "Active",
"billingcycle": "Monthly",
"has_invoices": true,
"has_unpaid_invoice": false,
"created_at": "2023-05-22T22:00:00.000000Z",
"next_due_date": "2024-04-22T22:00:00.000000Z",
"next_due_in": 8,
"next_due_human": "in 1 Wo.",
"amount": 2.99,
"firstpaymentamount": 2.99,
"cancellation": false,
"management_url": "https://api.pph.sh/client/routes?hosting=43698&tab=main",
"options": [
{
"config": {
"id": 322,
"label": "Speicher",
"default": 1020
},
"option": {
"id": 1024,
"label": "5000 GB"
}
},
{
"config": {
"id": 323,
"label": "Zugriff",
"default": 1025
},
"option": {
"id": 1025,
"label": "Nur PPH Server"
}
},
{
"config": {
"id": 324,
"label": "Protokolle",
"default": 1026
},
"option": {
"id": 1026,
"label": "NFS, SMB (Linux, Windows)"
}
}
],
"addons": []
},
{
"id": 45749,
"product_name": "KVM Konfigurierbar 2.0",
"product_group": "AMD SSD KVM vServer",
"label": "",
"module": "virtualizor",
"package_id": 269,
"order_id": 80077,
"ipaddress": "45.131.109.171",
"description": [
"Linux",
"2 Cores",
"2 GB RAM",
"50 GB SSD"
],
"active": true,
"suspended": false,
"domain": "71313-12468.pph-server.de",
"status": "Active",
"billingcycle": "Monthly",
"has_invoices": true,
"has_unpaid_invoice": false,
"created_at": "2023-10-02T22:00:00.000000Z",
"next_due_date": "2024-05-02T22:00:00.000000Z",
"next_due_in": 18,
"next_due_human": "in 2 Wo.",
"amount": 4.89,
"firstpaymentamount": 4.89,
"cancellation": false,
"promotion": {
"code": "OKT2023",
"label": "OKT2023 = wiederkehrend 30%",
"description": "30% Rabatt ges. Laufzeit",
"recurring": true,
"recurring_for": 0,
"recurring_infinite": true,
"value": 30,
"type": "Percentage"
},
"management_url": "https://api.pph.sh/client/routes?hosting=45749&tab=main",
"options": [
{
"config": {
"id": 296,
"label": "Betriebssystem",
"default": 1018
},
"option": {
"id": 1018,
"label": "Linux"
}
},
{
"config": {
"id": 293,
"label": "Prozessor",
"default": 880
},
"option": {
"id": 880,
"label": "2 Kerne reserviert"
}
},
{
"config": {
"id": 294,
"label": "RAM",
"default": 985
},
"option": {
"id": 985,
"label": "2GB RAM garantiert"
}
},
{
"config": {
"id": 295,
"label": "NVMe SSD Speicher",
"default": 912
},
"option": {
"id": 912,
"label": "50GB SSD"
}
},
{
"config": {
"id": 297,
"label": "Netzwerkgeschwindigkeit",
"default": 927
},
"option": {
"id": 927,
"label": "bis zu 1 GBit/s"
}
},
{
"config": {
"id": 310,
"label": "IPv4-Adressen",
"default": 990
},
"option": {
"id": 990,
"label": "1 IPv4 Adresse"
}
}
],
"addons": []
},
{
"id": 48323,
"product_name": "Mini 1",
"product_group": "KVM Root Server Pakete 2024",
"label": "",
"module": "virtualizor",
"package_id": 475,
"order_id": 84204,
"ipaddress": "",
"description": [],
"active": true,
"suspended": false,
"domain": "31293-59355.pph-server.de",
"status": "Active",
"billingcycle": "Monthly",
"has_invoices": true,
"has_unpaid_invoice": false,
"created_at": "2024-03-18T23:00:00.000000Z",
"next_due_date": "2024-05-18T22:00:00.000000Z",
"next_due_in": 34,
"next_due_human": "in 1 Mon.",
"amount": 3.51,
"firstpaymentamount": 3.51,
"cancellation": false,
"promotion": {
"code": "KVM2024",
"label": "KVM2024 = wiederkehrend 30%",
"description": "30% Rabatt ges. Laufzeit",
"recurring": true,
"recurring_for": 0,
"recurring_infinite": true,
"value": 30,
"type": "Percentage"
},
"management_url": "https://api.pph.sh/client/routes?hosting=48323&tab=main",
"options": [
{
"config": {
"id": 325,
"label": "RAM-Upgrade",
"default": 1027
},
"option": {
"id": 1027,
"label": "Kein Upgrade"
}
},
{
"config": {
"id": 326,
"label": "IP-Adresse",
"default": 1030
},
"option": {
"id": 1030,
"label": "1x IPv6"
}
},
{
"config": {
"id": 327,
"label": "Vorinstalliert",
"default": 1031
},
"option": {
"id": 1031,
"label": "Debian 12.4"
}
}
],
"addons": []
},
{
"id": 47820,
"product_name": "Dedicated Server",
"product_group": "Dedicated Server",
"label": "",
"module": "dedicated_hetzner",
"package_id": 258,
"order_id": 83361,
"ipaddress": "138.201.33.76",
"description": [],
"active": true,
"suspended": false,
"domain": "71744-20816.mein-dedicated.de",
"status": "Active",
"billingcycle": "Monthly",
"has_invoices": true,
"has_unpaid_invoice": false,
"created_at": "2024-02-06T23:00:00.000000Z",
"next_due_date": "2024-05-20T22:00:00.000000Z",
"next_due_in": 36,
"next_due_human": "in 1 Mon.",
"amount": 56.99,
"firstpaymentamount": 66.99,
"cancellation": false,
"management_url": "https://api.pph.sh/client/routes?hosting=47820&tab=main",
"addons": []
},
{
"id": 48592,
"product_name": "KVM Konfigurierbar 3.0",
"product_group": "AMD SSD KVM vServer",
"label": "",
"module": "virtualizor",
"package_id": 485,
"order_id": 84622,
"ipaddress": "45.145.224.239",
"description": [
"Linux",
"2 Cores",
"2 GB RAM",
"50 GB SSD"
],
"assigned_ips": [
"2a12:edc0:0004:bc48:0000:0000:0000:0001"
],
"active": true,
"suspended": false,
"domain": "76485-20469.pph-server.de",
"status": "Active",
"billingcycle": "Monthly",
"has_invoices": true,
"has_unpaid_invoice": false,
"created_at": "2024-04-10T22:00:00.000000Z",
"next_due_date": "2024-05-10T22:00:00.000000Z",
"next_due_in": 26,
"next_due_human": "in 3 Wo.",
"amount": 6.82,
"firstpaymentamount": 6.82,
"cancellation": false,
"promotion": {
"code": "WASISTMITHASILOS",
"label": "WASISTMITHASILOS = wiederkehrend 25%",
"description": "25% Rabatt ges. Laufzeit",
"recurring": true,
"recurring_for": 0,
"recurring_infinite": true,
"value": 25,
"type": "Percentage"
},
"management_url": "https://api.pph.sh/client/routes?hosting=48592&tab=main",
"options": [
{
"config": {
"id": 296,
"label": "Betriebssystem",
"default": 1018
},
"option": {
"id": 1018,
"label": "Linux"
}
},
{
"config": {
"id": 329,
"label": "CPU Kerne",
"default": 1037
},
"option": {
"id": 1037,
"label": "2 Kerne"
}
},
{
"config": {
"id": 330,
"label": "Arbeitsspeicher",
"default": 1043
},
"option": {
"id": 1043,
"label": "2 GB RAM garantiert"
}
},
{
"config": {
"id": 331,
"label": "Festplattenspeicher",
"default": 1053
},
"option": {
"id": 1053,
"label": "50 GB SSD Speicher"
}
},
{
"config": {
"id": 332,
"label": "IPv4-Adressen",
"default": 1060
},
"option": {
"id": 1060,
"label": "1 IPv4 Adresse"
}
},
{
"config": {
"id": 333,
"label": "IPv6-Subnetz",
"default": 1063
},
"option": {
"id": 1063,
"label": "1 /64 IPv6 Netz (inkl.)"
}
},
{
"config": {
"id": 334,
"label": "Plesk",
"default": 1064
},
"option": {
"id": 1064,
"label": "Ohne Plesk"
}
},
{
"config": {
"id": 335,
"label": "Netzwerkspeicher hinzufügen",
"default": 1066
},
"option": {
"id": 1066,
"label": "Ohne Netzwerkspeicher"
}
},
{
"config": {
"id": 336,
"label": "Prepaid Hoster PRO abonnieren",
"default": 1069
},
"option": {
"id": 1069,
"label": "Ohne Pro-Features"
}
}
],
"addons": []
},
{
"id": 43474,
"product_name": "Game Root 2",
"product_group": "Game Root",
"label": "NATHIX MC ROOT! DO NOT DELETE!",
"module": "virtualizor",
"package_id": 302,
"order_id": 76692,
"ipaddress": "",
"description": [],
"active": true,
"suspended": false,
"domain": "58199-41003.pph-server.de",
"status": "Active",
"billingcycle": "Monthly",
"has_invoices": true,
"has_unpaid_invoice": false,
"created_at": "2023-05-04T22:00:00.000000Z",
"next_due_date": "2024-05-04T22:00:00.000000Z",
"next_due_in": 20,
"next_due_human": "in 2 Wo.",
"amount": 40.9,
"firstpaymentamount": 0,
"cancellation": false,
"management_url": "https://api.pph.sh/client/routes?hosting=43474&tab=main",
"options": [
{
"config": {
"id": 328,
"label": "Zusätzlicher Speicher",
"default": 1036
},
"option": {
"id": 1033,
"label": "100GB SSD"
}
}
],
"addons": []
},
{
"id": 48094,
"product_name": "KVM Konfigurierbar 2.0",
"product_group": "AMD SSD KVM vServer",
"label": "",
"module": "virtualizor",
"package_id": 269,
"order_id": 83847,
"ipaddress": "212.87.215.26",
"description": [
"Windows",
"6 Cores",
"6 GB RAM",
"150 GB SSD"
],
"assigned_ips": [
"2a12:edc0:0004:8f3a:0000:0000:0000:0001"
],
"active": true,
"suspended": false,
"domain": "31343-41003.pph-server.de",
"status": "Active",
"billingcycle": "Monthly",
"has_invoices": true,
"has_unpaid_invoice": false,
"created_at": "2024-02-28T23:00:00.000000Z",
"next_due_date": "2024-04-28T22:00:00.000000Z",
"next_due_in": 14,
"next_due_human": "in 2 Wo.",
"amount": 15.46,
"firstpaymentamount": 15.46,
"cancellation": false,
"promotion": {
"code": "KVM2024",
"label": "KVM2024 = wiederkehrend 30%",
"description": "30% Rabatt ges. Laufzeit",
"recurring": true,
"recurring_for": 0,
"recurring_infinite": true,
"value": 30,
"type": "Percentage"
},
"management_url": "https://api.pph.sh/client/routes?hosting=48094&tab=main",
"options": [
{
"config": {
"id": 296,
"label": "Betriebssystem",
"default": 1018
},
"option": {
"id": 1019,
"label": "Windows Server 2019/2022 (Eval)"
}
},
{
"config": {
"id": 293,
"label": "Prozessor",
"default": 880
},
"option": {
"id": 885,
"label": "6 Kerne reserviert"
}
},
{
"config": {
"id": 294,
"label": "RAM",
"default": 985
},
"option": {
"id": 894,
"label": "6GB RAM garantiert"
}
},
{
"config": {
"id": 295,
"label": "NVMe SSD Speicher",
"default": 912
},
"option": {
"id": 905,
"label": "150GB SSD"
}
},
{
"config": {
"id": 297,
"label": "Netzwerkgeschwindigkeit",
"default": 927
},
"option": {
"id": 927,
"label": "bis zu 1 GBit/s"
}
},
{
"config": {
"id": 310,
"label": "IPv4-Adressen",
"default": 990
},
"option": {
"id": 990,
"label": "1 IPv4 Adresse"
}
}
],
"addons": []
},
{
"id": 46844,
"product_name": "Unbekanntes Produkt",
"product_group": "Unbekannte Produkt-Gruppe",
"label": "IPv6 Only",
"module": null,
"package_id": 465,
"order_id": 81853,
"ipaddress": "",
"description": [],
"active": true,
"suspended": false,
"domain": "75087-41003.pph-server.de",
"status": "Active",
"billingcycle": "Monthly",
"has_invoices": true,
"has_unpaid_invoice": false,
"created_at": "2023-12-10T23:00:00.000000Z",
"next_due_date": "2024-05-10T22:00:00.000000Z",
"next_due_in": 26,
"next_due_human": "in 3 Wo.",
"amount": 3.2,
"firstpaymentamount": 3.2,
"cancellation": false,
"management_url": "https://api.pph.sh/client/routes?hosting=46844&tab=main",
"addons": []
}
],
"links": {
"first": "https://fsn-01.api.pph.sh/client/hostings?page=1",
"last": "https://fsn-01.api.pph.sh/client/hostings?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"active": false
},
{
"url": "https://fsn-01.api.pph.sh/client/hostings?page=1",
"label": "1",
"active": true
},
{
"url": null,
"label": "Next »",
"active": false
}
],
"path": "https://fsn-01.api.pph.sh/client/hostings",
"per_page": 15,
"to": 15,
"total": 15
}
}
Received response:
Request failed with error:
Hosting details
requires authentication
Return details of a hosting.
Example request:
curl --request GET \
--get "https://api.pph.sh/client/hostings/43651" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/hostings/43651"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": {
"id": 43651,
"product_name": "KVM Konfigurierbar 2.0",
"product_group": "AMD SSD KVM vServer",
"label": "Debian 12 Tests",
"module": "virtualizor",
"package_id": 269,
"order_id": 76975,
"ipaddress": "212.87.215.83",
"description": [
"Linux",
"8 Cores",
"16 GB RAM",
"50 GB SSD"
],
"active": true,
"suspended": false,
"domain": "99366-41003.pph-server.de",
"status": "Active",
"billingcycle": "Monthly",
"has_invoices": true,
"has_unpaid_invoice": true,
"created_at": "2023-05-17T22:00:00.000000Z",
"next_due_date": "2024-04-17T22:00:00.000000Z",
"next_due_in": 3,
"next_due_human": "in 3 Tg.",
"amount": 20.38,
"firstpaymentamount": 5.34,
"cancellation": false,
"promotion": {
"code": "KVM2024",
"label": "KVM2024 = wiederkehrend 30%",
"description": "30% Rabatt ges. Laufzeit",
"recurring": true,
"recurring_for": 0,
"recurring_infinite": true,
"value": 30,
"type": "Percentage"
},
"management_url": "https://api.pph.sh/client/routes?hosting=43651&tab=main",
"options": [
{
"config": {
"id": 296,
"label": "Betriebssystem",
"default": 1018
},
"option": {
"id": 1018,
"label": "Linux"
}
},
{
"config": {
"id": 293,
"label": "Prozessor",
"default": 880
},
"option": {
"id": 887,
"label": "8 Kerne reserviert"
}
},
{
"config": {
"id": 294,
"label": "RAM",
"default": 985
},
"option": {
"id": 899,
"label": "16GB RAM garantiert"
}
},
{
"config": {
"id": 295,
"label": "NVMe SSD Speicher",
"default": 912
},
"option": {
"id": 912,
"label": "50GB SSD"
}
},
{
"config": {
"id": 297,
"label": "Netzwerkgeschwindigkeit",
"default": 927
},
"option": {
"id": 927,
"label": "bis zu 1 GBit/s"
}
},
{
"config": {
"id": 310,
"label": "IPv4-Adressen",
"default": 990
},
"option": {
"id": 990,
"label": "1 IPv4 Adresse"
}
}
],
"addons": []
}
}
Received response:
Request failed with error:
Response
Response Fields
data
string[]
Hosting details.
data.id
integer
Hosting ID.
data.product_name
string
Product name.
data.product_group
string
Product group.
data.label
string
Label of the product.
data.module
string
The internal module for this hosting.
data.package_id
string
The product ID.
data.order_id
string
The order ID of this hosting.
data.ipaddress
string
The primary IP address for this hosting.
data.assigned_ips
string[]
Additional IP addresses assigned to this hosting.
data.active
boolean
Whether the hosting is active.
data.suspended
boolean
Whether the hosting is suspended.
data.domain
string
The internal subdomain for this hosting.
data.status
string
The status for this hosting. Can be one of Active, Suspended, Cancelled, Terminated, Pending, Fraud.
data.billingcycle
string
The Billing cycle for this hosting. Can be one of Monthly, Quarterly, Semi-Annually, Annually.
data.created_at
string
The order date for this hosting.
data.next_due_date
string
The next due date for this hosting.
data.next_due_in
integer
Number of days until next due date.
data.next_due_human
string
Next due date in human format, translatable.
data.firstpaymentamount
number
The first payment amount for this hosting.
data.amount
number
The next payment amount for this hosting.
data.has_invoices
boolean
Whether this hosting as an open invoice.
data.has_unpaid_invoices
boolean
Whether this hosting as an unpaid invoice.
data.cancellation
boolean|array
Whether this hosting is cancelled.
data.promotion
boolean|array
Promotion data for this hosting. False when none.
data.options
string[]
Configured options for this hosting.
data.options[].config.id
integer
Configuration id.
data.options[].config.label
string
Configuration label.
data.options[].config.default
integer
Configuration default option id.
data.options[].option.id
integer
Configuration option id.
data.options[].option.label
string
Configuration option label.
Hosting invoices
requires authentication
Returns all invoices related to a hosting.
Example request:
curl --request GET \
--get "https://api.pph.sh/client/hostings/43651/invoices?latest=1" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/hostings/43651/invoices"
);
const params = {
"latest": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
{
"data": {
"id": 55,
"duedate": "2014-01-09T23:00:00.000000Z",
"datepaid": "2014-01-10T21:32:43.000000Z",
"date": "2014-01-09T23:00:00.000000Z",
"subtotal": 5.8,
"credit": 5,
"tax": 1.1,
"taxrate": 19,
"total": 6.9,
"status": "Paid",
"status_label": "Bezahlt",
"is_open": false,
"items": [
{
"id": 55,
"invoiceid": 55,
"type": "Hosting",
"short_description": "V-Server Bronze (OpenVZ) - Prepaid (10.01.2014 - 09.02.2014)",
"description": "V-Server Bronze (OpenVZ) - Prepaid (10.01.2014 - 09.02.2014)",
"relid": 52,
"amount": 6.9,
"taxed": 1,
"donation": false
}
],
"donation_invoice": false,
"transaction": {
"id": 5,
"gateway": "banktransfer",
"date": "2014-01-10T21:32:43.000000Z",
"diff_for_humans": "vor 10 Jahren",
"description": "Invoice Payment",
"amountin": 1.9,
"amountout": 0,
"invoiceid": 55
},
"resources": {
"invoice": "https://api.pph.sh/client/invoices/55",
"download": "https://api.pph.sh/client/invoices/55/download"
}
}
}
Received response:
Request failed with error:
Hosting config change
requires authentication
Returns information about a config option upgrade.
Example request:
curl --request POST \
"https://api.pph.sh/client/hostings/43651/upgrade" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5" \
--data "{
\"configoptions\": [
1948.095
]
}"
const url = new URL(
"https://api.pph.sh/client/hostings/43651/upgrade"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
let body = {
"configoptions": [
1948.095
]
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
Apply hosting config change
requires authentication
Applies an upgrade of config options.
Example request:
curl --request POST \
"https://api.pph.sh/client/hostings/43651/upgrade/do" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/hostings/43651/upgrade/do"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
Get cancellation
requires authentication
Returns the current cancellation for a hosting, if any.
Example request:
curl --request GET \
--get "https://api.pph.sh/client/hostings/43651/cancellation" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/hostings/43651/cancellation"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": []
}
Received response:
Request failed with error:
Immediate cancellation info
requires authentication
If eligible, you will get a refund of unused time less charges. Use this endpoint to get information about it.
Example request:
curl --request GET \
--get "https://api.pph.sh/client/hostings/43651/cancellation/refund" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/hostings/43651/cancellation/refund"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": {
"refundable": true,
"immediate_available": true,
"immediate_available_msg": false,
"last_paid": 20.38,
"days_left": 4,
"cycle": 31,
"price_per_day": 0.6574,
"price_per_hour": 0.0274,
"credit_used": 17.75,
"credit_back_now": 2.13,
"cancellation_fee": 0.5,
"max_credit_back": 20.38,
"hosting_amount": 20.38,
"credit_on_last_invoice": 20.38,
"unpaid_invoice": 263160,
"last_invoice_id": 260276
}
}
Received response:
Request failed with error:
Response
Response Fields
refundable
boolean
Whether this hosting is refundable.
last_paid
number
date Date of last invoice payment.
days_left
integer
Number of days left until this hosting is extended.
cycle
string
The billingcycle set for this hosting.
price_per_day
number
Cost per day.
price_per_hour
number
Cost per hour.
credit_used
number
Credit that has been already used for this hosting and cannot be refunded.
credit_back_now
number
Credit that will be refunded when this hosting is cancelled immediate.
cancellation_fee
number
Immediate cancellation fee.
unpaid_invoice
object[]
Unpaid invoice information.
Create a cancellation
requires authentication
Cancel a hosting. You can choose at the end of its billing cycle or immediate. Set immediate to true to cancel the hosting immediately. This cannot be undone! If eligible, you will get a refund of unused time less charges.
Example request:
curl --request POST \
"https://api.pph.sh/client/hostings/43651/cancellation/create?immediate=" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5" \
--data "{
\"reason\": [],
\"rating\": {
\"support\": \"nisi\",
\"hostingquality\": \"numquam\"
}
}"
const url = new URL(
"https://api.pph.sh/client/hostings/43651/cancellation/create"
);
const params = {
"immediate": "0",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
let body = {
"reason": [],
"rating": {
"support": "nisi",
"hostingquality": "numquam"
}
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
Revoke cancellation
requires authentication
When a hosting is pending for cancellation at its expiry date, the cancellation can be revoked with this endpoint.
When the hosting is due for payment, an invoice will be created. Bear in mind that such invoice will be automatically be paid when enough credit is available.
Example request:
curl --request POST \
"https://api.pph.sh/client/hostings/43651/cancellation/revoke" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/hostings/43651/cancellation/revoke"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
{
"revoked": true
}
Example response (404, No cancellation found):
{
"error": true,
"type": "NotFoundHttpException",
"message": "No cancellation found"
}
Received response:
Request failed with error:
Get hosting features
Example request:
curl --request GET \
--get "https://api.pph.sh/client/hostings/43651/features" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/hostings/43651/features"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"0": {
"id": "service-info",
"label": "Service-Info",
"icon": "fal fa-info-circle"
},
"App\\Api\\Support\\Virtualizor\\Features\\CloudManagerFeature": {
"id": "cloud-manager",
"label": "Cloud-Manager",
"icon": "fal fa-dashboard"
}
}
Received response:
Request failed with error:
Get hosting actions
Example request:
curl --request GET \
--get "https://api.pph.sh/client/hostings/43651/actions" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/hostings/43651/actions"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": [
{
"action": "apache-manager",
"description": "Reads apache manager actions",
"parameters": [],
"access": "read",
"url": "https://api.pph.sh/client/hostings/43651/actions/read/apache-manager"
},
{
"action": "auto-update-logs",
"description": "Reads the auto-update log of a virtual server (PPH Pro)",
"parameters": [],
"access": "read",
"url": "https://api.pph.sh/client/hostings/43651/actions/read/auto-update-logs"
},
{
"action": "available-updates",
"description": "Reads the available updates of a virtual server",
"parameters": [],
"access": "read",
"url": "https://api.pph.sh/client/hostings/43651/actions/read/available-updates"
},
{
"action": "backup-now",
"description": "Create a backup now",
"parameters": [],
"access": "write",
"url": "https://api.pph.sh/client/hostings/43651/actions/write/backup-now"
},
{
"action": "backups",
"description": "Get a list of vps backups",
"parameters": [],
"access": "read",
"url": "https://api.pph.sh/client/hostings/43651/actions/read/backups"
},
{
"action": "chkdsk",
"description": "Create a backup now",
"parameters": [],
"access": "write",
"url": "https://api.pph.sh/client/hostings/43651/actions/write/chkdsk"
},
{
"action": "clear-cache",
"description": "Clears the temporary API cache of this vps",
"parameters": [],
"access": "write",
"url": "https://api.pph.sh/client/hostings/43651/actions/write/clear-cache"
},
{
"action": "configuration",
"description": "Reads the configuration of a virtual server",
"parameters": [],
"access": "read",
"url": "https://api.pph.sh/client/hostings/43651/actions/read/configuration"
},
{
"action": "cronjobs",
"description": "",
"parameters": [],
"access": "read",
"url": "https://api.pph.sh/client/hostings/43651/actions/read/cronjobs"
},
{
"action": "edit-server",
"description": "Change parameters/settings for this virtual server",
"parameters": {
"hostname": "The hostname to set. Not changing if empty."
},
"access": "write",
"url": "https://api.pph.sh/client/hostings/43651/actions/write/edit-server"
},
{
"action": "enable-nfs",
"description": "Enables NFS on the server and restarts the VPS",
"parameters": [],
"access": "write",
"url": "https://api.pph.sh/client/hostings/43651/actions/write/enable-nfs"
},
{
"action": "enable-ping",
"description": "Enables the ICMP protocol (ping) on a windows server",
"parameters": [],
"access": "write",
"url": "https://api.pph.sh/client/hostings/43651/actions/write/enable-ping"
},
{
"action": "execute",
"description": "Executes a script on the server",
"parameters": [],
"access": "write",
"url": "https://api.pph.sh/client/hostings/43651/actions/write/execute"
},
{
"action": "install-win-server",
"description": "Install Windows Server on the VPS",
"parameters": [],
"access": "write",
"url": "https://api.pph.sh/client/hostings/43651/actions/write/install-win-server"
},
{
"action": "live",
"description": "Reads the live data of a virtual server",
"parameters": {
"methods": "One or multiple of: cpu-usage, os-type, disk-space, load-average, memory-usage, os-info, processes, processor-info, real-hostname, ssh-port, ssh-root-login, uptime"
},
"access": "read",
"url": "https://api.pph.sh/client/hostings/43651/actions/read/live"
},
{
"action": "local-backups",
"description": "Manages the local backups of a virtual server",
"parameters": [],
"access": "read",
"url": "https://api.pph.sh/client/hostings/43651/actions/read/local-backups"
},
{
"action": "mx-blacklist",
"description": "",
"parameters": [],
"access": "read",
"url": "https://api.pph.sh/client/hostings/43651/actions/read/mx-blacklist"
},
{
"action": "os-list",
"description": "Reads the list of available operating systems",
"parameters": [],
"access": "read",
"url": "https://api.pph.sh/client/hostings/43651/actions/read/os-list"
},
{
"action": "ping",
"description": "Reads the ping of a virtual server",
"parameters": [],
"access": "read",
"url": "https://api.pph.sh/client/hostings/43651/actions/read/ping"
},
{
"action": "plesk",
"description": "Reads the plesk license of a virtual server",
"parameters": [],
"access": "read",
"url": "https://api.pph.sh/client/hostings/43651/actions/read/plesk"
},
{
"action": "plesk",
"description": "",
"parameters": [],
"access": "write",
"url": "https://api.pph.sh/client/hostings/43651/actions/write/plesk"
},
{
"action": "prlctl",
"description": "Executes a prlctl script on the server",
"parameters": [],
"access": "write",
"url": "https://api.pph.sh/client/hostings/43651/actions/write/prlctl"
},
{
"action": "rdns",
"description": "Changes the reverse dns of this server",
"parameters": [],
"access": "write",
"url": "https://api.pph.sh/client/hostings/43651/actions/write/rdns"
},
{
"action": "rdp",
"description": "Reads information about rdp",
"parameters": [],
"access": "read",
"url": "https://api.pph.sh/client/hostings/43651/actions/read/rdp"
},
{
"action": "reboot-server",
"description": "Reboots this virtual server",
"parameters": [],
"access": "write",
"url": "https://api.pph.sh/client/hostings/43651/actions/write/reboot-server"
},
{
"action": "reinstall-server",
"description": "Reinstalls this virtual server",
"parameters": [],
"access": "write",
"url": "https://api.pph.sh/client/hostings/43651/actions/write/reinstall-server"
},
{
"action": "rescue-mode",
"description": "Manages rescue mode for this virtual server",
"parameters": [],
"access": "write",
"url": "https://api.pph.sh/client/hostings/43651/actions/write/rescue-mode"
},
{
"action": "reset-password",
"description": "Resets the root/admin password for this virtual server",
"parameters": {
"password": "The password to set. Using default password if empty."
},
"access": "write",
"url": "https://api.pph.sh/client/hostings/43651/actions/write/reset-password"
},
{
"action": "reset-server",
"description": "Power-Resets this virtual server",
"parameters": [],
"access": "write",
"url": "https://api.pph.sh/client/hostings/43651/actions/write/reset-server"
},
{
"action": "restore-now",
"description": "Create a backup now",
"parameters": [],
"access": "write",
"url": "https://api.pph.sh/client/hostings/43651/actions/write/restore-now"
},
{
"action": "screenshot",
"description": "Returns a screenshot from the virtual server in base64 format.",
"parameters": [],
"access": "read",
"url": "https://api.pph.sh/client/hostings/43651/actions/read/screenshot"
},
{
"action": "snapshots",
"description": "",
"parameters": [],
"access": "read",
"url": "https://api.pph.sh/client/hostings/43651/actions/read/snapshots"
},
{
"action": "ssh-keys",
"description": "Reads the public keys of a virtual server",
"parameters": [],
"access": "read",
"url": "https://api.pph.sh/client/hostings/43651/actions/read/ssh-keys"
},
{
"action": "start-server",
"description": "Starts this virtual server",
"parameters": [],
"access": "write",
"url": "https://api.pph.sh/client/hostings/43651/actions/write/start-server"
},
{
"action": "stats_history",
"description": "Reads the stats history of a virtual server",
"parameters": [],
"access": "read",
"url": "https://api.pph.sh/client/hostings/43651/actions/read/stats_history"
},
{
"action": "status",
"description": "Returns the current status of the server",
"parameters": [],
"access": "read",
"url": "https://api.pph.sh/client/hostings/43651/actions/read/status"
},
{
"action": "stop-server",
"description": "Stops this virtual server",
"parameters": [],
"access": "write",
"url": "https://api.pph.sh/client/hostings/43651/actions/write/stop-server"
},
{
"action": "traffic",
"description": "Returns the current traffic from this vps",
"parameters": [],
"access": "read",
"url": "https://api.pph.sh/client/hostings/43651/actions/read/traffic"
},
{
"action": "vnc",
"description": "Returns information about vnc access to virtual server",
"parameters": [],
"access": "read",
"url": "https://api.pph.sh/client/hostings/43651/actions/read/vnc"
},
{
"action": "vps-alerts",
"description": "",
"parameters": [],
"access": "read",
"url": "https://api.pph.sh/client/hostings/43651/actions/read/vps-alerts"
},
{
"action": "win-resize-disk",
"description": "Resizes the C:\\ drive to the maximum available size",
"parameters": [],
"access": "write",
"url": "https://api.pph.sh/client/hostings/43651/actions/write/win-resize-disk"
},
{
"action": "win-set-dns",
"description": "Sets the DNS server in the Ethernet adapter in windows",
"parameters": {
"nameserver": "The nameserver to set (IP-Address), defaults to 1.1.1.1"
},
"access": "write",
"url": "https://api.pph.sh/client/hostings/43651/actions/write/win-set-dns"
}
]
}
Received response:
Request failed with error:
Execute an action on the hosting
Example request:
curl --request GET \
--get "https://api.pph.sh/client/hostings/43651/actions/handle/esse" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/hostings/43651/actions/handle/esse"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (400):
Show headers
cache-control: must-revalidate, no-cache, no-store, private
content-type: application/json
x-error: 1
access-control-allow-origin: *
{
"data": {
"error": true,
"type": "NotFoundHttpException",
"url": "https://fsn-01.api.pph.sh/client/hostings/43651/actions/handle/esse",
"code": 404,
"message": "The given action was not found",
"trace": "Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException: The given action was not found in /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:1129\nStack trace:\n#0 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php(44): Illuminate\\Foundation\\Application->abort()\n#1 /var/www/api/app/Http/Controllers/ClientHostingApiController.php(157): abort()\n#2 /var/www/api/app/Http/Controllers/ClientHostingApiController.php(142): App\\Http\\Controllers\\ClientHostingApiController->handleAction()\n#3 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): App\\Http\\Controllers\\ClientHostingApiController->handle()\n#4 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\\Routing\\Controller->callAction()\n#5 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Route.php(262): Illuminate\\Routing\\ControllerDispatcher->dispatch()\n#6 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\\Routing\\Route->runController()\n#7 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(721): Illuminate\\Routing\\Route->run()\n#8 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}()\n#9 /var/www/api/app/Http/Middleware/ApiAccessPermission.php(28): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#10 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\\Http\\Middleware\\ApiAccessPermission->handle()\n#11 /var/www/api/app/Http/Middleware/ApiAccessPermission.php(28): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#12 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\\Http\\Middleware\\ApiAccessPermission->handle()\n#13 /var/www/api/app/Http/Middleware/ApiAccessPermission.php(28): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#14 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\\Http\\Middleware\\ApiAccessPermission->handle()\n#15 /var/www/api/vendor/fruitcake/laravel-cors/src/HandleCors.php(52): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#16 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fruitcake\\Cors\\HandleCors->handle()\n#17 /var/www/api/app/Http/Middleware/ApiLog.php(38): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#18 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\\Http\\Middleware\\ApiLog->handle()\n#19 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#20 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle()\n#21 /var/www/api/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php(44): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#22 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Auth\\Middleware\\Authenticate->handle()\n#23 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#24 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(723): Illuminate\\Pipeline\\Pipeline->then()\n#25 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(698): Illuminate\\Routing\\Router->runRouteWithinStack()\n#26 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(662): Illuminate\\Routing\\Router->runRoute()\n#27 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(651): Illuminate\\Routing\\Router->dispatchToRoute()\n#28 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(167): Illuminate\\Routing\\Router->dispatch()\n#29 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()\n#30 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#31 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()\n#32 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle()\n#33 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#34 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()\n#35 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()\n#36 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#37 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle()\n#38 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#39 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()\n#40 /var/www/api/vendor/fruitcake/laravel-cors/src/HandleCors.php(52): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#41 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fruitcake\\Cors\\HandleCors->handle()\n#42 /var/www/api/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#43 /var/www/api/app/Http/Middleware/TrustProxies.php(25): Fideloper\\Proxy\\TrustProxies->handle()\n#44 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\\Http\\Middleware\\TrustProxies->handle()\n#45 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#46 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(142): Illuminate\\Pipeline\\Pipeline->then()\n#47 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(111): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()\n#48 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(299): Illuminate\\Foundation\\Http\\Kernel->handle()\n#49 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(287): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->callLaravelOrLumenRoute()\n#50 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(89): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->makeApiCall()\n#51 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(45): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->makeResponseCall()\n#52 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(35): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->makeResponseCallIfConditionsPass()\n#53 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php(222): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->__invoke()\n#54 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php(179): Knuckles\\Scribe\\Extracting\\Extractor->iterateThroughStrategies()\n#55 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php(116): Knuckles\\Scribe\\Extracting\\Extractor->fetchResponses()\n#56 /var/www/api/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php(123): Knuckles\\Scribe\\Extracting\\Extractor->processRoute()\n#57 /var/www/api/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php(80): Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp->extractEndpointsInfoFromLaravelApp()\n#58 /var/www/api/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php(56): Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp->extractEndpointsInfoAndWriteToDisk()\n#59 /var/www/api/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php(55): Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp->get()\n#60 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Knuckles\\Scribe\\Commands\\GenerateDocumentation->handle()\n#61 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/Util.php(40): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()\n#62 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(93): Illuminate\\Container\\Util::unwrapIfClosure()\n#63 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(37): Illuminate\\Container\\BoundMethod::callBoundMethod()\n#64 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/Container.php(653): Illuminate\\Container\\BoundMethod::call()\n#65 /var/www/api/vendor/laravel/framework/src/Illuminate/Console/Command.php(136): Illuminate\\Container\\Container->call()\n#66 /var/www/api/vendor/symfony/console/Command/Command.php(298): Illuminate\\Console\\Command->execute()\n#67 /var/www/api/vendor/laravel/framework/src/Illuminate/Console/Command.php(121): Symfony\\Component\\Console\\Command\\Command->run()\n#68 /var/www/api/vendor/symfony/console/Application.php(1028): Illuminate\\Console\\Command->run()\n#69 /var/www/api/vendor/symfony/console/Application.php(299): Symfony\\Component\\Console\\Application->doRunCommand()\n#70 /var/www/api/vendor/symfony/console/Application.php(171): Symfony\\Component\\Console\\Application->doRun()\n#71 /var/www/api/vendor/laravel/framework/src/Illuminate/Console/Application.php(94): Symfony\\Component\\Console\\Application->run()\n#72 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(129): Illuminate\\Console\\Application->run()\n#73 /var/www/api/artisan(37): Illuminate\\Foundation\\Console\\Kernel->handle()\n#74 {main}"
}
}
Received response:
Request failed with error:
Set hosting label
Example request:
curl --request POST \
"https://api.pph.sh/client/hostings/43651/label" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5" \
--data "{
\"label\": \"\\\"My cool server\\\"\"
}"
const url = new URL(
"https://api.pph.sh/client/hostings/43651/label"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
let body = {
"label": "\"My cool server\""
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
Client Invoices
List invoices
requires authentication
Returns a list of invoices
Example request:
curl --request GET \
--get "https://api.pph.sh/client/invoices" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/invoices"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
{
"data": [
{
"id": 212032,
"duedate": "2022-12-26T23:00:00.000000Z",
"datepaid": "2022-11-17T03:00:32.000000Z",
"date": "2022-11-16T23:00:00.000000Z",
"subtotal": 0,
"credit": 0,
"tax": 0,
"taxrate": 19,
"total": 0,
"status": "Paid",
"status_label": "Bezahlt",
"is_open": false,
"items": [
{
"id": 246676,
"invoiceid": 212032,
"type": "Domain",
"short_description": "Domain Verlängerung - pph.sh - 1 Jahr(e) (27.12.2022 - 26.12.2023)",
"description": "Domain Verlängerung - pph.sh - 1 Jahr(e) (27.12.2022 - 26.12.2023)",
"relid": 5373,
"amount": "0.00",
"taxed": 1
}
],
"resources": {
"invoice": "https://api.pph.sh/client/invoices/212032",
"download": "https://api.pph.sh/client/invoices/212032/download"
}
}
]
}
Received response:
Request failed with error:
Response
Response Fields
data[].id
integer
Invoice ID
data[].duedate
string
Invoice due date
data[].date
date Invoice date
data[].subtotal
number
Invoice subtotal
data[].total
number
Invoice total
data[].status
string
Invoice status
data[].items[].type
string
The invoice type
Get single invoice
requires authentication
Returns a single invoice
Example request:
curl --request GET \
--get "https://api.pph.sh/client/invoices/130348" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/invoices/130348"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": {
"id": 130348,
"duedate": "2020-06-26T22:00:00.000000Z",
"datepaid": "-000001-11-29T23:06:32.000000Z",
"date": "2020-06-27T22:00:00.000000Z",
"subtotal": 6.68,
"credit": 1,
"tax": 1.27,
"taxrate": 19,
"total": 7.95,
"status": "Cancelled",
"status_label": "Storniert",
"is_open": false,
"items": [
{
"id": 140373,
"invoiceid": 130348,
"type": "Hosting",
"short_description": "KVM Konfigurierbar (SSD) - 23633-41003.pph-server.de (27.06.2020 - 26.07.2020)",
"description": "KVM Konfigurierbar (SSD) - 23633-41003.pph-server.de (27.06.2020 - 26.07.2020)\nBetriebssystem: Windows (Log-In ready)\nProzessor: 2 Kerne\nRAM: 4GB RAM\nNVMe SSD Speicher: 50GB SSD\nNetzwerkgeschwindigkeit: bis zu 200 MBit/s",
"relid": 23633,
"amount": 7.95,
"taxed": 1,
"donation": false
}
],
"donation_invoice": false,
"resources": {
"invoice": "https://api.pph.sh/client/invoices/130348",
"download": "https://api.pph.sh/client/invoices/130348/download"
}
}
}
Received response:
Request failed with error:
Download invoice pdf
requires authentication
Returns an invoice as application/pdf attachment
Example request:
curl --request GET \
--get "https://api.pph.sh/client/invoices/130348/download" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/invoices/130348/download"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
[Binary data] - application/pdf
Received response:
Request failed with error:
Pay invoice with credit
requires authentication
Example request:
curl --request POST \
"https://api.pph.sh/client/invoices/130348/pay" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/invoices/130348/pay"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
Remove credit from unpaid invoice.
requires authentication
Example request:
curl --request POST \
"https://api.pph.sh/client/invoices/130348/remove-credit" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/invoices/130348/remove-credit"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
Download invoice archive
requires authentication
Creates and responds with a zip archive containing invoices. Can have all invoices, specific hosting invoices, domain invoices or just invoices with transactions. Content-Type: application/zip
Example request:
curl --request GET \
--get "https://api.pph.sh/client/invoices/download/archive" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5" \
--data "{
\"from\": \"2024-04-14T05:00:30\",
\"to\": \"2024-04-14T05:00:30\",
\"hostings\": [
null
],
\"domains\": [
null
]
}"
const url = new URL(
"https://api.pph.sh/client/invoices/download/archive"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
let body = {
"from": "2024-04-14T05:00:30",
"to": "2024-04-14T05:00:30",
"hostings": [
null
],
"domains": [
null
]
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
[Binary data] - application/zip
Received response:
Request failed with error:
Client Orders
Class ClientOrderApiController
List orders
Returns a list of orders placed by the client
Example request:
curl --request GET \
--get "https://api.pph.sh/client/orders?recent=1&recent_days=3" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/orders"
);
const params = {
"recent": "1",
"recent_days": "3",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": [
{
"id": 84622,
"ordernum": 6535373339,
"date": "2024-04-11T14:34:16.000000Z",
"promocode": "WASISTMITHASILOS",
"amount": 6.82,
"invoiceid": false,
"cancelled": false,
"active": true,
"status_label": "Ausgeliefert",
"items_provisioned": true,
"hostings": [
{
"id": 48592,
"product_name": "KVM Konfigurierbar 3.0",
"product_group": "AMD SSD KVM vServer",
"label": "",
"module": "virtualizor",
"package_id": 485,
"order_id": 84622,
"ipaddress": "45.145.224.239",
"description": [
"Linux",
"2 Cores",
"2 GB RAM",
"50 GB SSD"
],
"assigned_ips": [
"2a12:edc0:0004:bc48:0000:0000:0000:0001"
],
"active": true,
"suspended": false,
"domain": "76485-20469.pph-server.de",
"status": "Active",
"billingcycle": "Monthly",
"has_invoices": true,
"has_unpaid_invoice": false,
"created_at": "2024-04-10T22:00:00.000000Z",
"next_due_date": "2024-05-10T22:00:00.000000Z",
"next_due_in": 26,
"next_due_human": "in 3 Wo.",
"amount": 6.82,
"firstpaymentamount": 6.82,
"cancellation": false,
"promotion": {
"code": "WASISTMITHASILOS",
"label": "WASISTMITHASILOS = wiederkehrend 25%",
"description": "25% Rabatt ges. Laufzeit",
"recurring": true,
"recurring_for": 0,
"recurring_infinite": true,
"value": 25,
"type": "Percentage"
},
"management_url": "https://api.pph.sh/client/routes?hosting=48592&tab=main",
"options": [
{
"config": {
"id": 296,
"label": "Betriebssystem",
"default": 1018
},
"option": {
"id": 1018,
"label": "Linux"
}
},
{
"config": {
"id": 329,
"label": "CPU Kerne",
"default": 1037
},
"option": {
"id": 1037,
"label": "2 Kerne"
}
},
{
"config": {
"id": 330,
"label": "Arbeitsspeicher",
"default": 1043
},
"option": {
"id": 1043,
"label": "2 GB RAM garantiert"
}
},
{
"config": {
"id": 331,
"label": "Festplattenspeicher",
"default": 1053
},
"option": {
"id": 1053,
"label": "50 GB SSD Speicher"
}
},
{
"config": {
"id": 332,
"label": "IPv4-Adressen",
"default": 1060
},
"option": {
"id": 1060,
"label": "1 IPv4 Adresse"
}
},
{
"config": {
"id": 333,
"label": "IPv6-Subnetz",
"default": 1063
},
"option": {
"id": 1063,
"label": "1 /64 IPv6 Netz (inkl.)"
}
},
{
"config": {
"id": 334,
"label": "Plesk",
"default": 1064
},
"option": {
"id": 1064,
"label": "Ohne Plesk"
}
},
{
"config": {
"id": 335,
"label": "Netzwerkspeicher hinzufügen",
"default": 1066
},
"option": {
"id": 1066,
"label": "Ohne Netzwerkspeicher"
}
},
{
"config": {
"id": 336,
"label": "Prepaid Hoster PRO abonnieren",
"default": 1069
},
"option": {
"id": 1069,
"label": "Ohne Pro-Features"
}
}
],
"addons": []
}
],
"domains": [],
"upgrades": []
}
],
"links": {
"first": "https://fsn-01.api.pph.sh/client/orders?page=1",
"last": "https://fsn-01.api.pph.sh/client/orders?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"active": false
},
{
"url": "https://fsn-01.api.pph.sh/client/orders?page=1",
"label": "1",
"active": true
},
{
"url": null,
"label": "Next »",
"active": false
}
],
"path": "https://fsn-01.api.pph.sh/client/orders",
"per_page": 15,
"to": 1,
"total": 1
}
}
Received response:
Request failed with error:
Get order
Returns a single order
Example request:
curl --request GET \
--get "https://api.pph.sh/client/orders/30910" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/orders/30910"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (500):
Show headers
cache-control: must-revalidate, no-cache, no-store, private
content-type: application/json
x-error: 1
access-control-allow-origin: *
{
"data": {
"error": true,
"type": "ModelNotFoundException",
"url": "https://fsn-01.api.pph.sh/client/orders/30910",
"errors": null,
"exception": true,
"model": "Order",
"id": [
30910
],
"message": "No query results for model [DeZio\\WHMCS\\Models\\Order] 30910",
"trace": "Illuminate\\Database\\Eloquent\\ModelNotFoundException: No query results for model [DeZio\\WHMCS\\Models\\Order] 30910 in /var/www/api/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php:444\nStack trace:\n#0 /var/www/api/vendor/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php(23): Illuminate\\Database\\Eloquent\\Builder->findOrFail()\n#1 /var/www/api/vendor/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php(52): Illuminate\\Database\\Eloquent\\Relations\\Relation->forwardCallTo()\n#2 /var/www/api/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/Relation.php(481): Illuminate\\Database\\Eloquent\\Relations\\Relation->forwardDecoratedCallTo()\n#3 /var/www/api/app/Http/Controllers/ClientOrderApiController.php(44): Illuminate\\Database\\Eloquent\\Relations\\Relation->__call()\n#4 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): App\\Http\\Controllers\\ClientOrderApiController->show()\n#5 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\\Routing\\Controller->callAction()\n#6 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Route.php(262): Illuminate\\Routing\\ControllerDispatcher->dispatch()\n#7 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\\Routing\\Route->runController()\n#8 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(721): Illuminate\\Routing\\Route->run()\n#9 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}()\n#10 /var/www/api/app/Http/Middleware/ApiAccessPermission.php(28): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#11 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\\Http\\Middleware\\ApiAccessPermission->handle()\n#12 /var/www/api/vendor/fruitcake/laravel-cors/src/HandleCors.php(52): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#13 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fruitcake\\Cors\\HandleCors->handle()\n#14 /var/www/api/app/Http/Middleware/ApiLog.php(38): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#15 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\\Http\\Middleware\\ApiLog->handle()\n#16 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#17 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle()\n#18 /var/www/api/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php(44): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#19 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Auth\\Middleware\\Authenticate->handle()\n#20 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#21 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(723): Illuminate\\Pipeline\\Pipeline->then()\n#22 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(698): Illuminate\\Routing\\Router->runRouteWithinStack()\n#23 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(662): Illuminate\\Routing\\Router->runRoute()\n#24 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(651): Illuminate\\Routing\\Router->dispatchToRoute()\n#25 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(167): Illuminate\\Routing\\Router->dispatch()\n#26 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()\n#27 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#28 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()\n#29 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle()\n#30 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#31 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()\n#32 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()\n#33 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#34 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle()\n#35 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#36 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()\n#37 /var/www/api/vendor/fruitcake/laravel-cors/src/HandleCors.php(52): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#38 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fruitcake\\Cors\\HandleCors->handle()\n#39 /var/www/api/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#40 /var/www/api/app/Http/Middleware/TrustProxies.php(25): Fideloper\\Proxy\\TrustProxies->handle()\n#41 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\\Http\\Middleware\\TrustProxies->handle()\n#42 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#43 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(142): Illuminate\\Pipeline\\Pipeline->then()\n#44 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(111): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()\n#45 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(299): Illuminate\\Foundation\\Http\\Kernel->handle()\n#46 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(287): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->callLaravelOrLumenRoute()\n#47 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(89): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->makeApiCall()\n#48 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(45): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->makeResponseCall()\n#49 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(35): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->makeResponseCallIfConditionsPass()\n#50 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php(222): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->__invoke()\n#51 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php(179): Knuckles\\Scribe\\Extracting\\Extractor->iterateThroughStrategies()\n#52 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php(116): Knuckles\\Scribe\\Extracting\\Extractor->fetchResponses()\n#53 /var/www/api/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php(123): Knuckles\\Scribe\\Extracting\\Extractor->processRoute()\n#54 /var/www/api/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php(80): Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp->extractEndpointsInfoFromLaravelApp()\n#55 /var/www/api/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php(56): Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp->extractEndpointsInfoAndWriteToDisk()\n#56 /var/www/api/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php(55): Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp->get()\n#57 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Knuckles\\Scribe\\Commands\\GenerateDocumentation->handle()\n#58 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/Util.php(40): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()\n#59 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(93): Illuminate\\Container\\Util::unwrapIfClosure()\n#60 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(37): Illuminate\\Container\\BoundMethod::callBoundMethod()\n#61 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/Container.php(653): Illuminate\\Container\\BoundMethod::call()\n#62 /var/www/api/vendor/laravel/framework/src/Illuminate/Console/Command.php(136): Illuminate\\Container\\Container->call()\n#63 /var/www/api/vendor/symfony/console/Command/Command.php(298): Illuminate\\Console\\Command->execute()\n#64 /var/www/api/vendor/laravel/framework/src/Illuminate/Console/Command.php(121): Symfony\\Component\\Console\\Command\\Command->run()\n#65 /var/www/api/vendor/symfony/console/Application.php(1028): Illuminate\\Console\\Command->run()\n#66 /var/www/api/vendor/symfony/console/Application.php(299): Symfony\\Component\\Console\\Application->doRunCommand()\n#67 /var/www/api/vendor/symfony/console/Application.php(171): Symfony\\Component\\Console\\Application->doRun()\n#68 /var/www/api/vendor/laravel/framework/src/Illuminate/Console/Application.php(94): Symfony\\Component\\Console\\Application->run()\n#69 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(129): Illuminate\\Console\\Application->run()\n#70 /var/www/api/artisan(37): Illuminate\\Foundation\\Console\\Kernel->handle()\n#71 {main}"
}
}
Received response:
Request failed with error:
Client Tickets
List support tickets
Returns a list of support ticket requests
Example request:
curl --request GET \
--get "https://api.pph.sh/client/tickets" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/tickets"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
{
"data": [
{
"id": 56491,
"date": "2022-10-11T17:02:29.000000Z",
"subject": "12345678978978945645613",
"client_name": "Dennis Ziolkowski",
"generic_cat": "Allgemein",
"status": "Beantwortet",
"pending-support-reply": false,
"pending-customer-reply": true,
"active": true,
"urgency": "Low",
"message": " DB::connection("whmcs")->table('tbltickets')->where('tid', $response['result']->tid)->update(['service' => $service]);\r\n\nJa, ich erlaube der Henrik Kramer e. K. (Prepaid-Hoster) auf meinen Server zuzugreifen [...]\n",
"last_reply": "2022-11-20T00:49:57.000000Z",
"replies": 5,
"latest_reply": {
"supporter": "Nathalie v. d. Forst",
"client": false,
"message": "Moin Dennis Ziolkowski,\r\nvielen Dank für Ihre Anfrage.\r\n\r\nTest 12309ß327 1ß0 4372189 43798102 31\r\n\r\nMit freundlichen Grüßen\r\n\r\nNathalie von der Forst\r\nSupport\r\n\r\nHenrik Kramer e. K.\r\nKurpromenade 48\r\n23743 Grömitz",
"date": "2022-11-20T00:49:57.000000Z"
},
"last_reply_diff_for_humans": "vor 14 Stunden"
}
]
}
Received response:
Request failed with error:
Response
Response Fields
id
integer
The ticket ID
subject
string
The ticket subject
generic_cat
string
The ticket category
status
string
The internal ticket status label
pending-support-reply
boolean
Whether the ticket is in awaiting support reply
pending-customer-reply
boolean
Whether the ticket is in awaiting customer reply
active
boolean
Whether the ticket is active
urgency
string
The tickets urgency. Can be low, normal or high.
message
string
The tickets message
last_reply
object[]
The tickets last reply date time
last_reply[].supporter
Name of the supporter or client replying
last_reply[].client
boolean
Whether this reply was made by the client
last_reply[].message
The reply message
last_reply[].date
The reply date and time
replies
integer
The total number of replies on this ticket
last_reply_diff_for_humans
string
Last reply date in human readable format
GET client/tickets/feedback
Example request:
curl --request GET \
--get "https://api.pph.sh/client/tickets/feedback" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/tickets/feedback"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
[]
Received response:
Request failed with error:
Give feedback for a ticket
Example request:
curl --request POST \
"https://api.pph.sh/client/tickets/feedback/1" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/tickets/feedback/1"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
Client Transactions
List transactions
requires authentication
Returns a list of transations
Example request:
curl --request GET \
--get "https://api.pph.sh/client/transactions" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5" \
--data "{
\"after\": \"2024-04-14T05:00:29\",
\"before\": \"2024-04-14T05:00:29\"
}"
const url = new URL(
"https://api.pph.sh/client/transactions"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
let body = {
"after": "2024-04-14T05:00:29",
"before": "2024-04-14T05:00:29"
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
{
"data": [
{
"id": 47129,
"gateway": "banktransfer",
"date": "2021-05-11T16:21:54.000000Z",
"diff_for_humans": "vor 2 Minuten",
"description": "Invoice Payment",
"amountin": 1,
"invoiceid": 155975
}
],
"links": {
"first": "http://api.pph.sh/client/transactions?page=1",
"last": "http://api.pph.sh/client/transactions?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"active": false
},
{
"url": "http://api.pph.sh/client/transactions?page=1",
"label": "1",
"active": true
},
{
"url": null,
"label": "Next »",
"active": false
}
],
"path": "http://api.pph.sh/client/transactions",
"per_page": 15,
"to": 1,
"total": 1
}
}
Received response:
Request failed with error:
Transaction
Returns the invoice for a specific transaction
Example request:
curl --request GET \
--get "https://api.pph.sh/client/transactions/47129" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/transactions/47129"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
{
"data": {
"id": 47129,
"gateway": "banktransfer",
"date": "2021-05-11T16:21:54.000000Z",
"diff_for_humans": "vor 2 Minuten",
"description": "Invoice Payment",
"amountin": 1,
"invoiceid": 155975
}
}
Received response:
Request failed with error:
Initiate payment
requires authentication
Example request:
curl --request POST \
"https://api.pph.sh/client/transactions/initiate?paymentmethod=PayPal&value=15.6" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/transactions/initiate"
);
const params = {
"paymentmethod": "PayPal",
"value": "15.6",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
Response
Response Fields
url
string
The url for the transaction initiation. The url is valid for a few minutes.
Transaction invoice
Returns the invoice for a specific transaction
Example request:
curl --request GET \
--get "https://api.pph.sh/client/transactions/47129/invoice" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/transactions/47129/invoice"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
{
"data": {
"id": 155975,
"duedate": "2021-05-10T22:00:00.000000Z",
"datepaid": "2021-05-11T16:21:54.000000Z",
"date": "2021-05-10T22:00:00.000000Z",
"subtotal": 1,
"credit": 0,
"tax": 0,
"taxrate": 19,
"total": 1,
"status": "Paid",
"status_label": "Bezahlt",
"is_open": false,
"items": [
{
"id": 172053,
"invoiceid": 155975,
"type": "AddFunds",
"short_description": "Guthaben / Vorauszahlung hinzufügen",
"description": "Guthaben / Vorauszahlung hinzufügen",
"relid": 0,
"amount": "1.00",
"taxed": 0
}
],
"transaction": {
"id": 47129,
"gateway": "banktransfer",
"date": "2021-05-11T16:21:54.000000Z",
"diff_for_humans": "vor 2 Minuten",
"description": "Invoice Payment",
"amountin": 1,
"invoiceid": 155975
},
"resources": {
"invoice": "http://api.pph.sh/client/invoices/155975",
"download": "http://api.pph.sh/client/invoices/155975/download"
}
}
}
Received response:
Request failed with error:
Dedicated Server
Available filter options
Returns a list of available filter options.
Example request:
curl --request GET \
--get "https://api.pph.sh/public/products/dedicated/options" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/public/products/dedicated/options"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": {
"cpu": {
"id": "cpu",
"label": "Prozessor",
"format": "%s",
"type": "option",
"sort": false,
"values": [
{
"id": "Opteron 6338P",
"label": "AMD Opteron 6338P (12C/24T @2.3GHz)",
"bench": 3850,
"cpu": {
"id": 100,
"cpu_name": "amd Opteron 6338P",
"frq": 2.3,
"frq_turbo": null,
"cores": 12,
"threads": 24,
"created_at": "2023-06-25T15:58:19.000000Z",
"updated_at": "2023-06-25T15:58:19.000000Z",
"vendor": "AMD",
"generation": {
"id": "opteron",
"label": "Opteron"
},
"short_name": "6338P"
}
},
{
"id": "Xeon E3-1245",
"label": "Intel Xeon E3-1245 (4C/8T @3.3GHz)",
"bench": 5244,
"cpu": {
"id": 82,
"cpu_name": "intel Xeon E3-1245 - Red.PS",
"frq": 3.3,
"frq_turbo": null,
"cores": 4,
"threads": 8,
"created_at": "2023-06-01T11:31:44.000000Z",
"updated_at": "2023-06-01T11:31:44.000000Z",
"vendor": "Intel",
"generation": {
"id": "xeon",
"label": "Xeon"
},
"short_name": "E3-1245 - Red.PS"
}
},
{
"id": "Core i7-2600",
"label": "Intel Core i7-2600 (4C/8T @3.4GHz)",
"bench": 5343,
"cpu": {
"id": 78,
"cpu_name": "intel Core i7-2600",
"frq": 3.4,
"frq_turbo": null,
"cores": 4,
"threads": 8,
"created_at": "2023-06-01T11:31:20.000000Z",
"updated_at": "2023-06-01T11:31:20.000000Z",
"vendor": "Intel",
"generation": {
"id": "core",
"label": "Core"
},
"short_name": "i7-2600"
}
},
{
"id": "Xeon E3-1245V2",
"label": "Intel Xeon E3-1245V2 (4C/8T @3.4GHz)",
"bench": 6313,
"cpu": {
"id": 102,
"cpu_name": "intel Xeon E3-1245V2",
"frq": 3.4,
"frq_turbo": null,
"cores": 4,
"threads": 8,
"created_at": "2023-10-01T11:32:29.000000Z",
"updated_at": "2023-10-01T11:32:29.000000Z",
"vendor": "Intel",
"generation": {
"id": "xeon",
"label": "Xeon"
},
"short_name": "E3-1245V2"
}
},
{
"id": "Core i7-3770",
"label": "Intel Core i7-3770 (4C/8T @3.4GHz)",
"bench": 6370,
"cpu": {
"id": 75,
"cpu_name": "intel Core i7-3770",
"frq": 3.4,
"frq_turbo": null,
"cores": 4,
"threads": 8,
"created_at": "2023-06-01T11:30:35.000000Z",
"updated_at": "2023-06-01T11:30:35.000000Z",
"vendor": "Intel",
"generation": {
"id": "core",
"label": "Core"
},
"short_name": "i7-3770"
}
},
{
"id": "Core i7-4770",
"label": "Intel Core i7-4770 (4C/8T @3.4GHz)",
"bench": 7048,
"cpu": {
"id": 69,
"cpu_name": "intel Core i7-4770",
"frq": 3.4,
"frq_turbo": null,
"cores": 4,
"threads": 8,
"created_at": "2023-06-01T11:29:56.000000Z",
"updated_at": "2023-06-01T11:29:56.000000Z",
"vendor": "Intel",
"generation": {
"id": "core",
"label": "Core"
},
"short_name": "i7-4770"
}
},
{
"id": "Xeon E3-1246V3",
"label": "Intel Xeon E3-1246V3 (4C/8T @3.5GHz)",
"bench": 7121,
"cpu": {
"id": 72,
"cpu_name": "intel Xeon E3-1246V3",
"frq": 3.5,
"frq_turbo": null,
"cores": 4,
"threads": 8,
"created_at": "2023-06-01T11:30:15.000000Z",
"updated_at": "2023-06-01T11:30:15.000000Z",
"vendor": "Intel",
"generation": {
"id": "xeon",
"label": "Xeon"
},
"short_name": "E3-1246V3"
}
},
{
"id": "Xeon E3-1270V3",
"label": "Intel Xeon E3-1270V3 (4C/8T @3.5GHz)",
"bench": 7277,
"cpu": {
"id": 74,
"cpu_name": "intel Xeon E3-1270V3",
"frq": 3.5,
"frq_turbo": null,
"cores": 4,
"threads": 8,
"created_at": "2023-06-01T11:30:28.000000Z",
"updated_at": "2023-06-01T11:30:28.000000Z",
"vendor": "Intel",
"generation": {
"id": "xeon",
"label": "Xeon"
},
"short_name": "E3-1270V3"
}
},
{
"id": "Xeon E3-1271V3",
"label": "Intel Xeon E3-1271V3 (4C/8T @3.6GHz)",
"bench": 7470,
"cpu": {
"id": 76,
"cpu_name": "intel Xeon E3-1271V3",
"frq": 3.6,
"frq_turbo": null,
"cores": 4,
"threads": 8,
"created_at": "2023-06-01T11:30:43.000000Z",
"updated_at": "2023-06-01T11:30:43.000000Z",
"vendor": "Intel",
"generation": {
"id": "xeon",
"label": "Xeon"
},
"short_name": "E3-1271V3"
}
},
{
"id": "Core i7-6700",
"label": "Intel Core i7-6700 (4C/8T @3.4GHz)",
"bench": 8048,
"cpu": {
"id": 68,
"cpu_name": "intel Core i7-6700",
"frq": 3.4,
"frq_turbo": null,
"cores": 4,
"threads": 8,
"created_at": "2023-06-01T11:29:50.000000Z",
"updated_at": "2023-06-01T11:29:50.000000Z",
"vendor": "Intel",
"generation": {
"id": "core",
"label": "Core"
},
"short_name": "i7-6700"
}
},
{
"id": "Core i7-3930",
"label": "Intel Core i7-3930 (6C/12T @3.2GHz)",
"bench": 8078,
"cpu": {
"id": 86,
"cpu_name": "intel Core i7-3930",
"frq": 3.2,
"frq_turbo": null,
"cores": 6,
"threads": 12,
"created_at": "2023-06-01T11:32:07.000000Z",
"updated_at": "2023-06-01T11:32:07.000000Z",
"vendor": "Intel",
"generation": {
"id": "core",
"label": "Core"
},
"short_name": "i7-3930"
}
},
{
"id": "Xeon E3-1275v5",
"label": "Intel Xeon E3-1275v5 (4C/8T @3.6GHz)",
"bench": 8292,
"cpu": {
"id": 70,
"cpu_name": "intel Xeon E3-1275v5",
"frq": 3.6,
"frq_turbo": null,
"cores": 4,
"threads": 8,
"created_at": "2023-06-01T11:30:03.000000Z",
"updated_at": "2023-06-01T11:30:03.000000Z",
"vendor": "Intel",
"generation": {
"id": "xeon",
"label": "Xeon"
},
"short_name": "E3-1275v5"
}
},
{
"id": "Xeon E3-1275V6",
"label": "Intel Xeon E3-1275V6 (4C/8T @3.8GHz)",
"bench": 8564,
"cpu": {
"id": 73,
"cpu_name": "intel Xeon E3-1275V6",
"frq": 3.8,
"frq_turbo": null,
"cores": 4,
"threads": 8,
"created_at": "2023-06-01T11:30:22.000000Z",
"updated_at": "2023-06-01T11:30:22.000000Z",
"vendor": "Intel",
"generation": {
"id": "xeon",
"label": "Xeon"
},
"short_name": "E3-1275V6"
}
},
{
"id": "Core i7-7700",
"label": "Intel Core i7-7700 (4C/8T @3.6GHz)",
"bench": 8581,
"cpu": {
"id": 71,
"cpu_name": "intel Core i7-7700",
"frq": 3.6,
"frq_turbo": null,
"cores": 4,
"threads": 8,
"created_at": "2023-06-01T11:30:09.000000Z",
"updated_at": "2023-06-01T11:30:09.000000Z",
"vendor": "Intel",
"generation": {
"id": "core",
"label": "Core"
},
"short_name": "i7-7700"
}
},
{
"id": "Xeon E5-1650V2",
"label": "Intel Xeon E5-1650V2 (6C/12T @3.5GHz)",
"bench": 8977,
"cpu": {
"id": 85,
"cpu_name": "intel Xeon E5-1650V2",
"frq": 3.5,
"frq_turbo": null,
"cores": 6,
"threads": 12,
"created_at": "2023-06-01T11:32:01.000000Z",
"updated_at": "2023-06-01T11:32:01.000000Z",
"vendor": "Intel",
"generation": {
"id": "xeon",
"label": "Xeon"
},
"short_name": "E5-1650V2"
}
},
{
"id": "Xeon E5-1650V3",
"label": "Intel Xeon E5-1650V3 (6C/12T @3.5GHz)",
"bench": 10382,
"cpu": {
"id": 83,
"cpu_name": "intel Xeon E5-1650V3",
"frq": 3.5,
"frq_turbo": null,
"cores": 6,
"threads": 12,
"created_at": "2023-06-01T11:31:49.000000Z",
"updated_at": "2023-06-01T11:31:49.000000Z",
"vendor": "Intel",
"generation": {
"id": "xeon",
"label": "Xeon"
},
"short_name": "E5-1650V3"
}
},
{
"id": "Core i7-8700",
"label": "Intel Core i7-8700 (6C/12T @3.2GHz)",
"bench": 13180,
"cpu": {
"id": 81,
"cpu_name": "intel Core i7-8700",
"frq": 3.2,
"frq_turbo": null,
"cores": 6,
"threads": 12,
"created_at": "2023-06-01T11:31:37.000000Z",
"updated_at": "2023-06-01T11:31:37.000000Z",
"vendor": "Intel",
"generation": {
"id": "core",
"label": "Core"
},
"short_name": "i7-8700"
}
},
{
"id": "XEON E-2176G",
"label": "Intel XEON E-2176G (6C/12T @3.7GHz)",
"bench": 13635,
"cpu": {
"id": 92,
"cpu_name": "intel XEON E-2176G",
"frq": 3.7,
"frq_turbo": null,
"cores": 6,
"threads": 12,
"created_at": "2023-06-01T11:32:54.000000Z",
"updated_at": "2023-06-01T11:32:54.000000Z",
"vendor": "Intel",
"generation": {
"id": "xeon",
"label": "XEON"
},
"short_name": "E-2176G"
}
},
{
"id": "XEON E-2276G",
"label": "Intel XEON E-2276G (6C/12T @3.8GHz)",
"bench": 13803,
"cpu": {
"id": 93,
"cpu_name": "intel XEON E-2276G",
"frq": 3.8,
"frq_turbo": null,
"cores": 6,
"threads": 12,
"created_at": "2023-06-01T11:33:00.000000Z",
"updated_at": "2023-06-01T11:33:00.000000Z",
"vendor": "Intel",
"generation": {
"id": "xeon",
"label": "XEON"
},
"short_name": "E-2276G"
}
},
{
"id": "Ryzen 7 PRO 1700X",
"label": "AMD Ryzen 7 PRO 1700X (8C/16T @3.4GHz)",
"bench": 15398,
"cpu": {
"id": 80,
"cpu_name": "amd Ryzen 7 PRO 1700X",
"frq": 3.4,
"frq_turbo": null,
"cores": 8,
"threads": 16,
"created_at": "2023-06-01T11:31:30.000000Z",
"updated_at": "2023-06-01T11:31:30.000000Z",
"vendor": "AMD",
"generation": {
"id": "ryzen",
"label": "Ryzen"
},
"short_name": "7 PRO 1700X"
}
},
{
"id": "Ryzen 7 1700X",
"label": "AMD Ryzen 7 1700X (8C/16T @3.4GHz)",
"bench": 15622,
"cpu": {
"id": 79,
"cpu_name": "amd Ryzen 7 1700X",
"frq": 3.4,
"frq_turbo": null,
"cores": 8,
"threads": 16,
"created_at": "2023-06-01T11:31:25.000000Z",
"updated_at": "2023-06-01T11:31:25.000000Z",
"vendor": "AMD",
"generation": {
"id": "ryzen",
"label": "Ryzen"
},
"short_name": "7 1700X"
}
},
{
"id": "Xeon W-2145",
"label": "Intel Xeon W-2145 (8C/16T @3.7GHz)",
"bench": 18292,
"cpu": {
"id": 91,
"cpu_name": "intel Xeon W-2145",
"frq": 3.7,
"frq_turbo": null,
"cores": 8,
"threads": 16,
"created_at": "2023-06-01T11:32:38.000000Z",
"updated_at": "2023-06-01T11:32:38.000000Z",
"vendor": "Intel",
"generation": {
"id": "xeon",
"label": "Xeon"
},
"short_name": "W-2145"
}
},
{
"id": "Core i9-9900K",
"label": "Intel Core i9-9900K (8C/16T @3.6GHz)",
"bench": 18879,
"cpu": {
"id": 87,
"cpu_name": "intel Core i9-9900K",
"frq": 3.6,
"frq_turbo": null,
"cores": 8,
"threads": 16,
"created_at": "2023-06-01T11:32:14.000000Z",
"updated_at": "2023-06-01T11:32:14.000000Z",
"vendor": "Intel",
"generation": {
"id": "core",
"label": "Core"
},
"short_name": "i9-9900K"
}
},
{
"id": "Core i5-12500",
"label": "Intel Core i5-12500 (8C/16T @3.2GHz)",
"bench": 19901,
"cpu": {
"id": 88,
"cpu_name": "intel Core i5-12500",
"frq": 3.2,
"frq_turbo": null,
"cores": 8,
"threads": 16,
"created_at": "2023-06-01T11:32:20.000000Z",
"updated_at": "2023-06-01T11:32:20.000000Z",
"vendor": "Intel",
"generation": {
"id": "core",
"label": "Core"
},
"short_name": "i5-12500"
}
},
{
"id": "Ryzen 7 3700X",
"label": "AMD Ryzen 7 3700X (8C/16T @3.6GHz)",
"bench": 22719,
"cpu": {
"id": 89,
"cpu_name": "amd Ryzen 7 3700X",
"frq": 3.6,
"frq_turbo": null,
"cores": 8,
"threads": 16,
"created_at": "2023-06-01T11:32:25.000000Z",
"updated_at": "2023-06-01T11:32:25.000000Z",
"vendor": "AMD",
"generation": {
"id": "ryzen",
"label": "Ryzen"
},
"short_name": "7 3700X"
}
},
{
"id": "EPYC 7401P",
"label": "AMD EPYC 7401P (24C/48T @2GHz)",
"bench": 23813,
"cpu": {
"id": 97,
"cpu_name": "amd EPYC 7401P",
"frq": 2,
"frq_turbo": null,
"cores": 24,
"threads": 48,
"created_at": "2023-06-01T11:33:39.000000Z",
"updated_at": "2023-06-01T11:33:39.000000Z",
"vendor": "AMD",
"generation": {
"id": "epyc",
"label": "EPYC"
},
"short_name": "7401P"
}
},
{
"id": "Ryzen Threadripper 2950X",
"label": "AMD Ryzen Threadripper 2950X (16C/32T @3.5GHz)",
"bench": 30191,
"cpu": {
"id": 95,
"cpu_name": "amd Ryzen Threadripper 2950X",
"frq": 3.5,
"frq_turbo": null,
"cores": 16,
"threads": 32,
"created_at": "2023-06-01T11:33:26.000000Z",
"updated_at": "2023-06-01T11:33:26.000000Z",
"vendor": "AMD",
"generation": {
"id": "ryzen",
"label": "Ryzen"
},
"short_name": "Threadripper 2950X"
}
},
{
"id": "Xeon W-2295",
"label": "Intel Xeon W-2295 (18C/36T @3GHz)",
"bench": 30508,
"cpu": {
"id": 103,
"cpu_name": "intel Xeon W-2295",
"frq": 3,
"frq_turbo": null,
"cores": 18,
"threads": 36,
"created_at": "2023-12-22T13:51:47.000000Z",
"updated_at": "2023-12-22T13:51:47.000000Z",
"vendor": "Intel",
"generation": {
"id": "xeon",
"label": "Xeon"
},
"short_name": "W-2295"
}
},
{
"id": "Ryzen 9 3900",
"label": "AMD Ryzen 9 3900 (12C/24T @3.1GHz)",
"bench": 30649,
"cpu": {
"id": 90,
"cpu_name": "amd Ryzen 9 3900",
"frq": 3.1,
"frq_turbo": null,
"cores": 12,
"threads": 24,
"created_at": "2023-06-01T11:32:31.000000Z",
"updated_at": "2023-06-01T11:32:31.000000Z",
"vendor": "AMD",
"generation": {
"id": "ryzen",
"label": "Ryzen"
},
"short_name": "9 3900"
}
},
{
"id": "Core i9-12900K",
"label": "Intel Core i9-12900K (16C/24T @3.2GHz)",
"bench": 41594,
"cpu": {
"id": 99,
"cpu_name": "intel Core i9-12900K",
"frq": 3.2,
"frq_turbo": null,
"cores": 16,
"threads": 24,
"created_at": "2023-06-01T11:33:52.000000Z",
"updated_at": "2023-06-01T11:33:52.000000Z",
"vendor": "Intel",
"generation": {
"id": "core",
"label": "Core"
},
"short_name": "i9-12900K"
}
},
{
"id": "EPYC 7502",
"label": "AMD EPYC 7502",
"bench": 45839,
"cpu": null
},
{
"id": "Ryzen 9 5950X",
"label": "AMD Ryzen 9 5950X (16C/32T @3.4GHz)",
"bench": 45895,
"cpu": {
"id": 98,
"cpu_name": "amd Ryzen 9 5950X",
"frq": 3.4,
"frq_turbo": null,
"cores": 16,
"threads": 32,
"created_at": "2023-06-01T11:33:45.000000Z",
"updated_at": "2023-06-01T11:33:45.000000Z",
"vendor": "AMD",
"generation": {
"id": "ryzen",
"label": "Ryzen"
},
"short_name": "9 5950X"
}
},
{
"id": "EPYC 7502P",
"label": "AMD EPYC 7502P",
"bench": 48724,
"cpu": null
}
]
},
"memory": {
"id": "memory",
"label": "Arbeitsspeicher",
"format": "%s GB",
"type": "range",
"values": [
16,
32,
64,
128,
160,
192,
224,
256,
320,
352,
384,
448,
512,
576,
640,
704,
768,
1024
]
},
"disk": {
"id": "disk",
"label": "Speicherplatz",
"format": "%s GB",
"type": "range",
"values": [
0,
240,
250,
256,
480,
500,
512,
720,
960,
1000,
1024,
1440,
1500,
1536,
1920,
1966,
2000,
2048,
2880,
3072,
3840,
3932,
4096,
4800,
5898,
6144,
7680,
7864,
8192,
10240,
11796,
12288,
15728,
16384,
19660,
20480,
23592,
24576,
27524,
30720,
31456,
32768,
40960,
61440,
65536,
79872,
92160,
102400,
153600,
163840
]
},
"disktype": {
"id": "disktype",
"label": "Speicher-Typ",
"format": "%s",
"type": "option",
"values": [
"hdd",
"hybrid",
"nvme",
"ssd"
]
},
"price": {
"id": "price",
"label": "Preis",
"format": "%s Euro",
"type": "range",
"values": [
51,
52,
53,
54,
55,
57,
58,
59,
60,
61,
62,
64,
65,
66,
67,
68,
70,
71,
72,
73,
74,
76,
77,
78,
79,
80,
82,
83,
84,
85,
93,
94,
95,
97,
98,
106,
107,
108,
110,
111,
112,
113,
115,
116,
117,
119,
120,
121,
122,
124,
125,
126,
128,
129,
130,
131,
133,
134,
135,
136,
138,
139,
140,
143,
144,
145,
147,
148,
149,
150,
152,
153,
154,
156,
157,
158,
159,
161,
162,
163,
164,
166,
167,
168,
170,
171,
172,
173,
175,
176,
177,
178,
180,
181,
182,
184,
185,
186,
187,
189,
190,
191,
192,
194,
195,
198,
199,
200,
201,
203,
204,
206,
208,
210,
212,
213,
214,
215,
217,
218,
219,
220,
223,
224,
226,
227,
229,
232,
233,
234,
236,
237,
238,
241,
242,
243,
245,
246,
247,
248,
251,
252,
254,
255,
256,
257,
259,
260,
261,
262,
266,
268,
269,
271,
273,
274,
275,
276,
278,
279,
280,
282,
283,
284,
285,
289,
290,
292,
293,
294,
297,
298,
299,
301,
302,
304,
306,
307,
311,
312,
316,
318,
320,
321,
322,
324,
326,
327,
329,
331,
334,
335,
339,
340,
341,
344,
348,
350,
355,
357,
380,
381,
383,
385,
386,
387,
390,
392,
394,
395,
396,
400,
404,
408,
415,
420,
424,
428,
445,
451,
455,
469,
476,
478,
483,
484,
488,
489,
493,
495,
502,
503,
526,
555,
572,
604,
605,
609,
616,
622,
630,
634,
638,
641,
646,
650,
657,
707,
918
]
}
}
}
Received response:
Request failed with error:
Pricing for additional IPs
Example request:
curl --request GET \
--get "https://api.pph.sh/public/products/dedicated/ips" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/public/products/dedicated/ips"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": {
"single": [
{
"name": "1 zusätzliche IP(s)",
"setup": 10,
"price": 2.5
},
{
"name": "2 zusätzliche IP(s)",
"setup": 20,
"price": 5
},
{
"name": "3 zusätzliche IP(s)",
"setup": 30,
"price": 7.5
},
{
"name": "4 zusätzliche IP(s)",
"setup": 40,
"price": 10
},
{
"name": "5 zusätzliche IP(s)",
"setup": 50,
"price": 12.5
},
{
"name": "6 zusätzliche IP(s)",
"setup": 60,
"price": 15
}
],
"subnets": [
{
"name": "/29-IP Subnetz (6 verwendbare IPs)",
"setup": 80,
"price": 20
},
{
"name": "/28-IP Subnetz (14 verwendbare IPs)",
"setup": 160,
"price": 40
},
{
"name": "/27-IP Subnetz (30 verwendbare IPs)",
"setup": 320,
"price": 80
}
]
}
}
Received response:
Request failed with error:
List orderable servers
Returns a list of orderable dedicated servers
Example request:
curl --request GET \
--get "https://api.pph.sh/public/products/dedicated?sort=price&limit=5" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/public/products/dedicated"
);
const params = {
"sort": "price",
"limit": "5",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
{
"current_page": 1,
"data": [
{
"serverid": 1730555,
"recommendation": false,
"vendor": "intel",
"hardwareid": "intel-core-i7-4770-4x-ram-8192-mb-ddr3-2x-ssd-sata-240-gb",
"description": [
"Intel Core i7-4770",
"4x RAM 8192 MB DDR3",
"2x SSD SATA 240 GB"
],
"cpu": "Core i7-4770",
"benchmark": 7048,
"memory": 32,
"disksize": 240,
"diskcount": 2,
"disktype": {
"rotational": false,
"type": "ssd"
},
"disktags": [
"ssd"
],
"datacenter": "FSN1-DC10",
"networkspeed": 1000,
"price": 56.98,
"setup": 10,
"internal": "MTczMDU1NXwyOjMyfDM4MDg=",
"discount": null,
"extra": {
"special_offer": false
}
}
]
}
Received response:
Request failed with error:
Recommended server
Recommends the cheapest servers by category
Example request:
curl --request GET \
--get "https://api.pph.sh/public/products/dedicated/recommended" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/public/products/dedicated/recommended"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": {
"special": [],
"special_info": {
"valid_until": null
},
"ssd": {
"serverid": 2350389,
"recommendation": false,
"vendor": "intel",
"hardwareid": "intel-xeon-w-2145-4x-ram-32768-mb-ddr4-ecc-reg-1x-ssd-sata-960-gb-datacenter-nic-1-gbit-intel-i210",
"description": [
"Intel Xeon W-2145",
"4x RAM 32768 MB DDR4 ECC reg.",
"1x SSD SATA 960 GB Datacenter",
"NIC 1 Gbit - Intel I210"
],
"cpu": "Xeon W-2145",
"cpu_info": {
"id": 91,
"cpu_name": "intel Xeon W-2145",
"frq": 3.7,
"frq_turbo": null,
"cores": 8,
"threads": 16,
"created_at": "2023-06-01T11:32:38.000000Z",
"updated_at": "2023-06-01T11:32:38.000000Z",
"vendor": "Intel",
"generation": {
"id": "xeon",
"label": "Xeon"
},
"short_name": "W-2145"
},
"benchmark": 18292,
"memory": 128,
"disksize": 960,
"diskcount": 1,
"disktype": {
"rotational": false,
"type": "ssd"
},
"disktags": [
"dc",
"ssd",
"ecc",
"inic"
],
"datacenter": "FSN1-DC20",
"networkspeed": 1000,
"price": 83.99,
"setup": 10,
"internal": 6866.299999999999,
"discount": null,
"pf": {
"start": 83.99,
"perMemory": 0.43744791666666666,
"perDisk": 0.08748958333333333,
"perCpu": 0.19997619047619047,
"perBench": 0.004591624753990815,
"sum": 0.73
},
"windows": true,
"extra": {
"special_offer": false
},
"original": {
"id": 2350389,
"name": "Server Auction",
"description": [
"Intel Xeon W-2145",
"4x RAM 32768 MB DDR4 ECC reg.",
"1x SSD SATA 960 GB Datacenter",
"NIC 1 Gbit - Intel I210"
],
"traffic": "unlimited",
"dist": [
"Rescue system"
],
"arch": [
64
],
"lang": [
"en"
],
"cpu": "Intel Xeon W-2145",
"cpu_benchmark": 18292,
"memory_size": 128,
"hdd_size": 960,
"hdd_text": "DC SSD ECC INIC",
"hdd_count": 1,
"datacenter": "FSN1-DC20",
"network_speed": "1 Gbit/s",
"price": "56.0000",
"price_hourly": "0.0897",
"price_setup": "0.0000",
"price_vat": "66.6400",
"price_hourly_vat": "0.1067",
"price_setup_vat": "0.0000",
"fixed_price": false,
"next_reduce": 11243,
"next_reduce_date": "2024-04-14 08:04:00",
"orderable_addons": [
{
"id": "primary_ipv4",
"name": "Primary IPv4",
"min": 0,
"max": 1,
"prices": [
{
"location": "FSN1",
"price": {
"net": "1.7000",
"gross": "2.0230",
"hourly_net": "0.0027",
"hourly_gross": "0.0032"
},
"price_setup": {
"net": "0.0000",
"gross": "0.0000"
}
}
]
}
]
}
},
"amd": {
"serverid": 2354766,
"recommendation": false,
"vendor": "amd",
"hardwareid": "amd-ryzen-7-pro-1700x-4x-ram-16384-mb-ddr4-2x-ssd-sata-512-gb",
"description": [
"AMD Ryzen 7 PRO 1700X",
"4x RAM 16384 MB DDR4",
"2x SSD SATA 512 GB"
],
"cpu": "Ryzen 7 PRO 1700X",
"cpu_info": {
"id": 80,
"cpu_name": "amd Ryzen 7 PRO 1700X",
"frq": 3.4,
"frq_turbo": null,
"cores": 8,
"threads": 16,
"created_at": "2023-06-01T11:31:30.000000Z",
"updated_at": "2023-06-01T11:31:30.000000Z",
"vendor": "AMD",
"generation": {
"id": "ryzen",
"label": "Ryzen"
},
"short_name": "7 PRO 1700X"
},
"benchmark": 15398,
"memory": 64,
"disksize": 1024,
"diskcount": 2,
"disktype": {
"rotational": false,
"type": "ssd"
},
"disktags": [
"ssd"
],
"datacenter": "FSN1-DC14",
"networkspeed": 1000,
"price": 58.99,
"setup": 10,
"internal": 4367.3,
"discount": null,
"pf": {
"start": 58.99,
"perMemory": 0.6144791666666667,
"perDisk": 0.057607421875,
"perCpu": 0.15125641025641026,
"perBench": 0.003831017015196779,
"sum": 0.83
},
"windows": true,
"extra": {
"special_offer": false
},
"original": {
"id": 2354766,
"name": "Server Auction",
"description": [
"AMD Ryzen 7 PRO 1700X",
"4x RAM 16384 MB DDR4",
"2x SSD SATA 512 GB"
],
"traffic": "unlimited",
"dist": [
"Rescue system"
],
"arch": [
64
],
"lang": [
"en"
],
"cpu": "AMD Ryzen 7 PRO 1700X",
"cpu_benchmark": 15398,
"memory_size": 64,
"hdd_size": 512,
"hdd_text": "SSD",
"hdd_count": 2,
"datacenter": "FSN1-DC14",
"network_speed": "1 Gbit/s",
"price": "35.0000",
"price_hourly": "0.0561",
"price_setup": "0.0000",
"price_vat": "41.6500",
"price_hourly_vat": "0.0668",
"price_setup_vat": "0.0000",
"fixed_price": false,
"next_reduce": 24131,
"next_reduce_date": "2024-04-14 11:39:00",
"orderable_addons": [
{
"id": "primary_ipv4",
"name": "Primary IPv4",
"min": 0,
"max": 1,
"prices": [
{
"location": "FSN1",
"price": {
"net": "1.7000",
"gross": "2.0230",
"hourly_net": "0.0027",
"hourly_gross": "0.0032"
},
"price_setup": {
"net": "0.0000",
"gross": "0.0000"
}
}
]
}
]
}
},
"space": {
"serverid": 2271507,
"recommendation": false,
"vendor": "intel",
"hardwareid": "intel-core-i7-6700-2x-ram-16384-mb-ddr4-2x-hdd-sata-40-tb-enterprise-nic-1-gbit-intel-i219-lm",
"description": [
"Intel Core i7-6700",
"2x RAM 16384 MB DDR4",
"2x HDD SATA 4,0 TB Enterprise",
"NIC 1 Gbit - Intel I219-LM"
],
"cpu": "Core i7-6700",
"cpu_info": {
"id": 68,
"cpu_name": "intel Core i7-6700",
"frq": 3.4,
"frq_turbo": null,
"cores": 4,
"threads": 8,
"created_at": "2023-06-01T11:29:50.000000Z",
"updated_at": "2023-06-01T11:29:50.000000Z",
"vendor": "Intel",
"generation": {
"id": "core",
"label": "Core"
},
"short_name": "i7-6700"
},
"benchmark": 8048,
"memory": 32,
"disksize": 8192,
"diskcount": 2,
"disktype": {
"rotational": true,
"type": "hdd"
},
"disktags": [
"ent.hdd",
"inic"
],
"datacenter": "FSN1-DC13",
"networkspeed": 1000,
"price": 51.99,
"setup": 10,
"internal": 3653.3,
"discount": null,
"pf": {
"start": 51.99,
"perMemory": 1.0831250000000001,
"perDisk": 0.006346435546875,
"perCpu": 0.13330769230769232,
"perBench": 0.006459990059642148,
"sum": 1.23
},
"windows": true,
"extra": {
"special_offer": false
},
"original": {
"id": 2271507,
"name": "Server Auction",
"description": [
"Intel Core i7-6700",
"2x RAM 16384 MB DDR4",
"2x HDD SATA 4,0 TB Enterprise",
"NIC 1 Gbit - Intel I219-LM"
],
"traffic": "unlimited",
"dist": [
"Rescue system"
],
"arch": [
64
],
"lang": [
"en"
],
"cpu": "Intel Core i7-6700",
"cpu_benchmark": 8048,
"memory_size": 32,
"hdd_size": 4096,
"hdd_text": "ENT.HDD INIC",
"hdd_count": 2,
"datacenter": "FSN1-DC13",
"network_speed": "1 Gbit/s",
"price": "29.0000",
"price_hourly": "0.0465",
"price_setup": "0.0000",
"price_vat": "34.5100",
"price_hourly_vat": "0.0553",
"price_setup_vat": "0.0000",
"fixed_price": true,
"next_reduce": 0,
"next_reduce_date": "null",
"orderable_addons": [
{
"id": "primary_ipv4",
"name": "Primary IPv4",
"min": 0,
"max": 1,
"prices": [
{
"location": "FSN1",
"price": {
"net": "1.7000",
"gross": "2.0230",
"hourly_net": "0.0027",
"hourly_gross": "0.0032"
},
"price_setup": {
"net": "0.0000",
"gross": "0.0000"
}
}
]
}
]
}
}
}
}
Received response:
Request failed with error:
Domains
WHOIS servers
Returns a list of TLDs and their whois servers
Example request:
curl --request GET \
--get "https://api.pph.sh/public/domains/whois-servers?tld=de" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/public/domains/whois-servers"
);
const params = {
"tld": "de",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: max-age=120, public
content-type: application/json
access-control-allow-origin: *
{
"data": {
"servers": [
{
"tld": "de",
"whois": "whois.denic.de"
}
]
},
"success": true
}
Received response:
Request failed with error:
Get a single tld info
Example request:
curl --request GET \
--get "https://api.pph.sh/public/domains/tld-info/de" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/public/domains/tld-info/de"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: max-age=120, public
content-type: application/json
access-control-allow-origin: *
{
"data": {
"tld": "de",
"type": "country-code",
"year": "1986",
"manager": "DENIC eG",
"categories": [
"Länder"
],
"pricing": {
"register": 3.99,
"transfer": 3.99,
"renew": 3.99,
"restore": 21.99,
"default": {
"register": 3.99,
"transfer": 3.99,
"renew": 3.99
}
}
}
}
Received response:
Request failed with error:
Available TLDs
Returns a list of available top level domains
Example request:
curl --request GET \
--get "https://api.pph.sh/public/domains/extensions" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/public/domains/extensions"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
{
"data": [
{
"extension": ".de",
"tag": "hot",
"pricing": {
"register": 8.99,
"renew": 8.99,
"transfer": 8.99
},
"details": {
"type": "country-code",
"year": "1986",
"manager": "DENIC eG",
"categories": [
"Länder"
]
}
}
]
}
Received response:
Request failed with error:
Specific TLD info
Returns a list of available top level domains
Example request:
curl --request GET \
--get "https://api.pph.sh/public/domains/extensions/de" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/public/domains/extensions/de"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: max-age=120, public
content-type: application/json
access-control-allow-origin: *
{
"data": {
"extension": ".de",
"tag": "",
"pricing": {
"register": 3.99,
"renew": 3.99,
"transfer": 3.99
},
"popularity": 0,
"details": {
"type": "country-code",
"year": "1986",
"manager": "DENIC eG",
"categories": [
"Länder"
]
}
}
}
Received response:
Request failed with error:
Domain search
Returns simple information about a domain inquiry
Example request:
curl --request GET \
--get "https://api.pph.sh/public/domains/search?query=domain.com&page=1" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/public/domains/search"
);
const params = {
"query": "domain.com",
"page": "1",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: max-age=120, no-cache, public
content-type: application/json
x-ratelimit-limit: 10
x-ratelimit-remaining: 8
access-control-allow-origin: *
{
"data": {
"query": "domain.com",
"tld": "com",
"sld": "domain",
"list": [
{
"tld": "com",
"sld": "domain",
"name": "domain.com",
"highlight": "1",
"tag": "",
"availability": "https://api.pph.sh/public/domains/check?query=domain.com&hash=d86cc5f9a385001fe940f31ef0d1423d&u=f528764d624db129b32c21fbca0cb8d6",
"info": {
"type": "generic",
"year": "1985",
"manager": "VeriSign Global Registry Services",
"categories": [
"Generisch"
]
}
},
{
"tld": "de",
"sld": "domain",
"name": "domain.de",
"highlight": "1",
"tag": "",
"availability": "https://api.pph.sh/public/domains/check?query=domain.de&hash=3c7866fdbb5884996cc9a891f5fb2fe2&u=f528764d624db129b32c21fbca0cb8d6",
"info": {
"type": "country-code",
"year": "1986",
"manager": "DENIC eG",
"categories": [
"Länder"
]
}
},
{
"tld": "eu",
"sld": "domain",
"name": "domain.eu",
"highlight": "1",
"tag": "",
"availability": "https://api.pph.sh/public/domains/check?query=domain.eu&hash=87052ec82e01c4528f7afe89c733e48c&u=f528764d624db129b32c21fbca0cb8d6",
"info": {
"type": "country-code",
"year": "2005",
"manager": "EURid vzw/asbl",
"categories": [
"Regional, Kulturell"
]
}
},
{
"tld": "me",
"sld": "domain",
"name": "domain.me",
"highlight": "1",
"tag": "",
"availability": "https://api.pph.sh/public/domains/check?query=domain.me&hash=7184d130c2d1c9abdd791707f49c5e74&u=f528764d624db129b32c21fbca0cb8d6",
"info": {
"type": "country-code",
"year": "2007",
"manager": "Government of Montenegro",
"categories": [
"Länder"
]
}
},
{
"tld": "dev",
"sld": "domain",
"name": "domain.dev",
"highlight": "1",
"tag": "hot",
"availability": "https://api.pph.sh/public/domains/check?query=domain.dev&hash=cbac9be424a11c0f7dfaf3f5beab7392&u=f528764d624db129b32c21fbca0cb8d6",
"info": {
"type": "generic",
"year": "2014",
"manager": "Charleston Road Registry Inc.",
"categories": [
"Organisationen"
]
}
},
{
"tld": "xyz",
"sld": "domain",
"name": "domain.xyz",
"highlight": "1",
"tag": "",
"availability": "https://api.pph.sh/public/domains/check?query=domain.xyz&hash=aeea388d7497d3c4bdcef9a032958328&u=f528764d624db129b32c21fbca0cb8d6",
"info": {
"type": "generic",
"year": "2014",
"manager": "XYZ.COM LLC",
"categories": [
"Verschiedenes"
]
}
},
{
"tld": "io",
"sld": "domain",
"name": "domain.io",
"highlight": "1",
"tag": "hot",
"availability": "https://api.pph.sh/public/domains/check?query=domain.io&hash=7bd05b1327fbf48d592a48539d51af91&u=f528764d624db129b32c21fbca0cb8d6",
"info": {
"type": "country-code",
"year": "1997",
"manager": "Internet Computer Bureau Limited",
"categories": [
"Internet",
"Länder"
]
}
},
{
"tld": "net",
"sld": "domain",
"name": "domain.net",
"highlight": "1",
"tag": "",
"availability": "https://api.pph.sh/public/domains/check?query=domain.net&hash=a970d373ffc9bdb353de5b6e78ba170e&u=f528764d624db129b32c21fbca0cb8d6",
"info": {
"type": "generic",
"year": "1985",
"manager": "VeriSign Global Registry Services",
"categories": [
"Generisch"
]
}
},
{
"tld": "network",
"sld": "domain",
"name": "domain.network",
"highlight": "1",
"tag": "",
"availability": "https://api.pph.sh/public/domains/check?query=domain.network&hash=f0011ed0c11209cf09e31e3487effa11&u=f528764d624db129b32c21fbca0cb8d6",
"info": {
"type": "generic",
"year": "2014",
"manager": "Binky Moon, LLC",
"categories": [
"Business",
"Community",
"Social & Lifestyle",
"Technologie",
"Internet"
]
}
},
{
"tld": "shop",
"sld": "domain",
"name": "domain.shop",
"highlight": "1",
"tag": "",
"availability": "https://api.pph.sh/public/domains/check?query=domain.shop&hash=485fd837c88df04c968475247ccf38a4&u=f528764d624db129b32c21fbca0cb8d6",
"info": {
"type": "generic",
"year": "2016",
"manager": "GMO Registry, Inc.",
"categories": [
"Kommerziell"
]
}
},
{
"tld": "org",
"sld": "domain",
"name": "domain.org",
"highlight": "1",
"tag": "",
"availability": "https://api.pph.sh/public/domains/check?query=domain.org&hash=6f2816ea63ed4b3762ec982373fbab47&u=f528764d624db129b32c21fbca0cb8d6",
"info": {
"type": "generic",
"year": "1985",
"manager": "Public Interest Registry (PIR)",
"categories": [
"Generisch"
]
}
},
{
"tld": "at",
"sld": "domain",
"name": "domain.at",
"highlight": "1",
"tag": "",
"availability": "https://api.pph.sh/public/domains/check?query=domain.at&hash=54fc68445111b63980c31fc205359a85&u=f528764d624db129b32c21fbca0cb8d6",
"info": {
"type": "country-code",
"year": "1988",
"manager": "nic.at GmbH",
"categories": [
"Länder"
]
}
},
{
"tld": "ch",
"sld": "domain",
"name": "domain.ch",
"highlight": "1",
"tag": "",
"availability": "https://api.pph.sh/public/domains/check?query=domain.ch&hash=5c72bbbe65e660d00b0b7e9e276edb5c&u=f528764d624db129b32c21fbca0cb8d6",
"info": {
"type": "country-code",
"year": "1987",
"manager": "SWITCH The Swiss Education & Research Network",
"categories": [
"Länder"
]
}
},
{
"tld": "tv",
"sld": "domain",
"name": "domain.tv",
"highlight": "1",
"tag": "",
"availability": "https://api.pph.sh/public/domains/check?query=domain.tv&hash=5c1ddfd306cdf44cad89945f37b94c98&u=f528764d624db129b32c21fbca0cb8d6",
"info": {
"type": "country-code",
"year": "1996",
"manager": "Ministry of Finance and Tourism",
"categories": [
"Medien, Art, Musik",
"Länder"
]
}
},
{
"tld": "business",
"sld": "domain",
"name": "domain.business",
"highlight": "1",
"tag": "",
"availability": "https://api.pph.sh/public/domains/check?query=domain.business&hash=26aff09cf2675e0085ded72dea8f1a25&u=f528764d624db129b32c21fbca0cb8d6",
"info": {
"type": "generic",
"year": "2014",
"manager": "Binky Moon, LLC",
"categories": [
"Business"
]
}
},
{
"tld": "info",
"sld": "domain",
"name": "domain.info",
"highlight": "1",
"tag": "",
"availability": "https://api.pph.sh/public/domains/check?query=domain.info&hash=8e3435b8c6aca7d6f2c0372e8e69cda4&u=f528764d624db129b32c21fbca0cb8d6",
"info": {
"type": "generic",
"year": "2001",
"manager": "Afilias Limited",
"categories": [
"Generisch"
]
}
}
]
},
"success": true
}
Received response:
Request failed with error:
Domain availability
Returns information about the availability of a single domain
Example request:
curl --request GET \
--get "https://api.pph.sh/public/domains/check?query=domain.com" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5" \
--data "{
\"query\": \"debitis\"
}"
const url = new URL(
"https://api.pph.sh/public/domains/check"
);
const params = {
"query": "domain.com",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
let body = {
"query": "debitis"
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (500):
Show headers
cache-control: max-age=120, must-revalidate, no-cache, no-store, public
content-type: application/json
x-error: 1
access-control-allow-origin: *
{
"data": {
"error": true,
"type": "Error",
"errors": "Call to a member function getQuery() on array",
"exception": true,
"url": "https://fsn-01.api.pph.sh/public/domains/check",
"message": "Call to a member function getQuery() on array",
"trace": "Error: Call to a member function getQuery() on array in /var/www/api/vendor/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php:23\nStack trace:\n#0 /var/www/api/vendor/laravel/framework/src/Illuminate/Http/Resources/DelegatesToResource.php(152): Illuminate\\Http\\Resources\\Json\\JsonResource->forwardCallTo()\n#1 /var/www/api/vendor/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php(23): Illuminate\\Http\\Resources\\Json\\JsonResource->__call()\n#2 /var/www/api/vendor/laravel/framework/src/Illuminate/Http/Resources/DelegatesToResource.php(152): Illuminate\\Http\\Resources\\Json\\JsonResource->forwardCallTo()\n#3 /var/www/api/app/Http/Resources/DomainAvailabilityResource.php(24): Illuminate\\Http\\Resources\\Json\\JsonResource->__call()\n#4 /var/www/api/vendor/laravel/framework/src/Illuminate/Http/Resources/Json/JsonResource.php(95): App\\Http\\Resources\\DomainAvailabilityResource->toArray()\n#5 /var/www/api/vendor/laravel/framework/src/Illuminate/Http/Resources/Json/ResourceResponse.php(39): Illuminate\\Http\\Resources\\Json\\JsonResource->resolve()\n#6 /var/www/api/vendor/laravel/framework/src/Illuminate/Http/Resources/Json/JsonResource.php(231): Illuminate\\Http\\Resources\\Json\\ResourceResponse->toResponse()\n#7 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(802): Illuminate\\Http\\Resources\\Json\\JsonResource->toResponse()\n#8 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(789): Illuminate\\Routing\\Router::toResponse()\n#9 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(721): Illuminate\\Routing\\Router->prepareResponse()\n#10 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}()\n#11 /var/www/api/vendor/laravel/framework/src/Illuminate/Http/Middleware/SetCacheHeaders.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#12 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Http\\Middleware\\SetCacheHeaders->handle()\n#13 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#14 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle()\n#15 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#16 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(723): Illuminate\\Pipeline\\Pipeline->then()\n#17 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(698): Illuminate\\Routing\\Router->runRouteWithinStack()\n#18 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(662): Illuminate\\Routing\\Router->runRoute()\n#19 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(651): Illuminate\\Routing\\Router->dispatchToRoute()\n#20 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(167): Illuminate\\Routing\\Router->dispatch()\n#21 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()\n#22 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#23 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()\n#24 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle()\n#25 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#26 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()\n#27 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()\n#28 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#29 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle()\n#30 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#31 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()\n#32 /var/www/api/vendor/fruitcake/laravel-cors/src/HandleCors.php(52): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#33 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fruitcake\\Cors\\HandleCors->handle()\n#34 /var/www/api/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#35 /var/www/api/app/Http/Middleware/TrustProxies.php(25): Fideloper\\Proxy\\TrustProxies->handle()\n#36 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\\Http\\Middleware\\TrustProxies->handle()\n#37 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#38 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(142): Illuminate\\Pipeline\\Pipeline->then()\n#39 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(111): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()\n#40 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(299): Illuminate\\Foundation\\Http\\Kernel->handle()\n#41 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(287): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->callLaravelOrLumenRoute()\n#42 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(89): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->makeApiCall()\n#43 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(45): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->makeResponseCall()\n#44 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(35): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->makeResponseCallIfConditionsPass()\n#45 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php(222): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->__invoke()\n#46 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php(179): Knuckles\\Scribe\\Extracting\\Extractor->iterateThroughStrategies()\n#47 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php(116): Knuckles\\Scribe\\Extracting\\Extractor->fetchResponses()\n#48 /var/www/api/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php(123): Knuckles\\Scribe\\Extracting\\Extractor->processRoute()\n#49 /var/www/api/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php(80): Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp->extractEndpointsInfoFromLaravelApp()\n#50 /var/www/api/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php(56): Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp->extractEndpointsInfoAndWriteToDisk()\n#51 /var/www/api/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php(55): Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp->get()\n#52 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Knuckles\\Scribe\\Commands\\GenerateDocumentation->handle()\n#53 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/Util.php(40): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()\n#54 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(93): Illuminate\\Container\\Util::unwrapIfClosure()\n#55 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(37): Illuminate\\Container\\BoundMethod::callBoundMethod()\n#56 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/Container.php(653): Illuminate\\Container\\BoundMethod::call()\n#57 /var/www/api/vendor/laravel/framework/src/Illuminate/Console/Command.php(136): Illuminate\\Container\\Container->call()\n#58 /var/www/api/vendor/symfony/console/Command/Command.php(298): Illuminate\\Console\\Command->execute()\n#59 /var/www/api/vendor/laravel/framework/src/Illuminate/Console/Command.php(121): Symfony\\Component\\Console\\Command\\Command->run()\n#60 /var/www/api/vendor/symfony/console/Application.php(1028): Illuminate\\Console\\Command->run()\n#61 /var/www/api/vendor/symfony/console/Application.php(299): Symfony\\Component\\Console\\Application->doRunCommand()\n#62 /var/www/api/vendor/symfony/console/Application.php(171): Symfony\\Component\\Console\\Application->doRun()\n#63 /var/www/api/vendor/laravel/framework/src/Illuminate/Console/Application.php(94): Symfony\\Component\\Console\\Application->run()\n#64 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(129): Illuminate\\Console\\Application->run()\n#65 /var/www/api/artisan(37): Illuminate\\Foundation\\Console\\Kernel->handle()\n#66 {main}"
}
}
Received response:
Request failed with error:
GET public/domains/records
Example request:
curl --request GET \
--get "https://api.pph.sh/public/domains/records" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5" \
--data "{
\"domain\": \"iste\"
}"
const url = new URL(
"https://api.pph.sh/public/domains/records"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
let body = {
"domain": "iste"
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (500):
Show headers
cache-control: max-age=120, must-revalidate, no-cache, no-store, public
content-type: application/json
x-error: 1
access-control-allow-origin: *
{
"data": {
"error": true,
"type": "RuntimeException",
"url": "https://fsn-01.api.pph.sh/public/domains/records",
"message": "Unable to find nameserver for iste",
"trace": "RuntimeException: Unable to find nameserver for iste in /var/www/api/app/Api/Domain/AutoImport/DomainRecordFinder.php:41\nStack trace:\n#0 /var/www/api/app/Api/Domain/AutoImport/DomainRecordFinder.php(22): App\\Api\\Domain\\AutoImport\\DomainRecordFinder::getDefaultNameserver()\n#1 /var/www/api/app/Http/Controllers/DomainInfoApiController.php(318): App\\Api\\Domain\\AutoImport\\DomainRecordFinder::create()\n#2 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): App\\Http\\Controllers\\DomainInfoApiController->guessRecords()\n#3 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\\Routing\\Controller->callAction()\n#4 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Route.php(262): Illuminate\\Routing\\ControllerDispatcher->dispatch()\n#5 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\\Routing\\Route->runController()\n#6 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(721): Illuminate\\Routing\\Route->run()\n#7 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}()\n#8 /var/www/api/vendor/laravel/framework/src/Illuminate/Http/Middleware/SetCacheHeaders.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#9 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Http\\Middleware\\SetCacheHeaders->handle()\n#10 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#11 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle()\n#12 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#13 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(723): Illuminate\\Pipeline\\Pipeline->then()\n#14 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(698): Illuminate\\Routing\\Router->runRouteWithinStack()\n#15 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(662): Illuminate\\Routing\\Router->runRoute()\n#16 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(651): Illuminate\\Routing\\Router->dispatchToRoute()\n#17 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(167): Illuminate\\Routing\\Router->dispatch()\n#18 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()\n#19 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#20 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()\n#21 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle()\n#22 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#23 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()\n#24 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()\n#25 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#26 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle()\n#27 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#28 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()\n#29 /var/www/api/vendor/fruitcake/laravel-cors/src/HandleCors.php(52): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#30 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fruitcake\\Cors\\HandleCors->handle()\n#31 /var/www/api/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#32 /var/www/api/app/Http/Middleware/TrustProxies.php(25): Fideloper\\Proxy\\TrustProxies->handle()\n#33 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\\Http\\Middleware\\TrustProxies->handle()\n#34 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#35 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(142): Illuminate\\Pipeline\\Pipeline->then()\n#36 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(111): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()\n#37 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(299): Illuminate\\Foundation\\Http\\Kernel->handle()\n#38 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(287): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->callLaravelOrLumenRoute()\n#39 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(89): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->makeApiCall()\n#40 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(45): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->makeResponseCall()\n#41 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(35): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->makeResponseCallIfConditionsPass()\n#42 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php(222): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->__invoke()\n#43 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php(179): Knuckles\\Scribe\\Extracting\\Extractor->iterateThroughStrategies()\n#44 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php(116): Knuckles\\Scribe\\Extracting\\Extractor->fetchResponses()\n#45 /var/www/api/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php(123): Knuckles\\Scribe\\Extracting\\Extractor->processRoute()\n#46 /var/www/api/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php(80): Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp->extractEndpointsInfoFromLaravelApp()\n#47 /var/www/api/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php(56): Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp->extractEndpointsInfoAndWriteToDisk()\n#48 /var/www/api/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php(55): Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp->get()\n#49 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Knuckles\\Scribe\\Commands\\GenerateDocumentation->handle()\n#50 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/Util.php(40): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()\n#51 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(93): Illuminate\\Container\\Util::unwrapIfClosure()\n#52 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(37): Illuminate\\Container\\BoundMethod::callBoundMethod()\n#53 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/Container.php(653): Illuminate\\Container\\BoundMethod::call()\n#54 /var/www/api/vendor/laravel/framework/src/Illuminate/Console/Command.php(136): Illuminate\\Container\\Container->call()\n#55 /var/www/api/vendor/symfony/console/Command/Command.php(298): Illuminate\\Console\\Command->execute()\n#56 /var/www/api/vendor/laravel/framework/src/Illuminate/Console/Command.php(121): Symfony\\Component\\Console\\Command\\Command->run()\n#57 /var/www/api/vendor/symfony/console/Application.php(1028): Illuminate\\Console\\Command->run()\n#58 /var/www/api/vendor/symfony/console/Application.php(299): Symfony\\Component\\Console\\Application->doRunCommand()\n#59 /var/www/api/vendor/symfony/console/Application.php(171): Symfony\\Component\\Console\\Application->doRun()\n#60 /var/www/api/vendor/laravel/framework/src/Illuminate/Console/Application.php(94): Symfony\\Component\\Console\\Application->run()\n#61 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(129): Illuminate\\Console\\Application->run()\n#62 /var/www/api/artisan(37): Illuminate\\Foundation\\Console\\Kernel->handle()\n#63 {main}"
}
}
Received response:
Request failed with error:
GET public/domains/info/{domainName}
Example request:
curl --request GET \
--get "https://api.pph.sh/public/domains/info/corporis" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/public/domains/info/corporis"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (500):
Show headers
cache-control: max-age=120, must-revalidate, no-cache, no-store, public
content-type: application/json
x-error: 1
access-control-allow-origin: *
{
"data": {
"error": true,
"type": "ErrorException",
"url": "https://fsn-01.api.pph.sh/public/domains/info/corporis",
"message": "fsockopen(): php_network_getaddresses: getaddrinfo for failed: Name or service not known",
"trace": "ErrorException: fsockopen(): php_network_getaddresses: getaddrinfo for failed: Name or service not known in /var/www/api/vendor/purplepixie/phpdns/src/PurplePixie/PhpDns/DNSQuery.php:433\nStack trace:\n#0 [internal function]: Illuminate\\Foundation\\Bootstrap\\HandleExceptions->handleError()\n#1 /var/www/api/vendor/purplepixie/phpdns/src/PurplePixie/PhpDns/DNSQuery.php(433): fsockopen()\n#2 /var/www/api/app/Http/Controllers/DomainInfoApiController.php(364): PurplePixie\\PhpDns\\DNSQuery->query()\n#3 /var/www/api/app/Http/Controllers/DomainInfoApiController.php(368): App\\Http\\Controllers\\DomainInfoApiController->App\\Http\\Controllers\\{closure}()\n#4 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): App\\Http\\Controllers\\DomainInfoApiController->domainInfo()\n#5 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\\Routing\\Controller->callAction()\n#6 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Route.php(262): Illuminate\\Routing\\ControllerDispatcher->dispatch()\n#7 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\\Routing\\Route->runController()\n#8 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(721): Illuminate\\Routing\\Route->run()\n#9 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}()\n#10 /var/www/api/vendor/laravel/framework/src/Illuminate/Http/Middleware/SetCacheHeaders.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#11 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Http\\Middleware\\SetCacheHeaders->handle()\n#12 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#13 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle()\n#14 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#15 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(723): Illuminate\\Pipeline\\Pipeline->then()\n#16 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(698): Illuminate\\Routing\\Router->runRouteWithinStack()\n#17 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(662): Illuminate\\Routing\\Router->runRoute()\n#18 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(651): Illuminate\\Routing\\Router->dispatchToRoute()\n#19 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(167): Illuminate\\Routing\\Router->dispatch()\n#20 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()\n#21 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#22 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()\n#23 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle()\n#24 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#25 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()\n#26 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()\n#27 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#28 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle()\n#29 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#30 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()\n#31 /var/www/api/vendor/fruitcake/laravel-cors/src/HandleCors.php(52): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#32 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fruitcake\\Cors\\HandleCors->handle()\n#33 /var/www/api/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#34 /var/www/api/app/Http/Middleware/TrustProxies.php(25): Fideloper\\Proxy\\TrustProxies->handle()\n#35 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\\Http\\Middleware\\TrustProxies->handle()\n#36 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#37 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(142): Illuminate\\Pipeline\\Pipeline->then()\n#38 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(111): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()\n#39 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(299): Illuminate\\Foundation\\Http\\Kernel->handle()\n#40 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(287): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->callLaravelOrLumenRoute()\n#41 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(89): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->makeApiCall()\n#42 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(45): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->makeResponseCall()\n#43 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(35): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->makeResponseCallIfConditionsPass()\n#44 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php(222): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->__invoke()\n#45 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php(179): Knuckles\\Scribe\\Extracting\\Extractor->iterateThroughStrategies()\n#46 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php(116): Knuckles\\Scribe\\Extracting\\Extractor->fetchResponses()\n#47 /var/www/api/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php(123): Knuckles\\Scribe\\Extracting\\Extractor->processRoute()\n#48 /var/www/api/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php(80): Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp->extractEndpointsInfoFromLaravelApp()\n#49 /var/www/api/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php(56): Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp->extractEndpointsInfoAndWriteToDisk()\n#50 /var/www/api/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php(55): Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp->get()\n#51 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Knuckles\\Scribe\\Commands\\GenerateDocumentation->handle()\n#52 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/Util.php(40): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()\n#53 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(93): Illuminate\\Container\\Util::unwrapIfClosure()\n#54 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(37): Illuminate\\Container\\BoundMethod::callBoundMethod()\n#55 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/Container.php(653): Illuminate\\Container\\BoundMethod::call()\n#56 /var/www/api/vendor/laravel/framework/src/Illuminate/Console/Command.php(136): Illuminate\\Container\\Container->call()\n#57 /var/www/api/vendor/symfony/console/Command/Command.php(298): Illuminate\\Console\\Command->execute()\n#58 /var/www/api/vendor/laravel/framework/src/Illuminate/Console/Command.php(121): Symfony\\Component\\Console\\Command\\Command->run()\n#59 /var/www/api/vendor/symfony/console/Application.php(1028): Illuminate\\Console\\Command->run()\n#60 /var/www/api/vendor/symfony/console/Application.php(299): Symfony\\Component\\Console\\Application->doRunCommand()\n#61 /var/www/api/vendor/symfony/console/Application.php(171): Symfony\\Component\\Console\\Application->doRun()\n#62 /var/www/api/vendor/laravel/framework/src/Illuminate/Console/Application.php(94): Symfony\\Component\\Console\\Application->run()\n#63 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(129): Illuminate\\Console\\Application->run()\n#64 /var/www/api/artisan(37): Illuminate\\Foundation\\Console\\Kernel->handle()\n#65 {main}"
}
}
Received response:
Request failed with error:
GET public/domains/internal-pricing/sync
Example request:
curl --request GET \
--get "https://api.pph.sh/public/domains/internal-pricing/sync" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/public/domains/internal-pricing/sync"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (403):
Show headers
cache-control: max-age=120, must-revalidate, no-cache, no-store, public
content-type: application/json
x-error: 1
access-control-allow-origin: *
{
"data": {
"error": true,
"type": "*",
"message": "No internal key was specified",
"url": "https://fsn-01.api.pph.sh/public/domains/internal-pricing/sync"
}
}
Received response:
Request failed with error:
POST public/domains/internal-pricing/set
Example request:
curl --request POST \
"https://api.pph.sh/public/domains/internal-pricing/set" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/public/domains/internal-pricing/set"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
Endpoints
GET client/hosting/{hosting_id}/ddos
Example request:
curl --request GET \
--get "https://api.pph.sh/client/hosting/52/ddos" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/hosting/52/ddos"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": [],
"links": {
"first": "https://fsn-01.api.pph.sh/client/hosting/43651/ddos?page=1",
"last": "https://fsn-01.api.pph.sh/client/hosting/43651/ddos?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": null,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"active": false
},
{
"url": "https://fsn-01.api.pph.sh/client/hosting/43651/ddos?page=1",
"label": "1",
"active": true
},
{
"url": null,
"label": "Next »",
"active": false
}
],
"path": "https://fsn-01.api.pph.sh/client/hosting/43651/ddos",
"per_page": 15,
"to": null,
"total": 0
},
"minutes_sum": 0,
"ongoing": false
}
Received response:
Request failed with error:
GET client/hostings/{hosting_id}/server/security
Example request:
curl --request GET \
--get "https://api.pph.sh/client/hostings/52/server/security" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/hostings/52/server/security"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": []
}
Received response:
Request failed with error:
POST client/hostings/{hosting_id}/server/security
Example request:
curl --request POST \
"https://api.pph.sh/client/hostings/52/server/security" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/hostings/52/server/security"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
GET public/stats/tickets
Example request:
curl --request GET \
--get "https://api.pph.sh/public/stats/tickets" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/public/stats/tickets"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: max-age=120, public
content-type: application/json
access-control-allow-origin: *
{
"data": {
"tickets": 223,
"first": {
"min": 0.45,
"max": 3966.4666666666667,
"average": 26,
"unit": "minutes"
},
"last": {
"min": 0.45,
"max": 16891.033333333333,
"average": 74,
"unit": "minutes"
},
"text": {
"per_day": "7 Tickets pro Tag",
"first_answer": "36% in unter 10 Min.",
"resolve_time": "74 Minuten nach Eröffnung des Tickets",
"start": "14.03.2024",
"end": "14.04.2024"
},
"date": "2024-04-14 05:01:36",
"previous": {
"text": {
"per_day": "7 Tickets pro Tag",
"first_answer": "34% in unter 10 Min.",
"resolve_time": "97 Minuten nach Eröffnung des Tickets",
"start": "12.02.2024",
"end": "14.03.2024"
}
}
}
}
Received response:
Request failed with error:
GET client/hostings/{hostingId}/virtual-server/capture
Example request:
curl --request GET \
--get "https://api.pph.sh/client/hostings/43651/virtual-server/capture" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/hostings/43651/virtual-server/capture"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (401):
Show headers
cache-control: must-revalidate, no-cache, no-store, private
content-type: application/json
x-error: 1
access-control-allow-origin: *
{
"data": {
"error": true,
"type": "HttpException",
"url": "https://fsn-01.api.pph.sh/client/hostings/43651/virtual-server/capture",
"code": 401,
"message": "Unauthorized",
"trace": "Symfony\\Component\\HttpKernel\\Exception\\HttpException: Unauthorized in /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:1132\nStack trace:\n#0 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php(44): Illuminate\\Foundation\\Application->abort()\n#1 /var/www/api/app/Providers/AuthServiceProvider.php(117): abort()\n#2 /var/www/api/app/Providers/AuthServiceProvider.php(64): App\\Providers\\AuthServiceProvider->abortUnauthorized()\n#3 [internal function]: App\\Providers\\AuthServiceProvider->App\\Providers\\{closure}()\n#4 /var/www/api/vendor/laravel/framework/src/Illuminate/Auth/RequestGuard.php(58): call_user_func()\n#5 /var/www/api/vendor/laravel/framework/src/Illuminate/Auth/GuardHelpers.php(60): Illuminate\\Auth\\RequestGuard->user()\n#6 /var/www/api/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php(63): Illuminate\\Auth\\RequestGuard->check()\n#7 /var/www/api/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php(42): Illuminate\\Auth\\Middleware\\Authenticate->authenticate()\n#8 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Auth\\Middleware\\Authenticate->handle()\n#9 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#10 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(723): Illuminate\\Pipeline\\Pipeline->then()\n#11 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(698): Illuminate\\Routing\\Router->runRouteWithinStack()\n#12 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(662): Illuminate\\Routing\\Router->runRoute()\n#13 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(651): Illuminate\\Routing\\Router->dispatchToRoute()\n#14 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(167): Illuminate\\Routing\\Router->dispatch()\n#15 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()\n#16 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#17 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()\n#18 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle()\n#19 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#20 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()\n#21 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()\n#22 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#23 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle()\n#24 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#25 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()\n#26 /var/www/api/vendor/fruitcake/laravel-cors/src/HandleCors.php(52): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#27 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fruitcake\\Cors\\HandleCors->handle()\n#28 /var/www/api/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#29 /var/www/api/app/Http/Middleware/TrustProxies.php(25): Fideloper\\Proxy\\TrustProxies->handle()\n#30 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\\Http\\Middleware\\TrustProxies->handle()\n#31 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#32 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(142): Illuminate\\Pipeline\\Pipeline->then()\n#33 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(111): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()\n#34 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(299): Illuminate\\Foundation\\Http\\Kernel->handle()\n#35 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(287): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->callLaravelOrLumenRoute()\n#36 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(89): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->makeApiCall()\n#37 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(45): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->makeResponseCall()\n#38 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(35): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->makeResponseCallIfConditionsPass()\n#39 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php(222): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->__invoke()\n#40 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php(179): Knuckles\\Scribe\\Extracting\\Extractor->iterateThroughStrategies()\n#41 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php(116): Knuckles\\Scribe\\Extracting\\Extractor->fetchResponses()\n#42 /var/www/api/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php(123): Knuckles\\Scribe\\Extracting\\Extractor->processRoute()\n#43 /var/www/api/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php(80): Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp->extractEndpointsInfoFromLaravelApp()\n#44 /var/www/api/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php(56): Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp->extractEndpointsInfoAndWriteToDisk()\n#45 /var/www/api/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php(55): Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp->get()\n#46 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Knuckles\\Scribe\\Commands\\GenerateDocumentation->handle()\n#47 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/Util.php(40): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()\n#48 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(93): Illuminate\\Container\\Util::unwrapIfClosure()\n#49 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(37): Illuminate\\Container\\BoundMethod::callBoundMethod()\n#50 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/Container.php(653): Illuminate\\Container\\BoundMethod::call()\n#51 /var/www/api/vendor/laravel/framework/src/Illuminate/Console/Command.php(136): Illuminate\\Container\\Container->call()\n#52 /var/www/api/vendor/symfony/console/Command/Command.php(298): Illuminate\\Console\\Command->execute()\n#53 /var/www/api/vendor/laravel/framework/src/Illuminate/Console/Command.php(121): Symfony\\Component\\Console\\Command\\Command->run()\n#54 /var/www/api/vendor/symfony/console/Application.php(1028): Illuminate\\Console\\Command->run()\n#55 /var/www/api/vendor/symfony/console/Application.php(299): Symfony\\Component\\Console\\Application->doRunCommand()\n#56 /var/www/api/vendor/symfony/console/Application.php(171): Symfony\\Component\\Console\\Application->doRun()\n#57 /var/www/api/vendor/laravel/framework/src/Illuminate/Console/Application.php(94): Symfony\\Component\\Console\\Application->run()\n#58 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(129): Illuminate\\Console\\Application->run()\n#59 /var/www/api/artisan(37): Illuminate\\Foundation\\Console\\Kernel->handle()\n#60 {main}"
}
}
Received response:
Request failed with error:
GET public/advertising/faq
Example request:
curl --request GET \
--get "https://api.pph.sh/public/advertising/faq" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/public/advertising/faq"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: private
content-type: application/json
access-control-allow-origin: *
[]
Received response:
Request failed with error:
GET public/advertising/web
Example request:
curl --request GET \
--get "https://api.pph.sh/public/advertising/web" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/public/advertising/web"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: private
content-type: application/json
access-control-allow-origin: *
[]
Received response:
Request failed with error:
GET client/paypal/subscriptions
Example request:
curl --request GET \
--get "https://api.pph.sh/client/paypal/subscriptions" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/paypal/subscriptions"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (401):
Show headers
cache-control: must-revalidate, no-cache, no-store, private
content-type: application/json
x-error: 1
access-control-allow-origin: *
{
"data": {
"error": true,
"type": "HttpException",
"url": "https://fsn-01.api.pph.sh/client/paypal/subscriptions",
"code": 401,
"message": "Unauthorized",
"trace": "Symfony\\Component\\HttpKernel\\Exception\\HttpException: Unauthorized in /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:1132\nStack trace:\n#0 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php(44): Illuminate\\Foundation\\Application->abort()\n#1 /var/www/api/app/Providers/AuthServiceProvider.php(117): abort()\n#2 /var/www/api/app/Providers/AuthServiceProvider.php(64): App\\Providers\\AuthServiceProvider->abortUnauthorized()\n#3 [internal function]: App\\Providers\\AuthServiceProvider->App\\Providers\\{closure}()\n#4 /var/www/api/vendor/laravel/framework/src/Illuminate/Auth/RequestGuard.php(58): call_user_func()\n#5 /var/www/api/vendor/laravel/framework/src/Illuminate/Auth/GuardHelpers.php(60): Illuminate\\Auth\\RequestGuard->user()\n#6 /var/www/api/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php(63): Illuminate\\Auth\\RequestGuard->check()\n#7 /var/www/api/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php(42): Illuminate\\Auth\\Middleware\\Authenticate->authenticate()\n#8 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Auth\\Middleware\\Authenticate->handle()\n#9 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#10 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(723): Illuminate\\Pipeline\\Pipeline->then()\n#11 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(698): Illuminate\\Routing\\Router->runRouteWithinStack()\n#12 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(662): Illuminate\\Routing\\Router->runRoute()\n#13 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(651): Illuminate\\Routing\\Router->dispatchToRoute()\n#14 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(167): Illuminate\\Routing\\Router->dispatch()\n#15 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()\n#16 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#17 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()\n#18 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle()\n#19 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#20 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()\n#21 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()\n#22 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#23 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle()\n#24 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#25 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()\n#26 /var/www/api/vendor/fruitcake/laravel-cors/src/HandleCors.php(52): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#27 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fruitcake\\Cors\\HandleCors->handle()\n#28 /var/www/api/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#29 /var/www/api/app/Http/Middleware/TrustProxies.php(25): Fideloper\\Proxy\\TrustProxies->handle()\n#30 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\\Http\\Middleware\\TrustProxies->handle()\n#31 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#32 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(142): Illuminate\\Pipeline\\Pipeline->then()\n#33 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(111): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()\n#34 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(299): Illuminate\\Foundation\\Http\\Kernel->handle()\n#35 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(287): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->callLaravelOrLumenRoute()\n#36 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(89): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->makeApiCall()\n#37 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(45): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->makeResponseCall()\n#38 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(35): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->makeResponseCallIfConditionsPass()\n#39 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php(222): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->__invoke()\n#40 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php(179): Knuckles\\Scribe\\Extracting\\Extractor->iterateThroughStrategies()\n#41 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php(116): Knuckles\\Scribe\\Extracting\\Extractor->fetchResponses()\n#42 /var/www/api/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php(123): Knuckles\\Scribe\\Extracting\\Extractor->processRoute()\n#43 /var/www/api/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php(80): Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp->extractEndpointsInfoFromLaravelApp()\n#44 /var/www/api/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php(56): Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp->extractEndpointsInfoAndWriteToDisk()\n#45 /var/www/api/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php(55): Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp->get()\n#46 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Knuckles\\Scribe\\Commands\\GenerateDocumentation->handle()\n#47 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/Util.php(40): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()\n#48 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(93): Illuminate\\Container\\Util::unwrapIfClosure()\n#49 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(37): Illuminate\\Container\\BoundMethod::callBoundMethod()\n#50 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/Container.php(653): Illuminate\\Container\\BoundMethod::call()\n#51 /var/www/api/vendor/laravel/framework/src/Illuminate/Console/Command.php(136): Illuminate\\Container\\Container->call()\n#52 /var/www/api/vendor/symfony/console/Command/Command.php(298): Illuminate\\Console\\Command->execute()\n#53 /var/www/api/vendor/laravel/framework/src/Illuminate/Console/Command.php(121): Symfony\\Component\\Console\\Command\\Command->run()\n#54 /var/www/api/vendor/symfony/console/Application.php(1028): Illuminate\\Console\\Command->run()\n#55 /var/www/api/vendor/symfony/console/Application.php(299): Symfony\\Component\\Console\\Application->doRunCommand()\n#56 /var/www/api/vendor/symfony/console/Application.php(171): Symfony\\Component\\Console\\Application->doRun()\n#57 /var/www/api/vendor/laravel/framework/src/Illuminate/Console/Application.php(94): Symfony\\Component\\Console\\Application->run()\n#58 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(129): Illuminate\\Console\\Application->run()\n#59 /var/www/api/artisan(37): Illuminate\\Foundation\\Console\\Kernel->handle()\n#60 {main}"
}
}
Received response:
Request failed with error:
GET client/pro
Example request:
curl --request GET \
--get "https://api.pph.sh/client/pro" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/pro"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": {
"credit": 7.68,
"status": true,
"category": "pro_lite",
"generation": 1,
"pro": [
{
"id": 44180,
"product_name": "Prepaid Hoster PRO (Gen 1)",
"product_group": "Prepaid-Hoster PRO",
"label": "",
"module": "pphpro",
"package_id": 304,
"order_id": 77817,
"ipaddress": "",
"description": [],
"active": true,
"suspended": false,
"domain": "54226-41003",
"status": "Active",
"billingcycle": "Monthly",
"has_invoices": true,
"has_unpaid_invoice": false,
"created_at": "2023-06-25T22:00:00.000000Z",
"next_due_date": "2024-10-25T22:00:00.000000Z",
"next_due_in": 194,
"next_due_human": "in 6 Mon.",
"amount": 6.49,
"firstpaymentamount": 6.49,
"cancellation": false,
"management_url": "https://api.pph.sh/client/routes?hosting=44180&tab=main",
"addons": []
}
],
"available_packages": [
"pro",
"pro_lite"
]
}
}
Received response:
Request failed with error:
POST client/pro/activate
Example request:
curl --request POST \
"https://api.pph.sh/client/pro/activate" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5" \
--data "{
\"pro_variant\": \"velit\",
\"billingCycle\": \"annually\"
}"
const url = new URL(
"https://api.pph.sh/client/pro/activate"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
let body = {
"pro_variant": "velit",
"billingCycle": "annually"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
GET public/product/{pid}/min-price
Example request:
curl --request GET \
--get "https://api.pph.sh/public/product/5316/min-price" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/public/product/5316/min-price"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"min": 0
}
Received response:
Request failed with error:
GET client/hostings/{hosting_id}/auto-update
Example request:
curl --request GET \
--get "https://api.pph.sh/client/hostings/52/auto-update" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/hostings/52/auto-update"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": {
"credit": 7.68,
"enabled": true,
"can_be_enabled": true,
"can_run_now": true,
"auto_update": {
"id": 32,
"hosting_id": 43651,
"last_started_at": "2024-04-13T20:40:22.000000Z",
"enabled": true,
"last_update": "2024-04-13T20:41:16.000000Z",
"created_at": "2023-05-26T09:07:38.000000Z",
"updated_at": "2024-04-13T20:41:16.000000Z"
},
"last_performed_update": {
"date": "07.04.2024 14:41",
"updates": 82
},
"last_check": "13.04.2024 22:40"
}
}
Received response:
Request failed with error:
POST client/hostings/{hosting_id}/auto-update/activate
Example request:
curl --request POST \
"https://api.pph.sh/client/hostings/52/auto-update/activate" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/hostings/52/auto-update/activate"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
POST client/hostings/{hosting_id}/auto-update/deactivate
Example request:
curl --request POST \
"https://api.pph.sh/client/hostings/52/auto-update/deactivate" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/hostings/52/auto-update/deactivate"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
POST client/hostings/{hosting_id}/auto-update/run
Example request:
curl --request POST \
"https://api.pph.sh/client/hostings/52/auto-update/run" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/hostings/52/auto-update/run"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
POST public/contact/cancellation
Example request:
curl --request POST \
"https://api.pph.sh/public/contact/cancellation" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5" \
--data "{
\"firstname\": \"corrupti\",
\"lastname\": \"qui\",
\"email\": \"rgreenfelder@example.org\",
\"client_number\": \"sapiente\",
\"order_number\": \"quam\",
\"cancellation_time\": \"end_of_billingperiod\"
}"
const url = new URL(
"https://api.pph.sh/public/contact/cancellation"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
let body = {
"firstname": "corrupti",
"lastname": "qui",
"email": "rgreenfelder@example.org",
"client_number": "sapiente",
"order_number": "quam",
"cancellation_time": "end_of_billingperiod"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
GET public/contact/channel/{channel}
Example request:
curl --request GET \
--get "https://api.pph.sh/public/contact/channel/autem" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/public/contact/channel/autem"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: max-age=120, public
content-type: application/json
access-control-allow-origin: *
[]
Received response:
Request failed with error:
GET public/virtualizor/backup/servers
Example request:
curl --request GET \
--get "https://api.pph.sh/public/virtualizor/backup/servers" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/public/virtualizor/backup/servers"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": [
{
"bsid": 8,
"country": "FIN"
},
{
"bsid": 9,
"country": "DE",
"default": true
}
]
}
Received response:
Request failed with error:
GET public/now
Example request:
curl --request GET \
--get "https://api.pph.sh/public/now" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/public/now"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"now": "2024-04-14T03:00:28.597394Z",
"format": "2024-04-14 05:00:28"
}
Received response:
Request failed with error:
GET public/products/gameservers/resources
Example request:
curl --request GET \
--get "https://api.pph.sh/public/products/gameservers/resources" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/public/products/gameservers/resources"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": [
{
"hostname": "virt-host121.kramer-hosting.de",
"live": {
"cpu": 16.54,
"vps": 11
},
"cores": {
"used": 30,
"max": 32,
"available": 2,
"percentage": 94
},
"memory": {
"used": 120,
"max": 128,
"available": 8,
"percentage": 94
},
"date": "14.04.2024 04:59:51"
}
]
}
Received response:
Request failed with error:
GET public/products/gameservers/comparison
Example request:
curl --request GET \
--get "https://api.pph.sh/public/products/gameservers/comparison" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/public/products/gameservers/comparison"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"1": "1 => 2",
"2": "2 => 4",
"3": "3 => 6",
"4": "4 => 8",
"5": "5 => 10",
"6": "6 => 11",
"7": "7 => 13",
"8": "8 => 15"
}
Received response:
Request failed with error:
Get the mode of the cloud manager configuration for a hosting.
Example request:
curl --request GET \
--get "https://api.pph.sh/client/hostings/43651/virtual-server/cloud-manager/mode" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/hostings/43651/virtual-server/cloud-manager/mode"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (401):
Show headers
cache-control: must-revalidate, no-cache, no-store, private
content-type: application/json
x-error: 1
access-control-allow-origin: *
{
"data": {
"error": true,
"type": "HttpException",
"url": "https://fsn-01.api.pph.sh/client/hostings/43651/virtual-server/cloud-manager/mode",
"code": 401,
"message": "Unauthorized",
"trace": "Symfony\\Component\\HttpKernel\\Exception\\HttpException: Unauthorized in /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:1132\nStack trace:\n#0 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php(44): Illuminate\\Foundation\\Application->abort()\n#1 /var/www/api/app/Providers/AuthServiceProvider.php(117): abort()\n#2 /var/www/api/app/Providers/AuthServiceProvider.php(64): App\\Providers\\AuthServiceProvider->abortUnauthorized()\n#3 [internal function]: App\\Providers\\AuthServiceProvider->App\\Providers\\{closure}()\n#4 /var/www/api/vendor/laravel/framework/src/Illuminate/Auth/RequestGuard.php(58): call_user_func()\n#5 /var/www/api/vendor/laravel/framework/src/Illuminate/Auth/GuardHelpers.php(60): Illuminate\\Auth\\RequestGuard->user()\n#6 /var/www/api/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php(63): Illuminate\\Auth\\RequestGuard->check()\n#7 /var/www/api/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php(42): Illuminate\\Auth\\Middleware\\Authenticate->authenticate()\n#8 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Auth\\Middleware\\Authenticate->handle()\n#9 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#10 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(723): Illuminate\\Pipeline\\Pipeline->then()\n#11 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(698): Illuminate\\Routing\\Router->runRouteWithinStack()\n#12 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(662): Illuminate\\Routing\\Router->runRoute()\n#13 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(651): Illuminate\\Routing\\Router->dispatchToRoute()\n#14 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(167): Illuminate\\Routing\\Router->dispatch()\n#15 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()\n#16 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#17 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()\n#18 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle()\n#19 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#20 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()\n#21 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()\n#22 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#23 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle()\n#24 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#25 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()\n#26 /var/www/api/vendor/fruitcake/laravel-cors/src/HandleCors.php(52): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#27 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fruitcake\\Cors\\HandleCors->handle()\n#28 /var/www/api/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#29 /var/www/api/app/Http/Middleware/TrustProxies.php(25): Fideloper\\Proxy\\TrustProxies->handle()\n#30 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\\Http\\Middleware\\TrustProxies->handle()\n#31 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#32 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(142): Illuminate\\Pipeline\\Pipeline->then()\n#33 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(111): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()\n#34 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(299): Illuminate\\Foundation\\Http\\Kernel->handle()\n#35 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(287): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->callLaravelOrLumenRoute()\n#36 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(89): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->makeApiCall()\n#37 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(45): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->makeResponseCall()\n#38 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(35): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->makeResponseCallIfConditionsPass()\n#39 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php(222): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->__invoke()\n#40 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php(179): Knuckles\\Scribe\\Extracting\\Extractor->iterateThroughStrategies()\n#41 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php(116): Knuckles\\Scribe\\Extracting\\Extractor->fetchResponses()\n#42 /var/www/api/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php(123): Knuckles\\Scribe\\Extracting\\Extractor->processRoute()\n#43 /var/www/api/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php(80): Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp->extractEndpointsInfoFromLaravelApp()\n#44 /var/www/api/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php(56): Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp->extractEndpointsInfoAndWriteToDisk()\n#45 /var/www/api/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php(55): Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp->get()\n#46 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Knuckles\\Scribe\\Commands\\GenerateDocumentation->handle()\n#47 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/Util.php(40): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()\n#48 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(93): Illuminate\\Container\\Util::unwrapIfClosure()\n#49 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(37): Illuminate\\Container\\BoundMethod::callBoundMethod()\n#50 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/Container.php(653): Illuminate\\Container\\BoundMethod::call()\n#51 /var/www/api/vendor/laravel/framework/src/Illuminate/Console/Command.php(136): Illuminate\\Container\\Container->call()\n#52 /var/www/api/vendor/symfony/console/Command/Command.php(298): Illuminate\\Console\\Command->execute()\n#53 /var/www/api/vendor/laravel/framework/src/Illuminate/Console/Command.php(121): Symfony\\Component\\Console\\Command\\Command->run()\n#54 /var/www/api/vendor/symfony/console/Application.php(1028): Illuminate\\Console\\Command->run()\n#55 /var/www/api/vendor/symfony/console/Application.php(299): Symfony\\Component\\Console\\Application->doRunCommand()\n#56 /var/www/api/vendor/symfony/console/Application.php(171): Symfony\\Component\\Console\\Application->doRun()\n#57 /var/www/api/vendor/laravel/framework/src/Illuminate/Console/Application.php(94): Symfony\\Component\\Console\\Application->run()\n#58 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(129): Illuminate\\Console\\Application->run()\n#59 /var/www/api/artisan(37): Illuminate\\Foundation\\Console\\Kernel->handle()\n#60 {main}"
}
}
Received response:
Request failed with error:
Set the mode of the cloud manager configuration for a hosting.
Example request:
curl --request POST \
"https://api.pph.sh/client/hostings/43651/virtual-server/cloud-manager/mode" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/hostings/43651/virtual-server/cloud-manager/mode"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
POST client/hostings/{hostingId}/virtual-server/cloud-manager/auto
Example request:
curl --request POST \
"https://api.pph.sh/client/hostings/43651/virtual-server/cloud-manager/auto" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/hostings/43651/virtual-server/cloud-manager/auto"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
GET public/game-root/live.json
Example request:
curl --request GET \
--get "https://api.pph.sh/public/game-root/live.json" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/public/game-root/live.json"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": {
"live": {
"game-root01": [
{
"name": "Game Root 2 mit RAM Upgrade",
"cores": 4,
"memory": 16,
"disk": 100
},
{
"name": "Game Root 2 ",
"cores": 4,
"memory": 8,
"disk": 100
}
],
"game-root02": [
{
"name": "Game Root 3",
"cores": 8,
"memory": 16,
"disk": 200
},
{
"name": "Game Root 1 mit RAM Upgrade",
"cores": 2,
"memory": 8,
"disk": 50
},
{
"name": "Game Root 2 mit RAM Upgrade",
"cores": 4,
"memory": 16,
"disk": 100
},
{
"name": "Game Root 2 mit RAM Upgrade",
"cores": 4,
"memory": 16,
"disk": 100
},
{
"name": "Game Root 1",
"cores": 2,
"memory": 4,
"disk": 25
},
{
"name": "Game Root 2 ",
"cores": 4,
"memory": 8,
"disk": 100
},
{
"name": "Game Root 3",
"cores": 8,
"memory": 16,
"disk": 200
}
]
},
"max": {
"name": "",
"cores": 32,
"memory": 128,
"disk": 1600
},
"percentages": {
"game-root01": [
{
"cores": 12.5,
"memory": 12.5,
"disk": 6.25
},
{
"cores": 12.5,
"memory": 6.25,
"disk": 6.25
}
],
"game-root02": [
{
"cores": 25,
"memory": 12.5,
"disk": 12.5
},
{
"cores": 6.25,
"memory": 6.25,
"disk": 3.125
},
{
"cores": 12.5,
"memory": 12.5,
"disk": 6.25
},
{
"cores": 12.5,
"memory": 12.5,
"disk": 6.25
},
{
"cores": 6.25,
"memory": 3.125,
"disk": 1.5625
},
{
"cores": 12.5,
"memory": 6.25,
"disk": 6.25
},
{
"cores": 25,
"memory": 12.5,
"disk": 12.5
}
]
},
"sums": {
"game-root01": {
"cores": 8,
"memory": 24,
"disk": 200
},
"game-root02": {
"cores": 32,
"memory": 84,
"disk": 775
}
},
"servers": [
"game-root01",
"game-root02"
]
}
}
Received response:
Request failed with error:
GET public/lets-encrypt/verify
Example request:
curl --request GET \
--get "https://api.pph.sh/public/lets-encrypt/verify" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/public/lets-encrypt/verify"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (500):
Show headers
cache-control: must-revalidate, no-cache, no-store, private
content-type: application/json
x-error: 1
access-control-allow-origin: *
{
"data": {
"error": true,
"type": "TypeError",
"errors": "App\\Api\\Support\\Virtualizor\\VirtualServer\\CertbotCertificateInstaller::__construct(): Argument #1 ($hosting) must be of type DeZio\\WHMCS\\Models\\Hosting, null given, called in /var/www/api/app/Api/Support/Virtualizor/Controller/LetsEncryptController.php on line 22",
"exception": true,
"url": "https://fsn-01.api.pph.sh/public/lets-encrypt/verify",
"message": "App\\Api\\Support\\Virtualizor\\VirtualServer\\CertbotCertificateInstaller::__construct(): Argument #1 ($hosting) must be of type DeZio\\WHMCS\\Models\\Hosting, null given, called in /var/www/api/app/Api/Support/Virtualizor/Controller/LetsEncryptController.php on line 22",
"trace": "TypeError: App\\Api\\Support\\Virtualizor\\VirtualServer\\CertbotCertificateInstaller::__construct(): Argument #1 ($hosting) must be of type DeZio\\WHMCS\\Models\\Hosting, null given, called in /var/www/api/app/Api/Support/Virtualizor/Controller/LetsEncryptController.php on line 22 and defined in /var/www/api/app/Api/Support/Virtualizor/VirtualServer/CertbotCertificateInstaller.php:10\nStack trace:\n#0 /var/www/api/app/Api/Support/Virtualizor/Controller/LetsEncryptController.php(22): App\\Api\\Support\\Virtualizor\\VirtualServer\\CertbotCertificateInstaller->__construct()\n#1 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(48): App\\Api\\Support\\Virtualizor\\Controller\\LetsEncryptController->createAcmeChallenge()\n#2 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Route.php(262): Illuminate\\Routing\\ControllerDispatcher->dispatch()\n#3 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\\Routing\\Route->runController()\n#4 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(721): Illuminate\\Routing\\Route->run()\n#5 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}()\n#6 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#7 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle()\n#8 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#9 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(723): Illuminate\\Pipeline\\Pipeline->then()\n#10 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(698): Illuminate\\Routing\\Router->runRouteWithinStack()\n#11 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(662): Illuminate\\Routing\\Router->runRoute()\n#12 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(651): Illuminate\\Routing\\Router->dispatchToRoute()\n#13 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(167): Illuminate\\Routing\\Router->dispatch()\n#14 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()\n#15 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#16 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()\n#17 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle()\n#18 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#19 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()\n#20 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()\n#21 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#22 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle()\n#23 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#24 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()\n#25 /var/www/api/vendor/fruitcake/laravel-cors/src/HandleCors.php(52): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#26 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fruitcake\\Cors\\HandleCors->handle()\n#27 /var/www/api/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#28 /var/www/api/app/Http/Middleware/TrustProxies.php(25): Fideloper\\Proxy\\TrustProxies->handle()\n#29 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\\Http\\Middleware\\TrustProxies->handle()\n#30 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#31 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(142): Illuminate\\Pipeline\\Pipeline->then()\n#32 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(111): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()\n#33 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(299): Illuminate\\Foundation\\Http\\Kernel->handle()\n#34 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(287): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->callLaravelOrLumenRoute()\n#35 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(89): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->makeApiCall()\n#36 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(45): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->makeResponseCall()\n#37 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(35): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->makeResponseCallIfConditionsPass()\n#38 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php(222): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->__invoke()\n#39 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php(179): Knuckles\\Scribe\\Extracting\\Extractor->iterateThroughStrategies()\n#40 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php(116): Knuckles\\Scribe\\Extracting\\Extractor->fetchResponses()\n#41 /var/www/api/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php(123): Knuckles\\Scribe\\Extracting\\Extractor->processRoute()\n#42 /var/www/api/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php(80): Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp->extractEndpointsInfoFromLaravelApp()\n#43 /var/www/api/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php(56): Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp->extractEndpointsInfoAndWriteToDisk()\n#44 /var/www/api/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php(55): Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp->get()\n#45 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Knuckles\\Scribe\\Commands\\GenerateDocumentation->handle()\n#46 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/Util.php(40): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()\n#47 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(93): Illuminate\\Container\\Util::unwrapIfClosure()\n#48 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(37): Illuminate\\Container\\BoundMethod::callBoundMethod()\n#49 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/Container.php(653): Illuminate\\Container\\BoundMethod::call()\n#50 /var/www/api/vendor/laravel/framework/src/Illuminate/Console/Command.php(136): Illuminate\\Container\\Container->call()\n#51 /var/www/api/vendor/symfony/console/Command/Command.php(298): Illuminate\\Console\\Command->execute()\n#52 /var/www/api/vendor/laravel/framework/src/Illuminate/Console/Command.php(121): Symfony\\Component\\Console\\Command\\Command->run()\n#53 /var/www/api/vendor/symfony/console/Application.php(1028): Illuminate\\Console\\Command->run()\n#54 /var/www/api/vendor/symfony/console/Application.php(299): Symfony\\Component\\Console\\Application->doRunCommand()\n#55 /var/www/api/vendor/symfony/console/Application.php(171): Symfony\\Component\\Console\\Application->doRun()\n#56 /var/www/api/vendor/laravel/framework/src/Illuminate/Console/Application.php(94): Symfony\\Component\\Console\\Application->run()\n#57 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(129): Illuminate\\Console\\Application->run()\n#58 /var/www/api/artisan(37): Illuminate\\Foundation\\Console\\Kernel->handle()\n#59 {main}"
}
}
Received response:
Request failed with error:
GET public/managed-server/prepare/{vpsid}
Example request:
curl --request GET \
--get "https://api.pph.sh/public/managed-server/prepare/qui" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/public/managed-server/prepare/qui"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (500):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "No query results for model [DeZio\\WHMCS\\Models\\Hosting]."
}
Received response:
Request failed with error:
POST client/paypal/subscription
Example request:
curl --request POST \
"https://api.pph.sh/client/paypal/subscription" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5" \
--data "{
\"amount\": 215,
\"day\": 21,
\"recurring_times\": 12,
\"auto_pay_invoices\": false,
\"return_url\": \"http:\\/\\/www.dietrich.com\\/\",
\"cancel_url\": \"http:\\/\\/rempel.com\\/\"
}"
const url = new URL(
"https://api.pph.sh/client/paypal/subscription"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
let body = {
"amount": 215,
"day": 21,
"recurring_times": 12,
"auto_pay_invoices": false,
"return_url": "http:\/\/www.dietrich.com\/",
"cancel_url": "http:\/\/rempel.com\/"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
POST client/paypal/subscription/{token}/cancel
Example request:
curl --request POST \
"https://api.pph.sh/client/paypal/subscription/nihil/cancel" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/paypal/subscription/nihil/cancel"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
GET public/comparison/table.json
Example request:
curl --request GET \
--get "https://api.pph.sh/public/comparison/table.json" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/public/comparison/table.json"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"headings": {
"linuxkvm": "Linux Root Server",
"windowskvm": "Windows Root Server",
"openvz": "Linux vServer",
"ryzen": "Linux Ryzen Server"
},
"rows": {
"res": {
"category": "Ressourcenvergabe",
"cells": {
"linuxkvm": {
"value": "Teilweise geteilte Ressourcen",
"type": "text"
},
"windowskvm": {
"value": "Teilweise geteilte Ressourcen",
"type": "text"
},
"openvz": {
"value": "Geteilte Ressourcen",
"type": "text"
},
"ryzen": {
"value": "Aufgeteilt, exklusiv",
"type": "text"
}
}
},
"virt": {
"category": "Virtualisierung",
"cells": {
"linuxkvm": {
"value": "KVM Virtuozzo",
"type": "text"
},
"windowskvm": {
"value": "KVM Virtuozzo",
"type": "text"
},
"openvz": {
"value": "OpenVZ 7 Virtuozzo",
"type": "text"
},
"ryzen": {
"value": "KVM Virtuozzo",
"type": "text"
}
}
},
"webinterface": {
"category": "Webinterface",
"cells": {
"linuxkvm": {
"value": "true",
"type": "checkbox"
},
"windowskvm": {
"value": "true",
"type": "checkbox"
},
"openvz": {
"value": "true",
"type": "checkbox"
},
"ryzen": {
"value": "true",
"type": "checkbox"
}
}
},
"ssh": {
"category": "SSH",
"cells": {
"linuxkvm": {
"value": "true",
"type": "checkbox"
},
"windowskvm": {
"value": "false",
"type": "checkbox"
},
"openvz": {
"value": "true",
"type": "checkbox"
},
"ryzen": {
"value": "true",
"type": "checkbox"
}
}
},
"rdp": {
"category": "RDP",
"cells": {
"linuxkvm": {
"value": "false",
"type": "checkbox"
},
"windowskvm": {
"value": "true",
"type": "checkbox"
},
"openvz": {
"value": "false",
"type": "checkbox"
},
"ryzen": {
"value": "false",
"type": "checkbox"
}
}
},
"backups": {
"category": "Backups",
"cells": {
"linuxkvm": {
"value": "5x inklusive",
"type": "text"
},
"windowskvm": {
"value": "5x inklusive",
"type": "text"
},
"openvz": {
"value": "5x inklusive",
"type": "text"
},
"ryzen": {
"value": "5x inklusive",
"type": "text"
}
}
},
"snapshots": {
"category": "Snapshots",
"cells": {
"linuxkvm": {
"value": "1x inklusive",
"type": "text"
},
"windowskvm": {
"value": "1x inklusive",
"type": "text"
},
"openvz": {
"value": "false",
"type": "checkbox"
},
"ryzen": {
"value": "1x inklusive",
"type": "text"
}
}
},
"linuxgsm": {
"category": "Gameserver Manager",
"cells": {
"linuxkvm": {
"value": "true",
"type": "checkbox"
},
"windowskvm": {
"value": "false",
"type": "checkbox"
},
"openvz": {
"value": "true",
"type": "checkbox"
},
"ryzen": {
"value": "true",
"type": "checkbox"
}
}
}
}
}
Received response:
Request failed with error:
GET public/advertising/vcp
Example request:
curl --request GET \
--get "https://api.pph.sh/public/advertising/vcp" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/public/advertising/vcp"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: private
content-type: application/json
access-control-allow-origin: *
[]
Received response:
Request failed with error:
GET client/pro/generations
Example request:
curl --request GET \
--get "https://api.pph.sh/client/pro/generations" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/pro/generations"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
content-type: text/html; charset=UTF-8
cache-control: no-cache, private
access-control-allow-origin: *
Received response:
Request failed with error:
Retrieves the configuration options.
This method returns a JSON resource representing the configuration options. The configuration options are obtained from the server finder and converted to an array before being returned as a JSON resource.
Example request:
curl --request GET \
--get "https://api.pph.sh/public/server-finder" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/public/server-finder"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": {
"branches": [
{
"id": "opener",
"question": "In welchem Bereich möchtest Du deinen Server einsetzen?",
"isMultiSelect": false,
"selections": [
{
"label": "Privat",
"value": "privat",
"hint": null,
"goto": "bedarf",
"meta": {
"icon": "fas fa-user",
"not": [
"managed"
],
"description": "Für mich oder meine Freunde"
}
},
{
"label": "Geschäftlich",
"value": "geschaeftlich",
"hint": null,
"goto": "verwaltung",
"meta": {
"icon": "fas fa-briefcase",
"not": [
"openvz",
"game-root"
],
"boost": [
"managed",
"dedicated"
],
"description": "Für ein Unternehmen"
}
},
{
"label": "Beides (Privat/Geschäftlich)",
"value": "beides",
"hint": null,
"goto": "bedarf",
"meta": {
"icon": "fas fa-people-roof",
"description": "Privat, wie auch geschäftlich"
}
},
{
"label": "Sonstiges",
"value": "sonstiges",
"hint": null,
"goto": "bedarf",
"meta": {
"icon": "fas fa-ellipsis-h",
"not": [
"managed"
],
"description": "Für etwas anderes"
}
}
]
},
{
"id": "verwaltung",
"question": "Wie möchtest du deinen Server verwalten?",
"isMultiSelect": false,
"selections": [
{
"label": "Selbst verwalten",
"value": "self",
"hint": null,
"goto": "bedarf",
"meta": {
"icon": "fa-tools",
"description": "Volle Kontrolle, evtl. technisches Fachwissen erforderlich",
"not": [
"managed"
]
}
},
{
"label": "Managed",
"value": "managed",
"hint": null,
"goto": "bedarf",
"meta": {
"icon": "fa-user-shield",
"description": "Wartung und Überwachung durch den Dienstanbieter",
"boost": [
"managed",
"managed",
"managed",
"managed"
]
}
}
]
},
{
"id": "bedarf",
"question": "Was möchtest du mit deinem Server am ehesten machen?",
"isMultiSelect": true,
"selections": [
{
"label": "Webseiten",
"value": "webseiten",
"hint": null,
"goto": "zugriffe",
"meta": {
"description": "z.B. HTML, Wordpress, Joomla, etc.",
"group": "web",
"min_cores": 2,
"icon": "fa-globe",
"not": [
"kvm-windows"
]
}
},
{
"label": "Online Shop",
"value": "online-shop",
"hint": null,
"goto": "zugriffe",
"meta": {
"description": "z.B. Magento, Shopware, etc.",
"group": "web",
"min_cores": 2,
"icon": "fa-shopping-cart",
"not": [
"kvm-windows"
]
}
},
{
"label": "Livechat",
"value": "livechat",
"hint": null,
"goto": "zugriffe",
"meta": {
"description": "z.B. Livezilla, etc.",
"group": "web",
"icon": "fa-comments",
"not": [
"kvm-windows"
]
}
},
{
"label": "Teamspeak 3",
"value": "teamspeak-3",
"hint": null,
"goto": "zugriffe",
"meta": {
"description": "z.B. für Gaming-Clans, etc.",
"not": [
"managed"
],
"icon": "fa-microphone",
"group": "game-server-und-services"
}
},
{
"label": "Minecraft",
"value": "minecraft",
"hint": null,
"goto": "zugriffe",
"meta": {
"description": "z.B. für Vanilla, Spigot, Modpacks, etc.",
"not": [
"openvz",
"kvm-windows",
"managed"
],
"icon": "fa-cube",
"boost": [
"game-root",
"dedicated"
],
"group": "game-server-und-services",
"min_cores": 4,
"min_ram": 8,
"min_space": 100,
"grow": {
"cores": 2,
"ram": 2,
"space": 50
}
}
},
{
"label": "Gameserver",
"value": "gameserver",
"hint": null,
"goto": "zugriffe",
"meta": {
"description": "z.B. für Steam-Games, Five-M, etc.",
"not": [
"openvz"
],
"boost": [
"game-root"
],
"icon": "fa-gamepad",
"group": "game-server-und-services",
"min_cores": 4,
"min_ram": 8,
"min_space": 50,
"grow": {
"cores": 2,
"ram": 2,
"space": 50
}
}
},
{
"label": "NodeJS",
"value": "nodejs",
"hint": null,
"goto": "zugriffe",
"meta": {
"description": "z.B. Discord-Bot, etc.",
"group": "datenbanken-versionierung",
"icon": "fa-code"
}
},
{
"label": "Bot-Hosting",
"value": "bots",
"hint": null,
"goto": "zugriffe",
"meta": {
"description": "z.B. Sinusbot, TS3MusicBot. etc.",
"group": "datenbanken-versionierung",
"icon": "fa-robot"
}
},
{
"label": "Datenbanken",
"value": "datenbanken",
"hint": null,
"goto": "zugriffe",
"meta": {
"description": "z.B. für MySQL, MongoDB etc.",
"not": [],
"boost": [
"kvm-linux"
],
"icon": "fa-database",
"min_cores": 2,
"group": "datenbanken-versionierung"
}
},
{
"label": "Versionierung",
"value": "gitlab_dev",
"hint": null,
"goto": "zugriffe",
"meta": {
"description": "GitLab, SVN, etc.",
"not": [
"openvz",
"kvm-windows",
"game-root"
],
"icon": "fab fa-git",
"boost": [
"kvm-linux"
],
"group": "datenbanken-versionierung",
"min_cores": 4,
"min_ram": 4
}
},
{
"label": "Docker",
"value": "docker",
"hint": "Funktioniert nicht auf OpenVZ",
"goto": "zugriffe",
"meta": {
"description": "z.B. für CI/CD, Mailcow, etc.",
"not": [
"openvz"
],
"boost": [
"kvm-linux"
],
"icon": "fab fa-docker",
"group": "server-verwaltung",
"min_cores": 4,
"min_ram": 8
}
},
{
"label": "Plesk",
"value": "plesk",
"hint": null,
"goto": "zugriffe",
"meta": {
"description": "z.B. für Webseiten, etc.",
"not": [
"openvz",
"game-root",
"kvm-windows"
],
"boost": [
"kvm-linux"
],
"icon": "fa-server",
"min_cores": 4,
"min_ram": 8,
"min_space": 50,
"group": "server-verwaltung"
}
},
{
"label": "Mail-Server",
"value": "mailserver",
"hint": null,
"goto": "zugriffe",
"meta": {
"description": "z.B. über Plesk, Mailcow, etc.",
"min_cores": 2,
"min_ram": 4,
"not": [
"openvz",
"kvm-windows"
],
"boost": [
"kvm-linux"
],
"icon": "fa-envelope",
"group": "server-verwaltung"
}
},
{
"label": "Private VPN",
"value": "vpn",
"hint": null,
"goto": "zugriffe",
"meta": {
"description": "z.B. zur Verschleierung der IP, etc.",
"not": [
"openvz",
"game-root"
],
"boost": [
"kvm-linux"
],
"icon": "fa-shield-alt",
"min_cores": 2,
"group": "cloud-und-storage-services"
}
},
{
"label": "Nextcloud",
"value": "nextcloud",
"hint": null,
"goto": "zugriffe",
"meta": {
"description": "z.B. für Dateiablage, etc.",
"min_space": 100,
"group": "server-verwaltung",
"icon": "fa-cloud",
"boost": [
"kvm-linux",
"dedicated"
]
}
},
{
"label": "cPanel",
"value": "cpanel",
"hint": null,
"goto": "zugriffe",
"meta": {
"description": "z.B. für Webseiten, etc.",
"group": "server-verwaltung",
"icon": "fas fa-sliders-h"
}
},
{
"label": "Keyhelp",
"value": "keyhelp",
"hint": null,
"goto": "zugriffe",
"meta": {
"description": "z.B. für Webseiten, etc.",
"not": [
"openvz",
"kvm-windows",
"game-root"
],
"group": "server-verwaltung",
"icon": "fa-key"
}
},
{
"label": "Filehosting",
"value": "filehosting",
"hint": "Benötigt viel Speicherplatz",
"goto": "zugriffe",
"meta": {
"description": "z.B. für Backups, etc.",
"min_space": 100,
"group": "cloud-und-storage-services",
"icon": "fa-folder",
"not": [
"game-root"
]
}
},
{
"label": "Arbeitsplatz in der Cloud",
"value": "rdp",
"hint": "Muss kvm-windows sein",
"goto": "zugriffe",
"meta": {
"description": "z.B. für Office, etc.",
"not": [
"openvz",
"kvm-linux",
"game-root",
"managed"
],
"icon": "fa-desktop",
"boost": [
"kvm-windows"
],
"min_cores": 2
}
},
{
"label": "Multi-User auf Windows Server",
"value": "rdp_multiuser",
"hint": "Muss kvm-windows sein",
"goto": "zugriffe",
"meta": {
"description": "z.B. für mehrere Mitarbeiter, etc.",
"not": [
"openvz",
"kvm-linux",
"game-root"
],
"boost": [
"kvm-windows"
],
"icon": "fa-users",
"min_cores": 4,
"min_ram": 4
}
},
{
"label": "Desktop Apps",
"value": "desktop-apps",
"hint": "Muss kvm-windows sein",
"goto": "zugriffe",
"meta": {
"icon": "fa-desktop",
"description": "z.B. Browser, etc.",
"boost": [
"kvm-windows"
],
"not": [
"openvz",
"kvm-linux",
"game-root"
]
}
},
{
"label": "Abrechnungssoftware",
"value": "abrechnungssoftware",
"hint": "Muss kvm-windows sein",
"goto": "zugriffe",
"meta": {
"description": "z.B. Lexware, etc.",
"boost": [
"kvm-windows"
],
"icon": "fa-file-invoice-dollar",
"not": [
"openvz",
"kvm-linux",
"game-root"
],
"min_cores": 4
}
},
{
"label": "Desktop CRM",
"value": "desktop-crm",
"hint": null,
"goto": "zugriffe",
"meta": {
"icon": "fa-handshake",
"description": "z.B. für Kundenverwaltung, etc.",
"boost": [
"kvm-windows"
],
"not": [
"openvz",
"game-root",
"managed"
],
"min_cores": 4
}
},
{
"label": "Börsensoftware",
"value": "boersensoftware",
"hint": "Benötigt meistens Windows",
"goto": "zugriffe",
"meta": {
"description": "z.B. für MetaRadar, etc.",
"icon": "fa-chart-line",
"boost": [
"kvm-windows"
],
"not": [
"openvz",
"managed"
],
"min_cores": 4
}
}
]
},
{
"id": "zugriffe",
"question": "Wie viele Zugriffe erwartest du auf deinem Server?",
"isMultiSelect": false,
"selections": [
{
"label": "Nur für mich",
"value": "only_me",
"hint": null,
"goto": "betriebssystem",
"meta": {
"icon": "fas fa-user",
"description": "z.B. für einen privaten Mailserver, etc."
}
},
{
"label": "Wenig",
"value": "low",
"hint": null,
"goto": "betriebssystem",
"meta": {
"icon": "fas fa-user-friends",
"description": "z.B. für ein kleines Vorhaben, etc."
}
},
{
"label": "Mittel",
"value": "middle",
"hint": null,
"goto": "betriebssystem",
"meta": {
"icon": "fas fa-users",
"more_cores": 2,
"more_ram": 4,
"description": "z.B. für mehr als ein kleines Vorhaben, etc."
}
},
{
"label": "Viel",
"value": "high",
"hint": null,
"goto": "betriebssystem",
"meta": {
"icon": "fas fa-globe-europe",
"not": [
"openvz"
],
"boost": [
"game-root",
"kvm-linux",
"managed"
],
"description": "z.B. Vorhaben für viele Benutzer",
"more_cores": 4,
"more_ram": 8
}
}
]
},
{
"id": "betriebssystem",
"question": "Welches Betriebssystem benötigst Du für dein Vorhaben?",
"isMultiSelect": false,
"selections": [
{
"label": "Linux",
"value": "linux",
"hint": null,
"goto": "budget",
"meta": {
"icon": "fab fa-linux",
"description": "Verwaltung über SSH",
"not": [
"kvm-windows"
],
"boost": [
"openvz",
"kvm-linux",
"game-root"
]
}
},
{
"label": "Debian",
"value": "debian",
"hint": null,
"goto": "budget",
"meta": {
"icon": "fab fa-linux",
"description": "Verwaltung über SSH",
"not": [
"kvm-windows"
],
"boost": [
"openvz",
"kvm-linux",
"game-root"
]
}
},
{
"label": "Ubuntu",
"value": "ubuntu",
"hint": null,
"goto": "budget",
"meta": {
"icon": "fab fa-linux",
"description": "Verwaltung über SSH",
"not": [
"kvm-windows"
],
"boost": [
"openvz",
"kvm-linux",
"game-root"
]
}
},
{
"label": "CentOS",
"value": "centos",
"hint": null,
"goto": "budget",
"meta": {
"icon": "fab fa-linux",
"description": "Verwaltung über SSH",
"not": [
"kvm-windows"
],
"boost": [
"openvz",
"kvm-linux",
"game-root"
]
}
},
{
"label": "Windows",
"value": "windows",
"hint": "Also kein Linux",
"goto": "budget",
"meta": {
"icon": "fab fa-windows",
"description": "Verwaltung über RDP",
"not": [
"openvz",
"kvm-linux",
"game-root"
],
"boost": [
"kvm-windows",
"dedicated"
]
}
},
{
"label": "Egal",
"value": "undefined",
"hint": null,
"goto": "budget",
"meta": {
"icon": "fas fa-question",
"description": "Egal, Hauptsache es läuft",
"boost": [
"kvm-linux",
"game-root"
]
}
}
]
},
{
"id": "budget",
"question": "Wie hoch ist dein Budget?",
"isMultiSelect": false,
"selections": [
{
"label": "Niedrig",
"value": "niedrig",
"hint": null,
"goto": "ANALYSIS",
"meta": {
"icon": "fa-wallet",
"description": "Beschränkte Finanzmittel",
"boost": [
"openvz"
],
"not": [
"managed",
"dedicated",
"game-root"
]
}
},
{
"label": "Preis/Leistung",
"value": "preis-leistung",
"hint": "Nicht das günstigste, nicht das teuerste",
"goto": "ANALYSIS",
"meta": {
"icon": "fa-balance-scale",
"description": "Gutes Preis/Leistungsverhältnis",
"not": [
"dedicated"
],
"boost": [
"game-root",
"kvm-linux",
"kvm-windows"
]
}
},
{
"label": "Maximale Performance",
"value": "maximale-performance",
"hint": "Geld spielt keine Rolle",
"goto": "ANALYSIS",
"meta": {
"icon": "fa-rocket",
"description": "Höchste Leistung, höhere Kosten",
"not": [
"openvz"
],
"boost": [
"game-root",
"kvm-linux",
"kvm-windows",
"dedicated",
"managed"
]
}
}
]
}
]
}
}
Received response:
Request failed with error:
Process the given results and retrieve the final result.
Example request:
curl --request POST \
"https://api.pph.sh/public/server-finder" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/public/server-finder"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
POST public/server-finder/event
Example request:
curl --request POST \
"https://api.pph.sh/public/server-finder/event" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/public/server-finder/event"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
GET client/config
Example request:
curl --request GET \
--get "https://api.pph.sh/client/config" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/config"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": {
"send_login_alerts": true,
"session_timeout": 360,
"nav_style": "servers",
"enable-actions-v2": true,
"discord_support_code": "X5NSD0",
"enable-iso-installer": true
}
}
Received response:
Request failed with error:
POST client/config
Example request:
curl --request POST \
"https://api.pph.sh/client/config" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5" \
--data "{
\"config_key\": \"sapiente\"
}"
const url = new URL(
"https://api.pph.sh/client/config"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
let body = {
"config_key": "sapiente"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
GET client/logins
requires authentication
Example request:
curl --request GET \
--get "https://api.pph.sh/client/logins" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/logins"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": [
{
"description": "Logged in to VionityCP (https://dev.vionity.de)",
"ip": "90.187.140.xxx",
"date": "2024-04-14T02:15:09.000000Z"
},
{
"description": "Logged in to VionityCP (https://dev.vionity.de)",
"ip": "91.39.108.xxx",
"date": "2024-04-14T02:08:07.000000Z"
},
{
"description": "Logged in to VionityCP (https://www.vionity.de)",
"ip": "91.39.108.xxx",
"date": "2024-04-10T22:26:18.000000Z"
},
{
"description": "Logged in to VionityCP (https://www.vionity.de)",
"ip": "91.39.108.xxx",
"date": "2024-04-07T11:51:13.000000Z"
},
{
"description": "Logged in to VionityCP (https://www.vionity.de)",
"ip": "91.39.108.xxx",
"date": "2024-04-06T08:17:27.000000Z"
},
{
"description": "Logged in to VionityCP (https://dev.vionity.de)",
"ip": "90.187.140.xxx",
"date": "2024-04-05T06:30:59.000000Z"
},
{
"description": "Logged in to VionityCP (https://www.vionity.de)",
"ip": "2a00:6020:a282:e200:c578:4334:b209:xxx",
"date": "2024-04-03T22:43:36.000000Z"
},
{
"description": "Logged in to VionityCP (https://www.vionity.de)",
"ip": "2a00:6020:a282:e200:41e1:f153:6648:xxx",
"date": "2024-04-02T19:45:40.000000Z"
},
{
"description": "Logged in to VionityCP (https://www.vionity.de)",
"ip": "91.39.102.xxx",
"date": "2024-03-24T17:41:59.000000Z"
},
{
"description": "Logged in to VionityCP (https://www.vionity.de)",
"ip": "91.39.102.xxx",
"date": "2024-03-22T10:37:20.000000Z"
},
{
"description": "Logged in to VionityCP (https://instance04.vionity.de)",
"ip": "91.39.102.xxx",
"date": "2024-03-19T22:54:38.000000Z"
},
{
"description": "Logged in to VionityCP (https://www.vionity.de)",
"ip": "91.39.102.xxx",
"date": "2024-03-19T13:15:01.000000Z"
},
{
"description": "Logged in to VionityCP (https://www.vionity.de)",
"ip": "91.39.102.xxx",
"date": "2024-03-15T20:30:52.000000Z"
}
]
}
Received response:
Request failed with error:
GET client/donation/config
requires authentication
Example request:
curl --request GET \
--get "https://api.pph.sh/client/donation/config" \
--header "X-Token: {YOUR_ACCESS_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/donation/config"
);
const headers = {
"X-Token": "{YOUR_ACCESS_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": {
"uuid": "b90e484d-6641-49c4-9c79-16ba774d3c92",
"url": "https://spenden.pp-h.eu/b90e484d-6641-49c4-9c79-16ba774d3c92",
"display_name": null
}
}
Received response:
Request failed with error:
GET public/stats/testservers
Example request:
curl --request GET \
--get "https://api.pph.sh/public/stats/testservers" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/public/stats/testservers"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: max-age=120, public
content-type: application/json
access-control-allow-origin: *
{
"data": {
"from": "2024-03-08",
"to": "2024-04-07",
"count": 92,
"count_per_day": 3.1,
"conversions": 8,
"conversion_rate": 8.7
}
}
Received response:
Request failed with error:
GET public/stats/general
Example request:
curl --request GET \
--get "https://api.pph.sh/public/stats/general" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/public/stats/general"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: max-age=120, public
content-type: application/json
access-control-allow-origin: *
{
"hostings": 2041,
"domains": 1589,
"clients": 1513
}
Received response:
Request failed with error:
GET public/domains/alternatives
Example request:
curl --request GET \
--get "https://api.pph.sh/public/domains/alternatives" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/public/domains/alternatives"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (500):
Show headers
cache-control: max-age=120, must-revalidate, no-cache, no-store, public
content-type: application/json
x-error: 1
access-control-allow-origin: *
{
"data": {
"error": true,
"type": "TypeError",
"errors": "App\\Api\\OpenAI\\DomainAlternatives::__construct(): Argument #1 ($domain) must be of type string, null given, called in /var/www/api/app/Api/public.php on line 246",
"exception": true,
"url": "https://fsn-01.api.pph.sh/public/domains/alternatives",
"message": "App\\Api\\OpenAI\\DomainAlternatives::__construct(): Argument #1 ($domain) must be of type string, null given, called in /var/www/api/app/Api/public.php on line 246",
"trace": "TypeError: App\\Api\\OpenAI\\DomainAlternatives::__construct(): Argument #1 ($domain) must be of type string, null given, called in /var/www/api/app/Api/public.php on line 246 and defined in /var/www/api/app/Api/OpenAI/DomainAlternatives.php:14\nStack trace:\n#0 /var/www/api/app/Api/public.php(246): App\\Api\\OpenAI\\DomainAlternatives->__construct()\n#1 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Route.php(238): Illuminate\\Routing\\RouteFileRegistrar->{closure}()\n#2 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Route.php(208): Illuminate\\Routing\\Route->runCallable()\n#3 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(721): Illuminate\\Routing\\Route->run()\n#4 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}()\n#5 /var/www/api/vendor/laravel/framework/src/Illuminate/Http/Middleware/SetCacheHeaders.php(22): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#6 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Http\\Middleware\\SetCacheHeaders->handle()\n#7 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#8 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle()\n#9 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#10 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(723): Illuminate\\Pipeline\\Pipeline->then()\n#11 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(698): Illuminate\\Routing\\Router->runRouteWithinStack()\n#12 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(662): Illuminate\\Routing\\Router->runRoute()\n#13 /var/www/api/vendor/laravel/framework/src/Illuminate/Routing/Router.php(651): Illuminate\\Routing\\Router->dispatchToRoute()\n#14 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(167): Illuminate\\Routing\\Router->dispatch()\n#15 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()\n#16 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#17 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()\n#18 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle()\n#19 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#20 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()\n#21 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()\n#22 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#23 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle()\n#24 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#25 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()\n#26 /var/www/api/vendor/fruitcake/laravel-cors/src/HandleCors.php(52): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#27 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fruitcake\\Cors\\HandleCors->handle()\n#28 /var/www/api/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#29 /var/www/api/app/Http/Middleware/TrustProxies.php(25): Fideloper\\Proxy\\TrustProxies->handle()\n#30 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\\Http\\Middleware\\TrustProxies->handle()\n#31 /var/www/api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()\n#32 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(142): Illuminate\\Pipeline\\Pipeline->then()\n#33 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(111): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()\n#34 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(299): Illuminate\\Foundation\\Http\\Kernel->handle()\n#35 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(287): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->callLaravelOrLumenRoute()\n#36 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(89): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->makeApiCall()\n#37 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(45): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->makeResponseCall()\n#38 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Strategies/Responses/ResponseCalls.php(35): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->makeResponseCallIfConditionsPass()\n#39 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php(222): Knuckles\\Scribe\\Extracting\\Strategies\\Responses\\ResponseCalls->__invoke()\n#40 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php(179): Knuckles\\Scribe\\Extracting\\Extractor->iterateThroughStrategies()\n#41 /var/www/api/vendor/knuckleswtf/scribe/src/Extracting/Extractor.php(116): Knuckles\\Scribe\\Extracting\\Extractor->fetchResponses()\n#42 /var/www/api/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php(123): Knuckles\\Scribe\\Extracting\\Extractor->processRoute()\n#43 /var/www/api/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php(80): Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp->extractEndpointsInfoFromLaravelApp()\n#44 /var/www/api/vendor/knuckleswtf/scribe/src/GroupedEndpoints/GroupedEndpointsFromApp.php(56): Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp->extractEndpointsInfoAndWriteToDisk()\n#45 /var/www/api/vendor/knuckleswtf/scribe/src/Commands/GenerateDocumentation.php(55): Knuckles\\Scribe\\GroupedEndpoints\\GroupedEndpointsFromApp->get()\n#46 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Knuckles\\Scribe\\Commands\\GenerateDocumentation->handle()\n#47 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/Util.php(40): Illuminate\\Container\\BoundMethod::Illuminate\\Container\\{closure}()\n#48 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(93): Illuminate\\Container\\Util::unwrapIfClosure()\n#49 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(37): Illuminate\\Container\\BoundMethod::callBoundMethod()\n#50 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/Container.php(653): Illuminate\\Container\\BoundMethod::call()\n#51 /var/www/api/vendor/laravel/framework/src/Illuminate/Console/Command.php(136): Illuminate\\Container\\Container->call()\n#52 /var/www/api/vendor/symfony/console/Command/Command.php(298): Illuminate\\Console\\Command->execute()\n#53 /var/www/api/vendor/laravel/framework/src/Illuminate/Console/Command.php(121): Symfony\\Component\\Console\\Command\\Command->run()\n#54 /var/www/api/vendor/symfony/console/Application.php(1028): Illuminate\\Console\\Command->run()\n#55 /var/www/api/vendor/symfony/console/Application.php(299): Symfony\\Component\\Console\\Application->doRunCommand()\n#56 /var/www/api/vendor/symfony/console/Application.php(171): Symfony\\Component\\Console\\Application->doRun()\n#57 /var/www/api/vendor/laravel/framework/src/Illuminate/Console/Application.php(94): Symfony\\Component\\Console\\Application->run()\n#58 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(129): Illuminate\\Console\\Application->run()\n#59 /var/www/api/artisan(37): Illuminate\\Foundation\\Console\\Kernel->handle()\n#60 {main}"
}
}
Received response:
Request failed with error:
GET public/user-voices
Example request:
curl --request GET \
--get "https://api.pph.sh/public/user-voices" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/public/user-voices"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": [
{
"id": 1,
"title": "Custom ISOs",
"category": "Vionity > Cloud Manager",
"description": "Es wäre cool wenn man eigene ISOs verwenden könnte",
"current_status": "open",
"is_public": 1,
"votes": 1,
"pph_comments": [
{
"comment": "Aus technischer Sicht aktuell nicht möglich, aufgrund der fehlenden Guest-Tools in Custom ISOs.",
"created_at": "2023-05-08T11:09:12.000000Z",
"updated_at": "2023-05-08T11:09:14.000000Z"
}
],
"created_at": "2023-05-08T11:02:38.000000Z",
"updated_at": "2023-09-21T11:59:57.000000Z"
}
],
"links": {
"first": "https://fsn-01.api.pph.sh/public/user-voices?page=1",
"last": "https://fsn-01.api.pph.sh/public/user-voices?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"active": false
},
{
"url": "https://fsn-01.api.pph.sh/public/user-voices?page=1",
"label": "1",
"active": true
},
{
"url": null,
"label": "Next »",
"active": false
}
],
"path": "https://fsn-01.api.pph.sh/public/user-voices",
"per_page": 15,
"to": 1,
"total": 1
}
}
Received response:
Request failed with error:
GET public/products/kvm-packages/compare
Example request:
curl --request GET \
--get "https://api.pph.sh/public/products/kvm-packages/compare" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/public/products/kvm-packages/compare"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": [
{
"id": 475,
"specs": "2 Kerne / 2 GB RAM garantiert / 50 GB SSD Speicher",
"input": {
"cores": 1,
"memory": 2,
"space": 30
},
"cores": "2 Kerne",
"memory": "2 GB RAM garantiert",
"space": "50 GB SSD Speicher",
"price": 5.26,
"partial_price": {
"cores": {
"price": 4,
"pieces": 2,
"pricePerPiece": 2,
"newPrice": 2
},
"memory": {
"price": 2,
"pieces": 2,
"pricePerPiece": 1,
"newPrice": 2
},
"space": {
"price": 2.1,
"pieces": 50,
"pricePerPiece": 0.042,
"newPrice": 1.26
}
}
},
{
"id": 476,
"specs": "2 Kerne / 4 GB RAM garantiert / 50 GB SSD Speicher",
"input": {
"cores": 2,
"memory": 4,
"space": 50
},
"cores": "2 Kerne",
"memory": "4 GB RAM garantiert",
"space": "50 GB SSD Speicher",
"price": 9.7,
"partial_price": {
"cores": {
"price": 4,
"pieces": 2,
"pricePerPiece": 2,
"newPrice": 4
},
"memory": {
"price": 3.6,
"pieces": 4,
"pricePerPiece": 0.9,
"newPrice": 3.6
},
"space": {
"price": 2.1,
"pieces": 50,
"pricePerPiece": 0.042,
"newPrice": 2.1
}
}
},
{
"id": 477,
"specs": "2 Kerne / 6 GB RAM garantiert / 100 GB SSD Speicher",
"input": {
"cores": 3,
"memory": 6,
"space": 74
},
"cores": "2 Kerne",
"memory": "6 GB RAM garantiert",
"space": "100 GB SSD Speicher",
"price": 14.51,
"partial_price": {
"cores": {
"price": 4,
"pieces": 2,
"pricePerPiece": 2,
"newPrice": 6
},
"memory": {
"price": 5.4,
"pieces": 6,
"pricePerPiece": 0.9,
"newPrice": 5.4
},
"space": {
"price": 4.2,
"pieces": 100,
"pricePerPiece": 0.042,
"newPrice": 3.108
}
}
},
{
"id": 478,
"specs": "4 Kerne / 8 GB RAM garantiert / 100 GB SSD Speicher",
"input": {
"cores": 4,
"memory": 8,
"space": 99
},
"cores": "4 Kerne",
"memory": "8 GB RAM garantiert",
"space": "100 GB SSD Speicher",
"price": 19.36,
"partial_price": {
"cores": {
"price": 8,
"pieces": 4,
"pricePerPiece": 2,
"newPrice": 8
},
"memory": {
"price": 7.2,
"pieces": 8,
"pricePerPiece": 0.9,
"newPrice": 7.2
},
"space": {
"price": 4.2,
"pieces": 100,
"pricePerPiece": 0.042,
"newPrice": 4.158
}
}
},
{
"id": 479,
"specs": "4 Kerne / 10 GB RAM garantiert / 150 GB SSD Speicher",
"input": {
"cores": 5,
"memory": 10,
"space": 124
},
"cores": "4 Kerne",
"memory": "10 GB RAM garantiert",
"space": "150 GB SSD Speicher",
"price": 24.21,
"partial_price": {
"cores": {
"price": 8,
"pieces": 4,
"pricePerPiece": 2,
"newPrice": 10
},
"memory": {
"price": 9,
"pieces": 10,
"pricePerPiece": 0.9,
"newPrice": 9
},
"space": {
"price": 6.3,
"pieces": 150,
"pricePerPiece": 0.041999999999999996,
"newPrice": 5.207999999999999
}
}
},
{
"id": 480,
"specs": "6 Kerne / 12 GB RAM garantiert / 150 GB SSD Speicher",
"input": {
"cores": 6,
"memory": 12,
"space": 149
},
"cores": "6 Kerne",
"memory": "12 GB RAM garantiert",
"space": "150 GB SSD Speicher",
"price": 29.06,
"partial_price": {
"cores": {
"price": 12,
"pieces": 6,
"pricePerPiece": 2,
"newPrice": 12
},
"memory": {
"price": 10.8,
"pieces": 12,
"pricePerPiece": 0.9,
"newPrice": 10.8
},
"space": {
"price": 6.3,
"pieces": 150,
"pricePerPiece": 0.041999999999999996,
"newPrice": 6.257999999999999
}
}
},
{
"id": 481,
"specs": "6 Kerne / 12 GB RAM garantiert / 200 GB SSD Speicher",
"input": {
"cores": 7,
"memory": 14,
"space": 173
},
"cores": "6 Kerne",
"memory": "12 GB RAM garantiert",
"space": "200 GB SSD Speicher",
"price": 33.87,
"partial_price": {
"cores": {
"price": 12,
"pieces": 6,
"pricePerPiece": 2,
"newPrice": 14
},
"memory": {
"price": 10.8,
"pieces": 12,
"pricePerPiece": 0.9,
"newPrice": 12.6
},
"space": {
"price": 8.4,
"pieces": 200,
"pricePerPiece": 0.042,
"newPrice": 7.266
}
}
},
{
"id": 482,
"specs": "8 Kerne / 16 GB RAM garantiert / 200 GB SSD Speicher",
"input": {
"cores": 8,
"memory": 16,
"space": 198
},
"cores": "8 Kerne",
"memory": "16 GB RAM garantiert",
"space": "200 GB SSD Speicher",
"price": 38.72,
"partial_price": {
"cores": {
"price": 16,
"pieces": 8,
"pricePerPiece": 2,
"newPrice": 16
},
"memory": {
"price": 14.4,
"pieces": 16,
"pricePerPiece": 0.9,
"newPrice": 14.4
},
"space": {
"price": 8.4,
"pieces": 200,
"pricePerPiece": 0.042,
"newPrice": 8.316
}
}
},
{
"id": 483,
"specs": "8 Kerne / 16 GB RAM garantiert / 400GB SSD Speicher",
"input": {
"cores": 9,
"memory": 18,
"space": 223
},
"cores": "8 Kerne",
"memory": "16 GB RAM garantiert",
"space": "400GB SSD Speicher",
"price": 43.57,
"partial_price": {
"cores": {
"price": 16,
"pieces": 8,
"pricePerPiece": 2,
"newPrice": 18
},
"memory": {
"price": 14.4,
"pieces": 16,
"pricePerPiece": 0.9,
"newPrice": 16.2
},
"space": {
"price": 16.8,
"pieces": 400,
"pricePerPiece": 0.042,
"newPrice": 9.366000000000001
}
}
},
{
"id": 484,
"specs": "12 Kerne / 24 GB RAM garantiert / 400GB SSD Speicher",
"input": {
"cores": 12,
"memory": 24,
"space": 248
},
"cores": "12 Kerne",
"memory": "24 GB RAM garantiert",
"space": "400GB SSD Speicher",
"price": 56.02,
"partial_price": {
"cores": {
"price": 24,
"pieces": 12,
"pricePerPiece": 2,
"newPrice": 24
},
"memory": {
"price": 21.6,
"pieces": 24,
"pricePerPiece": 0.9,
"newPrice": 21.6
},
"space": {
"price": 16.8,
"pieces": 400,
"pricePerPiece": 0.042,
"newPrice": 10.416
}
}
}
]
}
Received response:
Request failed with error:
GET public/promocodes
Example request:
curl --request GET \
--get "https://api.pph.sh/public/promocodes" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/public/promocodes"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"288": "LASSKNACKEN30",
"269": "WASISTMITHASILOS",
"485": "WASISTMITHASILOS"
}
Received response:
Request failed with error:
POST client/pro/activate/free
Example request:
curl --request POST \
"https://api.pph.sh/client/pro/activate/free" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/pro/activate/free"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
GET client/user-voices/categories
Example request:
curl --request GET \
--get "https://api.pph.sh/client/user-voices/categories" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/user-voices/categories"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"data": [
"Vionity",
"Vionity > Cloud Manager",
"Vionity > Dedicated Server",
"Vionity > Domain-Manager",
"Vionity > Kundenbereich",
"Vionity > Webhosting",
"Vionity > PPH Pro",
"Allgemein",
"Support"
]
}
Received response:
Request failed with error:
POST client/user-voices/create
Example request:
curl --request POST \
"https://api.pph.sh/client/user-voices/create" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5" \
--data "{
\"title\": \"voluptate\",
\"description\": \"minus\",
\"category\": \"in\"
}"
const url = new URL(
"https://api.pph.sh/client/user-voices/create"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
let body = {
"title": "voluptate",
"description": "minus",
"category": "in"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
POST client/user-voices/{userVoice_id}/upvote
Example request:
curl --request POST \
"https://api.pph.sh/client/user-voices/1/upvote" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5" \
--data "{
\"weight\": 18
}"
const url = new URL(
"https://api.pph.sh/client/user-voices/1/upvote"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
let body = {
"weight": 18
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Received response:
Request failed with error:
GET public/nav.html
POST public/nav.json
GET public/nav.json
GET client/hostings/{hosting_id}/billingcycles
Example request:
curl --request GET \
--get "https://api.pph.sh/client/hostings/52/billingcycles" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--header "Accept-Language: de; *;q=0.5"
const url = new URL(
"https://api.pph.sh/client/hostings/52/billingcycles"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Accept-Language": "de; *;q=0.5",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
API Playground
https://api.pph.sh/playground
Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"currentCycle": "Monthly",
"recurringAmount": 20.38,
"possibleChanges": {
"monthly": {
"name": "Monthly",
"from": "18.05.2024",
"to": "18.06.2024",
"promocode": "KVM2024",
"promocode_info": {
"code": "KVM2024",
"label": "KVM2024 = wiederkehrend 30%",
"description": "30% Rabatt ges. Laufzeit",
"recurring": true,
"recurring_for": 0,
"recurring_infinite": true,
"value": 30,
"type": "Percentage"
},
"price": 21.85,
"per_month": 21.85
},
"quarterly": {
"name": "Quarterly",
"from": "18.05.2024",
"to": "18.08.2024",
"promocode": "KVM2024",
"promocode_info": {
"code": "KVM2024",
"label": "KVM2024 = wiederkehrend 30%",
"description": "30% Rabatt ges. Laufzeit",
"recurring": true,
"recurring_for": 0,
"recurring_infinite": true,
"value": 30,
"type": "Percentage"
},
"price": 65.54,
"per_month": 21.85
},
"semiannually": {
"name": "Semi-Annually",
"from": "18.05.2024",
"to": "18.11.2024",
"promocode": "KVM2024",
"promocode_info": {
"code": "KVM2024",
"label": "KVM2024 = wiederkehrend 30%",
"description": "30% Rabatt ges. Laufzeit",
"recurring": true,
"recurring_for": 0,
"recurring_infinite": true,
"value": 30,
"type": "Percentage"
},
"price": 131.08,
"per_month": 21.85
},
"annually": {
"name": "Annually",
"from": "18.05.2024",
"to": "18.05.2025",
"promocode": "KVM2024",
"promocode_info": {
"code": "KVM2024",
"label": "KVM2024 = wiederkehrend 30%",
"description": "30% Rabatt ges. Laufzeit",
"recurring": true,
"recurring_for": 0,
"recurring_infinite": true,
"value": 30,
"type": "Percentage"
},
&qu