Référence de l'API

Produite à partir du même document OpenAPI 3.1 que publie l'API : elle concorde toujours.

Adresse de base https://api.liftpad.app/v1. Téléchargez le document : openapi.json (aussi à https://api.liftpad.app/v1/openapi.json). Comment obtenir un jeton : Authentification.

Erreurs

Chaque erreur est en JSON, avec un code stable dans error et une phrase dans message (voir Error). Les appels qui exigent un jeton peuvent aussi répondre 401 et 429.

HTTPSens
400La requête n'est pas valide (voir error et message)
401Aucun jeton d'API ou session valide
402Une limite du forfait ou un problème de facturation (error : plan_limit, credits, billing)
403Non permis : rôle insuffisant, jeton utilisé là où une session du tableau de bord est requise (session_required), ou en-tête CSRF absent (csrf)
404Introuvable, ou invisible pour vous
409En conflit avec l'état actuel (voir error)
411En-tête Content-Length requis
413Trop gros pour le forfait ou les limites
422L'IA n'a pas trouvé de réponse sûre cette fois
429Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)
502Un service externe (Cloudflare, le registraire, Stripe) n'a pas répondu; réessayez
503Pas encore offert sur ce Liftpad, ou indisponible un moment

Opérations

Sites

Créer, lire, déplacer et supprimer des sites.

get/sites

Lister les sites Tous les sites que vous voyez (un jeton limité à une équipe ne voit que les siens).

Jeton : read ou deployTout rôle d'équipelistSites

Paramètres

NomDansTypeDescription
teamquerystringSeulement cette équipe (slug)

Réponses

  • 200 Les sites, par nom

    application/json · liste de Site

  • 401 Aucun jeton d'API ou session valide
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS "https://api.liftpad.app/v1/sites" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN"

post/sites

Créer un site Crée un site vide, servi à https://<nom>.liftpad.ca dès qu'un déploiement est publié. Indiquez team si vous faites partie de plusieurs équipes.

Jeton : deployDéveloppeur, administrateur ou propriétairecreateSite

Corps de la requête

application/json · object

ChampTypeDescription
name requisstring3 à 40 caractères : a-z, 0-9 et traits d'union simples
teamstringSlug de l'équipe

Réponses

  • 201 Créé

    application/json · object

    ChampTypeDescription
    id requisstring
    name requisstring
    team requisstring
    url requisstring
  • 400 La requête n'est pas valide (voir error et message)
  • 401 Aucun jeton d'API ou session valide
  • 402 Une limite du forfait ou un problème de facturation (error : plan_limit, credits, billing)
  • 403 Non permis : rôle insuffisant, jeton utilisé là où une session du tableau de bord est requise (session_required), ou en-tête CSRF absent (csrf)
  • 409 En conflit avec l'état actuel (voir error)
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS -X POST "https://api.liftpad.app/v1/sites" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN" \
  -H "content-type: application/json" \
  -d '{"name":"my-site","team":"my-agency"}'

get/sites/{name}

Obtenir un site

Jeton : read ou deployTout rôle d'équipegetSite

Paramètres

NomDansTypeDescription
name requispathstringNom du site

Réponses

  • 200 Le site

    application/json · SiteDetail

    ChampTypeDescription
    id requisstringIdentifiant du site
    name requisstringNom du site : 3 à 40 caractères, a-z, 0-9 et traits d'union simples
    team_idstring ou nullIdentifiant de l'équipe propriétaire du site
    primary_domainstring ou nullLe domaine personnalisé principal, ou null pour l'adresse liftpad.ca
    live_deploy_idstring ou nullLe déploiement en ligne, ou null si rien n'est publié
    created_atintegerCréation du site (millisecondes depuis 1970, UTC)
    updated_atintegerDernière modification (millisecondes depuis 1970, UTC)
    suspended_atinteger ou nullSuspension du site par Liftpad (millisecondes depuis 1970, UTC), ou null
    functionsliste de string ou nullNoms des fonctions du site, ou null
    accessstring ou null: all, previews, nullPortée du mot de passe visiteur (all ou previews), ou null
    url requisstring (uri)L'adresse du site sur liftpad.ca
    liveLiveRecord ou nullLe pointeur de mise en ligne, ou null
    domains requisliste de objectDomaines personnalisés du site
    ChampTypeDescription
    hostnamestring
    created_atinteger
  • 401 Aucun jeton d'API ou session valide
  • 404 Introuvable, ou invisible pour vous
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS "https://api.liftpad.app/v1/sites/my-site" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN"

delete/sites/{name}

Supprimer un site Met le site hors ligne pour de bon, libère ses domaines et son nom. Envoyez le nom du site dans confirm.

Session du tableau de bord seulementPropriétairedeleteSite

Paramètres

NomDansTypeDescription
name requispathstringNom du site

Corps de la requête

application/json · object

ChampTypeDescription
confirm requisstringLe nom du site

Réponses

  • 200 Supprimé

    application/json · Ok

    ChampTypeDescription
    ok requistrue
  • 400 La requête n'est pas valide (voir error et message)
  • 401 Aucun jeton d'API ou session valide
  • 403 Non permis : rôle insuffisant, jeton utilisé là où une session du tableau de bord est requise (session_required), ou en-tête CSRF absent (csrf)
  • 404 Introuvable, ou invisible pour vous
  • 409 En conflit avec l'état actuel (voir error)
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)
  • 502 Un service externe (Cloudflare, le registraire, Stripe) n'a pas répondu; réessayez

Exemple

# Session du tableau de bord seulement : un jeton d'API reçoit 403 forbidden
curl -sS -X DELETE "https://api.liftpad.app/v1/sites/my-site" \
  -H "content-type: application/json" \
  -d '{"confirm":"my-site"}'

post/sites/{name}/transfer

Déplacer un site vers une autre équipe Pour un propriétaire des deux équipes. Fichiers, déploiements et domaines suivent le site, dans les limites du forfait de l'équipe qui le reçoit.

Session du tableau de bord seulementPropriétairetransferSite

Paramètres

NomDansTypeDescription
name requispathstringNom du site

Corps de la requête

application/json · object

ChampTypeDescription
team requisstringSlug de l'équipe qui reçoit

Réponses

  • 200 Déplacé

    application/json · object

    ChampTypeDescription
    ok requisboolean
    site requisstring
    team requisstring
  • 400 La requête n'est pas valide (voir error et message)
  • 401 Aucun jeton d'API ou session valide
  • 402 Une limite du forfait ou un problème de facturation (error : plan_limit, credits, billing)
  • 403 Non permis : rôle insuffisant, jeton utilisé là où une session du tableau de bord est requise (session_required), ou en-tête CSRF absent (csrf)
  • 404 Introuvable, ou invisible pour vous
  • 409 En conflit avec l'état actuel (voir error)
  • 413 Trop gros pour le forfait ou les limites
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

# Session du tableau de bord seulement : un jeton d'API reçoit 403 forbidden
curl -sS -X POST "https://api.liftpad.app/v1/sites/my-site/transfer" \
  -H "content-type: application/json" \
  -d '{"team":"client-team"}'

get/overview

Sites avec état de santé et dernière publication

Jeton : read ou deployTout rôle d'équipegetOverview

Paramètres

NomDansTypeDescription
teamquerystringSeulement cette équipe (slug)

Réponses

  • 200 Vue d'ensemble

    application/json · Overview

    ChampTypeDescription
    platform requisstringLe domaine du tableau de bord
    sites requisliste de object
    ChampTypeDescription
    idstringIdentifiant du site
    name requisstringNom du site : 3 à 40 caractères, a-z, 0-9 et traits d'union simples
    team_idstring ou nullIdentifiant de l'équipe propriétaire du site
    primary_domainstring ou nullLe domaine personnalisé principal, ou null pour l'adresse liftpad.ca
    live_deploy_idstring ou nullLe déploiement en ligne, ou null si rien n'est publié
    created_atintegerCréation du site (millisecondes depuis 1970, UTC)
    updated_atintegerDernière modification (millisecondes depuis 1970, UTC)
    suspended_atinteger ou nullSuspension du site par Liftpad (millisecondes depuis 1970, UTC), ou null
    functionsliste de string ou nullNoms des fonctions du site, ou null
    accessstring ou null: all, previews, nullPortée du mot de passe visiteur (all ou previews), ou null
    url requisstring (uri)L'adresse du site sur liftpad.ca
    team_slugstring ou null
    team_namestring ou null
    health_okinteger ou null1 si la dernière vérification est réussie, 0 sinon, null avant la première
    health_detailobject ou nullDétails de la dernière vérification
    health_atinteger ou nullDernière vérification (millisecondes depuis 1970, UTC), ou null
    deploy_countinteger
    live_titlestring ou nullMessage du déploiement en ligne
    live_published_atinteger ou nullPublication du déploiement en ligne (millisecondes depuis 1970, UTC), ou null
    live_filesinteger ou nullFichiers du déploiement en ligne
    domain_countinteger
    platformUrlstringL'adresse liftpad.ca (url est le domaine principal s'il y en a un)
  • 401 Aucun jeton d'API ou session valide
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS "https://api.liftpad.app/v1/overview" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN"

get/sites/{name}/manifest

Obtenir le manifeste d'un déploiement Chaque chemin avec son SHA-256, sa taille et son type, et les règles du déploiement. Sert aux exportations et à deploy_changes.

Jeton : deployDéveloppeur, administrateur ou propriétairegetManifest

Paramètres

NomDansTypeDescription
name requispathstringNom du site
deployquerystringUn déploiement (par défaut : celui en ligne)

Réponses

  • 200 Le manifeste

    application/json · Manifest

    ChampTypeDescription
    v requisinteger
    id requisstringIdentifiant du déploiement
    siteIdstring
    createdAtinteger
    files requistable de n-upletChemin vers [sha256, taille, type de contenu]
    redirects requisliste de objectRègles de redirection, dans l'ordre
    headers requisliste de objectRègles d'en-têtes
    formstable de objectFormulaires trouvés dans les pages
  • 401 Aucun jeton d'API ou session valide
  • 404 Introuvable, ou invisible pour vous
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS "https://api.liftpad.app/v1/sites/my-site/manifest" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN"

get/sites/{name}/files/{hash}

Télécharger un fichier d'un déploiement Même droit que le manifeste : les fichiers comprennent les règles du site (mots de passe Basic-Auth) et les pages protégées. Toujours envoyé en téléchargement.

Jeton : deployDéveloppeur, administrateur ou propriétairegetSiteFile

Paramètres

NomDansTypeDescription
name requispathstringNom du site
hash requispathstringSHA-256 du fichier, hexadécimal minuscule
deployquerystringUn déploiement (par défaut : celui en ligne)

Réponses

  • 200 Le contenu du fichier

    application/octet-stream · string (binary)

  • 400 La requête n'est pas valide (voir error et message)
  • 401 Aucun jeton d'API ou session valide
  • 404 Introuvable, ou invisible pour vous
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS "https://api.liftpad.app/v1/sites/my-site/files/SHA256" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN"

get/sites/{name}/functions

Obtenir les fonctions du site Les fonctions sont en alpha : seuls les opérateurs de Liftpad peuvent les déployer pour l'instant.

