Entwickler

Verwalten Sie Ihre Infrastruktur über eine API

Automatisieren Sie Server, Netzwerke, Load Balancer, Datenbanken und DNS mit einer REST-API. Starten Sie mit den Beispielen unten und geben Sie jedem Skript über ein eingeschränktes Token den Zugriff, den es braucht.

API-Tokens

Erstellen Sie ein Token in Ihrem Dashboard unter Team → API-Tokens und bestätigen Sie mit Ihrem Passwort oder dem Code Ihrer Authenticator-App. Es gehört zu einer Organisation und handelt dort mit den Rechten Ihrer Rolle.

Authorization: Bearer fst_…

Lesen oder Lesen & Schreiben

Ein Lese-Token kann Daten nur ansehen. Ein Token mit Lese- und Schreibrechten kann Änderungen vornehmen und, wenn es Abrechnungsrechte hat, auch bestellen. Beschränken Sie jedes Token auf Bereiche, Projekte oder einzelne Dienste und geben Sie ihm ein Ablaufdatum. Kein Token kann Teammitglieder oder andere Tokens verwalten.

Limits

300 Anfragen pro Minute und Token. Jede Änderung erscheint im Aktivitätsprotokoll Ihrer Organisation, zusammen mit dem Token, das sie vorgenommen hat.

Schnellstart

Ihre ersten Aufrufe

  1. 1. Token erstellen

    Dashboard → Team → API-Tokens. Kopieren Sie es sofort und halten Sie es aus Ihrem Code heraus: export FAASTIC_TOKEN=fst_… Die ID Ihrer Organisation steht daneben.

  2. 2. Token prüfen

    curl https://api.faastic.com/v1/api-token \
      -H "Authorization: Bearer $FAASTIC_TOKEN"
  3. 3. Dienste auflisten und einen Server neu starten

    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"}'
Referenz

API-Referenz

Jeder Endpunkt, den ein Token aufrufen kann, generiert aus der Live-API. Maschinenlesbar: 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}

Parameter

  • projectId (path, required)
PATCH /projects/{projectId}

Rename a project (admin role or higher)

PATCH /v1/orgs/{orgId}/projects/{projectId}

Parameter

  • projectId (path, required)

Request-Body

name* string
DELETE /projects/{projectId}

Delete a project (admin role or higher)

DELETE /v1/orgs/{orgId}/projects/{projectId}

Parameter

  • 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

Parameter

  • includeTerminated (query)
GET /projects/{projectId}/services

List services in a project

GET /v1/orgs/{orgId}/projects/{projectId}/services

Parameter

  • projectId (path, required)
GET /services/{serviceId}

Get a service

GET /v1/orgs/{orgId}/services/{serviceId}

Parameter

  • serviceId (path, required)
PATCH /services/{serviceId}/protection

Delete protection (blocks cancelling) / rebuild protection (blocks reinstall, rollback, restore)

PATCH /v1/orgs/{orgId}/services/{serviceId}/protection

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • id (path, required)
GET /services/{id}/vm-status

Live VM status (running/stopped, cpu%, mem, uptime)

GET /v1/orgs/{orgId}/services/{id}/vm-status

Parameter

  • id (path, required)
GET /services/{id}/metrics

Resource graphs (CPU/RAM/disk/net) for a timeframe

GET /v1/orgs/{orgId}/services/{id}/metrics

Parameter

  • timeframe (query)
  • id (path, required)
GET /services/{id}/snapshots

List VM snapshots

GET /v1/orgs/{orgId}/services/{id}/snapshots

Parameter

  • id (path, required)
POST /services/{id}/snapshots

Create a snapshot (within your plan's quota)

POST /v1/orgs/{orgId}/services/{id}/snapshots

Parameter

  • 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

Parameter

  • id (path, required)
  • name (path, required)
DELETE /services/{id}/snapshots/{name}

Delete a snapshot

DELETE /v1/orgs/{orgId}/services/{id}/snapshots/{name}

Parameter

  • id (path, required)
  • name (path, required)
GET /services/{id}/firewall

Firewall rules + options for your VM

GET /v1/orgs/{orgId}/services/{id}/firewall

Parameter

  • 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

Parameter

  • 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}

Parameter

  • 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

Parameter

  • 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

Parameter

  • id (path, required)
GET /services/{id}/backups

List VM backups

GET /v1/orgs/{orgId}/services/{id}/backups

Parameter

  • id (path, required)
POST /services/{id}/backups

