Liftpad / Developers / Developer docs / API reference

API reference

Generated from the same OpenAPI 3.1 document the API publishes, so it always matches.

Base address https://api.liftpad.app/v1. Download the document: openapi.json (also at https://api.liftpad.app/v1/openapi.json). How to get a token: Authentication.

Errors

Every error is JSON with a stable code in error and a sentence in message (see Error). Calls that need a token can also answer 401 and 429.

HTTPMeaning
400The request is not valid (see error and message)
401No valid API token or session
402A plan limit or billing problem (error: plan_limit, credits, billing)
403Not allowed: your role is too low, a token was used where a dashboard session is needed (session_required), or the CSRF header is missing (csrf)
404Not found, or not visible to you
409Conflicts with the current state (see error)
411Content-Length header required
413Too large for the plan or the limits
422The AI found no safe answer this time
429Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)
502An outside service (Cloudflare, the registrar, Stripe) did not answer; try again
503Not available yet on this Liftpad, or for a moment

Operations

Sites

Create, read, move and delete sites.

get/sites

List sites Every site you can see (a token limited to one team sees that team's sites only).

Token: read or deployAny team rolelistSites

Parameters

NameInTypeDescription
teamquerystringOnly this team (slug)

Responses

  • 200 The sites, by name

    application/json · array of Site

  • 401 No valid API token or session
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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

post/sites

Create a site Creates an empty site. It is served at https://<name>.liftpad.ca once a deploy is published. Give team when you belong to several teams.

Token: deployDeveloper, Admin or OwnercreateSite

Request body

application/json · object

FieldTypeDescription
name requiredstring3 to 40 characters: a-z, 0-9 and single hyphens
teamstringTeam slug

Responses

  • 201 Created

    application/json · object

    FieldTypeDescription
    id requiredstring
    name requiredstring
    team requiredstring
    url requiredstring
  • 400 The request is not valid (see error and message)
  • 401 No valid API token or session
  • 402 A plan limit or billing problem (error: plan_limit, credits, billing)
  • 403 Not allowed: your role is too low, a token was used where a dashboard session is needed (session_required), or the CSRF header is missing (csrf)
  • 409 Conflicts with the current state (see error)
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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}

Get a site

Token: read or deployAny team rolegetSite

Parameters

NameInTypeDescription
name requiredpathstringSite name

Responses

  • 200 The site

    application/json · SiteDetail

    FieldTypeDescription
    id requiredstringSite id
    name requiredstringSite name: 3 to 40 characters, a-z, 0-9 and single hyphens
    team_idstring or nullId of the team that owns the site
    primary_domainstring or nullThe custom domain visitors are sent to, or null for the liftpad.ca address
    live_deploy_idstring or nullThe deploy visitors see now, or null when nothing is published
    created_atintegerWhen the site was created (milliseconds since 1970, UTC)
    updated_atintegerLast change (milliseconds since 1970, UTC)
    suspended_atinteger or nullWhen Liftpad suspended the site (milliseconds since 1970, UTC), or null
    functionsarray of string or nullNames of the site's functions, or null
    accessstring or null: all, previews, nullVisitor password scope (all or previews), or null when there is none
    url requiredstring (uri)The site's address on liftpad.ca
    liveLiveRecord or nullThe live pointer, or null
    domains requiredarray of objectCustom domains connected to the site
    FieldTypeDescription
    hostnamestring
    created_atinteger
  • 401 No valid API token or session
  • 404 Not found, or not visible to you
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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

delete/sites/{name}

Delete a site Takes the site offline for good, releases its domains and frees its name. Send the site's name as confirm.

Dashboard session onlyOwnerdeleteSite

Parameters

NameInTypeDescription
name requiredpathstringSite name

Request body

application/json · object

FieldTypeDescription
confirm requiredstringThe site's name

Responses

  • 200 Deleted

    application/json · Ok

    FieldTypeDescription
    ok requiredtrue
  • 400 The request is not valid (see error and message)
  • 401 No valid API token or session
  • 403 Not allowed: your role is too low, a token was used where a dashboard session is needed (session_required), or the CSRF header is missing (csrf)
  • 404 Not found, or not visible to you
  • 409 Conflicts with the current state (see error)
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)
  • 502 An outside service (Cloudflare, the registrar, Stripe) did not answer; try again

Example

# Dashboard session only: an API token gets 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

Move a site to another team For an owner of both teams. Files, deploys and domains move with the site, within the receiving team's plan.

Dashboard session onlyOwnertransferSite

Parameters

NameInTypeDescription
name requiredpathstringSite name

Request body

application/json · object

FieldTypeDescription
team requiredstringSlug of the receiving team

Responses

  • 200 Moved

    application/json · object

    FieldTypeDescription
    ok requiredboolean
    site requiredstring
    team requiredstring
  • 400 The request is not valid (see error and message)
  • 401 No valid API token or session
  • 402 A plan limit or billing problem (error: plan_limit, credits, billing)
  • 403 Not allowed: your role is too low, a token was used where a dashboard session is needed (session_required), or the CSRF header is missing (csrf)
  • 404 Not found, or not visible to you
  • 409 Conflicts with the current state (see error)
  • 413 Too large for the plan or the limits
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

# Dashboard session only: an API token gets 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 with health and last publish

Token: read or deployAny team rolegetOverview

Parameters

NameInTypeDescription
teamquerystringOnly this team (slug)

Responses

  • 200 Overview

    application/json · Overview

    FieldTypeDescription
    platform requiredstringThe dashboard domain
    sites requiredarray of object
    FieldTypeDescription
    idstringSite id
    name requiredstringSite name: 3 to 40 characters, a-z, 0-9 and single hyphens
    team_idstring or nullId of the team that owns the site
    primary_domainstring or nullThe custom domain visitors are sent to, or null for the liftpad.ca address
    live_deploy_idstring or nullThe deploy visitors see now, or null when nothing is published
    created_atintegerWhen the site was created (milliseconds since 1970, UTC)
    updated_atintegerLast change (milliseconds since 1970, UTC)
    suspended_atinteger or nullWhen Liftpad suspended the site (milliseconds since 1970, UTC), or null
    functionsarray of string or nullNames of the site's functions, or null
    accessstring or null: all, previews, nullVisitor password scope (all or previews), or null when there is none
    url requiredstring (uri)The site's address on liftpad.ca
    team_slugstring or null
    team_namestring or null
    health_okinteger or null1 when the last health check passed, 0 when it failed, null before the first one
    health_detailobject or nullDetails of the last health check
    health_atinteger or nullLast health check (milliseconds since 1970, UTC), or null
    deploy_countinteger
    live_titlestring or nullMessage of the live deploy
    live_published_atinteger or nullWhen the live deploy was published (milliseconds since 1970, UTC), or null
    live_filesinteger or nullFiles in the live deploy
    domain_countinteger
    platformUrlstringThe liftpad.ca address (url is the primary domain when there is one)
  • 401 No valid API token or session
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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

get/sites/{name}/manifest

Get a deploy's manifest Every file path with its SHA-256, size and type, plus the deploy's rules. Used by exports and by deploy_changes.

Token: deployDeveloper, Admin or OwnergetManifest

Parameters

NameInTypeDescription
name requiredpathstringSite name
deployquerystringA deploy id (default: the live deploy)

Responses

  • 200 The manifest

    application/json · Manifest

    FieldTypeDescription
    v requiredinteger
    id requiredstringDeploy id
    siteIdstring
    createdAtinteger
    files requiredmap of tuplePath to [sha256, size, content type]
    redirects requiredarray of objectRedirect rules in the order they apply
    headers requiredarray of objectHeader rules
    formsmap of objectForms found in the pages
  • 401 No valid API token or session
  • 404 Not found, or not visible to you
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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

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

Download one file of a deploy Same right as the manifest: the files include the site's rules (Basic-Auth passwords) and protected pages. Always sent as a download.

Token: deployDeveloper, Admin or OwnergetSiteFile

Parameters

NameInTypeDescription
name requiredpathstringSite name
hash requiredpathstringSHA-256 of the file, lowercase hex
deployquerystringA deploy id (default: the live deploy)