Jeton : read ou deployTout rôle d'équipegetFunctions

Paramètres

NomDansTypeDescription
name requispathstringNom du site

Réponses

  • 200 Fonctions, ou null

    application/json · Functions ou null

  • 401 Aucun jeton d'API ou session valide
  • 404 Introuvable, ou invisible pour vous
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS "https://api.liftpad.app/v1/sites/my-site/functions" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN"

Déploiements

Envoyer seulement les fichiers modifiés, obtenir un aperçu et des vérifications, publier et revenir en arrière.

post/sites/{name}/deploys

Commencer un déploiement Envoyez chaque chemin avec le SHA-256 de son contenu. La réponse donne les empreintes que Liftpad n'a pas encore : envoyez seulement celles-là, puis finalisez. Les fichiers déjà envoyés par votre équipe sont réutilisés.

Jeton : deployDéveloppeur, administrateur ou propriétairecreateDeploy

Paramètres

NomDansTypeDescription
name requispathstringNom du site

Corps de la requête

application/json · object

ChampTypeDescription
files requistable de stringChemin (commençant par /) vers SHA-256, au plus 20 000 fichiers
titlestringMessage du déploiement
configstringTexte d'un netlify.toml (jusqu'à 1 Mo)
rulesobjectRègles d'une exportation de site (restauration)
ChampTypeDescription
redirects requisliste de object
headers requisliste de object

Réponses

  • 201 Déploiement commencé

    application/json · object

    ChampTypeDescription
    id requisstring
    required requisliste de stringEmpreintes à envoyer
    previewUrl requisstring
  • 400 La requête n'est pas valide (voir error et message)
  • 401 Aucun jeton d'API ou session valide
  • 402 Une limite du forfait ou un problème de facturation (error : plan_limit, credits, billing)
  • 403 Non permis : rôle insuffisant, jeton utilisé là où une session du tableau de bord est requise (session_required), ou en-tête CSRF absent (csrf)
  • 404 Introuvable, ou invisible pour vous
  • 413 Trop gros pour le forfait ou les limites
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS -X POST "https://api.liftpad.app/v1/sites/my-site/deploys" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN" \
  -H "content-type: application/json" \
  -d '{"files":{"/index.html":"3a1f0c8e5b0d2d8f9c4e1a7b6d5c4b3a2f1e0d9c8b7a6f5e4d3c2b1a0f9e8d7c","/style.css":"9f8e7d6c5b4a39281706f5e4d3c2b1a0f9e8d7c6b5a493827160f5e4d3c2b1a0"},"title":"First deploy"}'

get/sites/{name}/deploys

Lister les déploiements d'un site Les 100 plus récents.

Jeton : read ou deployTout rôle d'équipelistDeploys

Paramètres

NomDansTypeDescription
name requispathstringNom du site

Réponses

  • 200 Déploiements, du plus récent au plus ancien

    application/json · liste de DeployListItem

  • 401 Aucun jeton d'API ou session valide
  • 404 Introuvable, ou invisible pour vous
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS "https://api.liftpad.app/v1/sites/my-site/deploys" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN"

put/deploys/{id}/blobs/{hash}

Envoyer un fichier Le contenu brut d'un fichier demandé par le déploiement, avec Content-Length. Liftpad vérifie le contenu par rapport à l'empreinte. Jusqu'à 100 Mo par fichier.

Jeton : deployDéveloppeur, administrateur ou propriétaireuploadDeployFile

Paramètres

NomDansTypeDescription
id requispathstringIdentifiant du déploiement
hash requispathstringSHA-256 du fichier, hexadécimal minuscule

Corps de la requête

application/octet-stream · string (binary)

Réponses

  • 200 Enregistré

    application/json · object

    ChampTypeDescription
    ok requisboolean
    hash requisstring
    size requisinteger
  • 400 La requête n'est pas valide (voir error et message)
  • 401 Aucun jeton d'API ou session valide
  • 403 Non permis : rôle insuffisant, jeton utilisé là où une session du tableau de bord est requise (session_required), ou en-tête CSRF absent (csrf)
  • 404 Introuvable, ou invisible pour vous
  • 409 En conflit avec l'état actuel (voir error)
  • 411 En-tête Content-Length requis
  • 413 Trop gros pour le forfait ou les limites
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS -X PUT "https://api.liftpad.app/v1/deploys/ID/blobs/SHA256" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN" \
  -H "content-type: application/octet-stream" \
  --data-binary @public/index.html

post/deploys/{id}/finalize

Terminer un déploiement Lit les règles et les formulaires, lance les vérifications de lancement et active l'adresse d'aperçu. S'il manque des fichiers, la réponse est 409 missing_blobs avec les empreintes à envoyer; envoyez-les et rappelez. Sur un déploiement déjà prêt, la réponse est de nouveau ready.

Jeton : deployDéveloppeur, administrateur ou propriétairefinalizeDeploy

Paramètres

NomDansTypeDescription
id requispathstringIdentifiant du déploiement

Réponses

  • 200 Prêt

    application/json · object

    ChampTypeDescription
    id requisstring
    state requis"ready"
    previewUrlstring
    summaryDeploySummary
    heldbooleanRetenu pour une vérification de sécurité
    messagestring
  • 400 La requête n'est pas valide (voir error et message)
  • 401 Aucun jeton d'API ou session valide
  • 404 Introuvable, ou invisible pour vous
  • 409 En conflit avec l'état actuel (voir error)
  • 413 Trop gros pour le forfait ou les limites
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS -X POST "https://api.liftpad.app/v1/deploys/ID/finalize" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN"

get/deploys/{id}

Obtenir un déploiement

Jeton : read ou deployTout rôle d'équipegetDeploy

Paramètres

NomDansTypeDescription
id requispathstringIdentifiant du déploiement

Réponses

  • 200 Le déploiement

    application/json · Deploy

    ChampTypeDescription
    id requisstringIdentifiant du déploiement
    site_idstring
    site_namestring
    team_idstring ou null
    state requisstring: uploading, ready, expireduploading jusqu'à la finalisation, puis ready
    titlestring ou nullLe message du déploiement
    file_countinteger
    total_sizeintegerOctets
    created_atintegerDébut (millisecondes depuis 1970, UTC)
    ready_atinteger ou nullFinalisation (millisecondes depuis 1970, UTC), ou null
    published_atinteger ou nullDernière publication (millisecondes depuis 1970, UTC), ou null
    held requisbooleanVrai tant qu'une vérification de sécurité de Liftpad le retient (publication impossible)
    required requisliste de stringFichiers encore à envoyer (pendant l'envoi)
    summaryobject ou nullPrésent une fois prêt
  • 401 Aucun jeton d'API ou session valide
  • 404 Introuvable, ou invisible pour vous
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS "https://api.liftpad.app/v1/deploys/ID" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN"

get/deploys/{id}/checks

Vérifications de lancement d'un déploiement Liens brisés, fichiers manquants, titres, descriptions, texte de remplacement, contenu non sécurisé, images lourdes, plan du site, robots.txt et plus, lus dans jusqu'à 400 pages.

Jeton : read ou deployTout rôle d'équipegetDeployChecks

Paramètres

NomDansTypeDescription
id requispathstringIdentifiant du déploiement

Réponses

  • 200 Le rapport

    application/json · CheckReport

    ChampTypeDescription
    vinteger
    score requisinteger0 à 100
    pages requisintegerPages HTML lues
    counts requisobjectNombre de problèmes par niveau
    ChampTypeDescription
    errorinteger
    warninginteger
    infointeger
    issues requisliste de object
    ChampTypeDescription
    level requisstring: error, warning, info
    code requisstringCode stable, par exemple broken_link ou missing_alt
    page requisstring ou nullLa page, ou null pour tout le site
    detail requisstring
    refstringLe fichier concerné, s'il y en a un
    truncatedbooleanVrai si la liste a été coupée
  • 401 Aucun jeton d'API ou session valide
  • 404 Introuvable, ou invisible pour vous
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS "https://api.liftpad.app/v1/deploys/ID/checks" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN"

post/deploys/{id}/suggest

Titre et description d'une page par IA Rédigés à partir du texte de la page. Utilise les suggestions IA mensuelles du forfait; un contenu déjà traité est servi gratuitement.

Jeton : deployDéveloppeur, administrateur ou propriétairesuggestPageMeta

Paramètres

NomDansTypeDescription
id requispathstringIdentifiant du déploiement

Corps de la requête

application/json · object

ChampTypeDescription
page requisstringChemin d'une page HTML du déploiement

Réponses

  • 200 Suggestion

    application/json · object

    ChampTypeDescription
    title requisstring
    description requisstring
    cached requisboolean
    leftintegerSuggestions restantes ce mois-ci
  • 400 La requête n'est pas valide (voir error et message)
  • 401 Aucun jeton d'API ou session valide
  • 404 Introuvable, ou invisible pour vous
  • 422 L'IA n'a pas trouvé de réponse sûre cette fois
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS -X POST "https://api.liftpad.app/v1/deploys/ID/suggest" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN" \
  -H "content-type: application/json" \
  -d '{"page":"/about.html"}'

post/deploys/{id}/alt

Texte de remplacement d'une image par IA Un modèle de vision décrit une image du déploiement en une phrase, dans la langue de la page.

Jeton : deployDéveloppeur, administrateur ou propriétairesuggestImageAlt

Paramètres

NomDansTypeDescription
id requispathstringIdentifiant du déploiement

Corps de la requête

application/json · object

ChampTypeDescription
page requisstringLa page qui montre l'image
src requisstringL'adresse de l'image telle qu'écrite dans la page

Réponses

  • 200 Texte de remplacement

    application/json · object

    ChampTypeDescription
    alt requisstring
    langstring
    srcstring
    cached requisboolean
  • 400 La requête n'est pas valide (voir error et message)
  • 401 Aucun jeton d'API ou session valide
  • 404 Introuvable, ou invisible pour vous
  • 422 L'IA n'a pas trouvé de réponse sûre cette fois
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS -X POST "https://api.liftpad.app/v1/deploys/ID/alt" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN" \
  -H "content-type: application/json" \
  -d '{"page":"/index.html","src":"img/team.jpg"}'

post/sites/{name}/publish

Publier un déploiement (ou revenir en arrière) Met un déploiement prêt en ligne partout en environ 5 secondes. Publier un ancien déploiement est un retour arrière. Met fin à un test A/B en cours.

Jeton : deployDéveloppeur, administrateur ou propriétairepublishDeploy

Paramètres

NomDansTypeDescription
name requispathstringNom du site

Corps de la requête

application/json · object

ChampTypeDescription
deployId requisstring

Réponses

  • 200 En ligne

    application/json · object

    ChampTypeDescription
    site requisstring
    deployId requisstring
    generation requisinteger
    url requisstringL'adresse en ligne (domaine principal s'il y en a un)
  • 401 Aucun jeton d'API ou session valide
  • 403 Non permis : rôle insuffisant, jeton utilisé là où une session du tableau de bord est requise (session_required), ou en-tête CSRF absent (csrf)
  • 404 Introuvable, ou invisible pour vous
  • 409 En conflit avec l'état actuel (voir error)
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)
  • 503 Pas encore offert sur ce Liftpad, ou indisponible un moment