Create a backup (within your plan's quota)

POST /v1/orgs/{orgId}/services/{id}/backups

Parameter

  • 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

Parameter

  • id (path, required)

Request-Body

volid* string
POST /services/{id}/backups/delete

Delete a backup

POST /v1/orgs/{orgId}/services/{id}/backups/delete

Parameter

  • id (path, required)

Request-Body

volid* string
POST /services/{id}/reinstall

Reinstall the OS - DESTROYS all data, keeps the IP; keeps the SSH key(s) unless new ones are given (async)

POST /v1/orgs/{orgId}/services/{id}/reinstall

Parameter

  • id (path, required)

Request-Body

confirm* boolean
publicKeys string max 40000 chars · OpenSSH public key(s), one per line (e.g. "ssh-ed25519 AAAA… me@laptop")
sshKeyIds string (uuid)[] Saved account SSH keys (GET /account/ssh-keys) to add
POST /services/{id}/rdns

Request reverse DNS (PTR) for the VM's IP - opens a support ticket

POST /v1/orgs/{orgId}/services/{id}/rdns

Parameter

  • id (path, required)

Request-Body

ptr* string
GET /services/{id}/ssh-keys

The server's login user, its SSH keys (fingerprints) and whether SSH password login was switched on at install

GET /v1/orgs/{orgId}/services/{id}/ssh-keys

Parameter

  • id (path, required)
PUT /services/{id}/ssh-keys

Replace the server's SSH keys (async). They're installed on the server's next restart - restart: true restarts it now. Reinstalls use them too.

PUT /v1/orgs/{orgId}/services/{id}/ssh-keys

Parameter

  • id (path, required)

Request-Body

publicKeys string max 40000 chars · OpenSSH public key(s), one per line (e.g. "ssh-ed25519 AAAA… me@laptop")
sshKeyIds string (uuid)[] Saved account SSH keys (GET /account/ssh-keys) to add
restart boolean Restart the running server now so the keys apply right away
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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • id (path, required)
GET /services/{id}/storage

Storage overview (usage/quota/shares/access details)

GET /v1/orgs/{orgId}/services/{id}/storage

Parameter

  • id (path, required)
GET /services/{id}/storage/snapshots

List your storage snapshots

GET /v1/orgs/{orgId}/services/{id}/storage/snapshots

Parameter

  • id (path, required)
POST /services/{id}/storage/snapshots

Create a storage snapshot

POST /v1/orgs/{orgId}/services/{id}/storage/snapshots

Parameter

  • 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}

Parameter

  • 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}

Parameter

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

Request-Body

enabled* boolean
PUT /services/{id}/storage/shares/{protocol}/{shareId}/allowed-ips

Set the IP addresses allowed to connect to one of your shares (SMB/NFS)

PUT /v1/orgs/{orgId}/services/{id}/storage/shares/{protocol}/{shareId}/allowed-ips

Parameter

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

Request-Body

ips* string[]
GET /services/{serviceId}/addons

Add-ons available for + attached to a service

GET /v1/orgs/{orgId}/services/{serviceId}/addons

Parameter

  • 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

Parameter

  • 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}

Parameter

  • 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

Parameter

  • 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}

Parameter

  • id (path, required)
GET /domains/{id}/connect

What this domain can be connected to (hosting accounts, servers) and where it points now

GET /v1/orgs/{orgId}/domains/{id}/connect

Parameter

  • id (path, required)
POST /domains/{id}/connect

Connect the domain to a service: plan the DNS changes (apply=false) or make them (apply=true). Only the records that connection needs change - e-mail settings stay unless an e-mail service is connected.

POST /v1/orgs/{orgId}/domains/{id}/connect

Parameter

  • id (path, required)

Request-Body

target* string one of "hosting", "server", "website", "email"
serviceId string (uuid)
ipv4 string max 45 chars
cname string max 253 chars
verification object
mx object[]
spf string max 1024 chars
apply boolean
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

Parameter

  • id (path, required)
PUT /domains/{id}/nameservers

Set the domain's nameservers

PUT /v1/orgs/{orgId}/domains/{id}/nameservers

Parameter

  • 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

Parameter

  • id (path, required)
PUT /domains/{id}/autorenew

Toggle automatic renewal (auto-charge the saved card on renewal)

PUT /v1/orgs/{orgId}/domains/{id}/autorenew

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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}

Parameter

  • id (path, required)
GET /v1/domains/check

Public domain availability + retail price (no auth)

GET /v1/domains/check

Parameter

  • 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

Parameter

  • 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

Parameter

  • id (path, required)

Request-Body