Responses

  • 200 The file's bytes

    application/octet-stream · string (binary)

  • 400 The request is not valid (see error and message)
  • 401 No valid API token or session
  • 404 Not found, or not visible to you
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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

get/sites/{name}/functions

Get the site's functions Functions are in alpha: only Liftpad operators can deploy them for now.

Token: read or deployAny team rolegetFunctions

Parameters

NameInTypeDescription
name requiredpathstringSite name

Responses

  • 200 Functions, or null

    application/json · Functions or null

  • 401 No valid API token or session
  • 404 Not found, or not visible to you
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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

Deploys

Upload only changed files, get a preview and launch checks, publish and roll back.

post/sites/{name}/deploys

Start a deploy Send every file path with the SHA-256 of its bytes. The answer lists the hashes Liftpad does not have yet: upload only those, then finalize. Files your team already uploaded are reused.

Token: deployDeveloper, Admin or OwnercreateDeploy

Parameters

NameInTypeDescription
name requiredpathstringSite name

Request body

application/json · object

FieldTypeDescription
files requiredmap of stringPath (starting with /) to SHA-256, at most 20 000 files
titlestringDeploy message
configstringText of a netlify.toml (up to 1 MB)
rulesobjectRules from a site export (restore)
FieldTypeDescription
redirects requiredarray of object
headers requiredarray of object

Responses

  • 201 Deploy started

    application/json · object

    FieldTypeDescription
    id requiredstring
    required requiredarray of stringHashes to upload
    previewUrl requiredstring
  • 400 The request is not valid (see error and message)
  • 401 No valid API token or session
  • 402 A plan limit or billing problem (error: plan_limit, credits, billing)
  • 403 Not allowed: your role is too low, a token was used where a dashboard session is needed (session_required), or the CSRF header is missing (csrf)
  • 404 Not found, or not visible to you
  • 413 Too large for the plan or the limits
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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

List a site's deploys The newest 100.

Token: read or deployAny team rolelistDeploys

Parameters

NameInTypeDescription
name requiredpathstringSite name

Responses

  • 200 Deploys, newest first

    application/json · array of DeployListItem

  • 401 No valid API token or session
  • 404 Not found, or not visible to you
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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

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

Upload one file The raw bytes of one file the deploy asked for, with Content-Length. Liftpad checks the bytes against the hash. Up to 100 MB per file.

Token: deployDeveloper, Admin or OwneruploadDeployFile

Parameters

NameInTypeDescription
id requiredpathstringDeploy id
hash requiredpathstringSHA-256 of the file, lowercase hex

Request body

application/octet-stream · string (binary)

Responses

  • 200 Stored

    application/json · object

    FieldTypeDescription
    ok requiredboolean
    hash requiredstring
    size requiredinteger
  • 400 The request is not valid (see error and message)
  • 401 No valid API token or session
  • 403 Not allowed: your role is too low, a token was used where a dashboard session is needed (session_required), or the CSRF header is missing (csrf)
  • 404 Not found, or not visible to you
  • 409 Conflicts with the current state (see error)
  • 411 Content-Length header required
  • 413 Too large for the plan or the limits
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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

Finish a deploy Reads the rules and forms, runs the launch checks and makes the preview address work. If files are missing the answer is 409 missing_blobs with the hashes to upload; upload them and call again. Calling it on a ready deploy answers ready again.

Token: deployDeveloper, Admin or OwnerfinalizeDeploy

Parameters

NameInTypeDescription
id requiredpathstringDeploy id

Responses

  • 200 Ready

    application/json · object

    FieldTypeDescription
    id requiredstring
    state required"ready"
    previewUrlstring
    summaryDeploySummary
    heldbooleanHeld for a Liftpad safety review
    messagestring
  • 400 The request is not valid (see error and message)
  • 401 No valid API token or session
  • 404 Not found, or not visible to you
  • 409 Conflicts with the current state (see error)
  • 413 Too large for the plan or the limits
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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

get/deploys/{id}

Get a deploy

Token: read or deployAny team rolegetDeploy

Parameters

NameInTypeDescription
id requiredpathstringDeploy id

Responses

  • 200 The deploy

    application/json · Deploy

    FieldTypeDescription
    id requiredstringDeploy id
    site_idstring
    site_namestring
    team_idstring or null
    state requiredstring: uploading, ready, expireduploading until finalized, then ready
    titlestring or nullThe deploy message
    file_countinteger
    total_sizeintegerBytes
    created_atintegerStarted (milliseconds since 1970, UTC)
    ready_atinteger or nullFinalized (milliseconds since 1970, UTC), or null
    published_atinteger or nullLast published (milliseconds since 1970, UTC), or null
    held requiredbooleanTrue while a Liftpad safety review holds it (it cannot be published)
    required requiredarray of stringFiles still to upload (while uploading)
    summaryobject or nullSet once ready
  • 401 No valid API token or session
  • 404 Not found, or not visible to you
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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

get/deploys/{id}/checks

Launch checks of a deploy Broken links, missing files, titles, descriptions, alt text, insecure content, heavy images, sitemap, robots.txt and more, read from up to 400 pages.

Token: read or deployAny team rolegetDeployChecks

Parameters

NameInTypeDescription
id requiredpathstringDeploy id

Responses

  • 200 The report

    application/json · CheckReport

    FieldTypeDescription
    vinteger
    score requiredinteger0 to 100
    pages requiredintegerHTML pages read
    counts requiredobjectNumber of issues per level
    FieldTypeDescription
    errorinteger
    warninginteger
    infointeger
    issues requiredarray of object
    FieldTypeDescription
    level requiredstring: error, warning, info
    code requiredstringStable code, for example broken_link or missing_alt
    page requiredstring or nullThe page, or null for the whole site
    detail requiredstring
    refstringThe file the issue is about, when there is one
    truncatedbooleanTrue when the list was cut short
  • 401 No valid API token or session
  • 404 Not found, or not visible to you
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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

post/deploys/{id}/suggest

AI title and description for a page Written from the page's own text. Uses the plan's monthly AI suggestions; the same page content is answered from cache for free.

Token: deployDeveloper, Admin or OwnersuggestPageMeta

Parameters

NameInTypeDescription
id requiredpathstringDeploy id

Request body

application/json · object

FieldTypeDescription
page requiredstringPath of an HTML page in the deploy

Responses

  • 200 Suggestion

    application/json · object

    FieldTypeDescription
    title requiredstring
    description requiredstring
    cached requiredboolean
    leftintegerSuggestions left this month
  • 400 The request is not valid (see error and message)
  • 401 No valid API token or session
  • 404 Not found, or not visible to you
  • 422 The AI found no safe answer this time
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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

AI alt text for an image A vision model describes one image of the deploy in one sentence, in the page's language.

Token: deployDeveloper, Admin or OwnersuggestImageAlt

Parameters

NameInTypeDescription
id requiredpathstringDeploy id

Request body

application/json · object

FieldTypeDescription
page requiredstringThe page that shows the image
src requiredstringThe image address as written in the page

Responses

  • 200 Alt text

    application/json · object

    FieldTypeDescription
    alt requiredstring
    langstring
    srcstring
    cached requiredboolean
  • 400 The request is not valid (see error and message)
  • 401 No valid API token or session
  • 404 Not found, or not visible to you
  • 422 The AI found no safe answer this time
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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

Publish a deploy (or roll back) Makes a ready deploy live everywhere within about 5 seconds. Publishing an older deploy is a rollback. Ends a running split test.

Token: deployDeveloper, Admin or OwnerpublishDeploy

Parameters

NameInTypeDescription
name requiredpathstringSite name

Request body

application/json · object

FieldTypeDescription
deployId requiredstring

Responses

  • 200 Live

    application/json · object

    FieldTypeDescription
    site requiredstring
    deployId requiredstring
    generation requiredinteger
    url requiredstringThe live address (primary domain when there is one)
  • 401 No valid API token or session
  • 403 Not allowed: your role is too low, a token was used where a dashboard session is needed (session_required), or the CSRF header is missing (csrf)
  • 404 Not found, or not visible to you
  • 409 Conflicts with the current state (see error)
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)
  • 503 Not available yet on this Liftpad, or for a moment