Exemple

curl -sS -X POST "https://api.liftpad.app/v1/sites/my-site/publish" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN" \
  -H "content-type: application/json" \
  -d '{"deployId":"k2j4h6g8f0d2"}'

post/sites/{name}/unpublish

Mettre un site hors ligne Rien n'est supprimé : publiez un déploiement pour le remettre en ligne.

Jeton : deployDéveloppeur, administrateur ou propriétaireunpublishSite

Paramètres

NomDansTypeDescription
name requispathstringNom du site

Réponses

  • 200 Hors ligne

    application/json · Ok

    ChampTypeDescription
    ok requistrue
  • 401 Aucun jeton d'API ou session valide
  • 404 Introuvable, ou invisible pour vous
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS -X POST "https://api.liftpad.app/v1/sites/my-site/unpublish" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN"

Domaines

Chercher, acheter et connecter des domaines.

post/sites/{name}/domains

Connecter un domaine que vous possédez Répond avec les enregistrements DNS à ajouter. HTTPS démarre dès que le DNS pointe vers Liftpad. Avec primary, le domaine devient l'adresse principale dès qu'il est prêt.

Jeton : deployDéveloppeur, administrateur ou propriétaireaddDomain

Paramètres

NomDansTypeDescription
name requispathstringNom du site

Corps de la requête

application/json · object

ChampTypeDescription
hostname requisstring
primarybooleanEn faire l'adresse principale une fois prêt

Réponses

  • 201 Ajouté

    application/json · object

    ChampTypeDescription
    hostname requisstring
    sitestring
    primaryboolean
    mainWhenReadyboolean
    status requisstring
    sslStatusstring
    records requisliste de object
  • 400 La requête n'est pas valide (voir error et message)
  • 401 Aucun jeton d'API ou session valide
  • 402 Une limite du forfait ou un problème de facturation (error : plan_limit, credits, billing)
  • 404 Introuvable, ou invisible pour vous
  • 409 En conflit avec l'état actuel (voir error)
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)
  • 502 Un service externe (Cloudflare, le registraire, Stripe) n'a pas répondu; réessayez

Exemple

curl -sS -X POST "https://api.liftpad.app/v1/sites/my-site/domains" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN" \
  -H "content-type: application/json" \
  -d '{"hostname":"www.example.com","primary":true}'

get/sites/{name}/domains

Lister les domaines d'un site Avec l'état DNS et du certificat à jour (vérifié au plus une fois par minute).

Jeton : read ou deployTout rôle d'équipelistDomains

Paramètres

NomDansTypeDescription
name requispathstringNom du site

Réponses

  • 200 Domaines

    application/json · liste de Domain

  • 401 Aucun jeton d'API ou session valide
  • 404 Introuvable, ou invisible pour vous
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS "https://api.liftpad.app/v1/sites/my-site/domains" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN"

delete/sites/{name}/domains/{hostname}

Retirer un domaine Un domaine acheté sur Liftpad reste connecté tant qu'il est enregistré.

Jeton : deployDéveloppeur, administrateur ou propriétaireremoveDomain

Paramètres

NomDansTypeDescription
name requispathstringNom du site
hostname requispathstringLe domaine

Réponses

  • 200 Retiré

    application/json · Ok

    ChampTypeDescription
    ok requistrue
  • 401 Aucun jeton d'API ou session valide
  • 404 Introuvable, ou invisible pour vous
  • 409 En conflit avec l'état actuel (voir error)
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)
  • 502 Un service externe (Cloudflare, le registraire, Stripe) n'a pas répondu; réessayez

Exemple

curl -sS -X DELETE "https://api.liftpad.app/v1/sites/my-site/domains/www.example.com" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN"

post/sites/{name}/primary

Choisir l'adresse principale Les visiteurs des autres adresses sont envoyés vers la principale. null revient à l'adresse liftpad.ca. Un domaine pas encore prêt deviendra principal automatiquement (409 domain_not_ready).

Jeton : deployDéveloppeur, administrateur ou propriétairesetPrimaryDomain

Paramètres

NomDansTypeDescription
name requispathstringNom du site

Corps de la requête

application/json · object

ChampTypeDescription
hostname requisstring ou null

Réponses

  • 200 Choisie

    application/json · object

    ChampTypeDescription
    ok requisboolean
    primary requisstring ou null
  • 400 La requête n'est pas valide (voir error et message)
  • 401 Aucun jeton d'API ou session valide
  • 404 Introuvable, ou invisible pour vous
  • 409 En conflit avec l'état actuel (voir error)
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS -X POST "https://api.liftpad.app/v1/sites/my-site/primary" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN" \
  -H "content-type: application/json" \
  -d '{"hostname":"www.example.com"}'

get/domains/search

Chercher des noms de domaine Un nom est-il libre, et son prix en CAD. Aucune connexion requise. Les mêmes noms sont gardés en cache dix minutes.

Sans connexionsearchDomains

Paramètres

NomDansTypeDescription
qquerystringUn nom ou des mots, jusqu'à 100 caractères

Réponses

  • 200 Résultats

    application/json · DomainSearch

    ChampTypeDescription
    query requisstring
    exactstring ou nullLe nom complet demandé, si la recherche en était un
    currency"CAD"
    results requisliste de object
    ChampTypeDescription
    name requisstring
    available requisboolean
    priceCadnumberPremière année, CAD, taxes en sus
    renewCadnumberChaque année suivante, CAD
    includablebooleanCouvert par le domaine inclus du forfait Business
    reasonstringPourquoi un nom n'est pas offert
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)
  • 502 Un service externe (Cloudflare, le registraire, Stripe) n'a pas répondu; réessayez
  • 503 Pas encore offert sur ce Liftpad, ou indisponible un moment

Exemple

curl -sS "https://api.liftpad.app/v1/domains/search?q=boulangerie"

get/sites/{name}/domain-orders

Commandes de domaines d'un site

Jeton : read ou deployTout rôle d'équipelistDomainOrders

Paramètres

NomDansTypeDescription
name requispathstringNom du site

Réponses

  • 200 Commandes

    application/json · object

    ChampTypeDescription
    orders requisliste de DomainOrder
    includedLeftintegerDomaines inclus restants cette année
    includedPlanboolean
    readybooleanLa vente de domaines est ouverte
    paymentsbooleanLe paiement en ligne est ouvert
  • 401 Aucun jeton d'API ou session valide
  • 404 Introuvable, ou invisible pour vous
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS "https://api.liftpad.app/v1/sites/my-site/domain-orders" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN"

post/sites/{name}/domains/buy

Acheter un domaine pour un site Propriétaires et administrateurs, depuis le tableau de bord. Utilise le domaine inclus au forfait s'il couvre le nom; sinon répond avec une adresse de paiement Stripe, ou transmet la demande à Liftpad si le paiement en ligne n'est pas ouvert.

Session du tableau de bord seulementAdministrateur ou propriétairebuyDomain

Paramètres

NomDansTypeDescription
name requispathstringNom du site

Corps de la requête

application/json · object

ChampTypeDescription
domain requisstring

Réponses

  • 201 Commandé

    application/json · object

    ChampTypeDescription
    order requisDomainOrder
    checkoutUrlstringPage de paiement Stripe, si un paiement est requis
  • 400 La requête n'est pas valide (voir error et message)
  • 401 Aucun jeton d'API ou session valide
  • 402 Une limite du forfait ou un problème de facturation (error : plan_limit, credits, billing)
  • 403 Non permis : rôle insuffisant, jeton utilisé là où une session du tableau de bord est requise (session_required), ou en-tête CSRF absent (csrf)
  • 404 Introuvable, ou invisible pour vous
  • 409 En conflit avec l'état actuel (voir error)
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)
  • 502 Un service externe (Cloudflare, le registraire, Stripe) n'a pas répondu; réessayez
  • 503 Pas encore offert sur ce Liftpad, ou indisponible un moment

Exemple

# Session du tableau de bord seulement : un jeton d'API reçoit 403 session_required
curl -sS -X POST "https://api.liftpad.app/v1/sites/my-site/domains/buy" \
  -H "content-type: application/json" \
  -d '{"domain":"yourbusiness.ca"}'

Formulaires

Envois reçus par Liftpad Forms (compatible avec Netlify).

get/sites/{name}/forms

Lister les formulaires Formulaires du déploiement en ligne, avec le nombre d'envois reçus.

Jeton : read ou deployTout rôle d'équipelistForms

Paramètres

NomDansTypeDescription
name requispathstringNom du site

Réponses

  • 200 Formulaires

    application/json · object

    ChampTypeDescription
    allowanceinteger ou nullEnvois par mois au forfait
    forms requisliste de Form
  • 401 Aucun jeton d'API ou session valide
  • 404 Introuvable, ou invisible pour vous
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS "https://api.liftpad.app/v1/sites/my-site/forms" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN"

get/sites/{name}/submissions

Lister les envois de formulaire Du plus récent au plus ancien. Passez next comme before pour la page suivante.

Jeton : read ou deployTout rôle d'équipelistSubmissions

Paramètres

NomDansTypeDescription
name requispathstringNom du site
formquerystringSeulement ce formulaire
spamquerystring: 0, 11 pour les indésirables
beforequeryintegerSeulement les envois plus anciens que ce moment (ms)
limitqueryinteger1 à 200, 50 par défaut

Réponses

  • 200 Une page d'envois

    application/json · object

    ChampTypeDescription
    submissions requisliste de Submission
    next requisinteger ou nullValeur pour before, ou null à la fin
  • 401 Aucun jeton d'API ou session valide
  • 404 Introuvable, ou invisible pour vous
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS "https://api.liftpad.app/v1/sites/my-site/submissions" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN"

get/sites/{name}/forms/{form}/submissions.csv

Télécharger les envois en CSV Tous les envois d'un formulaire, sûrs à ouvrir dans un tableur (les valeurs qui seraient lues comme formules sont neutralisées). Jusqu'à 50 000 lignes.

Jeton : read ou deployTout rôle d'équipeexportSubmissionsCsv

Paramètres

NomDansTypeDescription
name requispathstringNom du site
form requispathstringNom du formulaire

Réponses

  • 200 Fichier CSV

    text/csv · string

  • 401 Aucun jeton d'API ou session valide
  • 404 Introuvable, ou invisible pour vous
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS "https://api.liftpad.app/v1/sites/my-site/forms/contact/submissions.csv" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN"

get/sites/{name}/submissions/{id}/files/{i}