enabled* boolean
GET /dns/zones/{id}

Zone detail + records

GET /v1/orgs/{orgId}/dns/zones/{id}

Parameter

  • id (path, required)
DELETE /dns/zones/{id}

Delete a zone you own

DELETE /v1/orgs/{orgId}/dns/zones/{id}

Parameter

  • 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

Parameter

  • 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}

Parameter

  • 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}

Parameter

  • 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}

Parameter

  • 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}

Parameter

  • fid (path, required)
POST /firewalls/{fid}/apply

Apply a template to servers

POST /v1/orgs/{orgId}/firewalls/{fid}/apply

Parameter

  • 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

Parameter

  • 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}

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • id (path, required)
GET /services/{id}/hosting/stats/history

Monthly disk + bandwidth history

GET /v1/orgs/{orgId}/services/{id}/hosting/stats/history

Parameter

  • id (path, required)
GET /services/{id}/hosting/stats/sites

Disk + bandwidth per website

GET /v1/orgs/{orgId}/services/{id}/hosting/stats/sites

Parameter

  • 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}

Parameter

  • id (path, required)
  • domain (path, required)
GET /services/{id}/hosting/activity

Hosting activity log

GET /v1/orgs/{orgId}/services/{id}/hosting/activity

Parameter

  • id (path, required)
GET /services/{id}/hosting/notices

Messages from the hosting server (backup created/restored, …)

GET /v1/orgs/{orgId}/services/{id}/hosting/notices

Parameter

  • 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

Parameter

  • 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}

Parameter

  • id (path, required)
  • notice (path, required)
GET /services/{id}/hosting/logins

Panel/API sign-in history

GET /v1/orgs/{orgId}/services/{id}/hosting/logins

Parameter

  • id (path, required)
GET /services/{id}/hosting/ssh-keys

SSH/SFTP keys

GET /v1/orgs/{orgId}/services/{id}/hosting/ssh-keys

Parameter

  • id (path, required)
POST /services/{id}/hosting/ssh-keys

Add an SSH key

POST /v1/orgs/{orgId}/services/{id}/hosting/ssh-keys

Parameter

  • 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}

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • id (path, required)
POST /services/{id}/hosting/web

Add a website

POST /v1/orgs/{orgId}/services/{id}/hosting/web

Parameter

  • 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

Parameter

  • 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

Parameter

  • id (path, required)
GET /services/{id}/hosting/web/{domain}

One website

GET /v1/orgs/{orgId}/services/{id}/hosting/web/{domain}

Parameter

  • id (path, required)
  • domain (path, required)
PATCH /services/{id}/hosting/web/{domain}

Change website settings

PATCH /v1/orgs/{orgId}/services/{id}/hosting/web/{domain}

Parameter

  • 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}

Parameter

  • 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

Parameter

  • 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}

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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}

Parameter

  • 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

Parameter

  • 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}

Parameter

  • 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}

Parameter

  • 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}

Parameter

  • 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

Parameter

  • id (path, required)
GET /services/{id}/hosting/apps/jobs

Recent app installs and their status

GET /v1/orgs/{orgId}/services/{id}/hosting/apps/jobs

Parameter

  • 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

Parameter

  • 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

Parameter

  • id (path, required)
POST /services/{id}/hosting/mail

Add a mail domain

POST /v1/orgs/{orgId}/services/{id}/hosting/mail

Parameter

  • 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}

Parameter

  • 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}

Parameter

  • 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}

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • id (path, required)
  • domain (path, required)
GET /services/{id}/hosting/mail/{domain}/accounts

Mailboxes

GET /v1/orgs/{orgId}/services/{id}/hosting/mail/{domain}/accounts

Parameter

  • 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

Parameter

  • 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}

Parameter

  • 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}

Parameter

  • 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}

Parameter

  • 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

Parameter

  • 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}

Parameter

  • 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

Parameter

  • 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}

Parameter

  • 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

Parameter

  • 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

Parameter

  • id (path, required)
POST /services/{id}/hosting/databases

Create a database

POST /v1/orgs/{orgId}/services/{id}/hosting/databases

Parameter

  • 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}

Parameter

  • 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}

Parameter

  • 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

Parameter

  • 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

Parameter

  • id (path, required)
  • db (path, required)
GET /services/{id}/hosting/cron

Cron jobs

GET /v1/orgs/{orgId}/services/{id}/hosting/cron

Parameter

  • id (path, required)
POST /services/{id}/hosting/cron

Add a cron job

POST /v1/orgs/{orgId}/services/{id}/hosting/cron