Example

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

Take a site offline Nothing is deleted: publish a deploy again to bring it back.

Token: deployDeveloper, Admin or OwnerunpublishSite

Parameters

NameInTypeDescription
name requiredpathstringSite name

Responses

  • 200 Offline

    application/json · Ok

    FieldTypeDescription
    ok requiredtrue
  • 401 No valid API token or session
  • 404 Not found, or not visible to you
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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

Domains

Search, buy and connect custom domains.

post/sites/{name}/domains

Connect a domain you own Answers with the DNS records to add. HTTPS starts once DNS points at Liftpad. With primary, the domain becomes the main address as soon as it is ready.

Token: deployDeveloper, Admin or OwneraddDomain

Parameters

NameInTypeDescription
name requiredpathstringSite name

Request body

application/json · object

FieldTypeDescription
hostname requiredstring
primarybooleanMake it the main address once ready

Responses

  • 201 Added

    application/json · object

    FieldTypeDescription
    hostname requiredstring
    sitestring
    primaryboolean
    mainWhenReadyboolean
    status requiredstring
    sslStatusstring
    records requiredarray of object
  • 400 The request is not valid (see error and message)
  • 401 No valid API token or session
  • 402 A plan limit or billing problem (error: plan_limit, credits, billing)
  • 404 Not found, or not visible to you
  • 409 Conflicts with the current state (see error)
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)
  • 502 An outside service (Cloudflare, the registrar, Stripe) did not answer; try again

Example

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

List a site's domains With fresh DNS and certificate status (checked at most once a minute).

Token: read or deployAny team rolelistDomains

Parameters

NameInTypeDescription
name requiredpathstringSite name

Responses

  • 200 Domains

    application/json · array of Domain

  • 401 No valid API token or session
  • 404 Not found, or not visible to you
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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

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

Remove a domain A domain bought on Liftpad stays connected while it is registered.

Token: deployDeveloper, Admin or OwnerremoveDomain

Parameters

NameInTypeDescription
name requiredpathstringSite name
hostname requiredpathstringThe domain

Responses

  • 200 Removed

    application/json · Ok

    FieldTypeDescription
    ok requiredtrue
  • 401 No valid API token or session
  • 404 Not found, or not visible to you
  • 409 Conflicts with the current state (see error)
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)
  • 502 An outside service (Cloudflare, the registrar, Stripe) did not answer; try again

Example

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

Choose the main address Visitors on other addresses are sent to the main one. null goes back to the liftpad.ca address. A domain that is not ready yet becomes the main one automatically when it is (409 domain_not_ready).

Token: deployDeveloper, Admin or OwnersetPrimaryDomain

Parameters

NameInTypeDescription
name requiredpathstringSite name

Request body

application/json · object

FieldTypeDescription
hostname requiredstring or null

Responses

  • 200 Set

    application/json · object

    FieldTypeDescription
    ok requiredboolean
    primary requiredstring or null
  • 400 The request is not valid (see error and message)
  • 401 No valid API token or session
  • 404 Not found, or not visible to you
  • 409 Conflicts with the current state (see error)
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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

Search domain names Is a name free, and its price in CAD. No sign-in needed. Answers for the same names are cached for ten minutes.

No sign-insearchDomains

Parameters

NameInTypeDescription
qquerystringA name or words, up to 100 characters

Responses

  • 200 Results

    application/json · DomainSearch

    FieldTypeDescription
    query requiredstring
    exactstring or nullThe full name asked for, when the query was one
    currency"CAD"
    results requiredarray of object
    FieldTypeDescription
    name requiredstring
    available requiredboolean
    priceCadnumberFirst year, CAD, taxes extra
    renewCadnumberEach later year, CAD
    includablebooleanCovered by the Business plan's included domain
    reasonstringWhy a name cannot be had
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)
  • 502 An outside service (Cloudflare, the registrar, Stripe) did not answer; try again
  • 503 Not available yet on this Liftpad, or for a moment

Example

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

get/sites/{name}/domain-orders

Domain orders of a site

Token: read or deployAny team rolelistDomainOrders

Parameters

NameInTypeDescription
name requiredpathstringSite name

Responses

  • 200 Orders

    application/json · object

    FieldTypeDescription
    orders requiredarray of DomainOrder
    includedLeftintegerIncluded domains left this year
    includedPlanboolean
    readybooleanDomain sales are open
    paymentsbooleanOnline payment is open
  • 401 No valid API token or session
  • 404 Not found, or not visible to you
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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

post/sites/{name}/domains/buy

Buy a domain for a site Owners and admins, from the dashboard. Uses the plan's included domain when it covers the name; otherwise answers with a Stripe checkout address, or sends the request to Liftpad when online payment is not open.

Dashboard session onlyAdmin or OwnerbuyDomain

Parameters

NameInTypeDescription
name requiredpathstringSite name

Request body

application/json · object

FieldTypeDescription
domain requiredstring

Responses

  • 201 Ordered

    application/json · object

    FieldTypeDescription
    order requiredDomainOrder
    checkoutUrlstringStripe payment page, when payment is needed
  • 400 The request is not valid (see error and message)
  • 401 No valid API token or session
  • 402 A plan limit or billing problem (error: plan_limit, credits, billing)
  • 403 Not allowed: your role is too low, a token was used where a dashboard session is needed (session_required), or the CSRF header is missing (csrf)
  • 404 Not found, or not visible to you
  • 409 Conflicts with the current state (see error)
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)
  • 502 An outside service (Cloudflare, the registrar, Stripe) did not answer; try again
  • 503 Not available yet on this Liftpad, or for a moment

Example

# Dashboard session only: an API token gets 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"}'

Forms

Form submissions found by Liftpad Forms (Netlify compatible).

get/sites/{name}/forms

List forms Forms of the live deploy, with how many submissions each has received.

Token: read or deployAny team rolelistForms

Parameters

NameInTypeDescription
name requiredpathstringSite name

Responses

  • 200 Forms

    application/json · object

    FieldTypeDescription
    allowanceinteger or nullSubmissions per month on the plan
    forms requiredarray of Form
  • 401 No valid API token or session
  • 404 Not found, or not visible to you
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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

get/sites/{name}/submissions

List form submissions Newest first. Pass next as before to get the following page.

Token: read or deployAny team rolelistSubmissions

Parameters

NameInTypeDescription
name requiredpathstringSite name
formquerystringOnly this form
spamquerystring: 0, 11 for the spam folder
beforequeryintegerOnly submissions older than this time (ms)
limitqueryinteger1 to 200, default 50

Responses

  • 200 A page of submissions

    application/json · object

    FieldTypeDescription
    submissions requiredarray of Submission
    next requiredinteger or nullValue for before, or null at the end
  • 401 No valid API token or session
  • 404 Not found, or not visible to you
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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

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

Download submissions as CSV Every submission of one form, safe to open in a spreadsheet (values that would run as formulas are quoted). Up to 50 000 rows.

Token: read or deployAny team roleexportSubmissionsCsv

Parameters

NameInTypeDescription
name requiredpathstringSite name
form requiredpathstringForm name

Responses

  • 200 CSV file

    text/csv · string

  • 401 No valid API token or session
  • 404 Not found, or not visible to you
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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}

Download a file sent with a submission Always sent as a download, never shown in the browser (it came from a visitor).

Token: read or deployAny team rolegetSubmissionFile

Parameters

NameInTypeDescription
name requiredpathstringSite name
id requiredpathstringSubmission id
i requiredpathintegerFile index from the submission's files

Responses

  • 200 The file

    application/octet-stream · string (binary)

  • 401 No valid API token or session
  • 404 Not found, or not visible to you
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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

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

Mark as spam or not spam

Token: deployDeveloper, Admin or OwnermarkSubmission

Parameters

NameInTypeDescription
name requiredpathstringSite name
id requiredpathstringSubmission id

Request body

application/json · object

FieldTypeDescription
spam requiredboolean

Responses

  • 200 Saved

    application/json · Ok

    FieldTypeDescription
    ok requiredtrue
  • 400 The request is not valid (see error and message)
  • 401 No valid API token or session
  • 404 Not found, or not visible to you
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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}

