Gérez votre infrastructure avec une seule API
Automatisez serveurs, réseaux, load balancers, bases de données et DNS avec une API REST. Commencez par les exemples ci-dessous, et utilisez des jetons aux droits limités pour donner à chaque script l'accès dont il a besoin.
Jetons d'API
Créez un jeton sous Team → API tokens dans votre tableau de bord, puis confirmez avec votre mot de passe ou votre code d'authentification. Il appartient à une seule organisation et agit avec le rôle que vous y avez.
Authorization: Bearer fst_… Lecture, ou lecture et écriture
Un jeton en lecture ne peut que consulter. Un jeton en lecture et écriture peut faire des modifications, y compris passer des commandes s'il a les droits de facturation. Limitez chaque jeton à certaines catégories, certains projets ou des services précis, et donnez-lui une date d'expiration. Aucun jeton ne peut gérer les membres de l'équipe ni d'autres jetons.
Limites
300 requêtes par minute et par jeton. Chaque modification apparaît dans le journal d'activité de votre organisation, avec le jeton qui l'a faite.
Vos premiers appels
-
1. Créez un jeton
Tableau de bord → Team → API tokens. Copiez-le tout de suite et gardez-le hors de votre code : export FAASTIC_TOKEN=fst_… L'ID de votre organisation est affiché à côté.
-
2. Vérifiez le jeton
curl https://api.faastic.com/v1/api-token \ -H "Authorization: Bearer $FAASTIC_TOKEN" -
3. Listez vos services et redémarrez un serveur
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"}'
Référence de l'API
Chaque endpoint qu'un jeton peut appeler, généré à partir de l'API en production. Lisible par machine : openapi.json
organizations
Organizations (billing parties)
GET /
Get an organization
GET /v1/orgs/{orgId} PATCH /
Update organization billing details
PATCH /v1/orgs/{orgId} Corps de la requête
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 Corps de la requête
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 Corps de la requête
name* | string |
GET /projects/{projectId}
Get a project
GET /v1/orgs/{orgId}/projects/{projectId} Paramètres
projectId(path, required)
PATCH /projects/{projectId}
Rename a project (admin role or higher)
PATCH /v1/orgs/{orgId}/projects/{projectId} Paramètres
projectId(path, required)
Corps de la requête
name* | string |
DELETE /projects/{projectId}
Delete a project (admin role or higher)
DELETE /v1/orgs/{orgId}/projects/{projectId} Paramètres
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 Paramètres
includeTerminated(query)
GET /projects/{projectId}/services
List services in a project
GET /v1/orgs/{orgId}/projects/{projectId}/services Paramètres
projectId(path, required)
GET /services/{serviceId}
Get a service
GET /v1/orgs/{orgId}/services/{serviceId} Paramètres
serviceId(path, required)
PATCH /services/{serviceId}/protection
Delete protection (blocks cancelling) / rebuild protection (blocks reinstall, rollback, restore)
PATCH /v1/orgs/{orgId}/services/{serviceId}/protection Paramètres
serviceId(path, required)
Corps de la requête
delete | boolean | |
rebuild | boolean |
PUT /services/{serviceId}/labels
Replace a service's labels (key → value, max 20)
PUT /v1/orgs/{orgId}/services/{serviceId}/labels Paramètres
serviceId(path, required)
Corps de la requête
labels* | object |
POST /services/{id}/power
Power-control your VM (start / stop / reboot) - async
POST /v1/orgs/{orgId}/services/{id}/power Paramètres
id(path, required)
Corps de la requête
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 Paramètres
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 Paramètres
id(path, required)
Corps de la requête
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 Paramètres
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 Paramètres
id(path, required)
Corps de la requête
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 Paramètres
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 Paramètres
id(path, required)
GET /services/{id}/vm-status
Live VM status (running/stopped, cpu%, mem, uptime)
GET /v1/orgs/{orgId}/services/{id}/vm-status Paramètres
id(path, required)
GET /services/{id}/metrics
Resource graphs (CPU/RAM/disk/net) for a timeframe
GET /v1/orgs/{orgId}/services/{id}/metrics Paramètres
timeframe(query)id(path, required)
GET /services/{id}/snapshots
List VM snapshots
GET /v1/orgs/{orgId}/services/{id}/snapshots Paramètres
id(path, required)
POST /services/{id}/snapshots
Create a snapshot (within your plan's quota)
POST /v1/orgs/{orgId}/services/{id}/snapshots Paramètres
id(path, required)
Corps de la requête
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 Paramètres
id(path, required)name(path, required)
DELETE /services/{id}/snapshots/{name}
Delete a snapshot
DELETE /v1/orgs/{orgId}/services/{id}/snapshots/{name} Paramètres
id(path, required)name(path, required)
GET /services/{id}/firewall
Firewall rules + options for your VM
GET /v1/orgs/{orgId}/services/{id}/firewall Paramètres
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 Paramètres
id(path, required)
Corps de la requête
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} Paramètres
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 Paramètres
id(path, required)
Corps de la requête
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 Paramètres
id(path, required)
GET /services/{id}/backups
List VM backups
GET /v1/orgs/{orgId}/services/{id}/backups Paramètres
id(path, required)
POST /services/{id}/backups
Create a backup (within your plan's quota)
POST /v1/orgs/{orgId}/services/{id}/backups Paramètres
id(path, required)
Corps de la requête
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 Paramètres
id(path, required)
Corps de la requête
volid* | string |
POST /services/{id}/backups/delete
Delete a backup
POST /v1/orgs/{orgId}/services/{id}/backups/delete Paramètres
id(path, required)
Corps de la requête
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 Paramètres
id(path, required)
Corps de la requête
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 Paramètres
id(path, required)
Corps de la requête
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 Paramètres
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 Paramètres
id(path, required)
Corps de la requête
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 Paramètres
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 Paramètres
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 Paramètres
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 Paramètres
id(path, required)
Corps de la requête
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 Paramètres
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 Paramètres
id(path, required)
Corps de la requête
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 Paramètres
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 Paramètres
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 Paramètres
id(path, required)
GET /services/{id}/storage
Storage overview (usage/quota/shares/access details)
GET /v1/orgs/{orgId}/services/{id}/storage Paramètres
id(path, required)
GET /services/{id}/storage/snapshots
List your storage snapshots
GET /v1/orgs/{orgId}/services/{id}/storage/snapshots Paramètres
id(path, required)
POST /services/{id}/storage/snapshots
Create a storage snapshot
POST /v1/orgs/{orgId}/services/{id}/storage/snapshots Paramètres
id(path, required)
Corps de la requête
name* | string |
DELETE /services/{id}/storage/snapshots/{name}
Delete a storage snapshot (by name)
DELETE /v1/orgs/{orgId}/services/{id}/storage/snapshots/{name} Paramètres
id(path, required)name(path, required)
GET /services/{serviceId}/addons
Add-ons available for + attached to a service
GET /v1/orgs/{orgId}/services/{serviceId}/addons Paramètres
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 Paramètres
serviceId(path, required)
Corps de la requête
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} Paramètres
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 Paramètres
serviceId(path, required)addonId(path, required)
Corps de la requête
targetServiceId* | string (uuid) |
domains
Domains: register, transfer, renew, nameservers, transfer lock and auth codes
GET /domains/search
Search a domain across the TLDs we offer (availability + retail price)
GET /v1/orgs/{orgId}/domains/search Paramètres
name(query, required)
POST /domains/order
Order a domain - register a new one or transfer one in (→ checkout)
POST /v1/orgs/{orgId}/domains/order Corps de la requête
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} Paramètres
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 Paramètres
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 Paramètres
id(path, required)
Corps de la requête
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 Paramètres
id(path, required)
PUT /domains/{id}/nameservers
Set the domain's nameservers
PUT /v1/orgs/{orgId}/domains/{id}/nameservers Paramètres
id(path, required)
Corps de la requête
nameservers* | string[] |
GET /domains/{id}/authcode
Get the EPP/auth code (to transfer the domain away)
GET /v1/orgs/{orgId}/domains/{id}/authcode Paramètres
id(path, required)
PUT /domains/{id}/autorenew
Toggle automatic renewal (auto-charge the saved card on renewal)
PUT /v1/orgs/{orgId}/domains/{id}/autorenew Paramètres
id(path, required)
Corps de la requête
on* | boolean |
PUT /domains/{id}/lock
Lock or unlock the domain (registrar transfer lock)
PUT /v1/orgs/{orgId}/domains/{id}/lock Paramètres
id(path, required)
Corps de la requête
locked* | boolean |
POST /domains/{id}/renew
Renew the domain now (extends the registration by its term → checkout)
POST /v1/orgs/{orgId}/domains/{id}/renew Paramètres
id(path, required)
Corps de la requête
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 Corps de la requête
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} Paramètres
id(path, required)
GET /v1/domains/check
Public domain availability + retail price (no auth)
GET /v1/domains/check Paramètres
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 Corps de la requête
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 Paramètres
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 Paramètres
id(path, required)
Corps de la requête
enabled* | boolean |
GET /dns/zones/{id}
Zone detail + records
GET /v1/orgs/{orgId}/dns/zones/{id} Paramètres
id(path, required)
DELETE /dns/zones/{id}
Delete a zone you own
DELETE /v1/orgs/{orgId}/dns/zones/{id} Paramètres
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 Paramètres
id(path, required)
Corps de la requête
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} Paramètres
id(path, required)recordId(path, required)
Corps de la requête
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} Paramètres
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 Corps de la requête
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} Paramètres
fid(path, required)
Corps de la requête
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} Paramètres
fid(path, required)
POST /firewalls/{fid}/apply
Apply a template to servers
POST /v1/orgs/{orgId}/firewalls/{fid}/apply Paramètres
fid(path, required)
Corps de la requête
serviceIds* | string[] |
POST /firewalls/{fid}/remove
Take a template off servers (its rules are removed from them)
POST /v1/orgs/{orgId}/firewalls/{fid}/remove Paramètres
fid(path, required)
Corps de la requête
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 Corps de la requête
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} Paramètres
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 Paramètres
nid(path, required)
Corps de la requête
serviceId* | string (uuid) |
POST /networks/{nid}/detach
Detach a server (removes its NIC on the network)
POST /v1/orgs/{orgId}/networks/{nid}/detach Paramètres
nid(path, required)
Corps de la requête
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 Corps de la requête
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 Paramètres
id(path, required)
GET /services/{id}/hosting/stats/history
Monthly disk + bandwidth history
GET /v1/orgs/{orgId}/services/{id}/hosting/stats/history Paramètres
id(path, required)
GET /services/{id}/hosting/stats/sites
Disk + bandwidth per website
GET /v1/orgs/{orgId}/services/{id}/hosting/stats/sites Paramètres
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} Paramètres
id(path, required)domain(path, required)
GET /services/{id}/hosting/activity
Hosting activity log
GET /v1/orgs/{orgId}/services/{id}/hosting/activity Paramètres
id(path, required)
GET /services/{id}/hosting/notices
Messages from the hosting server (backup created/restored, …)
GET /v1/orgs/{orgId}/services/{id}/hosting/notices Paramètres
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 Paramètres
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} Paramètres
id(path, required)notice(path, required)
GET /services/{id}/hosting/logins
Panel/API sign-in history
GET /v1/orgs/{orgId}/services/{id}/hosting/logins Paramètres
id(path, required)
GET /services/{id}/hosting/ssh-keys
SSH/SFTP keys
GET /v1/orgs/{orgId}/services/{id}/hosting/ssh-keys Paramètres
id(path, required)
POST /services/{id}/hosting/ssh-keys
Add an SSH key
POST /v1/orgs/{orgId}/services/{id}/hosting/ssh-keys Paramètres
id(path, required)
Corps de la requête
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} Paramètres
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 Paramètres
id(path, required)
Corps de la requête
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 Paramètres
id(path, required)
Corps de la requête
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 Paramètres
id(path, required)
Corps de la requête
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 Paramètres
id(path, required)
POST /services/{id}/hosting/web
Add a website
POST /v1/orgs/{orgId}/services/{id}/hosting/web Paramètres
id(path, required)
Corps de la requête
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 Paramètres
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 Paramètres
id(path, required)
GET /services/{id}/hosting/web/{domain}
One website
GET /v1/orgs/{orgId}/services/{id}/hosting/web/{domain} Paramètres
id(path, required)domain(path, required)
PATCH /services/{id}/hosting/web/{domain}
Change website settings
PATCH /v1/orgs/{orgId}/services/{id}/hosting/web/{domain} Paramètres
id(path, required)domain(path, required)
Corps de la requête
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} Paramètres
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 Paramètres
id(path, required)domain(path, required)
Corps de la requête
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} Paramètres
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 Paramètres
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 Paramètres
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 Paramètres
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 Paramètres
id(path, required)domain(path, required)
Corps de la requête
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 Paramètres
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 Paramètres
id(path, required)domain(path, required)
Corps de la requête
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} Paramètres
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 Paramètres
id(path, required)domain(path, required)
Corps de la requête
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} Paramètres
id(path, required)domain(path, required)ftpUser(path, required)
Corps de la requête
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} Paramètres
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} Paramètres
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 Paramètres
id(path, required)
GET /services/{id}/hosting/apps/jobs
Recent app installs and their status
GET /v1/orgs/{orgId}/services/{id}/hosting/apps/jobs Paramètres
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 Paramètres
id(path, required)app(path, required)
Corps de la requête
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 Paramètres
id(path, required)
POST /services/{id}/hosting/mail
Add a mail domain
POST /v1/orgs/{orgId}/services/{id}/hosting/mail Paramètres
id(path, required)
Corps de la requête
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} Paramètres
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} Paramètres
id(path, required)domain(path, required)
Corps de la requête
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} Paramètres
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 Paramètres
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 Paramètres
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 Paramètres
id(path, required)domain(path, required)
Corps de la requête
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 Paramètres
id(path, required)domain(path, required)
Corps de la requête
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 Paramètres
id(path, required)domain(path, required)
GET /services/{id}/hosting/mail/{domain}/accounts
Mailboxes
GET /v1/orgs/{orgId}/services/{id}/hosting/mail/{domain}/accounts Paramètres
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 Paramètres
id(path, required)domain(path, required)
Corps de la requête
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} Paramètres
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} Paramètres
id(path, required)domain(path, required)account(path, required)
Corps de la requête
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} Paramètres
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 Paramètres
id(path, required)domain(path, required)account(path, required)
Corps de la requête
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} Paramètres
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 Paramètres
id(path, required)domain(path, required)account(path, required)
Corps de la requête
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} Paramètres
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 Paramètres
id(path, required)domain(path, required)account(path, required)
Corps de la requête
message | string | nullable · Autoreply text; null switches it off |
GET /services/{id}/hosting/databases
Databases
GET /v1/orgs/{orgId}/services/{id}/hosting/databases Paramètres
id(path, required)
POST /services/{id}/hosting/databases
Create a database
POST /v1/orgs/{orgId}/services/{id}/hosting/databases Paramètres
id(path, required)
Corps de la requête
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} Paramètres
id(path, required)db(path, required)
Corps de la requête
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} Paramètres
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 Paramètres
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 Paramètres
id(path, required)db(path, required)
GET /services/{id}/hosting/cron
Cron jobs
GET /v1/orgs/{orgId}/services/{id}/hosting/cron Paramètres
id(path, required)
POST /services/{id}/hosting/cron
Add a cron job
POST /v1/orgs/{orgId}/services/{id}/hosting/cron Paramètres
id(path, required)
Corps de la requête
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 Paramètres
id(path, required)
PUT /services/{id}/hosting/cron-reports
E-mail cron output on/off
PUT /v1/orgs/{orgId}/services/{id}/hosting/cron-reports Paramètres
id(path, required)
Corps de la requête
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} Paramètres
id(path, required)job(path, required)
Corps de la requête
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} Paramètres
id(path, required)job(path, required)
GET /services/{id}/hosting/backups
Backups
GET /v1/orgs/{orgId}/services/{id}/hosting/backups Paramètres
id(path, required)
POST /services/{id}/hosting/backups
Create a backup now (queued)
POST /v1/orgs/{orgId}/services/{id}/hosting/backups Paramètres
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 Paramètres
id(path, required)file(path, required)
Corps de la requête
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 Paramètres
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 Paramètres
id(path, required)
Corps de la requête
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 Paramètres
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 Paramètres
id(path, required)file(path, required)
DELETE /services/{id}/hosting/backups/{file}
Delete a backup
DELETE /v1/orgs/{orgId}/services/{id}/hosting/backups/{file} Paramètres
id(path, required)file(path, required)
GET /services/{id}/hosting/files
List a folder
GET /v1/orgs/{orgId}/services/{id}/hosting/files Paramètres
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 Paramètres
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 Paramètres
id(path, required)
Corps de la requête
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 Paramètres
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 Paramètres
path(query, required)id(path, required)
POST /services/{id}/hosting/files/folder
Create a folder
POST /v1/orgs/{orgId}/services/{id}/hosting/files/folder Paramètres
id(path, required)
Corps de la requête
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 Paramètres
id(path, required)
Corps de la requête
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 Paramètres
id(path, required)
Corps de la requête
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 Paramètres
id(path, required)
Corps de la requête
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 Paramètres
id(path, required)
Corps de la requête
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 Paramètres
id(path, required)
Corps de la requête
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 Paramètres
id(path, required)
Corps de la requête
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 Corps de la requête
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 Paramètres
before(query)limit(query)
catalog
Public storefront catalog
GET /v1/catalog
Active categories + products (with prices + availability) for this brand
GET /v1/catalog Paramètres
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 Paramètres
status(query)limit(query)offset(query)
GET /invoices/{id}
Get one of this org's invoices + lines
GET /v1/orgs/{orgId}/invoices/{id} Paramètres
id(path, required)
GET /invoices/{id}/pdf
Download the invoice PDF (rendered by the e-invoicing service)
GET /v1/orgs/{orgId}/invoices/{id}/pdf Paramètres
id(path, required)
POST /invoices/{id}/pay
Start payment for an invoice (Stripe Checkout)
POST /v1/orgs/{orgId}/invoices/{id}/pay Paramètres
id(path, required)
Corps de la requête
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 Paramètres
id(path, required)
Corps de la requête
reason | string |
GET /subscriptions/{id}/plan-options
Plans this subscription can move to, with proration + feasibility
GET /v1/orgs/{orgId}/subscriptions/{id}/plan-options Paramètres
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 Paramètres
id(path, required)
Corps de la requête
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 Paramètres
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 Corps de la requête
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 Paramètres
id(path, required)
Corps de la requête
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 Corps de la requête
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 Corps de la requête
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 Paramètres
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} Paramètres
id(path, required)
GET /vat-quote
VAT for an order before it is placed, for this organization
GET /v1/orgs/{orgId}/vat-quote Paramètres
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 Corps de la requête
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 Paramètres
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} Paramètres
id(path, required)
POST /tickets/{id}/messages
Reply to a ticket (re-opens it)
POST /v1/orgs/{orgId}/tickets/{id}/messages Paramètres
id(path, required)
Corps de la requête
body* | string |
POST /tickets/{id}/close
Close a ticket
POST /v1/orgs/{orgId}/tickets/{id}/close Paramètres
id(path, required)
POST /tickets/{id}/reopen
Reopen a closed ticket
POST /v1/orgs/{orgId}/tickets/{id}/reopen Paramètres
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 Paramètres
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} Paramètres
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 Paramètres
id(path, required)
PATCH /services/{id}/lb
Change the balancing algorithm
PATCH /v1/orgs/{orgId}/services/{id}/lb Paramètres
id(path, required)
Corps de la requête
algorithm* | string |
POST /services/{id}/lb/services
Add a service (listener: protocol + ports + health check)
POST /v1/orgs/{orgId}/services/{id}/lb/services Paramètres
id(path, required)
Corps de la requête
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} Paramètres
id(path, required)sid(path, required)
Corps de la requête
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} Paramètres
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 Paramètres
id(path, required)
Corps de la requête
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} Paramètres
id(path, required)tid(path, required)
Corps de la requête
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} Paramètres
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 Paramètres
id(path, required)
POST /services/{id}/lb/restart
Restart the load balancer appliance
POST /v1/orgs/{orgId}/services/{id}/lb/restart Paramètres
id(path, required)
GET /services/{id}/lb/metrics
Requests per second, status codes, connections and traffic
GET /v1/orgs/{orgId}/services/{id}/lb/metrics Paramètres
range(query)id(path, required)
GET /services/{id}/lb/logs
Recent request log lines (newest last)
GET /v1/orgs/{orgId}/services/{id}/lb/logs Paramètres
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 Paramètres
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 Paramètres
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 Corps de la requête
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} Paramètres
cid(path, required)
Corps de la requête
name* | string |
DELETE /lb-certificates/{cid}
Delete a certificate (refused while a load balancer uses it)
DELETE /v1/orgs/{orgId}/lb-certificates/{cid} Paramètres
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 Paramètres
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 Paramètres
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 Paramètres
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 Paramètres
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 Paramètres
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 Paramètres
id(path, required)
Corps de la requête
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 Paramètres
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 Paramètres
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 Paramètres
id(path, required)
Corps de la requête
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 Paramètres
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} Paramètres
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 Paramètres
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 Paramètres
id(path, required)
Corps de la requête
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} Paramètres
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 Paramètres
id(path, required)
Corps de la requête
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 Paramètres
id(path, required)
Corps de la requête
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 Paramètres
id(path, required)
Corps de la requête
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 Paramètres
id(path, required)
Corps de la requête
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 Paramètres
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 Paramètres
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 Paramètres
id(path, required)backupId(path, required)
Corps de la requête
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 Paramètres
id(path, required)
GET /services/{id}/data/tasks/{taskId}
One task with its log
GET /v1/orgs/{orgId}/services/{id}/data/tasks/{taskId} Paramètres
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 Paramètres
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 Paramètres
id(path, required)
GET /services/{id}/data/logs
The engine's recent log lines
GET /v1/orgs/{orgId}/services/{id}/data/logs Paramètres
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 Corps de la requête
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 Corps de la requête
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 Paramètres
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 Corps de la requête
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} Paramètres
keyId(path, required)
Corps de la requête
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} Paramètres
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 Paramètres
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 Paramètres
keyId(query)before(query)limit(query)
Questions fréquentes
Faastic propose-t-il une API publique ?
Oui. Une API REST couvre les serveurs, les load balancers, les réseaux, les bases de données, le DNS, les domaines et la facturation : tout ce que vous pouvez faire dans le portail.
Existe-t-il une spécification OpenAPI ?
Oui, générée à partir de l'API en production, à l'adresse https://api.faastic.com/v1/openapi.json.
Quelles sont les limites de débit ?
300 requêtes par minute et par jeton.
Puis-je commander des services via l'API ?
Oui, avec un jeton en lecture et écriture qui dispose des droits de facturation. La commande renvoie un lien de paiement, et rien n'est créé tant que la facture n'est pas payée.