Parameter

  • 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

Parameter

  • id (path, required)
PUT /services/{id}/hosting/cron-reports

E-mail cron output on/off

PUT /v1/orgs/{orgId}/services/{id}/hosting/cron-reports

Parameter

  • 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}

Parameter

  • 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}

Parameter

  • id (path, required)
  • job (path, required)
GET /services/{id}/hosting/backups

Backups

GET /v1/orgs/{orgId}/services/{id}/hosting/backups

Parameter

  • id (path, required)
POST /services/{id}/hosting/backups

Create a backup now (queued)

POST /v1/orgs/{orgId}/services/{id}/hosting/backups

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • id (path, required)
  • file (path, required)
DELETE /services/{id}/hosting/backups/{file}

Delete a backup

DELETE /v1/orgs/{orgId}/services/{id}/hosting/backups/{file}

Parameter

  • id (path, required)
  • file (path, required)
GET /services/{id}/hosting/files

List a folder

GET /v1/orgs/{orgId}/services/{id}/hosting/files

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • path (query, required)
  • id (path, required)
POST /services/{id}/hosting/files/folder

Create a folder

POST /v1/orgs/{orgId}/services/{id}/hosting/files/folder

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • before (query)
  • limit (query)

catalog

Public storefront catalog

GET /v1/catalog

Active categories + products (with prices + availability) for this brand

GET /v1/catalog

Parameter

  • locale (query)
GET /v1/catalog/ai-models

AI API models on sale with prices (micro-euro; excl. VAT)

GET /v1/catalog/ai-models

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

Parameter

  • status (query)
  • limit (query)
  • offset (query)
GET /invoices/{id}

Get one of this org's invoices + lines

GET /v1/orgs/{orgId}/invoices/{id}

Parameter

  • id (path, required)
GET /invoices/{id}/pdf

Download the invoice PDF (rendered by the e-invoicing service)

GET /v1/orgs/{orgId}/invoices/{id}/pdf

Parameter

  • id (path, required)
POST /invoices/{id}/pay

Start payment for an invoice (Stripe Checkout)

POST /v1/orgs/{orgId}/invoices/{id}/pay

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • serviceId (path, required)
GET /legacy-invoices

Invoices from the previous billing system (read-only history)

GET /v1/orgs/{orgId}/legacy-invoices
GET /legacy-invoices/{id}

One invoice from the previous billing system, with its lines

GET /v1/orgs/{orgId}/legacy-invoices/{id}

Parameter

  • id (path, required)
GET /vat-quote

VAT for an order before it is placed, for this organization

GET /v1/orgs/{orgId}/vat-quote

Parameter

  • amountCents (query, 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 /tickets/unread-count

How many of the organization's tickets have a support reply the calling user hasn't read

GET /v1/orgs/{orgId}/tickets/unread-count
POST /tickets/{id}/read

Mark a ticket as read by the calling user

POST /v1/orgs/{orgId}/tickets/{id}/read

Parameter

  • id (path, required)
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}

Parameter

  • id (path, required)
POST /tickets/{id}/messages

Reply to a ticket (re-opens it)

POST /v1/orgs/{orgId}/tickets/{id}/messages

Parameter

  • id (path, required)

Request-Body

body* string
POST /tickets/{id}/close

Close a ticket

POST /v1/orgs/{orgId}/tickets/{id}/close

Parameter

  • id (path, required)
POST /tickets/{id}/reopen

Reopen a closed ticket

POST /v1/orgs/{orgId}/tickets/{id}/reopen

Parameter

  • id (path, required)
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

Parameter

  • 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}

Parameter

  • 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

Parameter

  • id (path, required)
PATCH /services/{id}/lb

Change the balancing algorithm

PATCH /v1/orgs/{orgId}/services/{id}/lb

Parameter

  • 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

Parameter

  • 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}

Parameter

  • 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}

Parameter

  • 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

Parameter

  • 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}

Parameter

  • 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}

Parameter

  • 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

Parameter

  • id (path, required)
POST /services/{id}/lb/restart

Restart the load balancer appliance

POST /v1/orgs/{orgId}/services/{id}/lb/restart

Parameter

  • id (path, required)
GET /services/{id}/lb/metrics

Requests per second, status codes, connections and traffic

GET /v1/orgs/{orgId}/services/{id}/lb/metrics

Parameter

  • range (query)
  • id (path, required)
GET /services/{id}/lb/logs

Recent request log lines (newest last)

GET /v1/orgs/{orgId}/services/{id}/lb/logs

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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}