Delete a submission Its files are deleted too.

Token: deployDeveloper, Admin or OwnerdeleteSubmission

Parameters

NameInTypeDescription
name requiredpathstringSite name
id requiredpathstringSubmission id

Responses

  • 200 Deleted

    application/json · Ok

    FieldTypeDescription
    ok requiredtrue
  • 401 No valid API token or session
  • 404 Not found, or not visible to you
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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

post/sites/{name}/submissions/import

Import submissions from another host Up to 500 per call. Dates are kept, nobody is emailed and files are not copied. Sending the same id twice imports it once.

Token: deployDeveloper, Admin or OwnerimportSubmissions

Parameters

NameInTypeDescription
name requiredpathstringSite name

Request body

application/json · object

FieldTypeDescription
submissions requiredarray of object
FieldTypeDescription
idstringYour id, to skip repeats
form requiredstring
data requiredmap of string
createdAt requiredintegerms, not in the future
spamboolean
referrerstring

Responses

  • 200 Imported

    application/json · object

    FieldTypeDescription
    ok requiredboolean
    imported requiredinteger
    skipped requiredinteger
  • 400 The request is not valid (see error and message)
  • 401 No valid API token or session
  • 404 Not found, or not visible to you
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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}]}'

Site settings

Code snippets, split tests, visitor password and notifications.

get/sites/{name}/snippets

Get code snippets

Token: read or deployAny team rolegetSnippets

Parameters

NameInTypeDescription
name requiredpathstringSite name

Responses

  • 200 Snippets

    application/json · array of Snippet

  • 401 No valid API token or session
  • 404 Not found, or not visible to you
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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

put/sites/{name}/snippets

Replace code snippets The whole list: up to 10 snippets, 20 000 characters each, 50 000 in all, added to every HTML page without a deploy. Paid plans only.

Token: deployDeveloper, Admin or OwnersetSnippets

Parameters

NameInTypeDescription
name requiredpathstringSite name

Request body

application/json · object

FieldTypeDescription
snippets requiredarray of Snippet

Responses

  • 200 The saved list

    application/json · array of Snippet

  • 400 The request is not valid (see error and message)
  • 401 No valid API token or session
  • 402 A plan limit or billing problem (error: plan_limit, credits, billing)
  • 403 Not allowed: your role is too low, a token was used where a dashboard session is needed (session_required), or the CSRF header is missing (csrf)
  • 404 Not found, or not visible to you
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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

Get the split test

Token: read or deployAny team rolegetSplitTest

Parameters

NameInTypeDescription
name requiredpathstringSite name

Responses

  • 200 The test, or null

    application/json · SplitTest or null

  • 401 No valid API token or session
  • 404 Not found, or not visible to you
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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

put/sites/{name}/split

Start, change or stop a split test A share of the live site's visitors (1 to 99 %) sees another ready deploy. Send deployId null to stop.

Token: deployDeveloper, Admin or OwnersetSplitTest

Parameters

NameInTypeDescription
name requiredpathstringSite name

Request body

application/json · object

FieldTypeDescription
deployId requiredstring or null
percentinteger

Responses

  • 200 The test, or null

    application/json · SplitTest or null

  • 400 The request is not valid (see error and message)
  • 401 No valid API token or session
  • 403 Not allowed: your role is too low, a token was used where a dashboard session is needed (session_required), or the CSRF header is missing (csrf)
  • 404 Not found, or not visible to you
  • 409 Conflicts with the current state (see error)
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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

Visitor password status

Token: read or deployAny team rolegetVisitorAccess

Parameters

NameInTypeDescription
name requiredpathstringSite name

Responses

  • 200 Status

    application/json · object

    FieldTypeDescription
    enabled requiredboolean
    scope requiredstring or null: all, previews, null
    updatedAtinteger or null
  • 401 No valid API token or session
  • 404 Not found, or not visible to you
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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

put/sites/{name}/access

Set or remove the visitor password A password page in front of the whole site or only its previews. password null removes it. Changing it signs every visitor out. Not possible with an API token.

Dashboard session onlyDeveloper, Admin or OwnersetVisitorAccess

Parameters

NameInTypeDescription
name requiredpathstringSite name

Request body

application/json · object

FieldTypeDescription
password requiredstring or null8 to 200 characters, or null
scopestring: all, previews

Responses

  • 200 Saved

    application/json · object

    FieldTypeDescription
    ok requiredboolean
    enabled requiredboolean
    scopestring or null
  • 400 The request is not valid (see error and message)
  • 401 No valid API token or session
  • 403 Not allowed: your role is too low, a token was used where a dashboard session is needed (session_required), or the CSRF header is missing (csrf)
  • 404 Not found, or not visible to you
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

# Dashboard session only: an API token gets 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

List notifications Webhooks and Slack messages of a site. Dashboard session only.

Dashboard session onlyDeveloper, Admin or OwnerlistHooks

Parameters

NameInTypeDescription
name requiredpathstringSite name

Responses

  • 200 Notifications

    application/json · array of Hook

  • 401 No valid API token or session
  • 403 Not allowed: your role is too low, a token was used where a dashboard session is needed (session_required), or the CSRF header is missing (csrf)
  • 404 Not found, or not visible to you
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

# Dashboard session only: an API token gets 403 session_required
curl -sS "https://api.liftpad.app/v1/sites/my-site/hooks"

post/sites/{name}/hooks

Add a notification A signed webhook or a Slack incoming webhook for some of: deploy.ready, deploy.published, form.submission. Public https addresses only, never Liftpad or a site it hosts. Up to 10 per site. A webhook's signing secret is in this answer only.

Dashboard session onlyDeveloper, Admin or OwnercreateHook

Parameters

NameInTypeDescription
name requiredpathstringSite name

Request body

application/json · object

FieldTypeDescription
kind requiredstring: webhook, slack
url requiredstring (uri)
events requiredarray of string: deploy.ready, deploy.published, form.submission

Responses

  • 201 Added

    application/json · object

    FieldTypeDescription
    id requiredstring
    kind requiredstring: webhook, slack
    url requiredstringWhere events are sent (Slack addresses are shown shortened)
    events requiredarray of string: deploy.ready, deploy.published, form.submission
    createdAtinteger
    lastStatusinteger or nullHTTP status of the last delivery (0 when it could not connect)
    lastAtinteger or null
    pausedbooleanTrue after 50 failed deliveries in a row
    secretstringSigning secret (lpwh_...), shown once
  • 400 The request is not valid (see error and message)
  • 401 No valid API token or session
  • 403 Not allowed: your role is too low, a token was used where a dashboard session is needed (session_required), or the CSRF header is missing (csrf)
  • 404 Not found, or not visible to you
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

# Dashboard session only: an API token gets 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

Send a test notification

Dashboard session onlyDeveloper, Admin or OwnertestHook

Parameters

NameInTypeDescription
name requiredpathstringSite name
id requiredpathstringNotification id

Responses

  • 200 How the delivery went

    application/json · object

    FieldTypeDescription
    status requiredintegerHTTP status of the receiver (0 when it could not connect)
    ok requiredboolean
  • 401 No valid API token or session
  • 403 Not allowed: your role is too low, a token was used where a dashboard session is needed (session_required), or the CSRF header is missing (csrf)
  • 404 Not found, or not visible to you
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

# Dashboard session only: an API token gets 403 session_required
curl -sS -X POST "https://api.liftpad.app/v1/sites/my-site/hooks/ID/test"

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

Remove a notification

Dashboard session onlyDeveloper, Admin or OwnerdeleteHook

Parameters

NameInTypeDescription
name requiredpathstringSite name
id requiredpathstringNotification id

Responses

  • 200 Removed

    application/json · Ok

    FieldTypeDescription
    ok requiredtrue
  • 401 No valid API token or session
  • 403 Not allowed: your role is too low, a token was used where a dashboard session is needed (session_required), or the CSRF header is missing (csrf)
  • 404 Not found, or not visible to you
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

# Dashboard session only: an API token gets 403 session_required
curl -sS -X DELETE "https://api.liftpad.app/v1/sites/my-site/hooks/ID"

Analytics

Cookie-free visitor statistics.

get/sites/{name}/analytics