Télécharger un fichier joint à un envoi Toujours envoyé en téléchargement, jamais affiché (il vient d'un visiteur).

Jeton : read ou deployTout rôle d'équipegetSubmissionFile

Paramètres

NomDansTypeDescription
name requispathstringNom du site
id requispathstringIdentifiant de l'envoi
i requispathintegerIndex du fichier dans files

Réponses

  • 200 Le fichier

    application/octet-stream · string (binary)

  • 401 Aucun jeton d'API ou session valide
  • 404 Introuvable, ou invisible pour vous
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS "https://api.liftpad.app/v1/sites/my-site/submissions/ID/files/0" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN"

patch/sites/{name}/submissions/{id}

Marquer comme indésirable ou non

Jeton : deployDéveloppeur, administrateur ou propriétairemarkSubmission

Paramètres

NomDansTypeDescription
name requispathstringNom du site
id requispathstringIdentifiant de l'envoi

Corps de la requête

application/json · object

ChampTypeDescription
spam requisboolean

Réponses

  • 200 Enregistré

    application/json · Ok

    ChampTypeDescription
    ok requistrue
  • 400 La requête n'est pas valide (voir error et message)
  • 401 Aucun jeton d'API ou session valide
  • 404 Introuvable, ou invisible pour vous
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS -X PATCH "https://api.liftpad.app/v1/sites/my-site/submissions/ID" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN" \
  -H "content-type: application/json" \
  -d '{"spam":true}'

delete/sites/{name}/submissions/{id}

Supprimer un envoi Ses fichiers sont aussi supprimés.

Jeton : deployDéveloppeur, administrateur ou propriétairedeleteSubmission

Paramètres

NomDansTypeDescription
name requispathstringNom du site
id requispathstringIdentifiant de l'envoi

Réponses

  • 200 Supprimé

    application/json · Ok

    ChampTypeDescription
    ok requistrue
  • 401 Aucun jeton d'API ou session valide
  • 404 Introuvable, ou invisible pour vous
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS -X DELETE "https://api.liftpad.app/v1/sites/my-site/submissions/ID" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN"

post/sites/{name}/submissions/import

Importer des envois d'un autre hébergeur Jusqu'à 500 par appel. Les dates sont gardées, personne n'est avisé par courriel et les fichiers ne sont pas copiés. Le même id envoyé deux fois n'est importé qu'une fois.

Jeton : deployDéveloppeur, administrateur ou propriétaireimportSubmissions

Paramètres

NomDansTypeDescription
name requispathstringNom du site

Corps de la requête

application/json · object

ChampTypeDescription
submissions requisliste de object
ChampTypeDescription
idstringVotre identifiant, pour éviter les doublons
form requisstring
data requistable de string
createdAt requisintegerms, pas dans le futur
spamboolean
referrerstring

Réponses

  • 200 Importés

    application/json · object

    ChampTypeDescription
    ok requisboolean
    imported requisinteger
    skipped requisinteger
  • 400 La requête n'est pas valide (voir error et message)
  • 401 Aucun jeton d'API ou session valide
  • 404 Introuvable, ou invisible pour vous
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS -X POST "https://api.liftpad.app/v1/sites/my-site/submissions/import" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN" \
  -H "content-type: application/json" \
  -d '{"submissions":[{"id":"abc123","form":"contact","data":{"name":"Sam","message":"Hello"},"createdAt":1767225600000}]}'

Réglages du site

Extraits de code, tests A/B, mot de passe visiteur et notifications.

get/sites/{name}/snippets

Obtenir les extraits de code

Jeton : read ou deployTout rôle d'équipegetSnippets

Paramètres

NomDansTypeDescription
name requispathstringNom du site

Réponses

  • 200 Extraits

    application/json · liste de Snippet

  • 401 Aucun jeton d'API ou session valide
  • 404 Introuvable, ou invisible pour vous
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS "https://api.liftpad.app/v1/sites/my-site/snippets" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN"

put/sites/{name}/snippets

Remplacer les extraits de code La liste complète : jusqu'à 10 extraits, 20 000 caractères chacun, 50 000 en tout, ajoutés à chaque page HTML sans déploiement. Forfaits payants seulement.

Jeton : deployDéveloppeur, administrateur ou propriétairesetSnippets

Paramètres

NomDansTypeDescription
name requispathstringNom du site

Corps de la requête

application/json · object

ChampTypeDescription
snippets requisliste de Snippet

Réponses

  • 200 La liste enregistrée

    application/json · liste de Snippet

  • 400 La requête n'est pas valide (voir error et message)
  • 401 Aucun jeton d'API ou session valide
  • 402 Une limite du forfait ou un problème de facturation (error : plan_limit, credits, billing)
  • 403 Non permis : rôle insuffisant, jeton utilisé là où une session du tableau de bord est requise (session_required), ou en-tête CSRF absent (csrf)
  • 404 Introuvable, ou invisible pour vous
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS -X PUT "https://api.liftpad.app/v1/sites/my-site/snippets" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN" \
  -H "content-type: application/json" \
  -d '{"snippets":[{"name":"Analytics","where":"head","html":"<script defer src=\"https://example.com/a.js\"></script>"}]}'

get/sites/{name}/split

Obtenir le test A/B

Jeton : read ou deployTout rôle d'équipegetSplitTest

Paramètres

NomDansTypeDescription
name requispathstringNom du site

Réponses

  • 200 Le test, ou null

    application/json · SplitTest ou null

  • 401 Aucun jeton d'API ou session valide
  • 404 Introuvable, ou invisible pour vous
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS "https://api.liftpad.app/v1/sites/my-site/split" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN"

put/sites/{name}/split

Lancer, modifier ou arrêter un test A/B Une part des visiteurs du site en ligne (1 à 99 %) voit un autre déploiement prêt. Envoyez deployId null pour arrêter.

Jeton : deployDéveloppeur, administrateur ou propriétairesetSplitTest

Paramètres

NomDansTypeDescription
name requispathstringNom du site

Corps de la requête

application/json · object

ChampTypeDescription
deployId requisstring ou null
percentinteger

Réponses

  • 200 Le test, ou null

    application/json · SplitTest ou null

  • 400 La requête n'est pas valide (voir error et message)
  • 401 Aucun jeton d'API ou session valide
  • 403 Non permis : rôle insuffisant, jeton utilisé là où une session du tableau de bord est requise (session_required), ou en-tête CSRF absent (csrf)
  • 404 Introuvable, ou invisible pour vous
  • 409 En conflit avec l'état actuel (voir error)
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS -X PUT "https://api.liftpad.app/v1/sites/my-site/split" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN" \
  -H "content-type: application/json" \
  -d '{"deployId":"k2j4h6g8f0d2","percent":20}'

get/sites/{name}/access

État du mot de passe visiteur

Jeton : read ou deployTout rôle d'équipegetVisitorAccess

Paramètres

NomDansTypeDescription
name requispathstringNom du site

Réponses

  • 200 État

    application/json · object

    ChampTypeDescription
    enabled requisboolean
    scope requisstring ou null: all, previews, null
    updatedAtinteger ou null
  • 401 Aucun jeton d'API ou session valide
  • 404 Introuvable, ou invisible pour vous
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS "https://api.liftpad.app/v1/sites/my-site/access" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN"

put/sites/{name}/access

Définir ou retirer le mot de passe visiteur Une page de mot de passe devant tout le site ou seulement ses aperçus. password null le retire. Le changer déconnecte tous les visiteurs. Impossible avec un jeton d'API.

Session du tableau de bord seulementDéveloppeur, administrateur ou propriétairesetVisitorAccess

Paramètres

NomDansTypeDescription
name requispathstringNom du site

Corps de la requête

application/json · object

ChampTypeDescription
password requisstring ou null8 à 200 caractères, ou null
scopestring: all, previews

Réponses

  • 200 Enregistré

    application/json · object

    ChampTypeDescription
    ok requisboolean
    enabled requisboolean
    scopestring ou null
  • 400 La requête n'est pas valide (voir error et message)
  • 401 Aucun jeton d'API ou session valide
  • 403 Non permis : rôle insuffisant, jeton utilisé là où une session du tableau de bord est requise (session_required), ou en-tête CSRF absent (csrf)
  • 404 Introuvable, ou invisible pour vous
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

# Session du tableau de bord seulement : un jeton d'API reçoit 403 session_required
curl -sS -X PUT "https://api.liftpad.app/v1/sites/my-site/access" \
  -H "content-type: application/json" \
  -d '{"password":"a long shared password","scope":"previews"}'

get/sites/{name}/hooks

Lister les notifications Webhooks et messages Slack d'un site. Session du tableau de bord seulement.

Session du tableau de bord seulementDéveloppeur, administrateur ou propriétairelistHooks

Paramètres

NomDansTypeDescription
name requispathstringNom du site

Réponses

  • 200 Notifications

    application/json · liste de Hook

  • 401 Aucun jeton d'API ou session valide
  • 403 Non permis : rôle insuffisant, jeton utilisé là où une session du tableau de bord est requise (session_required), ou en-tête CSRF absent (csrf)
  • 404 Introuvable, ou invisible pour vous
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

# Session du tableau de bord seulement : un jeton d'API reçoit 403 session_required
curl -sS "https://api.liftpad.app/v1/sites/my-site/hooks"

post/sites/{name}/hooks

Ajouter une notification Un webhook signé ou un webhook entrant Slack pour certains de : deploy.ready, deploy.published, form.submission. Adresses https publiques seulement, jamais Liftpad ni un site qu'il héberge. Jusqu'à 10 par site. Le secret de signature d'un webhook n'apparaît que dans cette réponse.

Session du tableau de bord seulementDéveloppeur, administrateur ou propriétairecreateHook

Paramètres

NomDansTypeDescription
name requispathstringNom du site

Corps de la requête

application/json · object

ChampTypeDescription
kind requisstring: webhook, slack
url requisstring (uri)
events requisliste de string: deploy.ready, deploy.published, form.submission

Réponses

  • 201 Ajoutée

    application/json · object

    ChampTypeDescription
    id requisstring
    kind requisstring: webhook, slack
    url requisstringOù les événements sont envoyés (adresses Slack raccourcies)
    events requisliste de string: deploy.ready, deploy.published, form.submission
    createdAtinteger
    lastStatusinteger ou nullStatut HTTP du dernier envoi (0 si la connexion a échoué)
    lastAtinteger ou null
    pausedbooleanVrai après 50 envois ratés de suite
    secretstringSecret de signature (lpwh_...), montré une fois
  • 400 La requête n'est pas valide (voir error et message)
  • 401 Aucun jeton d'API ou session valide
  • 403 Non permis : rôle insuffisant, jeton utilisé là où une session du tableau de bord est requise (session_required), ou en-tête CSRF absent (csrf)
  • 404 Introuvable, ou invisible pour vous
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

# Session du tableau de bord seulement : un jeton d'API reçoit 403 session_required
curl -sS -X POST "https://api.liftpad.app/v1/sites/my-site/hooks" \
  -H "content-type: application/json" \
  -d '{"kind":"webhook","url":"https://example.com/liftpad","events":["deploy.published","form.submission"]}'

post/sites/{name}/hooks/{id}/test

Envoyer une notification d'essai

Session du tableau de bord seulementDéveloppeur, administrateur ou propriétairetestHook

Paramètres

NomDansTypeDescription
name requispathstringNom du site
id requispathstringIdentifiant de la notification

Réponses

  • 200 Résultat de l'envoi

    application/json · object

    ChampTypeDescription
    status requisintegerStatut HTTP du destinataire (0 si la connexion a échoué)
    ok requisboolean
  • 401 Aucun jeton d'API ou session valide
  • 403 Non permis : rôle insuffisant, jeton utilisé là où une session du tableau de bord est requise (session_required), ou en-tête CSRF absent (csrf)
  • 404 Introuvable, ou invisible pour vous
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

