---
title: Hosting quickstart
description: Create a project, bind a repository, deploy it, and open the running app — with the management API, from the CLI or plain HTTP.
type: tutorial
product: hosting
summary: A repository to a running app on a public URL, in five calls.
updated: 2026-10-01
order: 1
---

This takes a Git repository to an app answering over HTTPS. It uses the
management API at `https://api.sylphx.com`, which is how Hosting serves
customers today; the console does the same five things.

<Callout tone="note" title="Today this runs on the management API">
Hosting is served through the management API at api.sylphx.com, and every call on this page runs there. The `services`, `source_links` and `service_rollouts` collections of the [API reference](/docs/api/services) describe the one-API shape of the same product; the calls here are the ones to use.
</Callout>

<Prerequisites
	items={[
		'An account and an Access key with hosting write access — see the platform start page',
		'A GitHub repository the Sylphx App can read',
		'The CLI signed in (`sylphx login`) or `SYLPHX_API_KEY` set',
	]}
/>

`sylphx api METHOD PATH` sends one call with your key, and every call below is
also plain HTTP with `Authorization: Bearer $SYLPHX_API_KEY`.

## 1. Create the project

A project holds the repository link and its environments. A new project comes
with `production` and `preview`.

<CodeTabs>
	<CodeTab
		label="CLI"
		language="bash"
		code={`sylphx api POST /v1/projects -d '{"name":"shop","gitRepository":"acme/shop","gitBranch":"main"}'`}
	/>
	<CodeTab
		label="cURL"
		language="bash"
		code={`curl -X POST https://api.sylphx.com/v1/projects \
  -H "Authorization: Bearer $SYLPHX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"shop","gitRepository":"acme/shop","gitBranch":"main"}'`}
	/>
</CodeTabs>

The answer carries the project under `app`: its `id` (`proj_…`) and its
`environments`, each with its own `id` (`env_…`) and `envType`. Keep the project
id and the production environment id.

## 2. Add the service

A service names the repository, the branch and the port the app listens on:

```bash
sylphx api POST /v1/projects/$PROJECT_ID/services -d '{
  "name": "web",
  "githubRepo": "acme/shop",
  "githubBranch": "main",
  "port": "3000",
  "sourceKind": "git"
}'
```

If the app lives in a sub-directory, and to open it to the internet, update the
production environment:

```bash
sylphx api PATCH /v1/projects/$PROJECT_ID/environments/$ENV_ID -d '{"sourceRoot":"apps/web","publicNetworking":true}'
```

`GET /v1/projects/$PROJECT_ID/services` lists the services, and
`PATCH /v1/projects/$PROJECT_ID/services/web` changes one, for example
`{"instanceType":"nano"}` for the smallest machine.

## 3. Deploy

```bash
sylphx api POST /v1/projects/$PROJECT_ID/deploy -d '{"envType":"production","force":true}'
```

This builds the commit at the tip of the branch and rolls it out. A push to
the branch does the same, so after the first deploy you rarely call this
yourself.

## 4. Watch it go live

```bash
sylphx api GET /v1/deployments/projects/$ENV_ID/status
sylphx api GET /v1/deployments/projects/$ENV_ID/deployments
sylphx api GET /v1/projects/$PROJECT_ID/logs
```

The status moves to `running` when the app is live; `unhealthy` means the
deploy failed, and the logs say why. Each entry of the deployments list names a
build, and `GET /v1/deployments/builds/{build_id}` reads one in full.

## 5. Open the app

Read the project back. The production environment's `customDomains` names the
host the app answers on:

```bash
sylphx api GET /v1/projects/$PROJECT_ID
```

For a host of your own, see [Network](/docs/network/quickstart).

## Clean up

```bash
sylphx api DELETE /v1/projects/$PROJECT_ID
```

This is the same sequence the Hosting journey runs against production, so it
is checked against the live API.

## Next

<RelatedDocs
	links={[
		{
			href: '/docs/hosting/configuration',
			label: 'Configuration',
			description: 'Environment variables, secrets, sizes, scaling and regions.',
		},
		{
			href: '/docs/hosting/deploy',
			label: 'Deploys',
			description: 'What a push starts, redeploys and pausing.',
		},
		{
			href: '/docs/network/quickstart',
			label: 'Your own domain',
			description: 'Register a domain and attach a hostname to a service.',
		},
	]}
/>