Parameter

  • 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}

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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}

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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}

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • 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

Parameter

  • id (path, required)
GET /services/{id}/data/tasks/{taskId}

One task with its log

GET /v1/orgs/{orgId}/services/{id}/data/tasks/{taskId}

Parameter

  • 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

Parameter

  • 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

Parameter

  • id (path, required)
GET /services/{id}/data/logs

The engine's recent log lines

GET /v1/orgs/{orgId}/services/{id}/data/logs

Parameter

  • id (path, required)

ai

GET /ai

AI API account: status, prepaid balance, auto top-up, gateway URL, month-to-date spend

GET /v1/orgs/{orgId}/ai
POST /ai/activate

Activate the AI API (free; you pay only for usage, from prepaid credit)

POST /v1/orgs/{orgId}/ai/activate
POST /ai/close

Close the AI API: every key is revoked. Remaining credit stays on the account.

POST /v1/orgs/{orgId}/ai/close
PUT /ai/auto-topup

Automatic top-up with the saved card when the balance drops below a threshold

PUT /v1/orgs/{orgId}/ai/auto-topup

Request-Body

enabled* boolean
thresholdCents* integer 0…
amountCents* integer 0…
GET /ai/topups

Top-up history

GET /v1/orgs/{orgId}/ai/topups
POST /ai/topups

Buy AI credit: creates the invoice (VAT on top). Pay it via POST /orgs/{orgId}/invoices/{id}/pay; the credit lands when it is paid.

POST /v1/orgs/{orgId}/ai/topups

Request-Body

amountCents* integer 500…500000
GET /ai/ledger

Credit statement: top-ups, refunds and adjustments (usage is under /ai/usage)

GET /v1/orgs/{orgId}/ai/ledger
GET /ai/keys

AI API keys (never the secret)

GET /v1/orgs/{orgId}/ai/keys

Parameter

  • includeRevoked (query)
POST /ai/keys

Create an AI API key - ready to use on return; the secret is returned ONCE. 502 ai_key_setup_failed = nothing was created, retry.

POST /v1/orgs/{orgId}/ai/keys

Request-Body

name* string max 80 chars
allowedModels string[] Empty = every model on sale
rpm integer 1… · nullable · Requests per minute
tpm integer 1… · nullable · Tokens per minute
monthlyCapMicros integer 0… · nullable · Spending cap per calendar month (UTC), in micro-euro (1 € = 1,000,000)
PATCH /ai/keys/{keyId}

Change a key's name, models, rate limits or monthly cap

PATCH /v1/orgs/{orgId}/ai/keys/{keyId}

Parameter

  • keyId (path, required)

Request-Body

name string max 80 chars
allowedModels string[] Empty = every model on sale
rpm integer 1… · nullable · Requests per minute
tpm integer 1… · nullable · Tokens per minute
monthlyCapMicros integer 0… · nullable · Spending cap per calendar month (UTC), in micro-euro (1 € = 1,000,000)
DELETE /ai/keys/{keyId}

Revoke a key (immediate)

DELETE /v1/orgs/{orgId}/ai/keys/{keyId}

Parameter

  • keyId (path, required)
GET /ai/models

Models on sale and their prices (micro-euro per 1M tokens / per minute / per image)

GET /v1/orgs/{orgId}/ai/models
GET /ai/usage

Usage + spend: totals, per day, per model, per key (default: last 30 days)

GET /v1/orgs/{orgId}/ai/usage

Parameter

  • from (query)
  • to (query)
  • keyId (query)
GET /ai/requests

Request log - metadata only (time, key, model, tokens, status, latency, charge). Prompts and answers are never stored.

GET /v1/orgs/{orgId}/ai/requests

Parameter

  • keyId (query)
  • before (query)
  • limit (query)

Häufige Fragen

Hat Faastic eine öffentliche API?

Ja. Eine REST-API deckt Server, Load Balancer, Netzwerke, Datenbanken, DNS, Domains und Abrechnung ab: alles, was Sie im Portal tun können.

Gibt es eine OpenAPI-Spezifikation?

Ja, generiert aus der Live-API: https://api.faastic.com/v1/openapi.json.

Welche Rate Limits gelten?

300 Anfragen pro Minute und Token.

Kann ich Dienste über die API bestellen?

Ja, mit einem Token für Lesen & Schreiben, das Abrechnungsrechte hat. Die Bestellung liefert einen Zahlungslink, und nichts wird bereitgestellt, bevor die Rechnung bezahlt ist.