Visitor statistics

Token: read or deployAny team rolegetAnalytics

Parameters

NameInTypeDescription
name requiredpathstringSite name
daysqueryinteger: 7, 30, 907, 30 or 90 (default 7)

Responses

  • 200 Statistics

    application/json · Analytics

    FieldTypeDescription
    enabled requiredbooleanFalse when analytics are not set up on this Liftpad
    daysinteger
    viewsinteger
    visitorsinteger
    dailyarray of object
    FieldTypeDescription
    daystring
    viewsinteger
    visitorsinteger
    pagesarray of object
    FieldTypeDescription
    pathstring
    viewsinteger
  • 401 No valid API token or session
  • 404 Not found, or not visible to you
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)
  • 503 Not available yet on this Liftpad, or for a moment

Example

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

AI website builder

Build and change sites in words (credits; dashboard session only).

post/sites/{name}/ai-build

Build a site with AI Writes, illustrates and builds a complete site from a short brief, as a draft deploy. Costs 100 credits, given back if the job fails. Dashboard session only.

Dashboard session onlyDeveloper, Admin or OwneraiBuildSite

Parameters

NameInTypeDescription
name requiredpathstringSite name

Request body

application/json · object

FieldTypeDescription
name requiredstringBusiness name
about requiredstringWhat it does, at least 20 characters
servicesstring
areastring
phonestring
emailstring
addressstring
hoursstring
langsarray of string: en, fr
stylestring: warm, modern, elegant, bold, natural

Responses

  • 202 Queued

    application/json · object

    FieldTypeDescription
    job requiredobject
    FieldTypeDescription
    idstring
    kindstring
    statusstring
    creditsinteger
  • 400 The request is not valid (see error and message)
  • 401 No valid API token or session
  • 402 A plan limit or billing problem (error: plan_limit, credits, billing)
  • 403 Not allowed: your role is too low, a token was used where a dashboard session is needed (session_required), or the CSRF header is missing (csrf)
  • 404 Not found, or not visible to you
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

# Dashboard session only: an API token gets 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

Change an AI-built site in words Costs 20 credits, plus 10 with newImages. Dashboard session only.

Dashboard session onlyDeveloper, Admin or OwneraiEditSite

Parameters

NameInTypeDescription
name requiredpathstringSite name

Request body

application/json · object

FieldTypeDescription
instruction requiredstring5 to 1000 characters
newImagesbooleanDraw two new pictures

Responses

  • 202 Queued

    application/json · object

    FieldTypeDescription
    job requiredobject
    FieldTypeDescription
    idstring
    kindstring
    statusstring
    creditsinteger
  • 400 The request is not valid (see error and message)
  • 401 No valid API token or session
  • 402 A plan limit or billing problem (error: plan_limit, credits, billing)
  • 403 Not allowed: your role is too low, a token was used where a dashboard session is needed (session_required), or the CSRF header is missing (csrf)
  • 404 Not found, or not visible to you
  • 409 Conflicts with the current state (see error)
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

# Dashboard session only: an API token gets 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

AI jobs of a site

Token: read or deployAny team rolegetAiJobs

Parameters

NameInTypeDescription
name requiredpathstringSite name

Responses

  • 200 Jobs

    application/json · object

    FieldTypeDescription
    aiSite requiredbooleanBuilt with the AI builder
    jobs requiredarray of AiJob
    costs requiredmap of integer
    creditsobject or nullShown to owners, admins, billing and developers
  • 401 No valid API token or session
  • 404 Not found, or not visible to you
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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

Account and tokens

Who you are and your API tokens.

get/me

Who am I The caller, their teams and roles. With a token, roles are what the token may do.

Token: read or deployAny team rolegetMe

Responses

  • 200 You

    application/json · Me

    FieldTypeDescription
    kind requiredstring: session, tokenHow the caller signed in
    user requiredobject
    FieldTypeDescription
    idstring
    email requiredstring
    namestring or null
    totp_enabledinteger
    created_atinteger
    last_login_atinteger or null
    recovery_leftinteger
    platformAdminboolean
    teams requiredarray of Team
    rolesarray of object
    FieldTypeDescription
    idstring
    labelstring
  • 401 No valid API token or session
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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

patch/me

Change your name

Dashboard session onlyupdateMe

Request body

application/json · object

FieldTypeDescription
namestringUp to 80 characters

Responses

  • 200 Saved

    application/json · Ok

    FieldTypeDescription
    ok requiredtrue
  • 400 The request is not valid (see error and message)
  • 401 No valid API token or session
  • 403 Not allowed: your role is too low, a token was used where a dashboard session is needed (session_required), or the CSRF header is missing (csrf)
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

# Dashboard session only: an API token gets 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

Sign out everywhere Ends every session and cancels every API token you made.

Dashboard session onlylogoutEverywhere

Responses

  • 200 Signed out

    application/json · Ok

    FieldTypeDescription
    ok requiredtrue
  • 401 No valid API token or session
  • 403 Not allowed: your role is too low, a token was used where a dashboard session is needed (session_required), or the CSRF header is missing (csrf)
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

# Dashboard session only: an API token gets 403 session_required
curl -sS -X POST "https://api.liftpad.app/v1/me/logout-all"

get/me/tokens

List your API tokens Names and dates only; a token's value is never shown again.

Token: read or deploylistTokens

Responses

  • 200 Tokens

    application/json · array of Token

  • 401 No valid API token or session
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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

post/me/tokens

Create an API token Dashboard session only (a token cannot make tokens). access is deploy (sites, deploys, domains) or read. team limits it to one team. days sets the expiry (the dashboard offers 90, 365 or none; at most 730). The token is in this answer only.

Dashboard session onlycreateToken

Request body

application/json · object

FieldTypeDescription
namestringUp to 60 characters
accessstring: deploy, read
teamstringTeam slug
daysintegerDays until it expires; leave out for no expiry

Responses

  • 201 Created

    application/json · object

    FieldTypeDescription
    id requiredstring
    token requiredstringlp_... shown once
    expiresAt requiredinteger or null
  • 401 No valid API token or session
  • 403 Not allowed: your role is too low, a token was used where a dashboard session is needed (session_required), or the CSRF header is missing (csrf)
  • 404 Not found, or not visible to you
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

# Dashboard session only: an API token gets 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}

Revoke an API token

Dashboard session onlyrevokeToken

Parameters

NameInTypeDescription
id requiredpathstringToken id (tok_...)

Responses

  • 200 Revoked

    application/json · Ok

    FieldTypeDescription
    ok requiredtrue
  • 401 No valid API token or session
  • 403 Not allowed: your role is too low, a token was used where a dashboard session is needed (session_required), or the CSRF header is missing (csrf)
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

# Dashboard session only: an API token gets 403 session_required
curl -sS -X DELETE "https://api.liftpad.app/v1/me/tokens/ID"

Teams

Teams, members and invites.

get/teams

List your teams

Token: read or deployAny team rolelistTeams

Responses

  • 200 Teams

    application/json · array of Team

  • 401 No valid API token or session
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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

get/teams/{slug}

Get a team With members and pending invites (invites for those who manage members).

Token: read or deployAny team rolegetTeam

Parameters

NameInTypeDescription
slug requiredpathstringTeam slug

Responses

  • 200 The team

    application/json · object

    FieldTypeDescription
    idstring
    slug requiredstring
    namestring
    rolestring: owner, admin, developer, reviewer, billing, viewerYour role in the team (for a token: what the token may do)
    capsarray of string: view, deploy, sites, domains, members, billing, team
    scopedbooleanYou see only some of the team's sites
    planPlan
    billingStatusstring or null
    billingobject or null
    trialEndsAtinteger or null
    currentPeriodEndinteger or null
    billingEmailstring or null
    usageobject or nullSites, domains, members and storage used
    members requiredarray of object
    invitesarray of object
    rolesarray of object
  • 401 No valid API token or session
  • 404 Not found, or not visible to you
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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

patch/teams/{slug}

Rename a team or change its billing email name needs an owner; billingEmail needs an owner or a billing member.

Dashboard session onlyOwnerupdateTeam

Parameters

NameInTypeDescription
slug requiredpathstringTeam slug