# Session du tableau de bord seulement : un jeton d'API reçoit 403 session_required
curl -sS -X POST "https://api.liftpad.app/v1/sites/my-site/hooks/ID/test"

delete/sites/{name}/hooks/{id}

Retirer une notification

Session du tableau de bord seulementDéveloppeur, administrateur ou propriétairedeleteHook

Paramètres

NomDansTypeDescription
name requispathstringNom du site
id requispathstringIdentifiant de la notification

Réponses

  • 200 Retirée

    application/json · Ok

    ChampTypeDescription
    ok requistrue
  • 401 Aucun jeton d'API ou session valide
  • 403 Non permis : rôle insuffisant, jeton utilisé là où une session du tableau de bord est requise (session_required), ou en-tête CSRF absent (csrf)
  • 404 Introuvable, ou invisible pour vous
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

# Session du tableau de bord seulement : un jeton d'API reçoit 403 session_required
curl -sS -X DELETE "https://api.liftpad.app/v1/sites/my-site/hooks/ID"

Statistiques

Statistiques de visite sans témoins.

get/sites/{name}/analytics

Statistiques de visite

Jeton : read ou deployTout rôle d'équipegetAnalytics

Paramètres

NomDansTypeDescription
name requispathstringNom du site
daysqueryinteger: 7, 30, 907, 30 ou 90 (7 par défaut)

Réponses

  • 200 Statistiques

    application/json · Analytics

    ChampTypeDescription
    enabled requisbooleanFaux si les statistiques ne sont pas activées sur ce Liftpad
    daysinteger
    viewsinteger
    visitorsinteger
    dailyliste de object
    ChampTypeDescription
    daystring
    viewsinteger
    visitorsinteger
    pagesliste de object
    ChampTypeDescription
    pathstring
    viewsinteger
  • 401 Aucun jeton d'API ou session valide
  • 404 Introuvable, ou invisible pour vous
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)
  • 503 Pas encore offert sur ce Liftpad, ou indisponible un moment

Exemple

curl -sS "https://api.liftpad.app/v1/sites/my-site/analytics" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN"

Créateur de site IA

Créer et modifier des sites en mots (crédits; session du tableau de bord seulement).

post/sites/{name}/ai-build

Créer un site par IA Rédige, illustre et construit un site complet à partir d'une courte description, en déploiement brouillon. Coûte 100 crédits, remis si la tâche échoue. Session du tableau de bord seulement.

Session du tableau de bord seulementDéveloppeur, administrateur ou propriétaireaiBuildSite

Paramètres

NomDansTypeDescription
name requispathstringNom du site

Corps de la requête

application/json · object

ChampTypeDescription
name requisstringNom de l'entreprise
about requisstringCe qu'elle fait, au moins 20 caractères
servicesstring
areastring
phonestring
emailstring
addressstring
hoursstring
langsliste de string: en, fr
stylestring: warm, modern, elegant, bold, natural

Réponses

  • 202 En file

    application/json · object

    ChampTypeDescription
    job requisobject
    ChampTypeDescription
    idstring
    kindstring
    statusstring
    creditsinteger
  • 400 La requête n'est pas valide (voir error et message)
  • 401 Aucun jeton d'API ou session valide
  • 402 Une limite du forfait ou un problème de facturation (error : plan_limit, credits, billing)
  • 403 Non permis : rôle insuffisant, jeton utilisé là où une session du tableau de bord est requise (session_required), ou en-tête CSRF absent (csrf)
  • 404 Introuvable, ou invisible pour vous
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

# Session du tableau de bord seulement : un jeton d'API reçoit 403 session_required
curl -sS -X POST "https://api.liftpad.app/v1/sites/my-site/ai-build" \
  -H "content-type: application/json" \
  -d '{"name":"Boulangerie Lune","about":"A neighbourhood bakery in Montreal with sourdough and pastries.","langs":["fr","en"],"style":"warm"}'

post/sites/{name}/ai-edit

Modifier en mots un site créé par IA Coûte 20 crédits, plus 10 avec newImages. Session du tableau de bord seulement.

Session du tableau de bord seulementDéveloppeur, administrateur ou propriétaireaiEditSite

Paramètres

NomDansTypeDescription
name requispathstringNom du site

Corps de la requête

application/json · object

ChampTypeDescription
instruction requisstring5 à 1000 caractères
newImagesbooleanDessiner deux nouvelles images

Réponses

  • 202 En file

    application/json · object

    ChampTypeDescription
    job requisobject
    ChampTypeDescription
    idstring
    kindstring
    statusstring
    creditsinteger
  • 400 La requête n'est pas valide (voir error et message)
  • 401 Aucun jeton d'API ou session valide
  • 402 Une limite du forfait ou un problème de facturation (error : plan_limit, credits, billing)
  • 403 Non permis : rôle insuffisant, jeton utilisé là où une session du tableau de bord est requise (session_required), ou en-tête CSRF absent (csrf)
  • 404 Introuvable, ou invisible pour vous
  • 409 En conflit avec l'état actuel (voir error)
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

# Session du tableau de bord seulement : un jeton d'API reçoit 403 session_required
curl -sS -X POST "https://api.liftpad.app/v1/sites/my-site/ai-edit" \
  -H "content-type: application/json" \
  -d '{"instruction":"Add our Sunday hours: 9 to 2."}'

get/sites/{name}/ai

Tâches IA d'un site

Jeton : read ou deployTout rôle d'équipegetAiJobs

Paramètres

NomDansTypeDescription
name requispathstringNom du site

Réponses

  • 200 Tâches

    application/json · object

    ChampTypeDescription
    aiSite requisbooleanCréé avec le créateur IA
    jobs requisliste de AiJob
    costs requistable de integer
    creditsobject ou nullMontré aux propriétaires, administrateurs, facturation et développeurs
  • 401 Aucun jeton d'API ou session valide
  • 404 Introuvable, ou invisible pour vous
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS "https://api.liftpad.app/v1/sites/my-site/ai" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN"

Compte et jetons

Qui vous êtes et vos jetons d'API.

get/me

Qui suis-je L'appelant, ses équipes et ses rôles. Avec un jeton, les rôles sont ce que le jeton peut faire.

Jeton : read ou deployTout rôle d'équipegetMe

Réponses

  • 200 Vous

    application/json · Me

    ChampTypeDescription
    kind requisstring: session, tokenMode de connexion de l'appelant
    user requisobject
    ChampTypeDescription
    idstring
    email requisstring
    namestring ou null
    totp_enabledinteger
    created_atinteger
    last_login_atinteger ou null
    recovery_leftinteger
    platformAdminboolean
    teams requisliste de Team
    rolesliste de object
    ChampTypeDescription
    idstring
    labelstring
  • 401 Aucun jeton d'API ou session valide
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS "https://api.liftpad.app/v1/me" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN"

patch/me

Changer votre nom

Session du tableau de bord seulementupdateMe

Corps de la requête

application/json · object

ChampTypeDescription
namestringJusqu'à 80 caractères

Réponses

  • 200 Enregistré

    application/json · Ok

    ChampTypeDescription
    ok requistrue
  • 400 La requête n'est pas valide (voir error et message)
  • 401 Aucun jeton d'API ou session valide
  • 403 Non permis : rôle insuffisant, jeton utilisé là où une session du tableau de bord est requise (session_required), ou en-tête CSRF absent (csrf)
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

# Session du tableau de bord seulement : un jeton d'API reçoit 403 session_required
curl -sS -X PATCH "https://api.liftpad.app/v1/me" \
  -H "content-type: application/json" \
  -d '{"name":"Sam Tremblay"}'

post/me/logout-all

Se déconnecter partout Termine toutes les sessions et annule tous vos jetons d'API.

Session du tableau de bord seulementlogoutEverywhere

Réponses

  • 200 Déconnecté

    application/json · Ok

    ChampTypeDescription
    ok requistrue
  • 401 Aucun jeton d'API ou session valide
  • 403 Non permis : rôle insuffisant, jeton utilisé là où une session du tableau de bord est requise (session_required), ou en-tête CSRF absent (csrf)
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

# Session du tableau de bord seulement : un jeton d'API reçoit 403 session_required
curl -sS -X POST "https://api.liftpad.app/v1/me/logout-all"

get/me/tokens

Lister vos jetons d'API Noms et dates seulement; la valeur d'un jeton n'est jamais remontrée.

Jeton : read ou deploylistTokens

Réponses

  • 200 Jetons

    application/json · liste de Token

  • 401 Aucun jeton d'API ou session valide
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS "https://api.liftpad.app/v1/me/tokens" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN"

post/me/tokens

Créer un jeton d'API Session du tableau de bord seulement (un jeton ne peut pas créer de jeton). access vaut deploy (sites, déploiements, domaines) ou read. team le limite à une équipe. days fixe l'expiration (le tableau de bord offre 90, 365 ou aucune; au plus 730). Le jeton n'apparaît que dans cette réponse.

Session du tableau de bord seulementcreateToken

Corps de la requête

application/json · object

ChampTypeDescription
namestringJusqu'à 60 caractères
accessstring: deploy, read
teamstringSlug de l'équipe
daysintegerJours avant l'expiration; omettez pour aucune expiration

Réponses

  • 201 Créé

    application/json · object

    ChampTypeDescription
    id requisstring
    token requisstringlp_... montré une fois
    expiresAt requisinteger ou null
  • 401 Aucun jeton d'API ou session valide
  • 403 Non permis : rôle insuffisant, jeton utilisé là où une session du tableau de bord est requise (session_required), ou en-tête CSRF absent (csrf)
  • 404 Introuvable, ou invisible pour vous
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

# Session du tableau de bord seulement : un jeton d'API reçoit 403 session_required
curl -sS -X POST "https://api.liftpad.app/v1/me/tokens" \
  -H "content-type: application/json" \
  -d '{"name":"GitHub Actions","access":"deploy","team":"my-agency","days":90}'

delete/me/tokens/{id}

Révoquer un jeton d'API

Session du tableau de bord seulementrevokeToken

Paramètres

NomDansTypeDescription
id requispathstringIdentifiant du jeton (tok_...)

Réponses

  • 200 Révoqué

    application/json · Ok

    ChampTypeDescription
    ok requistrue
  • 401 Aucun jeton d'API ou session valide
  • 403 Non permis : rôle insuffisant, jeton utilisé là où une session du tableau de bord est requise (session_required), ou en-tête CSRF absent (csrf)
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

# Session du tableau de bord seulement : un jeton d'API reçoit 403 session_required
curl -sS -X DELETE "https://api.liftpad.app/v1/me/tokens/ID"

Équipes

Équipes, membres et invitations.

get/teams

Lister vos équipes

Jeton : read ou deployTout rôle d'équipelistTeams

Réponses

  • 200 Équipes

    application/json · liste de Team

  • 401 Aucun jeton d'API ou session valide
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS "https://api.liftpad.app/v1/teams" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN"

get/teams/{slug}

Obtenir une équipe Avec les membres et les invitations en attente (pour qui gère les membres).

Jeton : read ou deployTout rôle d'équipegetTeam

Paramètres

NomDansTypeDescription
slug requispathstringSlug de l'équipe

