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.