Passer au contenu principal
POST
/
v2
/
databases
/
{database_id}
/
snapshots
Créer un snapshot
curl --request POST \
  --url https://api.squarecloud.app/v2/databases/{database_id}/snapshots \
  --header 'Authorization: <authorization>'
import requests

url = "https://api.squarecloud.app/v2/databases/{database_id}/snapshots"

headers = {"Authorization": "<authorization>"}

response = requests.post(url, headers=headers)

print(response.text)
const options = {method: 'POST', headers: {Authorization: '<authorization>'}};

fetch('https://api.squarecloud.app/v2/databases/{database_id}/snapshots', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://api.squarecloud.app/v2/databases/{database_id}/snapshots",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>"
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main

import (
"fmt"
"net/http"
"io"
)

func main() {

url := "https://api.squarecloud.app/v2/databases/{database_id}/snapshots"

req, _ := http.NewRequest("POST", url, nil)

req.Header.Add("Authorization", "<authorization>")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.post("https://api.squarecloud.app/v2/databases/{database_id}/snapshots")
.header("Authorization", "<authorization>")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.squarecloud.app/v2/databases/{database_id}/snapshots")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = '<authorization>'

response = http.request(request)
puts response.read_body
{
  "status":"success",
  "response":{
    "url":"https://snapshots.squarecloud.app/databases/384443501775028242/a14b8d5e1cb7405a851eb4c075506121.zip?AWSAccessKeyId=accesskey&Expires=1757683751&Signature=JR3danhvtVywQmcaIanWsoJFqhQ%3D",
    "key":"AWSAccessKeyId=accesskey&Expires=1757683751&Signature=JR3danhvtVywQmcaIanWsoJFqhQ%3D"
  }
}
{
  "status": "error",
  "code": "SNAPSHOT_PROCESSING"
}
{
  "status": "error",
  "code": "KEEP_CALM",
  "message": "You already requested a snapshot recently. Please wait a minute before trying again. 1r/5s"
}
{
  "status": "error",
  "code": "DAILY_SNAPSHOTS_LIMIT_REACHED",
  "message": "You are being rate limited for daily snapshots. 8r/24h"
}
Chaque compte peut effectuer jusqu’à (RAM / 256) * 2 snapshots toutes les 24 heures.
Authorization
string
requis
La clé d’API de votre compte. Vous pouvez la trouver dans les paramètres de votre compte.

Paramètres

database_id
string
requis
L’ID de la base de données.

Comportement du délai souple (soft deadline)

Cette route suit un modèle de délai souple — elle ne répond plus toujours de manière synchrone.
  • Si le snapshot se termine en ~90 secondes, la route répond avec 200 success et une URL de téléchargement signée (valable 30 jours), exactement comme avant.
  • Si le snapshot met plus de ~90 secondes à être généré, la route répond immédiatement avec 202 et le code SNAPSHOT_PROCESSING. Ce n’est pas un échec. Le snapshot continue d’être généré en arrière-plan et apparaîtra de lui-même dans la liste des snapshots, généralement en ~2 minutes. C’est le comportement attendu pour les grandes bases de données.
N’utilisez pas cet endpoint POST comme mécanisme de polling. Pour vérifier si un snapshot SNAPSHOT_PROCESSING est terminé, utilisez l’endpoint List Snapshots (GET) — et non un autre POST. Relancer un POST après la fin du snapshot démarre un tout nouveau snapshot depuis zéro.
Le client doit distinguer les cas de réponse comme suit :
RéponseSignificationQue faire
status === "success"Le snapshot est prêt.Utilisez l’url pour le télécharger.
status === "error" et code === "SNAPSHOT_PROCESSING"Le snapshot est toujours en cours de génération.Attendez ~2 minutes, puis vérifiez via List Snapshots (GET). Ne relancez pas de POST.
status === "error" avec tout autre codeÉchec réel.Traitez l’erreur (voir ci-dessous).

Réponse

status
string
Indique si l’appel a réussi. success en cas de succès, error sinon.
response
object
Le contenu de la réponse. Présent uniquement lorsque status vaut success.
SNAPSHOT_PROCESSING
202
Retourné lorsque le snapshot dépasse le délai souple de ~90 secondes. Le snapshot est toujours en cours de génération en arrière-plan et apparaîtra de lui-même dans la liste des snapshots, généralement en ~2 minutes. Ce n’est pas une erreur — attendez et vérifiez via l’endpoint de liste GET.

Erreurs

Une requête de snapshot peut être rejetée avec 429 Too Many Requests. Utilisez le champ code pour distinguer les deux cas :
KEEP_CALM
429
Cooldown à court terme — vous avez atteint la limite par utilisateur (1 requête / 5s) ou par base de données (1 requête / 180s). Patientez et réessayez sous peu.
DAILY_SNAPSHOTS_LIMIT_REACHED
429
Quota journalier atteint — le compte a épuisé le quota journalier de snapshots de son plan ((RAM / 256) × 2 par 24h). Le quota se libère au fur et à mesure que la fenêtre glissante de 24 heures avance ; pour un quota journalier plus élevé, améliorez le plan.
{
  "status":"success",
  "response":{
    "url":"https://snapshots.squarecloud.app/databases/384443501775028242/a14b8d5e1cb7405a851eb4c075506121.zip?AWSAccessKeyId=accesskey&Expires=1757683751&Signature=JR3danhvtVywQmcaIanWsoJFqhQ%3D",
    "key":"AWSAccessKeyId=accesskey&Expires=1757683751&Signature=JR3danhvtVywQmcaIanWsoJFqhQ%3D"
  }
}
{
  "status": "error",
  "code": "SNAPSHOT_PROCESSING"
}
{
  "status": "error",
  "code": "KEEP_CALM",
  "message": "You already requested a snapshot recently. Please wait a minute before trying again. 1r/5s"
}
{
  "status": "error",
  "code": "DAILY_SNAPSHOTS_LIMIT_REACHED",
  "message": "You are being rate limited for daily snapshots. 8r/24h"
}