API Documentation
Build native apps and check build status programmatically with your API key. Uses your paid credits — also called API credits.
# 1 — Build an app
curl -X POST https://freeappmaker.pro/api/build \
-H "Authorization: Bearer <your-api-key>" \
-H "Content-Type: application/json" \
-d '{"appName":"My App",
"websiteUrl":"https://example.com",
"packageName":"com.example.app",
"target":"apk"}'
# → { "buildId": "3f2a...", "status": "queued" }Authentication
Every request must include your API key, found in Settings → API Key Send it in either header:
Authorization: Bearer <your-api-key>
# or
x-api-key: <your-api-key>Keep this key secret — anyone with it can build apps and spend your credits.
Build costs
Each build spends your purchased (paid) credits — API builds do not use the daily free credits.
Android APK
5
Android AAB
10
iOS build
20
/api/buildBuild a native app from a website. Returns a buildId you can poll with the status endpoint.
Body parameters (application/json)
appNameRequiredstring
Display name (2–50 chars).
websiteUrlRequiredstring (url)
The website to wrap.
packageNameRequiredstring
Reverse-domain id, e.g. com.company.app.
targetRequired"apk" | "aab" | "ipa"
Build format.
primaryColorOptionalstring (#RRGGBB)
Brand color. Default #F97316.
accentColorOptionalstring (#RRGGBB)
Accent color. Default #0EA5E9.
statusBarColorOptionalstring (#RRGGBB)
Status bar color. Default = primaryColor.
themeOptional"light" | "dark" | "system"
Default system.
navigationOptional"bottom" | "drawer" | "tabs" | "none"
Native nav style. Default none (plain full-screen WebView).
navItemsOptionalArray<{ id, label, icon, path, openMode? }>
Up to 6 nav items for bottom/tabs/drawer. openMode: "internal" (default) or "external". Ignored when navigation is "none".
featuresOptionalstring[]
e.g. push, offline, pullToRefresh, camera, location, darkMode, exitConfirmation.
iconUrlOptionalstring (url)
1024×1024 app icon. A branded icon is generated if omitted.
splashUrlOptionalstring (url)
Splash image (shown full-screen).
splashStyleOptionalstring
"gradient" | "solid" | "centered" | "minimal" | "dark".
orientationOptional"portrait" | "landscape" | "auto"
Screen lock. Default portrait.
appVersionOptionalstring
Version name, e.g. "1.0.0". Build number auto-increments.
rateAppEnabledOptionalboolean
Prompt users to rate after N launches.
rateAppAfterSessionsOptionalnumber (1–100)
Launches before the rate prompt.
urlWhitelistOptionalstring
Newline-separated domains that stay in-app.
urlBlacklistOptionalstring
Newline-separated domains opened in the system browser.
appIdOptionalstring (uuid)
Rebuild/update an existing app you own.
| Parameter | Type | Required | Description |
|---|---|---|---|
| appName | string | Required | Display name (2–50 chars). |
| websiteUrl | string (url) | Required | The website to wrap. |
| packageName | string | Required | Reverse-domain id, e.g. com.company.app. |
| target | "apk" | "aab" | "ipa" | Required | Build format. |
| primaryColor | string (#RRGGBB) | Optional | Brand color. Default #F97316. |
| accentColor | string (#RRGGBB) | Optional | Accent color. Default #0EA5E9. |
| statusBarColor | string (#RRGGBB) | Optional | Status bar color. Default = primaryColor. |
| theme | "light" | "dark" | "system" | Optional | Default system. |
| navigation | "bottom" | "drawer" | "tabs" | "none" | Optional | Native nav style. Default none (plain full-screen WebView). |
| navItems | Array<{ id, label, icon, path, openMode? }> | Optional | Up to 6 nav items for bottom/tabs/drawer. openMode: "internal" (default) or "external". Ignored when navigation is "none". |
| features | string[] | Optional | e.g. push, offline, pullToRefresh, camera, location, darkMode, exitConfirmation. |
| iconUrl | string (url) | Optional | 1024×1024 app icon. A branded icon is generated if omitted. |
| splashUrl | string (url) | Optional | Splash image (shown full-screen). |
| splashStyle | string | Optional | "gradient" | "solid" | "centered" | "minimal" | "dark". |
| orientation | "portrait" | "landscape" | "auto" | Optional | Screen lock. Default portrait. |
| appVersion | string | Optional | Version name, e.g. "1.0.0". Build number auto-increments. |
| rateAppEnabled | boolean | Optional | Prompt users to rate after N launches. |
| rateAppAfterSessions | number (1–100) | Optional | Launches before the rate prompt. |
| urlWhitelist | string | Optional | Newline-separated domains that stay in-app. |
| urlBlacklist | string | Optional | Newline-separated domains opened in the system browser. |
| appId | string (uuid) | Optional | Rebuild/update an existing app you own. |
Example
curl -X POST https://freeappmaker.pro/api/build \
-H "Authorization: Bearer <your-api-key>" \
-H "Content-Type: application/json" \
-d '{
"appName": "My App",
"websiteUrl": "https://example.com",
"packageName": "com.example.app",
"target": "apk",
"primaryColor": "#F97316",
"features": ["pullToRefresh", "offline"]
}'Response 200
{
"success": true,
"buildId": "3f2a...-uuid",
"appId": "9b1c...-uuid",
"target": "apk",
"cost": 5,
"status": "queued",
"statusUrl": "/api/build/status?buildId=3f2a...-uuid"
}/api/build/statusCheck the status of a build you started. Poll every few seconds until status is completed or failed.
Query parameters
buildIdRequiredstring (uuid)
The id returned by POST /api/build.
| Parameter | Type | Required | Description |
|---|---|---|---|
| buildId | string (uuid) | Required | The id returned by POST /api/build. |
Example
curl "https://freeappmaker.pro/api/build/status?buildId=<buildId>" \
-H "Authorization: Bearer <your-api-key>"Response 200
{
"success": true,
"buildId": "3f2a...-uuid",
"status": "completed",
"progress": 100,
"target": "apk",
"error": null,
"artifacts": [
{ "name": "app-release.apk", "size": "12 MB",
"url": "/api/public/artifact/<token>/app-release.apk" }
]
}status is one of: queued, running, completed, failed, canceled. Download links appear once the build completes.
/api/credits/balanceCheck your current credit balance before starting a build. Read-only — nothing is charged. Your daily free allowance is applied automatically.
Example
curl "https://freeappmaker.pro/api/credits/balance" \
-H "Authorization: Bearer <your-api-key>"Response 200
{
"success": true,
"balance": {
"free": 8, // free credits left today
"freeMax": 10, // daily free allowance
"paid": 500, // purchased credits remaining
"total": 508 // free + paid
}
}A build is rejected with 402 Payment Required when total is less than the build cost.
Rate limits
Limits are applied per API key on a 60-second rolling window. Exceeding a limit returns 429 Too Many Requests with a Retry-After header (seconds to wait).
POST /api/buildOptional3 / minute
Start a new build.
GET /api/build/statusOptional30 / minute
Poll build status.
GET /api/credits/balanceOptional30 / minute
Check credit balance.
| Parameter | Type | Required | Description |
|---|---|---|---|
| POST /api/build | 3 / minute | Optional | Start a new build. |
| GET /api/build/status | 30 / minute | Optional | Poll build status. |
| GET /api/credits/balance | 30 / minute | Optional | Check credit balance. |
Responses include X-RateLimit-Limit and X-RateLimit-Remaining. When polling build status, wait a few seconds between requests to stay within the limit.
Response codes
200OptionalOK
Request succeeded.
400OptionalBad Request
Invalid JSON or parameters (see 'details').
401OptionalUnauthorized
Missing or invalid API key.
402OptionalPayment Required
Not enough credits (includes current balance).
404OptionalNot Found
Build not found for your account.
429OptionalToo Many Requests
Rate limit exceeded — see 'Retry-After' header.
500OptionalServer Error
Unexpected failure.
| Parameter | Type | Required | Description |
|---|---|---|---|
| 200 | OK | Optional | Request succeeded. |
| 400 | Bad Request | Optional | Invalid JSON or parameters (see 'details'). |
| 401 | Unauthorized | Optional | Missing or invalid API key. |
| 402 | Payment Required | Optional | Not enough credits (includes current balance). |
| 404 | Not Found | Optional | Build not found for your account. |
| 429 | Too Many Requests | Optional | Rate limit exceeded — see 'Retry-After' header. |
| 500 | Server Error | Optional | Unexpected failure. |
Ready to build with the API?
Grab your API key from Settings and ship your first build in minutes.