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

url = "https://api.squarecloud.app/v2/apps/{app_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/apps/{app_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/apps/{app_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/apps/{app_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/apps/{app_id}/snapshots")
.header("Authorization", "<authorization>")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.squarecloud.app/v2/apps/{app_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/applications/23457145698959364/a23d130fcc9ddaf2d288ae9599a4292c32.zip?AWSAccessKeyId=i06Xdad2dRD74Pm8Xly&Expires=1753081182&Signature=riWPedawcsouRAPGU5n3kGHnWoOuw%3D",
        "key": "AWSAccessKeyId=i06Xdad2dRD74Pm8Xly&Expires=1753081182&Signature=riWPedawcsouRAPGU5n3kGHnWoOuw%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

app_id
string
requis
L’ID de l’application. Vous le trouverez dans l’URL du tableau de bord de votre application.

Comportement de la soft deadline

Cette route suit un modèle de soft deadline — 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 (valide 30 jours), exactement comme auparavant.
  • Si le snapshot met plus de ~90 secondes à se générer, la route répond immédiatement avec 202 et le code SNAPSHOT_PROCESSING. Ce n’est pas un échec. Le snapshot continue de se générer en arrière-plan et apparaîtra de lui-même dans la liste des snapshots, généralement en ~2 minutes. Il s’agit du comportement attendu pour les applications volumineuses.
N’utilisez pas cet endpoint POST comme mécanisme de polling. Pour vérifier si un snapshot SNAPSHOT_PROCESSING est terminé, utilisez l’endpoint Lister les snapshots (GET) — et non un autre POST. Reposter après la fin du snapshot déclenche un tout nouveau snapshot à partir de zéro.
Le client doit se brancher sur la 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 encore en cours de génération.Attendez ~2 minutes, puis confirmez via Lister les snapshots (GET). Ne refaites 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
Renvoyé lorsque le snapshot dépasse la soft deadline 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 confirmez 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 / 5 s) ou par application (1 requête / 180 s). Patientez et réessayez sous peu.
DAILY_SNAPSHOTS_LIMIT_REACHED
429
Quota journalier atteint — le compte a épuisé l’allocation quotidienne de snapshots de son plan ((RAM / 256) × 2 par 24 h). Le quota se libère à mesure que la fenêtre glissante de 24 heures avance ; pour une allocation quotidienne plus élevée, mettez le plan à niveau.
{
    "status": "success",
    "response": {
        "url": "https://snapshots.squarecloud.app/applications/23457145698959364/a23d130fcc9ddaf2d288ae9599a4292c32.zip?AWSAccessKeyId=i06Xdad2dRD74Pm8Xly&Expires=1753081182&Signature=riWPedawcsouRAPGU5n3kGHnWoOuw%3D",
        "key": "AWSAccessKeyId=i06Xdad2dRD74Pm8Xly&Expires=1753081182&Signature=riWPedawcsouRAPGU5n3kGHnWoOuw%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"
}