Developers

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.

Snelstart

Je eerste calls

  1. 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. 2. Controleer de token

    curl https://api.faastic.com/v1/api-token \
      -H "Authorization: Bearer $FAASTIC_TOKEN"
  3. 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"}'
Referentie

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)
POST /services/{id}/storage/shares/{protocol}/{shareId}

Enable/disable one of your shares (SMB/NFS)

POST /v1/orgs/{orgId}/services/{id}/storage/shares/{protocol}/{shareId}

Parameters

  • id (path, required)
  • protocol (path, required)
  • shareId (path, required)

Request body

enabled* boolean
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

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.