Réponses

  • 200 L'équipe

    application/json · object

    ChampTypeDescription
    idstring
    slug requisstring
    namestring
    rolestring: owner, admin, developer, reviewer, billing, viewerVotre rôle dans l'équipe (pour un jeton : ce qu'il peut faire)
    capsliste de string: view, deploy, sites, domains, members, billing, team
    scopedbooleanVous ne voyez que certains sites de l'équipe
    planPlan
    billingStatusstring ou null
    billingobject ou null
    trialEndsAtinteger ou null
    currentPeriodEndinteger ou null
    billingEmailstring ou null
    usageobject ou nullSites, domaines, membres et stockage utilisés
    members requisliste de object
    invitesliste de object
    rolesliste de object
  • 401 Aucun jeton d'API ou session valide
  • 404 Introuvable, ou invisible pour vous
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS "https://api.liftpad.app/v1/teams/my-agency" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN"

patch/teams/{slug}

Renommer une équipe ou changer son courriel de facturation name exige un propriétaire; billingEmail un propriétaire ou un membre facturation.

Session du tableau de bord seulementPropriétaireupdateTeam

Paramètres

NomDansTypeDescription
slug requispathstringSlug de l'équipe

Corps de la requête

application/json · object

ChampTypeDescription
namestring
billingEmailstring

Réponses

  • 200 Enregistré

    application/json · Ok

    ChampTypeDescription
    ok requistrue
  • 401 Aucun jeton d'API ou session valide
  • 403 Non permis : rôle insuffisant, jeton utilisé là où une session du tableau de bord est requise (session_required), ou en-tête CSRF absent (csrf)
  • 404 Introuvable, ou invisible pour vous
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

# Session du tableau de bord seulement : un jeton d'API reçoit 403 session_required
curl -sS -X PATCH "https://api.liftpad.app/v1/teams/my-agency" \
  -H "content-type: application/json" \
  -d '{"name":"My Agency"}'

post/teams/{slug}/invites

Inviter une personne Un lien à usage unique par courriel. sites limite un développeur, réviseur ou observateur à certains sites. Seuls les propriétaires invitent des propriétaires ou des membres facturation.

Session du tableau de bord seulementAdministrateur ou propriétaireinviteMember

Paramètres

NomDansTypeDescription
slug requispathstringSlug de l'équipe

Corps de la requête

application/json · object

ChampTypeDescription
email requisstring
role requisstring: owner, admin, developer, reviewer, billing, viewer
sitesliste de stringNoms de sites

Réponses

  • 201 Invitée

    application/json · object

  • 400 La requête n'est pas valide (voir error et message)
  • 401 Aucun jeton d'API ou session valide
  • 403 Non permis : rôle insuffisant, jeton utilisé là où une session du tableau de bord est requise (session_required), ou en-tête CSRF absent (csrf)
  • 404 Introuvable, ou invisible pour vous
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

# Session du tableau de bord seulement : un jeton d'API reçoit 403 session_required
curl -sS -X POST "https://api.liftpad.app/v1/teams/my-agency/invites" \
  -H "content-type: application/json" \
  -d '{"email":"client@example.com","role":"reviewer","sites":["client-site"]}'

delete/teams/{slug}/invites/{id}

Annuler une invitation

Session du tableau de bord seulementAdministrateur ou propriétairerevokeInvite

Paramètres

NomDansTypeDescription
slug requispathstringSlug de l'équipe
id requispathstringIdentifiant de l'invitation

Réponses

  • 200 Annulée

    application/json · Ok

    ChampTypeDescription
    ok requistrue
  • 401 Aucun jeton d'API ou session valide
  • 403 Non permis : rôle insuffisant, jeton utilisé là où une session du tableau de bord est requise (session_required), ou en-tête CSRF absent (csrf)
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

# Session du tableau de bord seulement : un jeton d'API reçoit 403 session_required
curl -sS -X DELETE "https://api.liftpad.app/v1/teams/my-agency/invites/ID"

patch/teams/{slug}/members/{userId}

Changer le rôle ou les sites d'un membre sites null retire la limite de sites. Une équipe garde toujours un propriétaire.

Session du tableau de bord seulementAdministrateur ou propriétaireupdateMember

Paramètres

NomDansTypeDescription
slug requispathstringSlug de l'équipe
userId requispathstringIdentifiant de l'utilisateur

Corps de la requête

application/json · object

ChampTypeDescription
rolestring: owner, admin, developer, reviewer, billing, viewer
sitesliste de string ou null

Réponses

  • 200 Enregistré

    application/json · Ok

    ChampTypeDescription
    ok requistrue
  • 400 La requête n'est pas valide (voir error et message)
  • 401 Aucun jeton d'API ou session valide
  • 403 Non permis : rôle insuffisant, jeton utilisé là où une session du tableau de bord est requise (session_required), ou en-tête CSRF absent (csrf)
  • 404 Introuvable, ou invisible pour vous
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

# Session du tableau de bord seulement : un jeton d'API reçoit 403 session_required
curl -sS -X PATCH "https://api.liftpad.app/v1/teams/my-agency/members/USER_ID" \
  -H "content-type: application/json" \
  -d '{"role":"developer"}'

delete/teams/{slug}/members/{userId}

Retirer un membre (ou quitter) Ses jetons pour cette équipe cessent de fonctionner.

Session du tableau de bord seulementAdministrateur ou propriétaireremoveMember

Paramètres

NomDansTypeDescription
slug requispathstringSlug de l'équipe
userId requispathstringIdentifiant de l'utilisateur (le vôtre pour quitter)

Réponses

  • 200 Retiré

    application/json · Ok

    ChampTypeDescription
    ok requistrue
  • 400 La requête n'est pas valide (voir error et message)
  • 401 Aucun jeton d'API ou session valide
  • 403 Non permis : rôle insuffisant, jeton utilisé là où une session du tableau de bord est requise (session_required), ou en-tête CSRF absent (csrf)
  • 404 Introuvable, ou invisible pour vous
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

# Session du tableau de bord seulement : un jeton d'API reçoit 403 session_required
curl -sS -X DELETE "https://api.liftpad.app/v1/teams/my-agency/members/USER_ID"

Forfaits, facturation et crédits

Forfaits en CAD, facturation et crédits d'une équipe.

get/plans

Lister les forfaits Prix en CAD par mois, taxes en sus. Aucune connexion requise.

Sans connexionlistPlans

Réponses

  • 200 Forfaits

    application/json · liste de Plan

Exemple

curl -sS "https://api.liftpad.app/v1/plans"

get/teams/{slug}/billing

Forfait et facturation d'une équipe

Jeton : read ou deployTout rôle d'équipegetBilling

Paramètres

NomDansTypeDescription
slug requispathstringSlug de l'équipe

Réponses

  • 200 Facturation

    application/json · object

    ChampTypeDescription
    idstring
    slugstring
    namestring
    rolestring: owner, admin, developer, reviewer, billing, viewerVotre rôle dans l'équipe (pour un jeton : ce qu'il peut faire)
    capsliste de string: view, deploy, sites, domains, members, billing, team
    scopedbooleanVous ne voyez que certains sites de l'équipe
    planPlan
    billingStatusstring ou null
    billingobject ou null
    trialEndsAtinteger ou null
    currentPeriodEndinteger ou null
    billingEmailstring ou null
    usageobject ou nullSites, domaines, membres et stockage utilisés
    canManageboolean
    plans requisliste de object
    portalUrlstring ou null
    stripeLinkedboolean
  • 401 Aucun jeton d'API ou session valide
  • 403 Non permis : rôle insuffisant, jeton utilisé là où une session du tableau de bord est requise (session_required), ou en-tête CSRF absent (csrf)
  • 404 Introuvable, ou invisible pour vous
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS "https://api.liftpad.app/v1/teams/my-agency/billing" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN"

get/teams/{slug}/credits

Crédits d'une équipe Solde, coûts, forfaits de crédits et les 30 derniers mouvements. Ensembles : 1000 pour 10 $, 5000 pour 45 $, 12000 pour 99 $.

Jeton : read ou deployTout rôle d'équipegetCredits

Paramètres

NomDansTypeDescription
slug requispathstringSlug de l'équipe

Réponses

  • 200 Crédits

    application/json · Credits

    ChampTypeDescription
    total requisinteger
    monthlyintegerReste des crédits mensuels du forfait
    boughtinteger
    planMonthlyinteger
    costs requistable de integerCrédits par action
    packs requisliste de object
    ChampTypeDescription
    idstring
    creditsinteger
    priceCadnumber
    paymentsbooleanLe paiement en ligne est ouvert
    cardobject ou null
    autoobject ou nullRecharge automatique
    ledgerliste de object
    ChampTypeDescription
    atinteger
    deltainteger
    kindstring
    notestring ou null
  • 401 Aucun jeton d'API ou session valide
  • 404 Introuvable, ou invisible pour vous
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS "https://api.liftpad.app/v1/teams/my-agency/credits" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN"

post/teams/{slug}/credits/checkout

Acheter un ensemble de crédits Propriétaires et membres facturation. Répond avec une adresse de paiement Stripe.

Session du tableau de bord seulementPropriétaire ou facturationbuyCredits

Paramètres

NomDansTypeDescription
slug requispathstringSlug de l'équipe

Corps de la requête

application/json · object

ChampTypeDescription
pack requisstring: credits_1000, credits_5000, credits_12000
saveCardbooleanGarder la carte pour les recharges automatiques

Réponses

  • 201 Paiement ouvert

    application/json · object

    ChampTypeDescription
    checkoutUrl requisstring
  • 400 La requête n'est pas valide (voir error et message)
  • 401 Aucun jeton d'API ou session valide
  • 403 Non permis : rôle insuffisant, jeton utilisé là où une session du tableau de bord est requise (session_required), ou en-tête CSRF absent (csrf)
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)
  • 502 Un service externe (Cloudflare, le registraire, Stripe) n'a pas répondu; réessayez
  • 503 Pas encore offert sur ce Liftpad, ou indisponible un moment

Exemple

# Session du tableau de bord seulement : un jeton d'API reçoit 403 session_required
curl -sS -X POST "https://api.liftpad.app/v1/teams/my-agency/credits/checkout" \
  -H "content-type: application/json" \
  -d '{"pack":"credits_1000"}'

post/teams/{slug}/credits/auto

Recharges automatiques Achète un ensemble quand le solde passe sous un seuil, au plus 3 fois par mois. pack null les désactive.

Session du tableau de bord seulementPropriétaire ou facturationsetAutoTopup

Paramètres

NomDansTypeDescription
slug requispathstringSlug de l'équipe

Corps de la requête

application/json · object

ChampTypeDescription
packstring ou null
belowinteger

Réponses

  • 200 Enregistré

    application/json · Ok

    ChampTypeDescription
    ok requistrue
  • 400 La requête n'est pas valide (voir error et message)
  • 401 Aucun jeton d'API ou session valide
  • 403 Non permis : rôle insuffisant, jeton utilisé là où une session du tableau de bord est requise (session_required), ou en-tête CSRF absent (csrf)
  • 409 En conflit avec l'état actuel (voir error)
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

# Session du tableau de bord seulement : un jeton d'API reçoit 403 session_required
curl -sS -X POST "https://api.liftpad.app/v1/teams/my-agency/credits/auto" \
  -H "content-type: application/json" \
  -d '{"pack":"credits_1000","below":100}'

