Quickstart
Create a project, deploy a first page to it, and open it at its own HTTPS address, from the console or the HTTP API.
On this page
This walks you through the shortest path to something live: a project with one HTML page in it. The same project already has its own PostgreSQL database, file storage and address, so once the page is up you can build on it rather than start again.
You need a Fortly account. Each step shows the console and the API side by side; pick one and stay with it.
Deploy your first page
Create a project
A project name uses lower-case letters, digits and hyphens, is at least 2 characters long, and cannot start or end with a hyphen.
Open console.fortly.com and choose New project. Under Your code, pick Upload project, type my-app as the name, and choose Create and continue. The console creates the project and opens its Deployments tab.
Make an API token first: in the console, open Settings, find API tokens and choose Create token. The secret starts with fly_ and is shown only once. See API tokens.
export FORTLY_TOKEN=fly_...
curl -X POST https://api.fortly.com/projects \
-H "Authorization: Bearer $FORTLY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "my-app"}'The reply is 201 Created with the new project (trimmed here):
{
"name": "my-app-ada",
"label": "my-app",
"host": "my-app-ada.fortly.com",
"url": "https://my-app-ada.fortly.com",
"state": "stopped"
}label is the name you chose. name is that name joined to your account name, and it is what every other route takes. Keep it:
export PROJECT=my-app-ada # the "name" from your replyMake something to deploy
A folder with an index.html at its top is a static site. Fortly serves it straight away, with nothing to install, build or start.
mkdir site
echo '<h1>Hello from Fortly</h1>' > site/index.htmlDeploy it
Zip the contents of site so that index.html is at the top of the archive, not inside a folder. On the Deployments tab, drop the .zip onto Drop your project here (or use Choose file), then choose Deploy release.
The console accepts .zip and .tar.gz archives up to 256 MB.
A release is a gzipped tar of the directory you want served, sent as the raw request body.
tar -C site -czf release.tgz .
curl -X POST "https://api.fortly.com/projects/$PROJECT/deploys" \
-H "Authorization: Bearer $FORTLY_TOKEN" \
--data-binary @release.tgzA static site goes live inside the request, so the reply is 201 Created with the release under deploy and the project's address under url. A release that has to be built first returns 202 Accepted with "building": true instead, and the build carries on after the request ends.
Open it
The address is at the top of the project's page. Open it and you see your heading.
curl https://my-app-ada.fortly.com<h1>Hello from Fortly</h1>Use the url from your own reply; the part after my-app- is your account name.
Connect an MCP client once, then ask it about the project.
# Claude Code: add Fortly, then run /mcp and sign in
claude mcp add --transport http fortly https://api.fortly.com/mcpThen ask: "What is the address of my-app, and what is its latest deployment?" The agent reads your projects, releases and logs through the access you grant when you sign in. See Connect an AI agent.
What you have now
| Part | Where it is |
|---|---|
| Your page | Served at https://my-app-<account>.fortly.com |
| A PostgreSQL database | The project's Data tab, and the data APIs |
| File storage | The project's Storage tab, served at /_files/… on the same address |
| Release history | The project's Deployments tab, or GET /projects/{name}/deploys |
Deploy again the same way. The new release replaces the live one, and the previous one stays in the history so you can put it back. If a build fails, the release that was live stays live.