Request body

application/json · object

FieldTypeDescription
namestring
billingEmailstring

Responses

  • 200 Saved

    application/json · Ok

    FieldTypeDescription
    ok requiredtrue
  • 401 No valid API token or session
  • 403 Not allowed: your role is too low, a token was used where a dashboard session is needed (session_required), or the CSRF header is missing (csrf)
  • 404 Not found, or not visible to you
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

# Dashboard session only: an API token gets 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

Invite someone A one-time link by email. sites limits a Developer, Reviewer or Team viewer to some sites. Only owners invite owners or billing members.

Dashboard session onlyAdmin or OwnerinviteMember

Parameters

NameInTypeDescription
slug requiredpathstringTeam slug

Request body

application/json · object

FieldTypeDescription
email requiredstring
role requiredstring: owner, admin, developer, reviewer, billing, viewer
sitesarray of stringSite names

Responses

  • 201 Invited

    application/json · object

  • 400 The request is not valid (see error and message)
  • 401 No valid API token or session
  • 403 Not allowed: your role is too low, a token was used where a dashboard session is needed (session_required), or the CSRF header is missing (csrf)
  • 404 Not found, or not visible to you
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

# Dashboard session only: an API token gets 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}

Cancel an invite

Dashboard session onlyAdmin or OwnerrevokeInvite

Parameters

NameInTypeDescription
slug requiredpathstringTeam slug
id requiredpathstringInvite id

Responses

  • 200 Canceled

    application/json · Ok

    FieldTypeDescription
    ok requiredtrue
  • 401 No valid API token or session
  • 403 Not allowed: your role is too low, a token was used where a dashboard session is needed (session_required), or the CSRF header is missing (csrf)
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

# Dashboard session only: an API token gets 403 session_required
curl -sS -X DELETE "https://api.liftpad.app/v1/teams/my-agency/invites/ID"

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

Change a member's role or sites sites null removes the site limit. A team always keeps one owner.

Dashboard session onlyAdmin or OwnerupdateMember

Parameters

NameInTypeDescription
slug requiredpathstringTeam slug
userId requiredpathstringUser id

Request body

application/json · object

FieldTypeDescription
rolestring: owner, admin, developer, reviewer, billing, viewer
sitesarray of string or null

Responses

  • 200 Saved

    application/json · Ok

    FieldTypeDescription
    ok requiredtrue
  • 400 The request is not valid (see error and message)
  • 401 No valid API token or session
  • 403 Not allowed: your role is too low, a token was used where a dashboard session is needed (session_required), or the CSRF header is missing (csrf)
  • 404 Not found, or not visible to you
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

# Dashboard session only: an API token gets 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}

Remove a member (or leave) Their tokens for this team stop working.

Dashboard session onlyAdmin or OwnerremoveMember

Parameters

NameInTypeDescription
slug requiredpathstringTeam slug
userId requiredpathstringUser id (your own to leave)

Responses

  • 200 Removed

    application/json · Ok

    FieldTypeDescription
    ok requiredtrue
  • 400 The request is not valid (see error and message)
  • 401 No valid API token or session
  • 403 Not allowed: your role is too low, a token was used where a dashboard session is needed (session_required), or the CSRF header is missing (csrf)
  • 404 Not found, or not visible to you
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

# Dashboard session only: an API token gets 403 session_required
curl -sS -X DELETE "https://api.liftpad.app/v1/teams/my-agency/members/USER_ID"

Plans, billing and credits

Plans in CAD, a team's billing and credits.

get/plans

List plans Prices in CAD per month, taxes extra. No sign-in needed.

No sign-inlistPlans

Responses

  • 200 Plans

    application/json · array of Plan

Example

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

get/teams/{slug}/billing

A team's plan and billing

Token: read or deployAny team rolegetBilling

Parameters

NameInTypeDescription
slug requiredpathstringTeam slug

Responses

  • 200 Billing

    application/json · object

    FieldTypeDescription
    idstring
    slugstring
    namestring
    rolestring: owner, admin, developer, reviewer, billing, viewerYour role in the team (for a token: what the token may do)
    capsarray of string: view, deploy, sites, domains, members, billing, team
    scopedbooleanYou see only some of the team's sites
    planPlan
    billingStatusstring or null
    billingobject or null
    trialEndsAtinteger or null
    currentPeriodEndinteger or null
    billingEmailstring or null
    usageobject or nullSites, domains, members and storage used
    canManageboolean
    plans requiredarray of object
    portalUrlstring or null
    stripeLinkedboolean
  • 401 No valid API token or session
  • 403 Not allowed: your role is too low, a token was used where a dashboard session is needed (session_required), or the CSRF header is missing (csrf)
  • 404 Not found, or not visible to you
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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

get/teams/{slug}/credits

A team's credits Balance, costs, packs and the last 30 movements. Packs: 1000 for C$10, 5000 for C$45, 12000 for C$99.

Token: read or deployAny team rolegetCredits

Parameters

NameInTypeDescription
slug requiredpathstringTeam slug

Responses

  • 200 Credits

    application/json · Credits

    FieldTypeDescription
    total requiredinteger
    monthlyintegerLeft from this month's plan credits
    boughtinteger
    planMonthlyinteger
    costs requiredmap of integerCredits per action
    packs requiredarray of object
    FieldTypeDescription
    idstring
    creditsinteger
    priceCadnumber
    paymentsbooleanOnline payment is open
    cardobject or null
    autoobject or nullAutomatic top-up settings
    ledgerarray of object
    FieldTypeDescription
    atinteger
    deltainteger
    kindstring
    notestring or null
  • 401 No valid API token or session
  • 404 Not found, or not visible to you
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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

post/teams/{slug}/credits/checkout

Buy a credit pack Owners and billing members. Answers with a Stripe checkout address.

Dashboard session onlyOwner or BillingbuyCredits

Parameters

NameInTypeDescription
slug requiredpathstringTeam slug

Request body

application/json · object

FieldTypeDescription
pack requiredstring: credits_1000, credits_5000, credits_12000
saveCardbooleanKeep the card for automatic top-ups

Responses

  • 201 Checkout opened

    application/json · object

    FieldTypeDescription
    checkoutUrl requiredstring
  • 400 The request is not valid (see error and message)
  • 401 No valid API token or session
  • 403 Not allowed: your role is too low, a token was used where a dashboard session is needed (session_required), or the CSRF header is missing (csrf)
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)
  • 502 An outside service (Cloudflare, the registrar, Stripe) did not answer; try again
  • 503 Not available yet on this Liftpad, or for a moment

Example

# Dashboard session only: an API token gets 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

Automatic top-ups Buys a pack when the balance falls below a line, at most 3 times a month. pack null turns it off.

Dashboard session onlyOwner or BillingsetAutoTopup

Parameters

NameInTypeDescription
slug requiredpathstringTeam slug

Request body

application/json · object

FieldTypeDescription
packstring or null
belowinteger

Responses

  • 200 Saved

    application/json · Ok

    FieldTypeDescription
    ok requiredtrue
  • 400 The request is not valid (see error and message)
  • 401 No valid API token or session
  • 403 Not allowed: your role is too low, a token was used where a dashboard session is needed (session_required), or the CSRF header is missing (csrf)
  • 409 Conflicts with the current state (see error)
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

# Dashboard session only: an API token gets 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

Forget the saved card

Dashboard session onlyOwner or BillingforgetCard

Parameters

NameInTypeDescription
slug requiredpathstringTeam slug

Responses

  • 200 Removed

    application/json · Ok

    FieldTypeDescription
    ok requiredtrue
  • 401 No valid API token or session
  • 403 Not allowed: your role is too low, a token was used where a dashboard session is needed (session_required), or the CSRF header is missing (csrf)
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

# Dashboard session only: an API token gets 403 session_required
curl -sS -X DELETE "https://api.liftpad.app/v1/teams/my-agency/credits/card"

Activity

The audit log.

get/audit

Activity log The last 200 actions in your teams (only your sites when you are limited to some).

Token: read or deployAny team rolelistAudit

Parameters

NameInTypeDescription
teamquerystringOnly this team (slug)