delete/teams/{slug}/credits/card

Oublier la carte enregistrée

Session du tableau de bord seulementPropriétaire ou facturationforgetCard

Paramètres

NomDansTypeDescription
slug requispathstringSlug de l'équipe

Réponses

  • 200 Retirée

    application/json · Ok

    ChampTypeDescription
    ok requistrue
  • 401 Aucun jeton d'API ou session valide
  • 403 Non permis : rôle insuffisant, jeton utilisé là où une session du tableau de bord est requise (session_required), ou en-tête CSRF absent (csrf)
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

# Session du tableau de bord seulement : un jeton d'API reçoit 403 session_required
curl -sS -X DELETE "https://api.liftpad.app/v1/teams/my-agency/credits/card"

Activité

Le journal d'audit.

get/audit

Journal d'activité Les 200 dernières actions de vos équipes (seulement vos sites si vous êtes limité à certains).

Jeton : read ou deployTout rôle d'équipelistAudit

Paramètres

NomDansTypeDescription
teamquerystringSeulement cette équipe (slug)

Réponses

  • 200 Entrées, de la plus récente à la plus ancienne

    application/json · liste de AuditEntry

  • 401 Aucun jeton d'API ou session valide
  • 404 Introuvable, ou invisible pour vous
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS "https://api.liftpad.app/v1/audit" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN"

Public

Routes accessibles à tous, sans connexion.

post/abuse

Signaler un site hébergé sur Liftpad Tout le monde peut signaler de l'hameçonnage, des logiciels malveillants, des arnaques et d'autres abus. Une personne chez Liftpad lit chaque signalement. Exige l'en-tête x-liftpad-csrf et un corps JSON.

Sans connexionreportAbuse

Paramètres

