Skip to main content

API Reference

Base URL: https://api.makofy.com/api/v1

All authenticated endpoints require a Bearer token in the Authorization header.

Authentication

Register

POST /auth/register
{
"email": "user@example.com",
"password": "securepassword",
"name": "John"
}

Login

POST /auth/login
{
"email": "user@example.com",
"password": "securepassword"
}

Returns { "token": "...", "refresh_token": "...", "user": {...} }.

Get current user

GET /auth/me

Generate API token

POST /auth/token

Returns a long-lived API token (1 year) for CLI and CI/CD use.

Refresh token

POST /auth/refresh
{ "refresh_token": "..." }

Apps

List apps

GET /apps

Create app

POST /apps
{
"name": "my-app",
"git_repo": "https://github.com/user/repo.git",
"git_branch": "main",
"port": 8080
}

Get app

GET /apps/{appID}

Update app

PATCH /apps/{appID}

Delete app

DELETE /apps/{appID}

Deploys

Trigger deploy (git-based)

POST /apps/{appID}/deploy
{ "git_sha": "" }

Trigger deploy (upload)

POST /apps/{appID}/deploy/upload
Content-Type: multipart/form-data

Upload a source field containing a .tar.gz of your project. This is what the CLI uses.

List deploys

GET /apps/{appID}/deploys

Get deploy

GET /apps/{appID}/deploys/{deployID}

Rollback

POST /apps/{appID}/rollback/{deployID}

Environment Variables

List env vars

GET /apps/{appID}/env

Returns keys with masked values.

Set env vars

PUT /apps/{appID}/env
{
"vars": {
"DATABASE_URL": "postgres://...",
"NODE_ENV": "production"
}
}

Delete env var

DELETE /apps/{appID}/env/{key}

Domains

List domains

GET /apps/{appID}/domains

Add domain

POST /apps/{appID}/domains
{ "domain": "myapp.example.com" }

Remove domain

DELETE /apps/{appID}/domains/{domain}

Logs

Get logs

GET /apps/{appID}/logs

Returns:

{
"lines": [
{
"ts": "2026-04-08T21:32:20Z",
"pod": "x8f2k",
"msg": "Server started",
"stream": "app"
}
],
"pods": 1
}

Billing

Get billing overview

GET /billing

Get invoices

GET /billing/invoices

Create checkout session

POST /billing/checkout

Returns { "url": "https://checkout.stripe.com/..." }.

Create portal session

POST /billing/portal

Returns { "url": "https://billing.stripe.com/..." }.


Tenant

Get tenant

GET /tenant

Update tenant

PATCH /tenant

Delete tenant

DELETE /tenant

Rate limits

100 requests per minute per IP.