Responses

  • 200 Entries, newest first

    application/json · array of AuditEntry

  • 401 No valid API token or session
  • 404 Not found, or not visible to you
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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

Public

Routes anyone can call, without signing in.

post/abuse

Report a site hosted on Liftpad Anyone can report phishing, malware, scams and other abuse. A person at Liftpad reviews every report. Needs the x-liftpad-csrf header and a JSON body.

No sign-inreportAbuse

Parameters

NameInTypeDescription
x-liftpad-csrf requiredheader"1"Must be 1 (refuses posts from other web pages)

Request body

application/json · object

FieldTypeDescription
url requiredstring (uri)
kindstring: phishing, malware, scam, spam, copyright, illegal, other
detailsstringUp to 2000 characters
emailstringTo get an answer

Responses

  • 201 Received

    application/json · object

    FieldTypeDescription
    ok requiredboolean
    messagestring
  • 400 The request is not valid (see error and message)
  • 403 Not allowed: your role is too low, a token was used where a dashboard session is needed (session_required), or the CSRF header is missing (csrf)
  • 404 Not found, or not visible to you
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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

Ask Liftpad to contact you The contact form of liftpad.app. Needs the x-liftpad-csrf header and a JSON body.

No sign-inrequestContact

Parameters

NameInTypeDescription
x-liftpad-csrf requiredheader"1"Must be 1 (refuses posts from other web pages)

Request body

application/json · object

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

Responses

  • 200 Received

    application/json · Ok

    FieldTypeDescription
    ok requiredtrue
  • 400 The request is not valid (see error and message)
  • 403 Not allowed: your role is too low, a token was used where a dashboard session is needed (session_required), or the CSRF header is missing (csrf)
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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

The Model Context Protocol server for Claude and other agents.

post/mcp

MCP server for AI agents Model Context Protocol over streamable HTTP, stateless JSON-RPC 2.0 (initialize, ping, tools/list, tools/call; a batch answers its first 20 messages, and messages after the 20th are ignored with no answer). API tokens only, never a cookie. Every tool calls this API with your token, so the same roles and limits apply: a read token can use list_sites, get_site, list_deploys, launch_checks, form_submissions, site_analytics and search_domains; the others need a deploy token. Tools: 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.

Token: read or deployAny team rolemcp

Request body

application/json · object or array of object

Responses

  • 200 JSON-RPC answer (202 with no body for notifications)

    application/json · object or array of any

  • 400 The request is not valid (see error and message)
  • 401 No valid API token or session
  • 429 Too many requests (error: rate_limited) or a daily limit (error: deploy_limit)

Example

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":{}}}'

This reference

The OpenAPI document itself.

get/openapi.json

This OpenAPI document Also at https://liftpad.app/openapi.json.

No sign-ingetOpenApi

Responses

  • 200 OpenAPI 3.1

    application/json · object

Example

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

Webhooks

What Liftpad sends to your address. How to check the signature.

postdeploy.ready

A deploy finished and its preview works

application/json · object

FieldTypeDescription
event required"deploy.ready"
delivery requiredstringSame as x-liftpad-delivery
at requiredstring (date-time)ISO 8601 time
site requiredobject
FieldTypeDescription
name requiredstring
url requiredstring
deploy requiredobject
FieldTypeDescription
id requiredstring
titlestring or null
previewUrl requiredstring
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

A deploy went live (also after a rollback)

application/json · object

FieldTypeDescription
event required"deploy.published"
delivery requiredstringSame as x-liftpad-delivery
at requiredstring (date-time)ISO 8601 time
site requiredobject
FieldTypeDescription
name requiredstring
url requiredstring
deploy requiredobject
FieldTypeDescription
id requiredstring
titlestring or 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

A visitor sent a form (spam is not sent)

application/json · object

FieldTypeDescription
event required"form.submission"
delivery requiredstringSame as x-liftpad-delivery
at requiredstring (date-time)ISO 8601 time
site requiredobject
FieldTypeDescription
name requiredstring
url requiredstring
submission requiredobject
FieldTypeDescription
id requiredstring
form requiredstring
data requiredmap of string
filesarray of stringFile names (download them with the 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

Sent by the test button (testHook)

application/json · object

FieldTypeDescription
event required"test"
delivery requiredstringSame as x-liftpad-delivery
at requiredstring (date-time)ISO 8601 time
site requiredobject
FieldTypeDescription
name requiredstring
url requiredstring
{
  "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"
  }
}

Schemas

Error

Every error answer has this shape. Some add fields, such as missing (finalize) or proof (domains).

FieldTypeDescription
error requiredstringA short, stable code to branch on (for example not_found, plan_limit, session_required)
messagestringA sentence for people, in English

Ok

FieldTypeDescription
ok requiredtrue

Site

A site

FieldTypeDescription
id requiredstringSite id
name requiredstringSite name: 3 to 40 characters, a-z, 0-9 and single hyphens
team_idstring or nullId of the team that owns the site
primary_domainstring or nullThe custom domain visitors are sent to, or null for the liftpad.ca address
live_deploy_idstring or nullThe deploy visitors see now, or null when nothing is published
created_atintegerWhen the site was created (milliseconds since 1970, UTC)
updated_atintegerLast change (milliseconds since 1970, UTC)
suspended_atinteger or nullWhen Liftpad suspended the site (milliseconds since 1970, UTC), or null
functionsarray of string or nullNames of the site's functions, or null
accessstring or null: all, previews, nullVisitor password scope (all or previews), or null when there is none
url requiredstring (uri)The site's address on liftpad.ca

SiteDetail

A site with its live deploy and domains

FieldTypeDescription
id requiredstringSite id
name requiredstringSite name: 3 to 40 characters, a-z, 0-9 and single hyphens
team_idstring or nullId of the team that owns the site
primary_domainstring or nullThe custom domain visitors are sent to, or null for the liftpad.ca address
live_deploy_idstring or nullThe deploy visitors see now, or null when nothing is published
created_atintegerWhen the site was created (milliseconds since 1970, UTC)
updated_atintegerLast change (milliseconds since 1970, UTC)
suspended_atinteger or nullWhen Liftpad suspended the site (milliseconds since 1970, UTC), or null
functionsarray of string or nullNames of the site's functions, or null
accessstring or null: all, previews, nullVisitor password scope (all or previews), or null when there is none
url requiredstring (uri)The site's address on liftpad.ca
liveLiveRecord or nullThe live pointer, or null
domains requiredarray of objectCustom domains connected to the site
FieldTypeDescription
hostnamestring
created_atinteger

LiveRecord

FieldTypeDescription
deployId requiredstringLive deploy id
generation requiredintegerGoes up by one at every publish
publishedAt requiredintegerWhen it was published (milliseconds since 1970, UTC)

Overview

FieldTypeDescription
platform requiredstringThe dashboard domain
sites requiredarray of object
FieldTypeDescription
idstringSite id
name requiredstringSite name: 3 to 40 characters, a-z, 0-9 and single hyphens
team_idstring or nullId of the team that owns the site
primary_domainstring or nullThe custom domain visitors are sent to, or null for the liftpad.ca address
live_deploy_idstring or nullThe deploy visitors see now, or null when nothing is published
created_atintegerWhen the site was created (milliseconds since 1970, UTC)
updated_atintegerLast change (milliseconds since 1970, UTC)
suspended_atinteger or nullWhen Liftpad suspended the site (milliseconds since 1970, UTC), or null
functionsarray of string or nullNames of the site's functions, or null
accessstring or null: all, previews, nullVisitor password scope (all or previews), or null when there is none
url requiredstring (uri)The site's address on liftpad.ca
team_slugstring or null
team_namestring or null
health_okinteger or null1 when the last health check passed, 0 when it failed, null before the first one
health_detailobject or nullDetails of the last health check
health_atinteger or nullLast health check (milliseconds since 1970, UTC), or null
deploy_countinteger
live_titlestring or nullMessage of the live deploy
live_published_atinteger or nullWhen the live deploy was published (milliseconds since 1970, UTC), or null
live_filesinteger or nullFiles in the live deploy
domain_countinteger
platformUrlstringThe liftpad.ca address (url is the primary domain when there is one)

Deploy

