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.
| HTTP | Meaning |
|---|---|
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) |
411 | Content-Length header required |
413 | Too large for the plan or the limits |
422 | The AI found no safe answer this time |
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 |
Operations
- Sites
- Deploys
- Domains
- Forms
- Site settings
- Analytics
- AI website builder
- Account and tokens
- Teams
- Plans, billing and credits
- Activity
- Public
- MCP
- This reference
- Webhooks
- Schemas
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
| Name | In | Type | Description |
|---|---|---|---|
team | query | string | Only 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
| Field | Type | Description |
|---|---|---|
name required | string | 3 to 40 characters: a-z, 0-9 and single hyphens |
team | string | Team slug |
Responses
- 201 Created
application/json· objectField Type Description idrequiredstring namerequiredstring teamrequiredstring urlrequiredstring - 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
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string | Site name |
Responses
- 200 The site
application/json· SiteDetailField Type Description idrequiredstring Site id namerequiredstring Site name: 3 to 40 characters, a-z, 0-9 and single hyphens team_idstring or null Id of the team that owns the site primary_domainstring or null The custom domain visitors are sent to, or null for the liftpad.ca address live_deploy_idstring or null The deploy visitors see now, or null when nothing is published created_atinteger When the site was created (milliseconds since 1970, UTC) updated_atinteger Last change (milliseconds since 1970, UTC) suspended_atinteger or null When Liftpad suspended the site (milliseconds since 1970, UTC), or null functionsarray of string or null Names of the site's functions, or null accessstring or null: all,previews,nullVisitor password scope (all or previews), or null when there is none urlrequiredstring (uri) The site's address on liftpad.ca liveLiveRecord or null The live pointer, or null domainsrequiredarray of object Custom domains connected to the site Field Type Description 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
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string | Site name |
Request body
application/json · object
| Field | Type | Description |
|---|---|---|
confirm required | string | The site's name |
Responses
- 200 Deleted
application/json· OkField Type Description okrequiredtrue - 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
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string | Site name |
Request body
application/json · object
| Field | Type | Description |
|---|---|---|
team required | string | Slug of the receiving team |
Responses
- 200 Moved
application/json· objectField Type Description okrequiredboolean siterequiredstring teamrequiredstring - 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
| Name | In | Type | Description |
|---|---|---|---|
team | query | string | Only this team (slug) |
Responses
- 200 Overview
application/json· OverviewField Type Description platformrequiredstring The dashboard domain sitesrequiredarray of object Field Type Description idstring Site id namerequiredstring Site name: 3 to 40 characters, a-z, 0-9 and single hyphens team_idstring or null Id of the team that owns the site primary_domainstring or null The custom domain visitors are sent to, or null for the liftpad.ca address live_deploy_idstring or null The deploy visitors see now, or null when nothing is published created_atinteger When the site was created (milliseconds since 1970, UTC) updated_atinteger Last change (milliseconds since 1970, UTC) suspended_atinteger or null When Liftpad suspended the site (milliseconds since 1970, UTC), or null functionsarray of string or null Names of the site's functions, or null accessstring or null: all,previews,nullVisitor password scope (all or previews), or null when there is none urlrequiredstring (uri) The site's address on liftpad.ca team_slugstring or null team_namestring or null health_okinteger or null 1 when the last health check passed, 0 when it failed, null before the first one health_detailobject or null Details of the last health check health_atinteger or null Last health check (milliseconds since 1970, UTC), or null deploy_countinteger live_titlestring or null Message of the live deploy live_published_atinteger or null When the live deploy was published (milliseconds since 1970, UTC), or null live_filesinteger or null Files in the live deploy domain_countinteger platformUrlstring The 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
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string | Site name |
deploy | query | string | A deploy id (default: the live deploy) |
Responses
- 200 The manifest
application/json· ManifestField Type Description vrequiredinteger idrequiredstring Deploy id siteIdstring createdAtinteger filesrequiredmap of tuple Path to [sha256, size, content type] redirectsrequiredarray of object Redirect rules in the order they apply headersrequiredarray of object Header rules formsmap of object Forms 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
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string | Site name |
hash required | path | string | SHA-256 of the file, lowercase hex |
deploy | query | string | A 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
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string | Site 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
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string | Site name |
Request body
application/json · object
| Field | Type | Description | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
files required | map of string | Path (starting with /) to SHA-256, at most 20 000 files | |||||||||
title | string | Deploy message | |||||||||
config | string | Text of a netlify.toml (up to 1 MB) | |||||||||
rules | object | Rules from a site export (restore)
|
Responses
- 201 Deploy started
application/json· objectField Type Description idrequiredstring requiredrequiredarray of string Hashes to upload previewUrlrequiredstring - 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
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string | Site 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
| Name | In | Type | Description |
|---|---|---|---|
id required | path | string | Deploy id |
hash required | path | string | SHA-256 of the file, lowercase hex |
Request body
application/octet-stream · string (binary)
Responses
- 200 Stored
application/json· objectField Type Description okrequiredboolean hashrequiredstring sizerequiredinteger - 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
| Name | In | Type | Description |
|---|---|---|---|
id required | path | string | Deploy id |
Responses
- 200 Ready
application/json· objectField Type Description idrequiredstring staterequired"ready"previewUrlstring summaryDeploySummary heldboolean Held 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
| Name | In | Type | Description |
|---|---|---|---|
id required | path | string | Deploy id |
Responses
- 200 The deploy
application/json· DeployField Type Description idrequiredstring Deploy id site_idstring site_namestring team_idstring or null staterequiredstring: uploading,ready,expireduploading until finalized, then ready titlestring or null The deploy message file_countinteger total_sizeinteger Bytes created_atinteger Started (milliseconds since 1970, UTC) ready_atinteger or null Finalized (milliseconds since 1970, UTC), or null published_atinteger or null Last published (milliseconds since 1970, UTC), or null heldrequiredboolean True while a Liftpad safety review holds it (it cannot be published) requiredrequiredarray of string Files still to upload (while uploading) summaryobject or null Set 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
| Name | In | Type | Description |
|---|---|---|---|
id required | path | string | Deploy id |
Responses
- 200 The report
application/json· CheckReportField Type Description vinteger scorerequiredinteger 0 to 100 pagesrequiredinteger HTML pages read countsrequiredobject Number of issues per level Field Type Description errorinteger warninginteger infointeger issuesrequiredarray of object Field Type Description levelrequiredstring: error,warning,infocoderequiredstring Stable code, for example broken_link or missing_alt pagerequiredstring or null The page, or null for the whole site detailrequiredstring refstring The file the issue is about, when there is one truncatedboolean True 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
| Name | In | Type | Description |
|---|---|---|---|
id required | path | string | Deploy id |
Request body
application/json · object
| Field | Type | Description |
|---|---|---|
page required | string | Path of an HTML page in the deploy |
Responses
- 200 Suggestion
application/json· objectField Type Description titlerequiredstring descriptionrequiredstring cachedrequiredboolean leftinteger Suggestions 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
| Name | In | Type | Description |
|---|---|---|---|
id required | path | string | Deploy id |
Request body
application/json · object
| Field | Type | Description |
|---|---|---|
page required | string | The page that shows the image |
src required | string | The image address as written in the page |
Responses
- 200 Alt text
application/json· objectField Type Description altrequiredstring langstring srcstring cachedrequiredboolean - 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
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string | Site name |
Request body
application/json · object
| Field | Type | Description |
|---|---|---|
deployId required | string |
Responses
- 200 Live
application/json· objectField Type Description siterequiredstring deployIdrequiredstring generationrequiredinteger urlrequiredstring The 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
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string | Site name |
Responses
- 200 Offline
application/json· OkField Type Description okrequiredtrue - 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
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string | Site name |
Request body
application/json · object
| Field | Type | Description |
|---|---|---|
hostname required | string | |
primary | boolean | Make it the main address once ready |
Responses
- 201 Added
application/json· objectField Type Description hostnamerequiredstring sitestring primaryboolean mainWhenReadyboolean statusrequiredstring sslStatusstring recordsrequiredarray 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
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string | Site 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
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string | Site name |
hostname required | path | string | The domain |
Responses
- 200 Removed
application/json· OkField Type Description okrequiredtrue - 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
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string | Site name |
Request body
application/json · object
| Field | Type | Description |
|---|---|---|
hostname required | string or null |
Responses
- 200 Set
application/json· objectField Type Description okrequiredboolean primaryrequiredstring 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
| Name | In | Type | Description |
|---|---|---|---|
q | query | string | A name or words, up to 100 characters |
Responses
- 200 Results
application/json· DomainSearchField Type Description queryrequiredstring exactstring or null The full name asked for, when the query was one currency"CAD"resultsrequiredarray of object Field Type Description namerequiredstring availablerequiredboolean priceCadnumber First year, CAD, taxes extra renewCadnumber Each later year, CAD includableboolean Covered by the Business plan's included domain reasonstring Why 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
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string | Site name |
Responses
- 200 Orders
application/json· objectField Type Description ordersrequiredarray of DomainOrder includedLeftinteger Included domains left this year includedPlanboolean readyboolean Domain sales are open paymentsboolean Online 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
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string | Site name |
Request body
application/json · object
| Field | Type | Description |
|---|---|---|
domain required | string |
Responses
- 201 Ordered
application/json· objectField Type Description orderrequiredDomainOrder checkoutUrlstring Stripe 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
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string | Site name |
Responses
- 200 Forms
application/json· objectField Type Description allowanceinteger or null Submissions per month on the plan formsrequiredarray 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
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string | Site name |
form | query | string | Only this form |
spam | query | string: 0, 1 | 1 for the spam folder |
before | query | integer | Only submissions older than this time (ms) |
limit | query | integer | 1 to 200, default 50 |
Responses
- 200 A page of submissions
application/json· objectField Type Description submissionsrequiredarray of Submission nextrequiredinteger or null Value 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
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string | Site name |
form required | path | string | Form 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
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string | Site name |
id required | path | string | Submission id |
i required | path | integer | File 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
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string | Site name |
id required | path | string | Submission id |
Request body
application/json · object
| Field | Type | Description |
|---|---|---|
spam required | boolean |
Responses
- 200 Saved
application/json· OkField Type Description okrequiredtrue - 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
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string | Site name |
id required | path | string | Submission id |
Responses
- 200 Deleted
application/json· OkField Type Description okrequiredtrue - 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
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string | Site name |
Request body
application/json · object
| Field | Type | Description | |||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
submissions required | array of object |
|
Responses
- 200 Imported
application/json· objectField Type Description okrequiredboolean importedrequiredinteger skippedrequiredinteger - 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
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string | Site 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
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string | Site name |
Request body
application/json · object
| Field | Type | Description |
|---|---|---|
snippets required | array 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
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string | Site 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
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string | Site name |
Request body
application/json · object
| Field | Type | Description |
|---|---|---|
deployId required | string or null | |
percent | integer |
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
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string | Site name |
Responses
- 200 Status
application/json· objectField Type Description enabledrequiredboolean scoperequiredstring or null: all,previews,nullupdatedAtinteger 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
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string | Site name |
Request body
application/json · object
| Field | Type | Description |
|---|---|---|
password required | string or null | 8 to 200 characters, or null |
scope | string: all, previews |
Responses
- 200 Saved
application/json· objectField Type Description okrequiredboolean enabledrequiredboolean 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
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string | Site 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
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string | Site name |
Request body
application/json · object
| Field | Type | Description |
|---|---|---|
kind required | string: webhook, slack | |
url required | string (uri) | |
events required | array of string: deploy.ready, deploy.published, form.submission |
Responses
- 201 Added
application/json· objectField Type Description idrequiredstring kindrequiredstring: webhook,slackurlrequiredstring Where events are sent (Slack addresses are shown shortened) eventsrequiredarray of string: deploy.ready,deploy.published,form.submissioncreatedAtinteger lastStatusinteger or null HTTP status of the last delivery (0 when it could not connect) lastAtinteger or null pausedboolean True after 50 failed deliveries in a row secretstring Signing 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
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string | Site name |
id required | path | string | Notification id |
Responses
- 200 How the delivery went
application/json· objectField Type Description statusrequiredinteger HTTP status of the receiver (0 when it could not connect) okrequiredboolean - 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
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string | Site name |
id required | path | string | Notification id |
Responses
- 200 Removed
application/json· OkField Type Description okrequiredtrue - 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
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string | Site name |
days | query | integer: 7, 30, 90 | 7, 30 or 90 (default 7) |
Responses
- 200 Statistics
application/json· AnalyticsField Type Description enabledrequiredboolean False when analytics are not set up on this Liftpad daysinteger viewsinteger visitorsinteger dailyarray of object Field Type Description daystring viewsinteger visitorsinteger pagesarray of object Field Type Description 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
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string | Site name |
Request body
application/json · object
| Field | Type | Description |
|---|---|---|
name required | string | Business name |
about required | string | What it does, at least 20 characters |
services | string | |
area | string | |
phone | string | |
email | string | |
address | string | |
hours | string | |
langs | array of string: en, fr | |
style | string: warm, modern, elegant, bold, natural |
Responses
- 202 Queued
application/json· objectField Type Description jobrequiredobject Field Type Description 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
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string | Site name |
Request body
application/json · object
| Field | Type | Description |
|---|---|---|
instruction required | string | 5 to 1000 characters |
newImages | boolean | Draw two new pictures |
Responses
- 202 Queued
application/json· objectField Type Description jobrequiredobject Field Type Description 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
| Name | In | Type | Description |
|---|---|---|---|
name required | path | string | Site name |
Responses
- 200 Jobs
application/json· objectField Type Description aiSiterequiredboolean Built with the AI builder jobsrequiredarray of AiJob costsrequiredmap of integer creditsobject or null Shown 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· MeField Type Description kindrequiredstring: session,tokenHow the caller signed in userrequiredobject Field Type Description idstring emailrequiredstring namestring or null totp_enabledinteger created_atinteger last_login_atinteger or null recovery_leftinteger platformAdminboolean teamsrequiredarray of Team rolesarray of object Field Type Description 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
| Field | Type | Description |
|---|---|---|
name | string | Up to 80 characters |
Responses
- 200 Saved
application/json· OkField Type Description okrequiredtrue - 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· OkField Type Description okrequiredtrue - 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
| Field | Type | Description |
|---|---|---|
name | string | Up to 60 characters |
access | string: deploy, read | |
team | string | Team slug |
days | integer | Days until it expires; leave out for no expiry |
Responses
- 201 Created
application/json· objectField Type Description idrequiredstring tokenrequiredstring lp_... shown once expiresAtrequiredinteger 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
| Name | In | Type | Description |
|---|---|---|---|
id required | path | string | Token id (tok_...) |
Responses
- 200 Revoked
application/json· OkField Type Description okrequiredtrue - 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
| Name | In | Type | Description |
|---|---|---|---|
slug required | path | string | Team slug |
Responses
- 200 The team
application/json· objectField Type Description idstring slugrequiredstring 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,teamscopedboolean You 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 null Sites, domains, members and storage used membersrequiredarray 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
| Name | In | Type | Description |
|---|---|---|---|
slug required | path | string | Team slug |
Request body
application/json · object
| Field | Type | Description |
|---|---|---|
name | string | |
billingEmail | string |
Responses
- 200 Saved
application/json· OkField Type Description okrequiredtrue - 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
| Name | In | Type | Description |
|---|---|---|---|
slug required | path | string | Team slug |
Request body
application/json · object
| Field | Type | Description |
|---|---|---|
email required | string | |
role required | string: owner, admin, developer, reviewer, billing, viewer | |
sites | array of string | Site 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
| Name | In | Type | Description |
|---|---|---|---|
slug required | path | string | Team slug |
id required | path | string | Invite id |
Responses
- 200 Canceled
application/json· OkField Type Description okrequiredtrue - 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
| Name | In | Type | Description |
|---|---|---|---|
slug required | path | string | Team slug |
userId required | path | string | User id |
Request body
application/json · object
| Field | Type | Description |
|---|---|---|
role | string: owner, admin, developer, reviewer, billing, viewer | |
sites | array of string or null |
Responses
- 200 Saved
application/json· OkField Type Description okrequiredtrue - 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
| Name | In | Type | Description |
|---|---|---|---|
slug required | path | string | Team slug |
userId required | path | string | User id (your own to leave) |
Responses
- 200 Removed
application/json· OkField Type Description okrequiredtrue - 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
| Name | In | Type | Description |
|---|---|---|---|
slug required | path | string | Team slug |
Responses
- 200 Billing
application/json· objectField Type Description 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,teamscopedboolean You 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 null Sites, domains, members and storage used canManageboolean plansrequiredarray 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
| Name | In | Type | Description |
|---|---|---|---|
slug required | path | string | Team slug |
Responses
- 200 Credits
application/json· CreditsField Type Description totalrequiredinteger monthlyinteger Left from this month's plan credits boughtinteger planMonthlyinteger costsrequiredmap of integer Credits per action packsrequiredarray of object Field Type Description idstring creditsinteger priceCadnumber paymentsboolean Online payment is open cardobject or null autoobject or null Automatic top-up settings ledgerarray of object Field Type Description 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
| Name | In | Type | Description |
|---|---|---|---|
slug required | path | string | Team slug |
Request body
application/json · object
| Field | Type | Description |
|---|---|---|
pack required | string: credits_1000, credits_5000, credits_12000 | |
saveCard | boolean | Keep the card for automatic top-ups |
Responses
- 201 Checkout opened
application/json· objectField Type Description checkoutUrlrequiredstring - 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
| Name | In | Type | Description |
|---|---|---|---|
slug required | path | string | Team slug |
Request body
application/json · object
| Field | Type | Description |
|---|---|---|
pack | string or null | |
below | integer |
Responses
- 200 Saved
application/json· OkField Type Description okrequiredtrue - 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
| Name | In | Type | Description |
|---|---|---|---|
slug required | path | string | Team slug |
Responses
- 200 Removed
application/json· OkField Type Description okrequiredtrue - 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
| Name | In | Type | Description |
|---|---|---|---|
team | query | string | Only 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
| Name | In | Type | Description |
|---|---|---|---|
x-liftpad-csrf required | header | "1" | Must be 1 (refuses posts from other web pages) |
Request body
application/json · object
| Field | Type | Description |
|---|---|---|
url required | string (uri) | |
kind | string: phishing, malware, scam, spam, copyright, illegal, other | |
details | string | Up to 2000 characters |
email | string | To get an answer |
Responses
- 201 Received
application/json· objectField Type Description okrequiredboolean 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
| Name | In | Type | Description |
|---|---|---|---|
x-liftpad-csrf required | header | "1" | Must be 1 (refuses posts from other web pages) |
Request body
application/json · object
| Field | Type | Description |
|---|---|---|
name required | string | |
email required | string | |
company | string | |
sites | string: 1-3, 4-10, 11-50, 51-150, 150+ | |
message | string | |
lang | string: en, fr |
Responses
- 200 Received
application/json· OkField Type Description okrequiredtrue - 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
| Field | Type | Description | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
event required | "deploy.ready" | ||||||||||||||||
delivery required | string | Same as x-liftpad-delivery | |||||||||||||||
at required | string (date-time) | ISO 8601 time | |||||||||||||||
site required | object |
| |||||||||||||||
deploy required | object |
|
{
"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
| Field | Type | Description | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
event required | "deploy.published" | ||||||||||
delivery required | string | Same as x-liftpad-delivery | |||||||||
at required | string (date-time) | ISO 8601 time | |||||||||
site required | object |
| |||||||||
deploy required | object |
|
{
"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
| Field | Type | Description | |||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
event required | "form.submission" | ||||||||||||||||||||||
delivery required | string | Same as x-liftpad-delivery | |||||||||||||||||||||
at required | string (date-time) | ISO 8601 time | |||||||||||||||||||||
site required | object |
| |||||||||||||||||||||
submission required | object |
|
{
"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
| Field | Type | Description | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
event required | "test" | ||||||||||
delivery required | string | Same as x-liftpad-delivery | |||||||||
at required | string (date-time) | ISO 8601 time | |||||||||
site required | object |
|
{
"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).
| Field | Type | Description |
|---|---|---|
error required | string | A short, stable code to branch on (for example not_found, plan_limit, session_required) |
message | string | A sentence for people, in English |
Ok
| Field | Type | Description |
|---|---|---|
ok required | true |
Site
A site
| Field | Type | Description |
|---|---|---|
id required | string | Site id |
name required | string | Site name: 3 to 40 characters, a-z, 0-9 and single hyphens |
team_id | string or null | Id of the team that owns the site |
primary_domain | string or null | The custom domain visitors are sent to, or null for the liftpad.ca address |
live_deploy_id | string or null | The deploy visitors see now, or null when nothing is published |
created_at | integer | When the site was created (milliseconds since 1970, UTC) |
updated_at | integer | Last change (milliseconds since 1970, UTC) |
suspended_at | integer or null | When Liftpad suspended the site (milliseconds since 1970, UTC), or null |
functions | array of string or null | Names of the site's functions, or null |
access | string or null: all, previews, null | Visitor password scope (all or previews), or null when there is none |
url required | string (uri) | The site's address on liftpad.ca |
SiteDetail
A site with its live deploy and domains
| Field | Type | Description | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
id required | string | Site id | |||||||||
name required | string | Site name: 3 to 40 characters, a-z, 0-9 and single hyphens | |||||||||
team_id | string or null | Id of the team that owns the site | |||||||||
primary_domain | string or null | The custom domain visitors are sent to, or null for the liftpad.ca address | |||||||||
live_deploy_id | string or null | The deploy visitors see now, or null when nothing is published | |||||||||
created_at | integer | When the site was created (milliseconds since 1970, UTC) | |||||||||
updated_at | integer | Last change (milliseconds since 1970, UTC) | |||||||||
suspended_at | integer or null | When Liftpad suspended the site (milliseconds since 1970, UTC), or null | |||||||||
functions | array of string or null | Names of the site's functions, or null | |||||||||
access | string or null: all, previews, null | Visitor password scope (all or previews), or null when there is none | |||||||||
url required | string (uri) | The site's address on liftpad.ca | |||||||||
live | LiveRecord or null | The live pointer, or null | |||||||||
domains required | array of object | Custom domains connected to the site
|
LiveRecord
| Field | Type | Description |
|---|---|---|
deployId required | string | Live deploy id |
generation required | integer | Goes up by one at every publish |
publishedAt required | integer | When it was published (milliseconds since 1970, UTC) |
Overview
| Field | Type | Description | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
platform required | string | The dashboard domain | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
sites required | array of object |
|
Deploy
| Field | Type | Description |
|---|---|---|
id required | string | Deploy id |
site_id | string | |
site_name | string | |
team_id | string or null | |
state required | string: uploading, ready, expired | uploading until finalized, then ready |
title | string or null | The deploy message |
file_count | integer | |
total_size | integer | Bytes |
created_at | integer | Started (milliseconds since 1970, UTC) |
ready_at | integer or null | Finalized (milliseconds since 1970, UTC), or null |
published_at | integer or null | Last published (milliseconds since 1970, UTC), or null |
held required | boolean | True while a Liftpad safety review holds it (it cannot be published) |
required required | array of string | Files still to upload (while uploading) |
summary | object or null | Set once ready |
DeployListItem
| Field | Type | Description |
|---|---|---|
id required | string | |
state required | string: uploading, ready, expired | |
title | string or null | |
file_count | integer | |
total_size | integer | |
created_at | integer | |
ready_at | integer or null | |
published_at | integer or null | |
score | integer or null | Launch check score from 0 to 100 |
held | integer | 1 while held for a safety review |
live required | boolean | True for the deploy visitors see now |
previewUrl required | string (uri) | Preview address of this exact deploy |
DeploySummary
What the deploy contains and how its launch checks went
| Field | Type | Description | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
files | integer | Files in the deploy | ||||||||||||
redirects | integer | Redirect rules read from _redirects and netlify.toml | ||||||||||||
headers | integer | Header rules | ||||||||||||
forms | array of string | Forms found in the pages | ||||||||||||
checks | object | Launch check summary
| ||||||||||||
warnings | array of string | Problems that did not stop the deploy |
CheckReport
| Field | Type | Description | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
v | integer | |||||||||||||||||||
score required | integer | 0 to 100 | ||||||||||||||||||
pages required | integer | HTML pages read | ||||||||||||||||||
counts required | object | Number of issues per level
| ||||||||||||||||||
issues required | array of object |
| ||||||||||||||||||
truncated | boolean | True when the list was cut short |
Manifest
| Field | Type | Description |
|---|---|---|
v required | integer | |
id required | string | Deploy id |
siteId | string | |
createdAt | integer | |
files required | map of tuple | Path to [sha256, size, content type] |
redirects required | array of object | Redirect rules in the order they apply |
headers required | array of object | Header rules |
forms | map of object | Forms found in the pages |
Domain
| Field | Type | Description | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
hostname required | string | ||||||||||||||||
status required | string | Cloudflare hostname status (active when ready) | |||||||||||||||
sslStatus required | string | Certificate status (active when ready) | |||||||||||||||
dnsOk | boolean | Public DNS points at Liftpad | |||||||||||||||
records required | array of object | DNS records to add at the domain's DNS host
| |||||||||||||||
createdAt | integer | ||||||||||||||||
mainWhenReady | boolean | Becomes the primary domain once ready | |||||||||||||||
verified | boolean | ||||||||||||||||
managed | boolean | Bought on Liftpad | |||||||||||||||
ready | boolean | DNS, hostname and certificate are all active | |||||||||||||||
primary | boolean |
DomainOrder
| Field | Type | Description |
|---|---|---|
id required | string | |
domain required | string | |
status required | string: awaiting_payment, requested, registering, registered, failed, canceled | |
priceCad | number | First year in CAD, taxes extra (0 when included in the plan) |
included | boolean | |
error | string or null | |
createdAt | integer | |
registeredAt | integer or null | |
expiresAt | integer or null |
DomainSearch
| Field | Type | Description | |||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
query required | string | ||||||||||||||||||||||
exact | string or null | The full name asked for, when the query was one | |||||||||||||||||||||
currency | "CAD" | ||||||||||||||||||||||
results required | array of object |
|
Snippet
| Field | Type | Description |
|---|---|---|
name required | string | Up to 60 characters, unique in the list |
where required | string: head, body | End of <head> or end of <body> |
html required | string | Up to 20 000 characters |
SplitTest
| Field | Type | Description |
|---|---|---|
id | string | |
deployId required | string | The other deploy some visitors see |
percent required | integer | 1 to 99 |
startedAt | integer |
Hook
| Field | Type | Description |
|---|---|---|
id required | string | |
kind required | string: webhook, slack | |
url required | string | Where events are sent (Slack addresses are shown shortened) |
events required | array of string: deploy.ready, deploy.published, form.submission | |
createdAt | integer | |
lastStatus | integer or null | HTTP status of the last delivery (0 when it could not connect) |
lastAt | integer or null | |
paused | boolean | True after 50 failed deliveries in a row |
Form
| Field | Type | Description |
|---|---|---|
name required | string | |
live required | boolean | Found in the live deploy |
fields | array of string | |
honeypot | boolean | |
files | boolean | Has file inputs |
action | string or null | Success page |
submissions required | integer | |
spam required | integer | |
last | integer or null | Newest submission |
Submission
| Field | Type | Description | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
id required | string | |||||||||||||||||||
form required | string | |||||||||||||||||||
spam | boolean | |||||||||||||||||||
preview | boolean | Sent from a preview address | ||||||||||||||||||
deployId | string or null | |||||||||||||||||||
data required | map of string | Field name to value | ||||||||||||||||||
files | array of object |
| ||||||||||||||||||
referrer | string or null | |||||||||||||||||||
createdAt required | integer |
Functions
The site's deployed functions
| Field | Type | Description |
|---|---|---|
routes | array of object | |
edge | array of object | |
schedules | array of object | |
deployedAt | integer | |
size | integer |
Analytics
Page views of the live site, without cookies or stored addresses
| Field | Type | Description | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
enabled required | boolean | False when analytics are not set up on this Liftpad | ||||||||||||
days | integer | |||||||||||||
views | integer | |||||||||||||
visitors | integer | |||||||||||||
daily | array of object |
| ||||||||||||
pages | array of object |
|
AiJob
| Field | Type | Description |
|---|---|---|
id required | string | |
kind required | string: build, edit | |
status required | string: held, queued, running, done, failed | |
step | string or null | |
deployId | string or null | The draft deploy it made |
error | string or null | |
credits | integer | |
createdAt | integer |
Me
| Field | Type | Description | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
kind required | string: session, token | How the caller signed in | ||||||||||||||||||||||||
user required | object |
| ||||||||||||||||||||||||
platformAdmin | boolean | |||||||||||||||||||||||||
teams required | array of Team | |||||||||||||||||||||||||
roles | array of object |
|
Team
| Field | Type | Description |
|---|---|---|
id required | string | |
slug required | string | |
name required | string | |
role required | string: owner, admin, developer, reviewer, billing, viewer | Your role in the team (for a token: what the token may do) |
caps | array of string: view, deploy, sites, domains, members, billing, team | |
scoped | boolean | You see only some of the team's sites |
plan required | Plan | |
billingStatus | string or null | |
billing | object or null | |
trialEndsAt | integer or null | |
currentPeriodEnd | integer or null | |
billingEmail | string or null | |
usage | object or null | Sites, domains, members and storage used |
Plan
| Field | Type | Description |
|---|---|---|
id required | string | |
name required | string | |
priceCad required | number | Monthly, CAD, taxes extra |
sites required | integer | |
domainsPerSite | integer | |
deploysPerDay | integer | |
maxDeployBytes | integer | |
storageBytes | integer | |
formSubmissions | integer | Per calendar month |
aiSuggestions | integer | Per calendar month |
imageTransforms | integer | |
includedDomains | integer | Domain registrations included per year |
monthlyCredits | integer | |
blurb | string |
Token
| Field | Type | Description |
|---|---|---|
id required | string | |
name required | string | |
access required | string: read, deploy | |
team | string or null | Slug of the one team it is limited to, or null |
created_at | integer | |
last_used_at | integer or null | Updated at most once an hour |
expires_at | integer or null | Null when it never expires |
Credits
| Field | Type | Description | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
total required | integer | ||||||||||||||||
monthly | integer | Left from this month's plan credits | |||||||||||||||
bought | integer | ||||||||||||||||
planMonthly | integer | ||||||||||||||||
costs required | map of integer | Credits per action | |||||||||||||||
packs required | array of object |
| |||||||||||||||
payments | boolean | Online payment is open | |||||||||||||||
card | object or null | ||||||||||||||||
auto | object or null | Automatic top-up settings | |||||||||||||||
ledger | array of object |
|
AuditEntry
| Field | Type | Description |
|---|---|---|
id required | integer | |
at required | integer | |
actor required | string | Email of who did it (or a system name) |
action required | string | |
target | string or null | |
detail | string or null | JSON text |
team_id | string or null |