Beheer je infrastructuur via één API
Automatiseer servers, netwerken, loadbalancers, databanken en DNS met een REST-API. Begin met de voorbeelden hieronder en geef elk script via een afgebakende token de toegang die het nodig heeft.
API-tokens
Maak een token aan onder Team → API-tokens in je dashboard en bevestig met je wachtwoord of authenticatiecode. Hij hoort bij één organisatie en werkt met jouw rol daar.
Authorization: Bearer fst_… Lezen, of lezen & schrijven
Een leestoken kan enkel kijken. Een token met lees- en schrijfrechten kan wijzigingen doen, ook bestellen als hij facturatierechten heeft. Beperk elke token tot gebieden, projecten of één dienst, en geef hem een vervaldatum. Geen enkele token kan teamleden of andere tokens beheren.
Limieten
300 verzoeken per minuut per token. Elke wijziging verschijnt in het activiteitenlog van je organisatie, naast de token die ze deed.
Je eerste calls
-
1. Maak een token aan
Dashboard → Team → API-tokens. Kopieer hem meteen en hou hem uit je code: export FAASTIC_TOKEN=fst_… Het ID van je organisatie staat ernaast.
-
2. Controleer de token
curl https://api.faastic.com/v1/api-token \ -H "Authorization: Bearer $FAASTIC_TOKEN" -
3. Toon je diensten en herstart een server
curl https://api.faastic.com/v1/orgs/$ORG_ID/services \ -H "Authorization: Bearer $FAASTIC_TOKEN"curl -X POST https://api.faastic.com/v1/orgs/$ORG_ID/services/$SERVER_ID/power \ -H "Authorization: Bearer $FAASTIC_TOKEN" \ -H "Content-Type: application/json" \ -d '{"action":"reboot"}'
API-referentie
Elk endpoint dat een token kan aanroepen, gegenereerd uit de live API. Machineleesbaar: openapi.json
organizations
Organizations (billing parties)
GET /
Get an organization
GET /v1/orgs/{orgId} PATCH /
Update organization billing details
PATCH /v1/orgs/{orgId} Request body
name | string | |
vatNumber | string | nullable |
countryCode | string | max 2 chars |
billingEmail | string | nullable |
address | object |
POST /billing/request-invoice-first
Request fiscal invoices BEFORE payment (instead of payment requests) - reviewed by an operator
POST /v1/orgs/{orgId}/billing/request-invoice-first Request body
note | string | max 500 chars |
projects
Projects within an organization
GET /projects
List projects in an organization
GET /v1/orgs/{orgId}/projects POST /projects
Create a project (admin role or higher)
POST /v1/orgs/{orgId}/projects Request body
name* | string |
GET /projects/{projectId}
Get a project
GET /v1/orgs/{orgId}/projects/{projectId} Parameters
projectId(path, required)
PATCH /projects/{projectId}
Rename a project (admin role or higher)
PATCH /v1/orgs/{orgId}/projects/{projectId} Parameters
projectId(path, required)
Request body
name* | string |
DELETE /projects/{projectId}
Delete a project (admin role or higher)
DELETE /v1/orgs/{orgId}/projects/{projectId} Parameters
projectId(path, required)
services
Your services: servers (power, console, snapshots, backups, firewall, volumes, ISO/rescue), hosting and add-ons
GET /services
List all services in an organization
GET /v1/orgs/{orgId}/services Parameters
includeTerminated(query)
GET /projects/{projectId}/services
List services in a project
GET /v1/orgs/{orgId}/projects/{projectId}/services Parameters
projectId(path, required)
GET /services/{serviceId}
Get a service
GET /v1/orgs/{orgId}/services/{serviceId} Parameters
serviceId(path, required)
PATCH /services/{serviceId}/protection
Delete protection (blocks cancelling) / rebuild protection (blocks reinstall, rollback, restore)
PATCH /v1/orgs/{orgId}/services/{serviceId}/protection Parameters
serviceId(path, required)
Request body
delete | boolean | |
rebuild | boolean |
PUT /services/{serviceId}/labels
Replace a service's labels (key → value, max 20)
PUT /v1/orgs/{orgId}/services/{serviceId}/labels Parameters
serviceId(path, required)
Request body
labels* | object |
POST /services/{id}/power
Power-control your VM (start / stop / reboot) - async
POST /v1/orgs/{orgId}/services/{id}/power Parameters
id(path, required)
Request body
action* | string | one of "start", "stop", "reboot", "power_cycle" |
GET /services/{id}/ipv6
This server's IPv6 subnet + address (if enabled)
GET /v1/orgs/{orgId}/services/{id}/ipv6 Parameters
id(path, required)
PUT /services/{id}/ipv6
Enable IPv6 (assigns a subnet) or change the server's IPv6 address - applied on the next restart
PUT /v1/orgs/{orgId}/services/{id}/ipv6 Parameters
id(path, required)
Request body
address | string | max 64 chars |
DELETE /services/{id}/ipv6
Disable IPv6 and return the subnet - its traffic stops now; the server's network config is cleaned up on the next restart
DELETE /v1/orgs/{orgId}/services/{id}/ipv6 Parameters
id(path, required)
POST /services/{id}/console
Open a console session for your VM (returns a websocket URL to our broker)
POST /v1/orgs/{orgId}/services/{id}/console Parameters
id(path, required)
Request body
type | string | one of "vnc", "term" |
GET /services/{id}/credentials
Reveal the VM's initial login (decrypted from the provisioning record)
GET /v1/orgs/{orgId}/services/{id}/credentials Parameters
id(path, required)
GET /services/{id}/features
Plan entitlements (snapshots/firewall/resize) + usage - drives which controls to show
GET /v1/orgs/{orgId}/services/{id}/features Parameters
id(path, required)
GET /services/{id}/vm-status
Live VM status (running/stopped, cpu%, mem, uptime)
GET /v1/orgs/{orgId}/services/{id}/vm-status Parameters
id(path, required)
GET /services/{id}/metrics
Resource graphs (CPU/RAM/disk/net) for a timeframe
GET /v1/orgs/{orgId}/services/{id}/metrics Parameters
timeframe(query)id(path, required)
GET /services/{id}/snapshots
List VM snapshots
GET /v1/orgs/{orgId}/services/{id}/snapshots Parameters
id(path, required)
POST /services/{id}/snapshots
Create a snapshot (within your plan's quota)
POST /v1/orgs/{orgId}/services/{id}/snapshots Parameters
id(path, required)
Request body
name* | string | |
description | string |
POST /services/{id}/snapshots/{name}/rollback
Roll the VM back to a snapshot
POST /v1/orgs/{orgId}/services/{id}/snapshots/{name}/rollback Parameters
id(path, required)name(path, required)
DELETE /services/{id}/snapshots/{name}
Delete a snapshot
DELETE /v1/orgs/{orgId}/services/{id}/snapshots/{name} Parameters
id(path, required)name(path, required)
GET /services/{id}/firewall
Firewall rules + options for your VM
GET /v1/orgs/{orgId}/services/{id}/firewall Parameters
id(path, required)
POST /services/{id}/firewall/rules
Add an inbound firewall rule (e.g. open 80/443)
POST /v1/orgs/{orgId}/services/{id}/firewall/rules Parameters
id(path, required)
Request body
action* | string | one of "ACCEPT", "DROP", "REJECT" |
proto | string | one of "tcp", "udp", "icmp" |
dport | string | max 11 chars |
source | string | max 43 chars |
comment | string | max 64 chars |
DELETE /services/{id}/firewall/rules/{pos}
Delete a firewall rule by position
DELETE /v1/orgs/{orgId}/services/{id}/firewall/rules/{pos} Parameters
id(path, required)pos(path, required)
POST /services/{id}/resize
Resize the VM within your plan's limits (CPU/RAM/grow disk)
POST /v1/orgs/{orgId}/services/{id}/resize Parameters
id(path, required)
Request body
vcpu | integer | 1… |
ramMb | integer | 256… |
diskGb | integer | 1… |
GET /services/{id}/network
The VM's assigned IP / gateway / PTR (null if DHCP)
GET /v1/orgs/{orgId}/services/{id}/network Parameters
id(path, required)
GET /services/{id}/backups
List VM backups
GET /v1/orgs/{orgId}/services/{id}/backups Parameters
id(path, required)
POST /services/{id}/backups
Create a backup (within your plan's quota)
POST /v1/orgs/{orgId}/services/{id}/backups Parameters
id(path, required)
Request body
note | string |
POST /services/{id}/backups/restore
Restore the VM from a backup (DESTRUCTIVE - overwrites the disk)
POST /v1/orgs/{orgId}/services/{id}/backups/restore Parameters
id(path, required)
Request body
volid* | string |
POST /services/{id}/backups/delete
Delete a backup
POST /v1/orgs/{orgId}/services/{id}/backups/delete Parameters
id(path, required)
Request body
volid* | string |
POST /services/{id}/reinstall
Reinstall the OS - DESTROYS all data, keeps the IP + SSH key (async)
POST /v1/orgs/{orgId}/services/{id}/reinstall Parameters
id(path, required)
Request body
confirm* | boolean |
POST /services/{id}/rdns
Request reverse DNS (PTR) for the VM's IP - opens a support ticket
POST /v1/orgs/{orgId}/services/{id}/rdns Parameters
id(path, required)
Request body
ptr* | string |
GET /services/{id}/reset-password
How a password reset works on this server: cloud-init (restarts it; its SSH host key changes) or the guest agent (in place)
GET /v1/orgs/{orgId}/services/{id}/reset-password Parameters
id(path, required)
POST /services/{id}/reset-password
Set a new password for the server's login user. Returned once. With cloud-init the server restarts and its SSH host key changes.
POST /v1/orgs/{orgId}/services/{id}/reset-password Parameters
id(path, required)
GET /services/{id}/isos
ISO library for this server + what's mounted + whether rescue mode is available
GET /v1/orgs/{orgId}/services/{id}/isos Parameters
id(path, required)
POST /services/{id}/iso
Mount an ISO from the library (boot: boot from it on the next restart)
POST /v1/orgs/{orgId}/services/{id}/iso Parameters
id(path, required)
Request body
volid* | string | max 255 chars |
boot | boolean |
DELETE /services/{id}/iso
Unmount the ISO (and restore the boot order)
DELETE /v1/orgs/{orgId}/services/{id}/iso Parameters
id(path, required)
POST /services/{id}/rescue
Boot into rescue mode (enabled: true) or back into the server's own system (false). Restarts the server.
POST /v1/orgs/{orgId}/services/{id}/rescue Parameters
id(path, required)
Request body
enabled* | boolean |
GET /topology
Your infrastructure as a graph: services, load-balancer targets and health, private networks, current traffic
GET /v1/orgs/{orgId}/topology GET /services/{id}/hosting
Live usage + quotas for a shared-hosting account
GET /v1/orgs/{orgId}/services/{id}/hosting Parameters
id(path, required)
GET /services/{id}/hosting/dns-check
Live DNS status for this hosting domain (delegation + A records)
GET /v1/orgs/{orgId}/services/{id}/hosting/dns-check Parameters
id(path, required)
POST /services/{id}/hosting/dns-setup
Use our DNS for this hosting domain (creates the zone, pre-populated)
POST /v1/orgs/{orgId}/services/{id}/hosting/dns-setup Parameters
id(path, required)
GET /services/{id}/storage
Storage overview (usage/quota/shares/access details)
GET /v1/orgs/{orgId}/services/{id}/storage Parameters
id(path, required)
GET /services/{id}/storage/snapshots
List your storage snapshots
GET /v1/orgs/{orgId}/services/{id}/storage/snapshots Parameters
id(path, required)
POST /services/{id}/storage/snapshots
Create a storage snapshot
POST /v1/orgs/{orgId}/services/{id}/storage/snapshots Parameters
id(path, required)
Request body
name* | string |
DELETE /services/{id}/storage/snapshots/{name}
Delete a storage snapshot (by name)
DELETE /v1/orgs/{orgId}/services/{id}/storage/snapshots/{name} Parameters
id(path, required)name(path, required)
GET /services/{serviceId}/addons
Add-ons available for + attached to a service
GET /v1/orgs/{orgId}/services/{serviceId}/addons Parameters
serviceId(path, required)
POST /services/{serviceId}/addons
Attach an add-on to a service (bills on the next renewal)
POST /v1/orgs/{orgId}/services/{serviceId}/addons Parameters
serviceId(path, required)
Request body
offeringId* | string (uuid) |
DELETE /services/{serviceId}/addons/{addonId}
Remove an add-on (stops billing next renewal; no refund)
DELETE /v1/orgs/{orgId}/services/{serviceId}/addons/{addonId} Parameters
serviceId(path, required)addonId(path, required)
POST /services/{serviceId}/addons/{addonId}/move
Move an extra IP (floating IP) to another server of this organization
POST /v1/orgs/{orgId}/services/{serviceId}/addons/{addonId}/move Parameters
serviceId(path, required)addonId(path, required)
Request body
targetServiceId* | string (uuid) |
domains
Domains: register, transfer, renew, nameservers, transfer lock and auth codes
GET /domains/search
Search a domain across the TLDs we offer (availability + retail price)
GET /v1/orgs/{orgId}/domains/search Parameters
name(query, required)
POST /domains/order
Order a domain - register a new one or transfer one in (→ checkout)
POST /v1/orgs/{orgId}/domains/order Request body
domain* | string | |
action* | string | one of "register", "transfer" |
years | integer | 1…10 |
authCode | string | |
projectId | string | |
contactId | string (uuid) | |
registrant | object | |
couponCode | string | |
paymentMethod | string | one of "card", "bancontact", "ideal", "bank_transfer" |
successUrl | string | |
cancelUrl | string |
GET /domains
List this org's domains
GET /v1/orgs/{orgId}/domains GET /domains/{id}
Domain detail (live status + nameservers)
GET /v1/orgs/{orgId}/domains/{id} Parameters
id(path, required)
POST /domains/{id}/setup-dns
Point this domain's nameservers at us and create its PowerDNS zone
POST /v1/orgs/{orgId}/domains/{id}/setup-dns Parameters
id(path, required)
PUT /domains/{id}/nameservers
Set the domain's nameservers
PUT /v1/orgs/{orgId}/domains/{id}/nameservers Parameters
id(path, required)
Request body
nameservers* | string[] |
GET /domains/{id}/authcode
Get the EPP/auth code (to transfer the domain away)
GET /v1/orgs/{orgId}/domains/{id}/authcode Parameters
id(path, required)
PUT /domains/{id}/autorenew
Toggle automatic renewal (auto-charge the saved card on renewal)
PUT /v1/orgs/{orgId}/domains/{id}/autorenew Parameters
id(path, required)
Request body
on* | boolean |
PUT /domains/{id}/lock
Lock or unlock the domain (registrar transfer lock)
PUT /v1/orgs/{orgId}/domains/{id}/lock Parameters
id(path, required)
Request body
locked* | boolean |
POST /domains/{id}/renew
Renew the domain now (extends the registration by its term → checkout)
POST /v1/orgs/{orgId}/domains/{id}/renew Parameters
id(path, required)
Request body
successUrl | string | |
cancelUrl | string | |
paymentMethod | string | one of "card", "bancontact", "ideal", "bank_transfer" |
GET /domain-contacts
List saved registry contacts
GET /v1/orgs/{orgId}/domain-contacts POST /domain-contacts
Save a registry contact
POST /v1/orgs/{orgId}/domain-contacts Request body
label | string | |
firstName* | string | |
lastName* | string | |
email* | string (email) | |
phone* | string | |
companyName | string | |
street* | string | |
number | string | |
zipcode* | string | |
city* | string | |
country* | string | max 2 chars |
DELETE /domain-contacts/{id}
Delete a saved registry contact
DELETE /v1/orgs/{orgId}/domain-contacts/{id} Parameters
id(path, required)
GET /v1/domains/check
Public domain availability + retail price (no auth)
GET /v1/domains/check Parameters
name(query, required)
GET /v1/domains/tlds
Public TLD price book - what we sell and for how much (no auth)
GET /v1/domains/tlds dns
DNS zones and records on our nameservers, including DNSSEC
GET /dns/zones
List this org's DNS zones
GET /v1/orgs/{orgId}/dns/zones POST /dns/zones
Create a DNS zone under one of your projects
POST /v1/orgs/{orgId}/dns/zones Request body
name* | string | |
projectId | string | |
dnssec | boolean | |
pointNameservers | boolean |
GET /dns/zones/{id}/dnssec
DNSSEC status of a zone (signing + DS at the parent)
GET /v1/orgs/{orgId}/dns/zones/{id}/dnssec Parameters
id(path, required)
POST /dns/zones/{id}/dnssec
Switch DNSSEC on or off. On: sign, then publish the key once the domain points at us. Off: withdraw the DS, unsign after it's gone (≥48h).
POST /v1/orgs/{orgId}/dns/zones/{id}/dnssec Parameters
id(path, required)
Request body
enabled* | boolean |
GET /dns/zones/{id}
Zone detail + records
GET /v1/orgs/{orgId}/dns/zones/{id} Parameters
id(path, required)
DELETE /dns/zones/{id}
Delete a zone you own
DELETE /v1/orgs/{orgId}/dns/zones/{id} Parameters
id(path, required)
POST /dns/zones/{id}/records
Add a record (multiple values per name+type allowed, except CNAME)
POST /v1/orgs/{orgId}/dns/zones/{id}/records Parameters
id(path, required)
Request body
name* | string | |
type* | string | |
content* | string | |
ttl | integer | 60… |
priority | integer |
PATCH /dns/zones/{id}/records/{recordId}
Edit a record value
PATCH /v1/orgs/{orgId}/dns/zones/{id}/records/{recordId} Parameters
id(path, required)recordId(path, required)
Request body
content | string | |
ttl | integer | 60… |
priority | integer |
DELETE /dns/zones/{id}/records/{recordId}
Delete a record
DELETE /v1/orgs/{orgId}/dns/zones/{id}/records/{recordId} Parameters
id(path, required)recordId(path, required)
firewalls
Firewall templates: one rule set applied to many servers
GET /firewalls
Firewall templates of this organization, with the servers they're applied to
GET /v1/orgs/{orgId}/firewalls POST /firewalls
Create a firewall template
POST /v1/orgs/{orgId}/firewalls Request body
name* | string | max 60 chars |
rules | object[] |
PUT /firewalls/{fid}
Edit a template - rule changes reach every server it's applied to
PUT /v1/orgs/{orgId}/firewalls/{fid} Parameters
fid(path, required)
Request body
name | string | max 60 chars |
rules | object[] |
DELETE /firewalls/{fid}
Delete a template (its rules are removed from every server first)
DELETE /v1/orgs/{orgId}/firewalls/{fid} Parameters
fid(path, required)
POST /firewalls/{fid}/apply
Apply a template to servers
POST /v1/orgs/{orgId}/firewalls/{fid}/apply Parameters
fid(path, required)
Request body
serviceIds* | string[] |
POST /firewalls/{fid}/remove
Take a template off servers (its rules are removed from them)
POST /v1/orgs/{orgId}/firewalls/{fid}/remove Parameters
fid(path, required)
Request body
serviceIds* | string[] |
networks
Private networks between your servers
GET /networks
Private networks of this organization and their servers
GET /v1/orgs/{orgId}/networks POST /networks
Create a private network (RFC 1918 range, /16-/28)
POST /v1/orgs/{orgId}/networks Request body
name* | string | max 60 chars |
cidr* | string | max 18 chars |
DELETE /networks/{nid}
Delete a private network (detach its servers first)
DELETE /v1/orgs/{orgId}/networks/{nid} Parameters
nid(path, required)
POST /networks/{nid}/attach
Attach a server: adds a NIC on the network and assigns the next free address (cloud-init, next boot)
POST /v1/orgs/{orgId}/networks/{nid}/attach Parameters
nid(path, required)
Request body
serviceId* | string (uuid) |
POST /networks/{nid}/detach
Detach a server (removes its NIC on the network)
POST /v1/orgs/{orgId}/networks/{nid}/detach Parameters
nid(path, required)
Request body
serviceId* | string (uuid) |
cart
Ordering: check out several products in one payment
POST /cart/checkout
Check out a cart of products (services + domains) as ONE bundled invoice + checkout
POST /v1/orgs/{orgId}/cart/checkout Request body
projectId | string (uuid) | |
items* | object[] | |
couponCode | string | |
autoPay | boolean | |
paymentMethod | string | one of "card", "bancontact", "ideal", "bank_transfer" |
successUrl | string | |
cancelUrl | string |
hosting
Web hosting orders
GET /services/{id}/hosting/overview
Account usage vs plan limits, links
GET /v1/orgs/{orgId}/services/{id}/hosting/overview Parameters
id(path, required)
GET /services/{id}/hosting/stats/history
Monthly disk + bandwidth history
GET /v1/orgs/{orgId}/services/{id}/hosting/stats/history Parameters
id(path, required)
GET /services/{id}/hosting/stats/sites
Disk + bandwidth per website
GET /v1/orgs/{orgId}/services/{id}/hosting/stats/sites Parameters
id(path, required)
GET /services/{id}/hosting/stats/traffic/{domain}
Traffic report from the recent access log
GET /v1/orgs/{orgId}/services/{id}/hosting/stats/traffic/{domain} Parameters
id(path, required)domain(path, required)
GET /services/{id}/hosting/activity
Hosting activity log
GET /v1/orgs/{orgId}/services/{id}/hosting/activity Parameters
id(path, required)
GET /services/{id}/hosting/notices
Messages from the hosting server (backup created/restored, …)
GET /v1/orgs/{orgId}/services/{id}/hosting/notices Parameters
id(path, required)
POST /services/{id}/hosting/notices/{notice}/read
Mark a server message as read
POST /v1/orgs/{orgId}/services/{id}/hosting/notices/{notice}/read Parameters
id(path, required)notice(path, required)
DELETE /services/{id}/hosting/notices/{notice}
Dismiss a server message
DELETE /v1/orgs/{orgId}/services/{id}/hosting/notices/{notice} Parameters
id(path, required)notice(path, required)
GET /services/{id}/hosting/logins
Panel/API sign-in history
GET /v1/orgs/{orgId}/services/{id}/hosting/logins Parameters
id(path, required)
GET /services/{id}/hosting/ssh-keys
SSH/SFTP keys
GET /v1/orgs/{orgId}/services/{id}/hosting/ssh-keys Parameters
id(path, required)
POST /services/{id}/hosting/ssh-keys
Add an SSH key
POST /v1/orgs/{orgId}/services/{id}/hosting/ssh-keys Parameters
id(path, required)
Request body
key* | string | OpenSSH public key, e.g. "ssh-ed25519 AAAA… me@laptop" |
DELETE /services/{id}/hosting/ssh-keys/{keyId}
Remove an SSH key
DELETE /v1/orgs/{orgId}/services/{id}/hosting/ssh-keys/{keyId} Parameters
id(path, required)keyId(path, required)
PUT /services/{id}/hosting/contact
Where the server's own messages (cron output, notices) are e-mailed
PUT /v1/orgs/{orgId}/services/{id}/hosting/contact Parameters
id(path, required)
Request body
email* | string | E-mail address for the server's messages (cron output, notices) |
POST /services/{id}/hosting/password
Change the hosting account password
POST /v1/orgs/{orgId}/services/{id}/hosting/password Parameters
id(path, required)
Request body
password* | string | New hosting account password (min. 10 characters, letters and digits) |
POST /services/{id}/hosting/panel-login
Allow or block direct sign-in to the hosting panel
POST /v1/orgs/{orgId}/services/{id}/hosting/panel-login Parameters
id(path, required)
Request body
enabled* | boolean | Allow signing in to the classic hosting panel directly |
GET /services/{id}/hosting/web
Websites
GET /v1/orgs/{orgId}/services/{id}/hosting/web Parameters
id(path, required)
POST /services/{id}/hosting/web
Add a website
POST /v1/orgs/{orgId}/services/{id}/hosting/web Parameters
id(path, required)
Request body
domain* | string | Domain or subdomain to serve, e.g. "example.com" or "blog.example.com" |
aliases | string[] | Extra host names served by the same site (www.<domain> is added automatically) |
php | string | PHP version, e.g. "8.3" (see GET …/hosting/php-versions); default = the server's default |
GET /services/{id}/hosting/web-php
PHP versions available on this server
GET /v1/orgs/{orgId}/services/{id}/hosting/web-php Parameters
id(path, required)
GET /services/{id}/hosting/web-templates
Server templates customers may pick (web, proxy), if the server's policy allows it
GET /v1/orgs/{orgId}/services/{id}/hosting/web-templates Parameters
id(path, required)
GET /services/{id}/hosting/web/{domain}
One website
GET /v1/orgs/{orgId}/services/{id}/hosting/web/{domain} Parameters
id(path, required)domain(path, required)
PATCH /services/{id}/hosting/web/{domain}
Change website settings
PATCH /v1/orgs/{orgId}/services/{id}/hosting/web/{domain} Parameters
id(path, required)domain(path, required)
Request body
php | string | PHP version, e.g. "8.3" |
webTemplate | string | Web server template (see GET …/hosting/web-templates; only when the server lets customers pick) |
proxyTemplate | string | Proxy (nginx) template, e.g. "default", "caching", "hosting" (see GET …/hosting/web-templates) |
redirect | object | nullable · Redirect every request (null removes it) |
docroot | object | nullable · Serve another site's folder (null restores the default) |
directoryListing | boolean | Show folder contents when there's no index file |
cache | object | Page cache |
stats | object | Visitor statistics (AWStats) |
forceSsl | boolean | Redirect http:// to https:// |
hsts | boolean | Send Strict-Transport-Security (browsers remember to use https) |
suspended | boolean | Take the site offline (true) or back online (false) |
DELETE /services/{id}/hosting/web/{domain}
Delete a website (files, logs, SSL)
DELETE /v1/orgs/{orgId}/services/{id}/hosting/web/{domain} Parameters
id(path, required)domain(path, required)
POST /services/{id}/hosting/web/{domain}/aliases
Add an alias
POST /v1/orgs/{orgId}/services/{id}/hosting/web/{domain}/aliases Parameters
id(path, required)domain(path, required)
Request body
alias* | string | Extra host name for this site |
DELETE /services/{id}/hosting/web/{domain}/aliases/{alias}
Remove an alias
DELETE /v1/orgs/{orgId}/services/{id}/hosting/web/{domain}/aliases/{alias} Parameters
id(path, required)domain(path, required)alias(path, required)
GET /services/{id}/hosting/web/{domain}/ssl
Certificate details
GET /v1/orgs/{orgId}/services/{id}/hosting/web/{domain}/ssl Parameters
id(path, required)domain(path, required)
DELETE /services/{id}/hosting/web/{domain}/ssl
Remove SSL
DELETE /v1/orgs/{orgId}/services/{id}/hosting/web/{domain}/ssl Parameters
id(path, required)domain(path, required)
POST /services/{id}/hosting/web/{domain}/ssl/letsencrypt
Issue a Let's Encrypt certificate
POST /v1/orgs/{orgId}/services/{id}/hosting/web/{domain}/ssl/letsencrypt Parameters
id(path, required)domain(path, required)
POST /services/{id}/hosting/web/{domain}/ssl/certificate
Install your own certificate (PEM) - replaces Let's Encrypt for this website
POST /v1/orgs/{orgId}/services/{id}/hosting/web/{domain}/ssl/certificate Parameters
id(path, required)domain(path, required)
Request body
certificate* | string | max 65536 chars · The certificate in PEM. A full chain is fine: the one matching the key is used, the rest becomes the chain. |
privateKey* | string | max 65536 chars · Its private key in PEM, without a passphrase. Installed on the hosting server only; Faastic doesn't keep it. |
chain | string | max 65536 chars · Intermediate certificate(s) in PEM (the CA bundle). Optional; any order. |
POST /services/{id}/hosting/web/{domain}/cache/purge
Purge the page cache
POST /v1/orgs/{orgId}/services/{id}/hosting/web/{domain}/cache/purge Parameters
id(path, required)domain(path, required)
POST /services/{id}/hosting/web/{domain}/http-auth
Add/update a password-protection user
POST /v1/orgs/{orgId}/services/{id}/hosting/web/{domain}/http-auth Parameters
id(path, required)domain(path, required)
Request body
user* | string | User name |
password* | string | Password |
DELETE /services/{id}/hosting/web/{domain}/http-auth/{user}
Remove a password-protection user
DELETE /v1/orgs/{orgId}/services/{id}/hosting/web/{domain}/http-auth/{user} Parameters
id(path, required)domain(path, required)user(path, required)
POST /services/{id}/hosting/web/{domain}/ftp
Add an FTP account
POST /v1/orgs/{orgId}/services/{id}/hosting/web/{domain}/ftp Parameters
id(path, required)domain(path, required)
Request body
user* | string | FTP user name (the account prefix is added) |
password* | string | Password |
path | string | Folder inside the site the user is confined to (optional) |
PATCH /services/{id}/hosting/web/{domain}/ftp/{ftpUser}
Change an FTP account
PATCH /v1/orgs/{orgId}/services/{id}/hosting/web/{domain}/ftp/{ftpUser} Parameters
id(path, required)domain(path, required)ftpUser(path, required)
Request body
password | string | New password |
path | string | New folder inside the site |
DELETE /services/{id}/hosting/web/{domain}/ftp/{ftpUser}
Remove an FTP account
DELETE /v1/orgs/{orgId}/services/{id}/hosting/web/{domain}/ftp/{ftpUser} Parameters
id(path, required)domain(path, required)ftpUser(path, required)
GET /services/{id}/hosting/web/{domain}/logs/{kind}
Access or error log (recent lines)
GET /v1/orgs/{orgId}/services/{id}/hosting/web/{domain}/logs/{kind} Parameters
lines(query)id(path, required)domain(path, required)kind(path, required)
GET /services/{id}/hosting/apps
Installable apps (Hestia's installers, filtered to this server)
GET /v1/orgs/{orgId}/services/{id}/hosting/apps Parameters
id(path, required)
GET /services/{id}/hosting/apps/jobs
Recent app installs and their status
GET /v1/orgs/{orgId}/services/{id}/hosting/apps/jobs Parameters
id(path, required)
POST /services/{id}/hosting/apps/{app}/install
Install an app on one of this account's websites (async job)
POST /v1/orgs/{orgId}/services/{id}/hosting/apps/{app}/install Parameters
id(path, required)app(path, required)
Request body
domain* | string | Website to install on |
php | string | PHP version to switch the site to first (optional) |
options | object | The app's fields (see GET …/hosting/apps: e.g. full_name, email, password) |
GET /services/{id}/hosting/mail
Mail domains
GET /v1/orgs/{orgId}/services/{id}/hosting/mail Parameters
id(path, required)
POST /services/{id}/hosting/mail
Add a mail domain
POST /v1/orgs/{orgId}/services/{id}/hosting/mail Parameters
id(path, required)
Request body
domain* | string | Mail domain, e.g. "example.com" |
antispam | boolean | Spam filter |
antivirus | boolean | Virus scanning |
dkim | boolean | DKIM signing |
GET /services/{id}/hosting/mail/{domain}
One mail domain
GET /v1/orgs/{orgId}/services/{id}/hosting/mail/{domain} Parameters
id(path, required)domain(path, required)
PATCH /services/{id}/hosting/mail/{domain}
Change mail domain settings
PATCH /v1/orgs/{orgId}/services/{id}/hosting/mail/{domain} Parameters
id(path, required)domain(path, required)
Request body
antispam | boolean | Spam filter |
antivirus | boolean | Virus scanning |
dkim | boolean | DKIM signing |
rejectSpam | boolean | Refuse obvious spam at the door |
catchall | string | nullable · Deliver mail for unknown addresses here (empty string = reject) |
webmail | string | nullable · Webmail client: "roundcube" or "snappymail" (null or empty switches webmail off) |
rateLimit | integer | Max. messages per hour for the domain (1-10000) |
suspended | boolean | Pause the mail domain |
DELETE /services/{id}/hosting/mail/{domain}
Delete a mail domain and all its mailboxes
DELETE /v1/orgs/{orgId}/services/{id}/hosting/mail/{domain} Parameters
id(path, required)domain(path, required)
GET /services/{id}/hosting/mail/{domain}/ssl
Certificate details for mail.<domain>
GET /v1/orgs/{orgId}/services/{id}/hosting/mail/{domain}/ssl Parameters
id(path, required)domain(path, required)
DELETE /services/{id}/hosting/mail/{domain}/ssl
Remove the mail domain's certificate (mail clients fall back to the server's host name)
DELETE /v1/orgs/{orgId}/services/{id}/hosting/mail/{domain}/ssl Parameters
id(path, required)domain(path, required)
POST /services/{id}/hosting/mail/{domain}/ssl/certificate
Install your own certificate for mail.<domain> (PEM) - replaces Let's Encrypt
POST /v1/orgs/{orgId}/services/{id}/hosting/mail/{domain}/ssl/certificate Parameters
id(path, required)domain(path, required)
Request body
certificate* | string | max 65536 chars · The certificate in PEM. A full chain is fine: the one matching the key is used, the rest becomes the chain. |
privateKey* | string | max 65536 chars · Its private key in PEM, without a passphrase. Installed on the hosting server only; Faastic doesn't keep it. |
chain | string | max 65536 chars · Intermediate certificate(s) in PEM (the CA bundle). Optional; any order. |
PUT /services/{id}/hosting/mail/{domain}/relay
Set (or clear with null) an SMTP relay
PUT /v1/orgs/{orgId}/services/{id}/hosting/mail/{domain}/relay Parameters
id(path, required)domain(path, required)
Request body
host | string | Relay host |
port | integer | 1…65535 · Port |
username | string | User name |
password | string | Password |
GET /services/{id}/hosting/mail/{domain}/dns
DNS records this mail domain needs
GET /v1/orgs/{orgId}/services/{id}/hosting/mail/{domain}/dns Parameters
id(path, required)domain(path, required)
GET /services/{id}/hosting/mail/{domain}/accounts
Mailboxes
GET /v1/orgs/{orgId}/services/{id}/hosting/mail/{domain}/accounts Parameters
id(path, required)domain(path, required)
POST /services/{id}/hosting/mail/{domain}/accounts
Create a mailbox
POST /v1/orgs/{orgId}/services/{id}/hosting/mail/{domain}/accounts Parameters
id(path, required)domain(path, required)
Request body
account* | string | Local part, e.g. "info" |
password* | string | Mailbox password |
quotaMb | integer | nullable · Quota in MB (null = unlimited) |
GET /services/{id}/hosting/mail/{domain}/accounts/{account}
One mailbox (+ autoreply text)
GET /v1/orgs/{orgId}/services/{id}/hosting/mail/{domain}/accounts/{account} Parameters
id(path, required)domain(path, required)account(path, required)
PATCH /services/{id}/hosting/mail/{domain}/accounts/{account}
Change a mailbox
PATCH /v1/orgs/{orgId}/services/{id}/hosting/mail/{domain}/accounts/{account} Parameters
id(path, required)domain(path, required)account(path, required)
Request body
password | string | New password |
quotaMb | integer | nullable · Quota in MB (null = unlimited) |
rateLimit | integer | Max. messages per hour |
suspended | boolean | Pause the mailbox |
forwardOnly | boolean | Forward without keeping a copy |
DELETE /services/{id}/hosting/mail/{domain}/accounts/{account}
Delete a mailbox and its mail
DELETE /v1/orgs/{orgId}/services/{id}/hosting/mail/{domain}/accounts/{account} Parameters
id(path, required)domain(path, required)account(path, required)
POST /services/{id}/hosting/mail/{domain}/accounts/{account}/aliases
Add a mailbox alias
POST /v1/orgs/{orgId}/services/{id}/hosting/mail/{domain}/accounts/{account}/aliases Parameters
id(path, required)domain(path, required)account(path, required)
Request body
alias* | string | Alias local part, e.g. "sales" |
DELETE /services/{id}/hosting/mail/{domain}/accounts/{account}/aliases/{alias}
Remove a mailbox alias
DELETE /v1/orgs/{orgId}/services/{id}/hosting/mail/{domain}/accounts/{account}/aliases/{alias} Parameters
id(path, required)domain(path, required)account(path, required)alias(path, required)
POST /services/{id}/hosting/mail/{domain}/accounts/{account}/forwards
Add a forward
POST /v1/orgs/{orgId}/services/{id}/hosting/mail/{domain}/accounts/{account}/forwards Parameters
id(path, required)domain(path, required)account(path, required)
Request body
to* | string | Address to forward to |
DELETE /services/{id}/hosting/mail/{domain}/accounts/{account}/forwards/{to}
Remove a forward
DELETE /v1/orgs/{orgId}/services/{id}/hosting/mail/{domain}/accounts/{account}/forwards/{to} Parameters
id(path, required)domain(path, required)account(path, required)to(path, required)
PUT /services/{id}/hosting/mail/{domain}/accounts/{account}/autoreply
Set (or clear with null) the autoreply
PUT /v1/orgs/{orgId}/services/{id}/hosting/mail/{domain}/accounts/{account}/autoreply Parameters
id(path, required)domain(path, required)account(path, required)
Request body
message | string | nullable · Autoreply text; null switches it off |
GET /services/{id}/hosting/databases
Databases
GET /v1/orgs/{orgId}/services/{id}/hosting/databases Parameters
id(path, required)
POST /services/{id}/hosting/databases
Create a database
POST /v1/orgs/{orgId}/services/{id}/hosting/databases Parameters
id(path, required)
Request body
name* | string | Database name (the account prefix is added) |
user | string | Database user (default = the name) |
password* | string | Database password |
type | string | "mysql" or "pgsql" (see GET …/hosting/databases → types) |
PATCH /services/{id}/hosting/databases/{db}
Change a database (password, user, suspend)
PATCH /v1/orgs/{orgId}/services/{id}/hosting/databases/{db} Parameters
id(path, required)db(path, required)
Request body
password | string | New password |
user | string | New user name |
suspended | boolean | Pause the database |
DELETE /services/{id}/hosting/databases/{db}
Delete a database
DELETE /v1/orgs/{orgId}/services/{id}/hosting/databases/{db} Parameters
id(path, required)db(path, required)
POST /services/{id}/hosting/databases/{db}/login
Temporary phpMyAdmin login (15 min)
POST /v1/orgs/{orgId}/services/{id}/hosting/databases/{db}/login Parameters
id(path, required)db(path, required)
GET /services/{id}/hosting/databases/{db}/dump
Download a SQL dump
GET /v1/orgs/{orgId}/services/{id}/hosting/databases/{db}/dump Parameters
id(path, required)db(path, required)
GET /services/{id}/hosting/cron
Cron jobs
GET /v1/orgs/{orgId}/services/{id}/hosting/cron Parameters
id(path, required)
POST /services/{id}/hosting/cron
Add a cron job
POST /v1/orgs/{orgId}/services/{id}/hosting/cron Parameters
id(path, required)
Request body
min* | string | Minute (0-59, *, */5, 1,30 …) |
hour* | string | Hour (0-23 …) |
day* | string | Day of month (1-31 …) |
month* | string | Month (1-12 …) |
wday* | string | Day of week (0-7, 0 and 7 = Sunday …) |
command* | string | Command, run as the hosting user |
GET /services/{id}/hosting/cron-reports
Whether cron output is e-mailed, and to which address
GET /v1/orgs/{orgId}/services/{id}/hosting/cron-reports Parameters
id(path, required)
PUT /services/{id}/hosting/cron-reports
E-mail cron output on/off
PUT /v1/orgs/{orgId}/services/{id}/hosting/cron-reports Parameters
id(path, required)
Request body
enabled* | boolean | E-mail each job's output to the account contact |
PATCH /services/{id}/hosting/cron/{job}
Change / pause a cron job
PATCH /v1/orgs/{orgId}/services/{id}/hosting/cron/{job} Parameters
id(path, required)job(path, required)
Request body
min | string | Minute |
hour | string | Hour |
day | string | Day of month |
month | string | Month |
wday | string | Day of week |
command | string | Command |
suspended | boolean | Pause (true) or resume (false) |
DELETE /services/{id}/hosting/cron/{job}
Delete a cron job
DELETE /v1/orgs/{orgId}/services/{id}/hosting/cron/{job} Parameters
id(path, required)job(path, required)
GET /services/{id}/hosting/backups
Backups
GET /v1/orgs/{orgId}/services/{id}/hosting/backups Parameters
id(path, required)
POST /services/{id}/hosting/backups
Create a backup now (queued)
POST /v1/orgs/{orgId}/services/{id}/hosting/backups Parameters
id(path, required)
POST /services/{id}/hosting/backups/{file}/restore
Restore from a backup (queued)
POST /v1/orgs/{orgId}/services/{id}/hosting/backups/{file}/restore Parameters
id(path, required)file(path, required)
Request body
web | object | Websites to restore: true or "*" for all, or a list of names from this backup; omit to skip |
mail | object | Mail domains to restore: true or "*" for all, or a list of names from this backup; omit to skip |
databases | object | Databases to restore: true or "*" for all, or a list of names from this backup; omit to skip |
cron | boolean | Restore the cron jobs |
userDirs | object | Home folders to restore: true or "*" for all, or a list of names from this backup; omit to skip |
GET /services/{id}/hosting/backups/exclusions
What backups leave out
GET /v1/orgs/{orgId}/services/{id}/hosting/backups/exclusions Parameters
id(path, required)
PUT /services/{id}/hosting/backups/exclusions
Replace what backups leave out (a section left out = nothing excluded there)
PUT /v1/orgs/{orgId}/services/{id}/hosting/backups/exclusions Parameters
id(path, required)
Request body
web | object | "*" = leave out every website; or a list of { domain, folders? }: no folders = the whole site, domain "*" = those folders in every site |
mail | object | "*" = leave out all mail; or a list of { domain, mailboxes? }: no mailboxes = the whole mail domain |
databases | object | "*" = leave out every database; or a list of database names |
cron | boolean | Leave out cron jobs |
homeFolders | object | "*" = leave out every folder in the home directory; or a list, e.g. ["tmp", ".cache"] |
GET /services/{id}/hosting/backups/{file}/download
Download a backup (tar archive, streamed)
GET /v1/orgs/{orgId}/services/{id}/hosting/backups/{file}/download Parameters
id(path, required)file(path, required)
POST /services/{id}/hosting/backups/{file}/download
Prepare a backup for download (then GET the same path)
POST /v1/orgs/{orgId}/services/{id}/hosting/backups/{file}/download Parameters
id(path, required)file(path, required)
DELETE /services/{id}/hosting/backups/{file}
Delete a backup
DELETE /v1/orgs/{orgId}/services/{id}/hosting/backups/{file} Parameters
id(path, required)file(path, required)
GET /services/{id}/hosting/files
List a folder
GET /v1/orgs/{orgId}/services/{id}/hosting/files Parameters
path(query)id(path, required)
GET /services/{id}/hosting/files/content
Read a text file (editor)
GET /v1/orgs/{orgId}/services/{id}/hosting/files/content Parameters
path(query, required)id(path, required)
PUT /services/{id}/hosting/files/content
Save a text file (editor)
PUT /v1/orgs/{orgId}/services/{id}/hosting/files/content Parameters
id(path, required)
Request body
path* | string | Absolute path inside the account's home |
content* | string | Full new file content (text, max. 2 MB) |
GET /services/{id}/hosting/files/download
Download a file
GET /v1/orgs/{orgId}/services/{id}/hosting/files/download Parameters
path(query, required)id(path, required)
POST /services/{id}/hosting/files/upload
Upload a file (multipart; field 'file', query 'path' = target folder)
POST /v1/orgs/{orgId}/services/{id}/hosting/files/upload Parameters
path(query, required)id(path, required)
POST /services/{id}/hosting/files/folder
Create a folder
POST /v1/orgs/{orgId}/services/{id}/hosting/files/folder Parameters
id(path, required)
Request body
parent* | string | Folder to create it in (absolute path inside the home) |
name* | string | Name |
POST /services/{id}/hosting/files/file
Create an empty file
POST /v1/orgs/{orgId}/services/{id}/hosting/files/file Parameters
id(path, required)
Request body
parent* | string | Folder to create it in (absolute path inside the home) |
name* | string | Name |
POST /services/{id}/hosting/files/move
Move / rename (or copy with copy:true)
POST /v1/orgs/{orgId}/services/{id}/hosting/files/move Parameters
id(path, required)
Request body
from* | string | Source path |
to* | string | Destination path |
copy | boolean | Copy instead of move |
POST /services/{id}/hosting/files/chmod
Change permissions
POST /v1/orgs/{orgId}/services/{id}/hosting/files/chmod Parameters
id(path, required)
Request body
path* | string | Path |
mode* | object | Octal permissions, e.g. "644" or "755" |
POST /services/{id}/hosting/files/delete
Delete files/folders
POST /v1/orgs/{orgId}/services/{id}/hosting/files/delete Parameters
id(path, required)
Request body
paths* | string[] | Paths inside the home |
POST /services/{id}/hosting/files/archive
Compress into .tar.gz
POST /v1/orgs/{orgId}/services/{id}/hosting/files/archive Parameters
id(path, required)
Request body
paths* | string[] | Paths to put in the archive |
name | string | Archive file name (.tar.gz added if missing) |
POST /services/{id}/hosting/files/extract
Extract an archive
POST /v1/orgs/{orgId}/services/{id}/hosting/files/extract Parameters
id(path, required)
Request body
path* | string | Archive to extract (.zip, .tar.gz, .tgz, .tar) |
destination* | string | Folder to extract into |
POST /hosting/order
Order shared hosting - with an existing domain, or registering / transferring one in the same checkout
POST /v1/orgs/{orgId}/hosting/order Request body
productId* | string (uuid) | |
projectId | string (uuid) | |
period* | string | one of "monthly", "quarterly", "semiannual", "annual" |
domainMode* | string | one of "existing", "register", "transfer" |
domain* | string | |
domainYears | integer | 1…10 |
authCode | string | |
registrant | object | |
contactId | string (uuid) | |
label | string | |
couponCode | string | |
autoPay | boolean | |
paymentMethod | string | one of "card", "bancontact", "ideal", "bank_transfer" |
successUrl | string | |
cancelUrl | string |
activity
Who did what, when - the organization's activity log
GET /activity
Activity log of this organization (owner/admin)
GET /v1/orgs/{orgId}/activity Parameters
before(query)limit(query)
catalog
Public storefront catalog
GET /v1/catalog
Active categories + products (with prices + availability) for this brand
GET /v1/catalog billing
Customer billing: invoices (view/pay) + subscriptions (view/cancel)
GET /billing/overview
Billing overview: balance, run-rate, 12-month spend, upcoming renewals
GET /v1/orgs/{orgId}/billing/overview GET /invoices
List this organization's invoices
GET /v1/orgs/{orgId}/invoices Parameters
status(query)limit(query)offset(query)
GET /invoices/{id}
Get one of this org's invoices + lines
GET /v1/orgs/{orgId}/invoices/{id} Parameters
id(path, required)
GET /invoices/{id}/pdf
Download the invoice PDF (rendered by the e-invoicing service)
GET /v1/orgs/{orgId}/invoices/{id}/pdf Parameters
id(path, required)
POST /invoices/{id}/pay
Start payment for an invoice (Stripe Checkout)
POST /v1/orgs/{orgId}/invoices/{id}/pay Parameters
id(path, required)
Request body
paymentMethod | string | one of "card", "bancontact", "ideal", "bank_transfer" |
successUrl | string | |
cancelUrl | string |
POST /invoices/merge-proformas
Merge all open payment requests into one - one payment, one transaction fee
POST /v1/orgs/{orgId}/invoices/merge-proformas GET /subscriptions
List this org's subscriptions
GET /v1/orgs/{orgId}/subscriptions POST /subscriptions/{id}/cancel
Request cancellation of a subscription (takes effect at the end of the paid period)
POST /v1/orgs/{orgId}/subscriptions/{id}/cancel Parameters
id(path, required)
Request body
reason | string |
GET /subscriptions/{id}/plan-options
Plans this subscription can move to, with proration + feasibility
GET /v1/orgs/{orgId}/subscriptions/{id}/plan-options Parameters
id(path, required)
POST /subscriptions/{id}/change-plan
Move a subscription to another plan. Upgrades are prorated (→ a checkout for the delta); downgrades apply at the next renewal.
POST /v1/orgs/{orgId}/subscriptions/{id}/change-plan Parameters
id(path, required)
Request body
productId* | string (uuid) | |
period | string | one of "monthly", "quarterly", "semiannual", "annual" |
prorate | boolean | |
successUrl | string | |
cancelUrl | string |
DELETE /subscriptions/{id}/change-plan
Cancel a scheduled/unpaid plan change
DELETE /v1/orgs/{orgId}/subscriptions/{id}/change-plan Parameters
id(path, required)
GET /payment-method
The org's saved card for automatic payments (if any)
GET /v1/orgs/{orgId}/payment-method DELETE /payment-method
Remove the saved card and revert automatic subscriptions to manual
DELETE /v1/orgs/{orgId}/payment-method POST /payment-method/setup
Begin saving a card for automatic renewal payments (Stripe setup checkout)
POST /v1/orgs/{orgId}/payment-method/setup Request body
successUrl | string | |
cancelUrl | string |
PATCH /subscriptions/{id}/billing-mode
Set a subscription to pay manually each renewal or automatically (saved card)
PATCH /v1/orgs/{orgId}/subscriptions/{id}/billing-mode Parameters
id(path, required)
Request body
mode* | string | one of "manual", "auto" |
POST /coupons/validate
Preview a promo code against a set of lines (read-only - no redemption). The final discount is recomputed at checkout.
POST /v1/orgs/{orgId}/coupons/validate Request body
code* | string | |
currency | string | |
lines* | object[] |
POST /orders
Place an order: creates the service (pending) + finalized invoice + Stripe checkout link
POST /v1/orgs/{orgId}/orders Request body
projectId* | string (uuid) | |
productId* | string (uuid) | |
period* | string | one of "monthly", "quarterly", "semiannual", "annual" |
sshKey | string | |
osTemplateId | string (uuid) | |
label | string | A name for the new service (servers: also the host name) |
zoneId | string (uuid) | Location to place it in (servers, load balancers, databases, S3) |
version | string | Databases: engine major version (default: the newest offered) |
mode | string | one of "cache", "durable" · Valkey: cache (no persistence) or durable (AOF + RDB, default) |
networkId | string (uuid) | Databases / S3: the private network to join (recommended - private first) |
restoreFromBackupId | string (uuid) | Databases: load this backup (of one of your own instances, same engine) into the new instance - a restore into a NEW instance, the source stays untouched |
couponCode | string | |
successUrl | string | |
cancelUrl | string | |
autoPay | boolean | |
paymentMethod | string | one of "card", "bancontact", "ideal", "bank_transfer" |
config | object |
GET /services/{serviceId}/status
Live order status for one service: payment + provisioning + subscription in one call
GET /v1/orgs/{orgId}/services/{serviceId}/status Parameters
serviceId(path, required)
support
Customer support tickets
GET /tickets
List the organization's support tickets
GET /v1/orgs/{orgId}/tickets POST /tickets
Open a support ticket
POST /v1/orgs/{orgId}/tickets Request body
subject* | string | |
body* | string | |
departmentId | string | |
priority | string | one of "low", "normal", "high", "urgent" |
serviceId | string | |
invoiceId | string |
GET /departments
List the brand's support departments
GET /v1/orgs/{orgId}/departments GET /tickets/{id}
Get a ticket + its (customer-visible) thread
GET /v1/orgs/{orgId}/tickets/{id} Parameters
id(path, required)
POST /tickets/{id}/messages
Reply to a ticket (re-opens it)
POST /v1/orgs/{orgId}/tickets/{id}/messages Parameters
id(path, required)
Request body
body* | string |
POST /tickets/{ticketId}/messages/{messageId}/attachments
Attach a file to a ticket message (multipart 'file', ≤10 MB, safe types only)
POST /v1/orgs/{orgId}/tickets/{ticketId}/messages/{messageId}/attachments Parameters
ticketId(path, required)messageId(path, required)
GET /tickets/{ticketId}/attachments/{attachmentId}
Download a ticket attachment (inert; attachment disposition)
GET /v1/orgs/{orgId}/tickets/{ticketId}/attachments/{attachmentId} Parameters
inline(query)ticketId(path, required)attachmentId(path, required)
load-balancers
GET /services/{id}/lb
Load balancer: settings, services, targets (with health), limits, sync state
GET /v1/orgs/{orgId}/services/{id}/lb Parameters
id(path, required)
PATCH /services/{id}/lb
Change the balancing algorithm
PATCH /v1/orgs/{orgId}/services/{id}/lb Parameters
id(path, required)
Request body
algorithm* | string |
POST /services/{id}/lb/services
Add a service (listener: protocol + ports + health check)
POST /v1/orgs/{orgId}/services/{id}/lb/services Parameters
id(path, required)
Request body
protocol* | string | one of "http", "https", "tcp" · "http", "https" or "tcp" |
listenPort* | integer | 1…65535 · Port on the load balancer's public IP |
destinationPort* | integer | 1…65535 · Port on the targets |
httpRedirect | boolean | https only: also listen on :80 and redirect to https |
stickySessions | boolean | Keep a visitor on the same target (cookie) |
proxyProtocol | boolean | Send the PROXY protocol header to targets |
healthCheck | object | How targets are checked |
certificateIds | string[] | https only: certificate ids (from …/lb-certificates) |
PATCH /services/{id}/lb/services/{sid}
Change a service
PATCH /v1/orgs/{orgId}/services/{id}/lb/services/{sid} Parameters
id(path, required)sid(path, required)
Request body
protocol | string | one of "http", "https", "tcp" · "http", "https" or "tcp" |
listenPort | integer | 1…65535 · Port on the load balancer's public IP |
destinationPort | integer | 1…65535 · Port on the targets |
httpRedirect | boolean | https only: also listen on :80 and redirect to https |
stickySessions | boolean | Keep a visitor on the same target (cookie) |
proxyProtocol | boolean | Send the PROXY protocol header to targets |
healthCheck | object | How targets are checked |
certificateIds | string[] | https only: certificate ids (from …/lb-certificates) |
DELETE /services/{id}/lb/services/{sid}
Remove a service
DELETE /v1/orgs/{orgId}/services/{id}/lb/services/{sid} Parameters
id(path, required)sid(path, required)
POST /services/{id}/lb/targets
Add a target: one of your servers, or an IP address
POST /v1/orgs/{orgId}/services/{id}/lb/targets Parameters
id(path, required)
Request body
kind* | string | one of "server", "ip" · "server" (one of your servers) or "ip" |
serviceId | string | kind=server: the server's service id |
address | string | kind=ip: IPv4/IPv6 address |
weight | integer | Share of traffic (1-256, default 1) |
enabled | boolean | Receive traffic (default true) |
PATCH /services/{id}/lb/targets/{tid}
Change a target's weight or switch it on/off
PATCH /v1/orgs/{orgId}/services/{id}/lb/targets/{tid} Parameters
id(path, required)tid(path, required)
Request body
weight | integer | Share of traffic (1-256) |
enabled | boolean | Receive traffic |
DELETE /services/{id}/lb/targets/{tid}
Remove a target
DELETE /v1/orgs/{orgId}/services/{id}/lb/targets/{tid} Parameters
id(path, required)tid(path, required)
POST /services/{id}/lb/apply
Push the configuration to the load balancer now (waits for the result)
POST /v1/orgs/{orgId}/services/{id}/lb/apply Parameters
id(path, required)
POST /services/{id}/lb/restart
Restart the load balancer appliance
POST /v1/orgs/{orgId}/services/{id}/lb/restart Parameters
id(path, required)
GET /services/{id}/lb/metrics
Requests per second, status codes, connections and traffic
GET /v1/orgs/{orgId}/services/{id}/lb/metrics Parameters
range(query)id(path, required)
GET /services/{id}/lb/logs
Recent request log lines (newest last)
GET /v1/orgs/{orgId}/services/{id}/lb/logs Parameters
since(query)until(query)limit(query)search(query)system(query)id(path, required)
GET /services/{id}/lb/logs/export
Download request logs as a text file (up to 50,000 lines)
GET /v1/orgs/{orgId}/services/{id}/lb/logs/export Parameters
since(query)until(query)limit(query)search(query)system(query)id(path, required)
GET /services/{id}/lb/target-candidates
Your servers that can be added as targets
GET /v1/orgs/{orgId}/services/{id}/lb/target-candidates Parameters
id(path, required)
GET /load-balancers
Your load balancers: address, sync state, target health, last-hour traffic
GET /v1/orgs/{orgId}/load-balancers GET /lb-certificates
TLS certificates for load balancers
GET /v1/orgs/{orgId}/lb-certificates POST /lb-certificates
Upload a certificate ({type:'uploaded', name, certificate, privateKey}) or request a free one ({type:'managed', name, domains[]})
POST /v1/orgs/{orgId}/lb-certificates Request body
type* | string | one of "uploaded", "managed" · "uploaded" (your own) or "managed" (free Let's Encrypt) |
name* | string | Label |
certificate | string | uploaded: PEM certificate (+ chain) |
privateKey | string | uploaded: PEM private key |
domains | string[] | managed: domains to cover (they must point at the load balancer) |
PATCH /lb-certificates/{cid}
Rename a certificate
PATCH /v1/orgs/{orgId}/lb-certificates/{cid} Parameters
cid(path, required)
Request body
name* | string |
DELETE /lb-certificates/{cid}
Delete a certificate (refused while a load balancer uses it)
DELETE /v1/orgs/{orgId}/lb-certificates/{cid} Parameters
cid(path, required)
databases
GET /databases
Managed databases and S3 instances: engine, version, state, plan, endpoints and health
GET /v1/orgs/{orgId}/databases GET /services/{id}/data
Instance: engine, version, state, plan, endpoints, users, access, maintenance, backups, parameters, recent tasks
GET /v1/orgs/{orgId}/services/{id}/data Parameters
id(path, required)
GET /services/{id}/data/connection
Ready-made connection strings for the private and public endpoints (PASSWORD is a placeholder), and the CA bundle
GET /v1/orgs/{orgId}/services/{id}/data/connection Parameters
id(path, required)
GET /services/{id}/data/ca.pem
The CA bundle to verify the instance's TLS certificate (save as faastic-ca.pem)
GET /v1/orgs/{orgId}/services/{id}/data/ca.pem Parameters
id(path, required)
POST /services/{id}/data/apply
Push the configuration to the instance again now (after a failed push)
POST /v1/orgs/{orgId}/services/{id}/data/apply Parameters
id(path, required)
GET /services/{id}/data/storage
Storage: the plan's disk, extra storage added, the unit it's sold in and its price, and how much more can be added
GET /v1/orgs/{orgId}/services/{id}/data/storage Parameters
id(path, required)
POST /services/{id}/data/storage
Add storage: the disk grows online (nothing restarts) and the charge starts with the next renewal. Storage can't be given back.
POST /v1/orgs/{orgId}/services/{id}/data/storage Parameters
id(path, required)
Request body
units* | integer | How many units of extra storage to add (see the unit size in GET …/data/storage). Billed monthly; a disk can't shrink, so storage can't be given back |
GET /services/{id}/data/instance-credentials
The admin user and its password (S3: the admin access key and secret)
GET /v1/orgs/{orgId}/services/{id}/data/instance-credentials Parameters
id(path, required)
POST /services/{id}/data/instance-credentials/rotate
New admin password (S3: new admin key) - the old one stops working
POST /v1/orgs/{orgId}/services/{id}/data/instance-credentials/rotate Parameters
id(path, required)
POST /services/{id}/data/users
Create a user from a role template (S3: an access key with bucket grants). The password/secret is returned once.
POST /v1/orgs/{orgId}/services/{id}/data/users Parameters
id(path, required)
Request body
name* | string | PostgreSQL/MySQL/Valkey: a user name (lowercase letters, digits, _). S3: the key's name |
role* | string | A role template from the instance's `roles` (e.g. readwrite, readonly; S3: readwrite, readonly, owner) |
scope | object | S3: { buckets: { "<bucket>": ["read","write","owner"] }, allowCreateBucket: true }. Valkey: { keyPrefix: "app1:" } |
POST /services/{id}/data/users/{name}/rotate
New password for a user (S3: a new key with the same grants; the old key is deleted). Returned once.
POST /v1/orgs/{orgId}/services/{id}/data/users/{name}/rotate Parameters
id(path, required)name(path, required)
DELETE /services/{id}/data/users/{name}
Delete a user (PostgreSQL: its objects move to the admin) or an S3 key
DELETE /v1/orgs/{orgId}/services/{id}/data/users/{name} Parameters
id(path, required)name(path, required)
GET /services/{id}/data/databases
Databases with their size (S3: buckets with size and object count)
GET /v1/orgs/{orgId}/services/{id}/data/databases Parameters
id(path, required)
POST /services/{id}/data/databases
Create a database (S3: a bucket, optionally with quotas)
POST /v1/orgs/{orgId}/services/{id}/data/databases Parameters
id(path, required)
Request body
name* | string | Database name (lowercase letters, digits, _) - S3: bucket name (3-63 of a-z 0-9 . -) |
maxSizeGb | number | S3 only: bucket quota in GB |
maxObjects | integer | S3 only: bucket quota in objects |
DELETE /services/{id}/data/databases/{name}
Delete a database and its data (S3: an empty bucket)
DELETE /v1/orgs/{orgId}/services/{id}/data/databases/{name} Parameters
id(path, required)name(path, required)
PUT /services/{id}/data/public-access
Public access: off by default; when on, only the allowlist may connect (TLS only)
PUT /v1/orgs/{orgId}/services/{id}/data/public-access Parameters
id(path, required)
Request body
enabled* | boolean | Expose the service port on the instance's public address (off by default) |
allowlist | string[] | Source addresses or ranges (IPv4/IPv6 CIDR) allowed to connect - required unless allowAnySource |
allowAnySource | boolean | Open to any source address (must be explicit; S3 allows an empty allowlist) |
PUT /services/{id}/data/maintenance
Move the weekly 60-minute maintenance window
PUT /v1/orgs/{orgId}/services/{id}/data/maintenance Parameters
id(path, required)
Request body
dayOfWeek* | integer | 0 = Sunday … 6 = Saturday |
hour* | integer | Start hour 0-23, Brussels time (60-minute window) |
PUT /services/{id}/data/backup-settings
Daily backup hour and how many daily backups to keep
PUT /v1/orgs/{orgId}/services/{id}/data/backup-settings Parameters
id(path, required)
Request body
hour* | integer | Daily backup hour 0-23, Brussels time |
keepDaily* | integer | Daily backups kept, 1-35 |
PATCH /services/{id}/data/parameters
Change allow-listed engine parameters (some restart the engine - see paramSpecs)
PATCH /v1/orgs/{orgId}/services/{id}/data/parameters Parameters
id(path, required)
Request body
work_mem | object | PostgreSQL: MB per sort or hash |
maintenance_work_mem | object | PostgreSQL: MB for VACUUM and CREATE INDEX |
statement_timeout | object | PostgreSQL: ms (0 = never) |
lock_timeout | object | PostgreSQL: ms (0 = never) |
idle_in_transaction_session_timeout | object | PostgreSQL: ms (0 = never) |
log_min_duration_statement | object | PostgreSQL: ms (-1 = off) |
random_page_cost | object | PostgreSQL: planner cost of a random page read |
default_statistics_target | object | PostgreSQL: 10-10000 |
max_connections | object | PostgreSQL: 20-1000 (restarts the engine) |
jit | object | PostgreSQL: just-in-time compilation |
wal_level | object | PostgreSQL: replica or logical (restarts the engine) |
autovacuum_vacuum_scale_factor | object | PostgreSQL: see paramSpecs for the allowed values |
autovacuum_analyze_scale_factor | object | PostgreSQL: see paramSpecs for the allowed values |
timezone | object | PostgreSQL: e.g. Europe/Brussels |
GET /services/{id}/data/backups
Backups: kind, size, when, and until when they are kept
GET /v1/orgs/{orgId}/services/{id}/data/backups Parameters
id(path, required)
POST /services/{id}/data/backups
Back up now (runs in the background; follow the returned task)
POST /v1/orgs/{orgId}/services/{id}/data/backups Parameters
id(path, required)
POST /services/{id}/data/backups/{backupId}/restore
Restore a backup in place - replaces all current data after a safety backup
POST /v1/orgs/{orgId}/services/{id}/data/backups/{backupId}/restore Parameters
id(path, required)backupId(path, required)
Request body
confirm* | string | Must be "restore-in-place": replaces all current data (a safety backup is taken first) |
GET /services/{id}/data/tasks
The instance's task history: every change, who made it, its outcome
GET /v1/orgs/{orgId}/services/{id}/data/tasks Parameters
id(path, required)
GET /services/{id}/data/tasks/{taskId}
One task with its log
GET /v1/orgs/{orgId}/services/{id}/data/tasks/{taskId} Parameters
id(path, required)taskId(path, required)
GET /services/{id}/data/stats
Live engine figures: connections, size, cache hit ratio, uptime (S3: buckets, bytes, objects, free space)
GET /v1/orgs/{orgId}/services/{id}/data/stats Parameters
id(path, required)
GET /services/{id}/data/metrics
CPU, memory, disk and network of the instance VM over a timeframe (hour, day, week, month, year)
GET /v1/orgs/{orgId}/services/{id}/data/metrics Parameters
id(path, required)
GET /services/{id}/data/logs
The engine's recent log lines
GET /v1/orgs/{orgId}/services/{id}/data/logs Parameters
id(path, required)
Veelgestelde vragen
Heeft Faastic een publieke API?
Ja. Een REST API voor servers, loadbalancers, netwerken, databanken, objectopslag, DNS, domeinen en facturatie: alles wat je in het portaal kunt doen.
Is er een OpenAPI-specificatie?
Ja, gegenereerd uit de live API op https://api.faastic.com/v1/openapi.json.
Wat zijn de limieten?
300 requests per minuut per token.
Kan ik diensten bestellen via de API?
Ja, met een token voor lezen & schrijven dat factuurrechten heeft. De bestelling geeft een betaallink terug, en er wordt niets gebouwd voordat de factuur betaald is.