FieldTypeDescription
id requiredstringDeploy id
site_idstring
site_namestring
team_idstring or null
state requiredstring: uploading, ready, expireduploading until finalized, then ready
titlestring or nullThe deploy message
file_countinteger
total_sizeintegerBytes
created_atintegerStarted (milliseconds since 1970, UTC)
ready_atinteger or nullFinalized (milliseconds since 1970, UTC), or null
published_atinteger or nullLast published (milliseconds since 1970, UTC), or null
held requiredbooleanTrue while a Liftpad safety review holds it (it cannot be published)
required requiredarray of stringFiles still to upload (while uploading)
summaryobject or nullSet once ready

DeployListItem

FieldTypeDescription
id requiredstring
state requiredstring: uploading, ready, expired
titlestring or null
file_countinteger
total_sizeinteger
created_atinteger
ready_atinteger or null
published_atinteger or null
scoreinteger or nullLaunch check score from 0 to 100
heldinteger1 while held for a safety review
live requiredbooleanTrue for the deploy visitors see now
previewUrl requiredstring (uri)Preview address of this exact deploy

DeploySummary

What the deploy contains and how its launch checks went

FieldTypeDescription
filesintegerFiles in the deploy
redirectsintegerRedirect rules read from _redirects and netlify.toml
headersintegerHeader rules
formsarray of stringForms found in the pages
checksobjectLaunch check summary
FieldTypeDescription
scoreinteger
countsobjectNumber of issues per level
pagesinteger
warningsarray of stringProblems that did not stop the deploy

CheckReport

FieldTypeDescription
vinteger
score requiredinteger0 to 100
pages requiredintegerHTML pages read
counts requiredobjectNumber of issues per level
FieldTypeDescription
errorinteger
warninginteger
infointeger
issues requiredarray of object
FieldTypeDescription
level requiredstring: error, warning, info
code requiredstringStable code, for example broken_link or missing_alt
page requiredstring or nullThe page, or null for the whole site
detail requiredstring
refstringThe file the issue is about, when there is one
truncatedbooleanTrue when the list was cut short

Manifest

FieldTypeDescription
v requiredinteger
id requiredstringDeploy id
siteIdstring
createdAtinteger
files requiredmap of tuplePath to [sha256, size, content type]
redirects requiredarray of objectRedirect rules in the order they apply
headers requiredarray of objectHeader rules
formsmap of objectForms found in the pages

Domain

FieldTypeDescription
hostname requiredstring
status requiredstringCloudflare hostname status (active when ready)
sslStatus requiredstringCertificate status (active when ready)
dnsOkbooleanPublic DNS points at Liftpad
records requiredarray of objectDNS records to add at the domain's DNS host
FieldTypeDescription
typestring
namestring
valuestring
whystring
createdAtinteger
mainWhenReadybooleanBecomes the primary domain once ready
verifiedboolean
managedbooleanBought on Liftpad
readybooleanDNS, hostname and certificate are all active
primaryboolean

DomainOrder

FieldTypeDescription
id requiredstring
domain requiredstring
status requiredstring: awaiting_payment, requested, registering, registered, failed, canceled
priceCadnumberFirst year in CAD, taxes extra (0 when included in the plan)
includedboolean
errorstring or null
createdAtinteger
registeredAtinteger or null
expiresAtinteger or null

DomainSearch

FieldTypeDescription
query requiredstring
exactstring or nullThe full name asked for, when the query was one
currency"CAD"
results requiredarray of object
FieldTypeDescription
name requiredstring
available requiredboolean
priceCadnumberFirst year, CAD, taxes extra
renewCadnumberEach later year, CAD
includablebooleanCovered by the Business plan's included domain
reasonstringWhy a name cannot be had

Snippet

FieldTypeDescription
name requiredstringUp to 60 characters, unique in the list
where requiredstring: head, bodyEnd of <head> or end of <body>
html requiredstringUp to 20 000 characters

SplitTest

FieldTypeDescription
idstring
deployId requiredstringThe other deploy some visitors see
percent requiredinteger1 to 99
startedAtinteger

Hook

FieldTypeDescription
id requiredstring
kind requiredstring: webhook, slack
url requiredstringWhere events are sent (Slack addresses are shown shortened)
events requiredarray of string: deploy.ready, deploy.published, form.submission
createdAtinteger
lastStatusinteger or nullHTTP status of the last delivery (0 when it could not connect)
lastAtinteger or null
pausedbooleanTrue after 50 failed deliveries in a row

Form

FieldTypeDescription
name requiredstring
live requiredbooleanFound in the live deploy
fieldsarray of string
honeypotboolean
filesbooleanHas file inputs
actionstring or nullSuccess page
submissions requiredinteger
spam requiredinteger
lastinteger or nullNewest submission

Submission

FieldTypeDescription
id requiredstring
form requiredstring
spamboolean
previewbooleanSent from a preview address
deployIdstring or null
data requiredmap of stringField name to value
filesarray of object
FieldTypeDescription
iintegerIndex for the download route
fieldstring
namestring
typestring
sizeinteger
referrerstring or null
createdAt requiredinteger

Functions

The site's deployed functions

FieldTypeDescription
routesarray of object
edgearray of object
schedulesarray of object
deployedAtinteger
sizeinteger

Analytics

Page views of the live site, without cookies or stored addresses

FieldTypeDescription
enabled requiredbooleanFalse when analytics are not set up on this Liftpad
daysinteger
viewsinteger
visitorsinteger
dailyarray of object
FieldTypeDescription
daystring
viewsinteger
visitorsinteger
pagesarray of object
FieldTypeDescription
pathstring
viewsinteger

AiJob

FieldTypeDescription
id requiredstring
kind requiredstring: build, edit
status requiredstring: held, queued, running, done, failed
stepstring or null
deployIdstring or nullThe draft deploy it made
errorstring or null
creditsinteger
createdAtinteger

Me

FieldTypeDescription
kind requiredstring: session, tokenHow the caller signed in
user requiredobject
FieldTypeDescription
idstring
email requiredstring
namestring or null
totp_enabledinteger
created_atinteger
last_login_atinteger or null
recovery_leftinteger
platformAdminboolean
teams requiredarray of Team
rolesarray of object
FieldTypeDescription
idstring
labelstring

Team

FieldTypeDescription
id requiredstring
slug requiredstring
name requiredstring
role requiredstring: owner, admin, developer, reviewer, billing, viewerYour role in the team (for a token: what the token may do)
capsarray of string: view, deploy, sites, domains, members, billing, team
scopedbooleanYou see only some of the team's sites
plan requiredPlan
billingStatusstring or null
billingobject or null
trialEndsAtinteger or null
currentPeriodEndinteger or null
billingEmailstring or null
usageobject or nullSites, domains, members and storage used

Plan

FieldTypeDescription
id requiredstring
name requiredstring
priceCad requirednumberMonthly, CAD, taxes extra
sites requiredinteger
domainsPerSiteinteger
deploysPerDayinteger
maxDeployBytesinteger
storageBytesinteger
formSubmissionsintegerPer calendar month
aiSuggestionsintegerPer calendar month
imageTransformsinteger
includedDomainsintegerDomain registrations included per year
monthlyCreditsinteger
blurbstring

Token

FieldTypeDescription
id requiredstring
name requiredstring
access requiredstring: read, deploy
teamstring or nullSlug of the one team it is limited to, or null
created_atinteger
last_used_atinteger or nullUpdated at most once an hour
expires_atinteger or nullNull when it never expires

Credits

FieldTypeDescription
total requiredinteger
monthlyintegerLeft from this month's plan credits
boughtinteger
planMonthlyinteger
costs requiredmap of integerCredits per action
packs requiredarray of object
FieldTypeDescription
idstring
creditsinteger
priceCadnumber
paymentsbooleanOnline payment is open
cardobject or null
autoobject or nullAutomatic top-up settings
ledgerarray of object
FieldTypeDescription
atinteger
deltainteger
kindstring
notestring or null

AuditEntry

FieldTypeDescription
id requiredinteger
at requiredinteger
actor requiredstringEmail of who did it (or a system name)
action requiredstring
targetstring or null
detailstring or nullJSON text
team_idstring or null