NomDansTypeDescription
x-liftpad-csrf requisheader"1"Doit valoir 1 (refuse les envois d'autres pages web)

Corps de la requête

application/json · object

ChampTypeDescription
url requisstring (uri)
kindstring: phishing, malware, scam, spam, copyright, illegal, other
detailsstringJusqu'à 2000 caractères
emailstringPour recevoir une réponse

Réponses

  • 201 Reçu

    application/json · object

    ChampTypeDescription
    ok requisboolean
    messagestring
  • 400 La requête n'est pas valide (voir error et message)
  • 403 Non permis : rôle insuffisant, jeton utilisé là où une session du tableau de bord est requise (session_required), ou en-tête CSRF absent (csrf)
  • 404 Introuvable, ou invisible pour vous
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS -X POST "https://api.liftpad.app/v1/abuse" \
  -H "x-liftpad-csrf: 1" \
  -H "content-type: application/json" \
  -d '{"url":"https://example.liftpad.ca/login","kind":"phishing","details":"Asks for bank passwords."}'

post/leads

Demander à être contacté par Liftpad Le formulaire de contact de liftpad.app. Exige l'en-tête x-liftpad-csrf et un corps JSON.

Sans connexionrequestContact

Paramètres

NomDansTypeDescription
x-liftpad-csrf requisheader"1"Doit valoir 1 (refuse les envois d'autres pages web)

Corps de la requête

application/json · object

ChampTypeDescription
name requisstring
email requisstring
companystring
sitesstring: 1-3, 4-10, 11-50, 51-150, 150+
messagestring
langstring: en, fr

Réponses

  • 200 Reçu

    application/json · Ok

    ChampTypeDescription
    ok requistrue
  • 400 La requête n'est pas valide (voir error et message)
  • 403 Non permis : rôle insuffisant, jeton utilisé là où une session du tableau de bord est requise (session_required), ou en-tête CSRF absent (csrf)
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS -X POST "https://api.liftpad.app/v1/leads" \
  -H "x-liftpad-csrf: 1" \
  -H "content-type: application/json" \
  -d '{"name":"Sam","email":"sam@example.com","sites":"4-10","lang":"en"}'

MCP

Le serveur Model Context Protocol pour Claude et d'autres agents.

post/mcp

Serveur MCP pour les agents IA Model Context Protocol en HTTP continu, JSON-RPC 2.0 sans état (initialize, ping, tools/list, tools/call; un lot reçoit une réponse pour ses 20 premiers messages, et les messages après le 20e sont ignorés sans réponse). Jetons d'API seulement, jamais de témoin. Chaque outil appelle cette API avec votre jeton : les mêmes rôles et limites s'appliquent. Un jeton read peut utiliser list_sites, get_site, list_deploys, launch_checks, form_submissions, site_analytics et search_domains; les autres exigent un jeton deploy. Outils : list_sites, get_site, create_site, list_files, read_file, deploy_changes, launch_checks, list_deploys, publish, form_submissions, site_analytics, search_domains, connect_domain, site_agents_report.

Jeton : read ou deployTout rôle d'équipemcp

Corps de la requête

application/json · object ou liste de object

Réponses

  • 200 Réponse JSON-RPC (202 sans corps pour les notifications)

    application/json · object ou liste de any

  • 400 La requête n'est pas valide (voir error et message)
  • 401 Aucun jeton d'API ou session valide
  • 429 Trop de requêtes (error : rate_limited) ou une limite quotidienne (error : deploy_limit)

Exemple

curl -sS -X POST "https://api.liftpad.app/mcp" \
  -H "Authorization: Bearer $LIFTPAD_TOKEN" \
  -H "content-type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"list_sites","arguments":{}}}'

Cette référence

Le document OpenAPI lui-même.

get/openapi.json

Ce document OpenAPI Aussi à https://liftpad.app/openapi.json.

Sans connexiongetOpenApi

Réponses

  • 200 OpenAPI 3.1

    application/json · object

Exemple

curl -sS "https://api.liftpad.app/v1/openapi.json"

Webhooks

Ce que Liftpad envoie à votre adresse. Comment vérifier la signature.

postdeploy.ready

Un déploiement est terminé et son aperçu fonctionne

application/json · object

ChampTypeDescription
event requis"deploy.ready"
delivery requisstringIdentique à x-liftpad-delivery
at requisstring (date-time)Heure ISO 8601
site requisobject
ChampTypeDescription
name requisstring
url requisstring
deploy requisobject
ChampTypeDescription
id requisstring
titlestring ou null
previewUrl requisstring
filesinteger
{
  "event": "deploy.ready",
  "delivery": "6f1c2a9e-0d4b-4c2e-9a77-3b1f0c2d4e5f",
  "at": "2026-11-05T15:04:05.000Z",
  "site": {
    "name": "my-site",
    "url": "https://my-site.liftpad.ca"
  },
  "deploy": {
    "id": "k2j4h6g8f0d2",
    "title": "First deploy",
    "previewUrl": "https://k2j4h6g8f0d2--my-site.liftpad.ca",
    "files": 12
  }
}

postdeploy.published

Un déploiement est en ligne (aussi après un retour arrière)

application/json · object

ChampTypeDescription
event requis"deploy.published"
delivery requisstringIdentique à x-liftpad-delivery
at requisstring (date-time)Heure ISO 8601
site requisobject
ChampTypeDescription
name requisstring
url requisstring
deploy requisobject
ChampTypeDescription
id requisstring
titlestring ou null
{
  "event": "deploy.published",
  "delivery": "0a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
  "at": "2026-11-05T15:05:00.000Z",
  "site": {
    "name": "my-site",
    "url": "https://www.example.com"
  },
  "deploy": {
    "id": "k2j4h6g8f0d2",
    "title": "First deploy"
  }
}

postform.submission

Un visiteur a envoyé un formulaire (les indésirables ne sont pas transmis)

application/json · object

ChampTypeDescription
event requis"form.submission"
delivery requisstringIdentique à x-liftpad-delivery
at requisstring (date-time)Heure ISO 8601
site requisobject
ChampTypeDescription
name requisstring
url requisstring
submission requisobject
ChampTypeDescription
id requisstring
form requisstring
data requistable de string
filesliste de stringNoms des fichiers (à télécharger par l'API)
previewboolean
createdAtinteger
{
  "event": "form.submission",
  "delivery": "9e8d7c6b-5a4f-4e3d-9c2b-1a0f9e8d7c6b",
  "at": "2026-11-05T15:06:00.000Z",
  "site": {
    "name": "my-site",
    "url": "https://my-site.liftpad.ca"
  },
  "submission": {
    "id": "sub_abc123",
    "form": "contact",
    "data": {
      "name": "Sam",
      "message": "Hello"
    },
    "files": [],
    "preview": false,
    "createdAt": 1793977560000
  }
}

posttest

Envoyé par le bouton d'essai (testHook)

application/json · object

ChampTypeDescription
event requis"test"
delivery requisstringIdentique à x-liftpad-delivery
at requisstring (date-time)Heure ISO 8601
site requisobject
ChampTypeDescription
name requisstring
url requisstring
{
  "event": "test",
  "delivery": "1b2c3d4e-5f6a-4b7c-8d9e-0f1a2b3c4d5e",
  "at": "2026-11-05T15:07:00.000Z",
  "site": {
    "name": "my-site",
    "url": "https://my-site.liftpad.ca"
  }
}

Schémas

Error

Toutes les erreurs ont cette forme. Certaines ajoutent des champs, comme missing (finalisation) ou proof (domaines).

ChampTypeDescription
error requisstringUn code court et stable (par exemple not_found, plan_limit, session_required)
messagestringUne phrase pour les personnes, en anglais

Ok

ChampTypeDescription
ok requistrue

Site

Un site

ChampTypeDescription
id requisstringIdentifiant du site
name requisstringNom du site : 3 à 40 caractères, a-z, 0-9 et traits d'union simples
team_idstring ou nullIdentifiant de l'équipe propriétaire du site
primary_domainstring ou nullLe domaine personnalisé principal, ou null pour l'adresse liftpad.ca
live_deploy_idstring ou nullLe déploiement en ligne, ou null si rien n'est publié
created_atintegerCréation du site (millisecondes depuis 1970, UTC)
updated_atintegerDernière modification (millisecondes depuis 1970, UTC)
suspended_atinteger ou nullSuspension du site par Liftpad (millisecondes depuis 1970, UTC), ou null
functionsliste de string ou nullNoms des fonctions du site, ou null
accessstring ou null: all, previews, nullPortée du mot de passe visiteur (all ou previews), ou null
url requisstring (uri)L'adresse du site sur liftpad.ca

SiteDetail

Un site avec son déploiement en ligne et ses domaines

ChampTypeDescription
id requisstringIdentifiant du site
name requisstringNom du site : 3 à 40 caractères, a-z, 0-9 et traits d'union simples
team_idstring ou nullIdentifiant de l'équipe propriétaire du site
primary_domainstring ou nullLe domaine personnalisé principal, ou null pour l'adresse liftpad.ca
live_deploy_idstring ou nullLe déploiement en ligne, ou null si rien n'est publié
created_atintegerCréation du site (millisecondes depuis 1970, UTC)
updated_atintegerDernière modification (millisecondes depuis 1970, UTC)
suspended_atinteger ou nullSuspension du site par Liftpad (millisecondes depuis 1970, UTC), ou null
functionsliste de string ou nullNoms des fonctions du site, ou null
accessstring ou null: all, previews, nullPortée du mot de passe visiteur (all ou previews), ou null
url requisstring (uri)L'adresse du site sur liftpad.ca
liveLiveRecord ou nullLe pointeur de mise en ligne, ou null
domains requisliste de objectDomaines personnalisés du site
ChampTypeDescription
hostnamestring
created_atinteger

LiveRecord

ChampTypeDescription
deployId requisstringDéploiement en ligne
generation requisintegerAugmente de un à chaque publication
publishedAt requisintegerDate de publication (millisecondes depuis 1970, UTC)

Overview

ChampTypeDescription
platform requisstringLe domaine du tableau de bord
sites requisliste de object
ChampTypeDescription
idstringIdentifiant du site
name requisstringNom du site : 3 à 40 caractères, a-z, 0-9 et traits d'union simples
team_idstring ou nullIdentifiant de l'équipe propriétaire du site
primary_domainstring ou nullLe domaine personnalisé principal, ou null pour l'adresse liftpad.ca
live_deploy_idstring ou nullLe déploiement en ligne, ou null si rien n'est publié
created_atintegerCréation du site (millisecondes depuis 1970, UTC)
updated_atintegerDernière modification (millisecondes depuis 1970, UTC)
suspended_atinteger ou nullSuspension du site par Liftpad (millisecondes depuis 1970, UTC), ou null
functionsliste de string ou nullNoms des fonctions du site, ou null
accessstring ou null: all, previews, nullPortée du mot de passe visiteur (all ou previews), ou null
url requisstring (uri)L'adresse du site sur liftpad.ca
team_slugstring ou null
team_namestring ou null
health_okinteger ou null1 si la dernière vérification est réussie, 0 sinon, null avant la première
health_detailobject ou nullDétails de la dernière vérification
health_atinteger ou nullDernière vérification (millisecondes depuis 1970, UTC), ou null
deploy_countinteger
live_titlestring ou nullMessage du déploiement en ligne
live_published_atinteger ou nullPublication du déploiement en ligne (millisecondes depuis 1970, UTC), ou null
live_filesinteger ou nullFichiers du déploiement en ligne
domain_countinteger
platformUrlstringL'adresse liftpad.ca (url est le domaine principal s'il y en a un)

Deploy

ChampTypeDescription
id requisstringIdentifiant du déploiement
site_idstring
site_namestring
team_idstring ou null
state requisstring: uploading, ready, expireduploading jusqu'à la finalisation, puis ready
titlestring ou nullLe message du déploiement
file_countinteger
total_sizeintegerOctets
created_atintegerDébut (millisecondes depuis 1970, UTC)
ready_atinteger ou nullFinalisation (millisecondes depuis 1970, UTC), ou null
published_atinteger ou nullDernière publication (millisecondes depuis 1970, UTC), ou null
held requisbooleanVrai tant qu'une vérification de sécurité de Liftpad le retient (publication impossible)
required requisliste de stringFichiers encore à envoyer (pendant l'envoi)
summaryobject ou nullPrésent une fois prêt

DeployListItem

ChampTypeDescription
id requisstring
state requisstring: uploading, ready, expired
titlestring ou null
file_countinteger
total_sizeinteger
created_atinteger
ready_atinteger ou null
published_atinteger ou null
scoreinteger ou nullNote des vérifications de 0 à 100
heldinteger1 si retenu pour vérification
live requisbooleanVrai pour le déploiement en ligne
previewUrl requisstring (uri)Adresse d'aperçu de ce déploiement

DeploySummary

Le contenu du déploiement et le résultat des vérifications

ChampTypeDescription
filesintegerFichiers du déploiement
redirectsintegerRègles de redirection lues dans _redirects et netlify.toml
headersintegerRègles d'en-têtes
formsliste de stringFormulaires trouvés dans les pages
checksobjectRésumé des vérifications de lancement
ChampTypeDescription
scoreinteger
countsobjectNombre de problèmes par niveau
pagesinteger
warningsliste de stringProblèmes qui n'ont pas bloqué le déploiement

CheckReport

ChampTypeDescription
vinteger
score requisinteger0 à 100
pages requisintegerPages HTML lues
counts requisobjectNombre de problèmes par niveau
ChampTypeDescription
errorinteger
warninginteger
infointeger
issues requisliste de object
ChampTypeDescription
level requisstring: error, warning, info
code requisstringCode stable, par exemple broken_link ou missing_alt
page requisstring ou nullLa page, ou null pour tout le site
detail requisstring
refstringLe fichier concerné, s'il y en a un
truncatedbooleanVrai si la liste a été coupée

Manifest

ChampTypeDescription
v requisinteger
id requisstringIdentifiant du déploiement
siteIdstring
createdAtinteger
files requistable de n-upletChemin vers [sha256, taille, type de contenu]
redirects requisliste de objectRègles de redirection, dans l'ordre
headers requisliste de objectRègles d'en-têtes
formstable de objectFormulaires trouvés dans les pages

Domain

ChampTypeDescription
hostname requisstring
status requisstringÉtat du nom d'hôte chez Cloudflare (active quand prêt)
sslStatus requisstringÉtat du certificat (active quand prêt)
dnsOkbooleanLe DNS public pointe vers Liftpad
records requisliste de objectEnregistrements DNS à ajouter chez l'hébergeur DNS
ChampTypeDescription
typestring
namestring
valuestring
whystring
createdAtinteger
mainWhenReadybooleanDeviendra le domaine principal une fois prêt
verifiedboolean
managedbooleanAcheté sur Liftpad
readybooleanDNS, nom d'hôte et certificat tous actifs
primaryboolean

DomainOrder

ChampTypeDescription
id requisstring
domain requisstring
status requisstring: awaiting_payment, requested, registering, registered, failed, canceled
priceCadnumberPremière année en CAD, taxes en sus (0 si incluse au forfait)
includedboolean
errorstring ou null
createdAtinteger
registeredAtinteger ou null
expiresAtinteger ou null

DomainSearch

ChampTypeDescription
query requisstring
exactstring ou nullLe nom complet demandé, si la recherche en était un
currency"CAD"
results requisliste de object
ChampTypeDescription
name requisstring
available requisboolean
priceCadnumberPremière année, CAD, taxes en sus
renewCadnumberChaque année suivante, CAD
includablebooleanCouvert par le domaine inclus du forfait Business
reasonstringPourquoi un nom n'est pas offert

Snippet

ChampTypeDescription
name requisstringJusqu'à 60 caractères, unique dans la liste
where requisstring: head, bodyFin de <head> ou fin de <body>
html requisstringJusqu'à 20 000 caractères

SplitTest

ChampTypeDescription
idstring
deployId requisstringL'autre déploiement montré à une partie des visiteurs
percent requisinteger1 à 99
startedAtinteger

Hook

ChampTypeDescription
id requisstring
kind requisstring: webhook, slack
url requisstringOù les événements sont envoyés (adresses Slack raccourcies)
events requisliste de string: deploy.ready, deploy.published, form.submission
createdAtinteger
lastStatusinteger ou nullStatut HTTP du dernier envoi (0 si la connexion a échoué)
lastAtinteger ou null
pausedbooleanVrai après 50 envois ratés de suite

Form

ChampTypeDescription
name requisstring
live requisbooleanPrésent dans le déploiement en ligne
fieldsliste de string
honeypotboolean
filesbooleanA des champs de fichier
actionstring ou nullPage de confirmation
submissions requisinteger
spam requisinteger
lastinteger ou nullEnvoi le plus récent

Submission

ChampTypeDescription
id requisstring
form requisstring
spamboolean
previewbooleanEnvoyé depuis une adresse d'aperçu
deployIdstring ou null
data requistable de stringNom du champ vers sa valeur
filesliste de object
ChampTypeDescription
iintegerIndex pour la route de téléchargement
fieldstring
namestring
typestring
sizeinteger
referrerstring ou null
createdAt requisinteger

Functions

Les fonctions déployées du site

ChampTypeDescription
routesliste de object
edgeliste de object
schedulesliste de object
deployedAtinteger
sizeinteger

Analytics

Pages vues du site en ligne, sans témoins ni adresses conservées

ChampTypeDescription
enabled requisbooleanFaux si les statistiques ne sont pas activées sur ce Liftpad
daysinteger
viewsinteger
visitorsinteger
dailyliste de object
ChampTypeDescription
daystring
viewsinteger
visitorsinteger
pagesliste de object
ChampTypeDescription
pathstring
viewsinteger

AiJob

ChampTypeDescription
id requisstring
kind requisstring: build, edit
status requisstring: held, queued, running, done, failed
stepstring ou null
deployIdstring ou nullLe déploiement brouillon créé
errorstring ou null
creditsinteger
createdAtinteger

Me

ChampTypeDescription
kind requisstring: session, tokenMode de connexion de l'appelant
user requisobject
ChampTypeDescription
idstring
email requisstring
namestring ou null
totp_enabledinteger
created_atinteger
last_login_atinteger ou null
recovery_leftinteger
platformAdminboolean
teams requisliste de Team
rolesliste de object
ChampTypeDescription
idstring
labelstring

Team

ChampTypeDescription
id requisstring
slug requisstring
name requisstring
role requisstring: owner, admin, developer, reviewer, billing, viewerVotre rôle dans l'équipe (pour un jeton : ce qu'il peut faire)
capsliste de string: view, deploy, sites, domains, members, billing, team
scopedbooleanVous ne voyez que certains sites de l'équipe
plan requisPlan
billingStatusstring ou null
billingobject ou null
trialEndsAtinteger ou null
currentPeriodEndinteger ou null
billingEmailstring ou null
usageobject ou nullSites, domaines, membres et stockage utilisés

Plan

ChampTypeDescription
id requisstring
name requisstring
priceCad requisnumberPar mois, CAD, taxes en sus
sites requisinteger
domainsPerSiteinteger
deploysPerDayinteger
maxDeployBytesinteger
storageBytesinteger
formSubmissionsintegerPar mois civil
aiSuggestionsintegerPar mois civil
imageTransformsinteger
includedDomainsintegerDomaines inclus par année
monthlyCreditsinteger
blurbstring

Token

ChampTypeDescription
id requisstring
name requisstring
access requisstring: read, deploy
teamstring ou nullSlug de la seule équipe permise, ou null
created_atinteger
last_used_atinteger ou nullMis à jour au plus une fois par heure
expires_atinteger ou nullNull s'il n'expire jamais

Credits

ChampTypeDescription
total requisinteger
monthlyintegerReste des crédits mensuels du forfait
boughtinteger
planMonthlyinteger
costs requistable de integerCrédits par action
packs requisliste de object
ChampTypeDescription
idstring
creditsinteger
priceCadnumber
paymentsbooleanLe paiement en ligne est ouvert
cardobject ou null
autoobject ou nullRecharge automatique
ledgerliste de object
ChampTypeDescription
atinteger
deltainteger
kindstring
notestring ou null

AuditEntry

ChampTypeDescription
id requisinteger
at requisinteger
actor requisstringCourriel de l'auteur (ou un nom de système)
action requisstring
targetstring ou null
detailstring ou nullTexte JSON
team_idstring ou null