Operate API Maker Using API
API Maker can be operated programmatically via a dedicated management API. This allows external systems or scripts to perform administrative operations—such as creating or updating admin users—without using the UI.
Configuration
To enable this feature:
- Go to Root Settings → Deployment Settings → API Access.
- Check the Operate API Maker Using API checkbox.
- Set a Communication Token (minimum 48 characters). Use the Generate button to auto-generate a secure token.
- Save the settings.
!!! warning
The Communication Token acts as the authentication secret for all management API calls. Keep it confidential and rotate it if compromised. Changing it immediately invalidates any existing integrations using the old token.
API Endpoint
POST {API_MAKER_HOST}/api/sites/root-user-settings/operate-api-maker-using-api
Example:
POST http://api-maker.example.com/api/sites/root-user-settings/operate-api-maker-using-api
Request
| Header |
Value |
Required |
Content-Type |
application/json |
Yes |
Request Body Structure
| Field |
Type |
Required |
Description |
token |
string |
Yes |
The Communication Token configured in Deployment Settings. Minimum 48 characters. |
operation |
string |
Yes |
The operation to perform. See Supported Operations below. |
payload |
object |
Depends |
Operation-specific data. See each operation's payload table for required fields. |
Supported Operations
CREATE_ADMIN_USER
Creates a new admin user in API Maker. On success, the system also performs a git pull for the user's repository, saves their secret, and generates a deployment hook — all returned in the response.
Sample Request:
{
"token": "aBcDe_FgHiJ_KlMnO_PqRsT_UvWxY_ZaBcD_EfGhI_JkLmN_OpQrS",
"operation": "CREATE_ADMIN_USER",
"payload": {
"user": {
"name": "John Doe",
"email": "[email protected]",
"password": "securePassword123",
"apiPath": "john_doe",
"gitUrlWithCredentials": "https://username:[email protected]/username/repo.git",
"gitCommitUserEmail": "[email protected]",
"gitBranch": "main"
},
"secret": {
"name": "Default",
"keysCode": ""
}
}
}
payload Fields
| Field |
Type |
Required |
Description |
user |
object |
Yes |
Object containing the new admin user's details. |
secret |
object |
No |
Optional object for initial secret configuration. |
payload.user Fields
| Field |
Type |
Required |
Description |
name |
string |
Yes |
Full name of the user. |
email |
string |
Yes |
Email address of the user. Must be unique. |
password |
string |
Yes |
Plain-text password. API Maker encrypts it before storing. |
apiPath |
string |
Yes |
Unique path segment for this user's APIs. Allowed characters: [a-z, 0-9, _]. Example: john_doe. |
gitUrlWithCredentials |
string |
No |
Git repository URL with embedded credentials. Example: https://user:[email protected]/user/repo.git. Stored encrypted. |
gitCommitUserEmail |
string |
No |
Email used in git commits for this user. |
gitBranch |
string |
No |
Default git branch. Example: main. |
payload.secret Fields
| Field |
Type |
Required |
Description |
name |
string |
Yes |
Secret name. Example: Default. |
keysCode |
string |
No |
Application secrets code associated with this user. |
Response — Success 200
{
"success": true,
"statusCode": 200,
"data": {
"userResponse": {
"guid": "01KP2MCKX5DNBGM7RCAASM3BMQ",
"name": "John Doe",
"email": "[email protected]",
"apiPath": "john_doe",
"settings": {
"sandbox": {
"dependencies": {
"nodeJS": []
}
},
"allowedOrigins": []
},
"gitCommitUserEmail": "[email protected]",
"gitBranch": "main",
"isDebuggingEnabled": false,
"userType": "ADMIN",
"active": true,
"_id": "69dc7c7ead52c49d2086d81e",
"id": "69dc7c7ead52c49d2086d81e"
},
"gitPullResponse": true,
"secretSaveResponse": true,
"deploymentHookResponse": {
"hookUrl": "6MgUnOSSqR36JTU9M7LON4BcbSvwxn4r",
"hookAccessToken": "ASIQ4BJOHDl9RRUE5DH6cIuyvCUJQwCM",
"hookSecret": "lIfV52PsStG3Nq4Wx2tWqmFd3uL0QOSU",
"deploymentUrl": "http://__ip_address__:38246/api/sites/deploy/john_doe/6MgUnOSSqR36JTU9M7LON4BcbSvwxn4r?token=ASIQ4BJOHDl9RRUE5DH6cIuyvCUJQwCM&secret=lIfV52PsStG3Nq4Wx2tWqmFd3uL0QOSU&branch=main"
}
}
}
Response Fields
| Field |
Type |
Description |
data.userResponse |
object |
The created user record. |
data.userResponse.guid |
string |
Globally unique identifier for the user. |
data.userResponse.name |
string |
Name of the created user. |
data.userResponse.email |
string |
Email of the created user. |
data.userResponse.apiPath |
string |
API path assigned to the user. |
data.userResponse.userType |
string |
Role of the user. Will be ADMIN. |
data.userResponse.active |
boolean |
Whether the user account is active. |
data.userResponse._id |
string |
Database identifier of the created user. |
data.gitPullResponse |
boolean |
true if the initial git pull was successful. |
data.secretSaveResponse |
boolean |
true if the secret was saved successfully. |
data.deploymentHookResponse |
object |
Auto-generated deployment hook details for this user. |
data.deploymentHookResponse.hookUrl |
string |
Unique hook URL token for this user's deployment endpoint. |
data.deploymentHookResponse.hookAccessToken |
string |
Access token to authenticate deployment hook calls. |
data.deploymentHookResponse.hookSecret |
string |
Secret used to verify the deployment hook request. |
data.deploymentHookResponse.deploymentUrl |
string |
Full deployment webhook URL. Replace __ip_address__ with your server IP. |
UPDATE_ADMIN_USER
Updates an existing admin user in API Maker. The user to update is located using the find criteria, and the fields in updateData are applied to the matched user.
Sample Request:
{
"token": "aBcDe_FgHiJ_KlMnO_PqRsT_UvWxY_ZaBcD_EfGhI_JkLmN_OpQrS",
"operation": "UPDATE_ADMIN_USER",
"payload": {
"find": {
"apiPath": "john_doe"
},
"updateData": {
"name": "John Doe Updated",
"email": "[email protected]",
"password": "newPassword123",
"apiPath": "john_doe_updated",
"gitUrlWithCredentials": "https://username:[email protected]/username/repo.git",
"gitCommitUserEmail": "[email protected]",
"gitBranch": "main"
}
}
}
payload Fields
| Field |
Type |
Required |
Description |
find |
object |
Yes |
Criteria to locate the user to update. |
updateData |
object |
Yes |
Fields to update on the matched user. Only provided fields are changed. |
payload.find Fields
| Field |
Type |
Required |
Description |
apiPath |
string |
Yes |
The current apiPath of the user to find. Must match exactly. |
payload.updateData Fields
| Field |
Type |
Required |
Description |
name |
string |
No |
Updated full name of the user. |
email |
string |
No |
Updated email address. Must be unique. |
password |
string |
No |
New plain-text password. API Maker encrypts it before storing. Omit to keep the existing password. |
apiPath |
string |
No |
New API path. Allowed characters: [a-z, 0-9, _]. Changing this renames the user's API path. |
gitUrlWithCredentials |
string |
No |
Updated Git repository URL with embedded credentials. Stored encrypted. |
gitCommitUserEmail |
string |
No |
Updated email used in git commits for this user. |
gitBranch |
string |
No |
Updated default git branch. |
Response — Success 200
{
"success": true,
"statusCode": 200,
"data": {
"_id": "69dca794c282e099a4e6bbd3",
"guid": "01KP2YX78WY1DQ62VTB4Y8T17E",
"name": "John Doe Updated",
"email": "[email protected]",
"apiPath": "john_doe_updated",
"settings": {
"allowedOrigins": [],
"sandbox": {
"automaticSandboxRestartInSeconds": null,
"dependencies": {
"nodeJS": []
},
"sandboxCountOverrideAdmin": 1
},
"dockerFile": "",
"hashOfRunCommand": "46252046",
"hashOfDockerfile": "1089711499"
},
"gitCommitUserEmail": "[email protected]",
"gitBranch": "main",
"isDebuggingEnabled": false,
"userType": "ADMIN",
"active": true,
"__v": 0,
"executedMigrationScripts": {
"Migration 1": true
}
}
}
Response Fields
| Field |
Type |
Description |
data._id |
string |
Database identifier of the updated user. |
data.guid |
string |
Globally unique identifier for the user. |
data.name |
string |
Updated name of the user. |
data.email |
string |
Updated email of the user. |
data.apiPath |
string |
Updated API path of the user. |
data.userType |
string |
Role of the user. e.g. ADMIN. |
data.active |
boolean |
Whether the user account is active. |
data.isDebuggingEnabled |
boolean |
Whether sandbox debug mode is enabled for this user. |
data.gitCommitUserEmail |
string |
Git commit email of the user. |
data.gitBranch |
string |
Default git branch of the user. |
data.settings |
object |
User sandbox and origin settings. |
data.settings.allowedOrigins |
array |
List of allowed CORS origins for this user. |
data.settings.sandbox |
object |
Sandbox configuration for this user. |
data.settings.sandbox.sandboxCountOverrideAdmin |
number |
Override for the number of sandboxes allocated to this user. |
data.settings.sandbox.automaticSandboxRestartInSeconds |
number\|null |
Interval in seconds for automatic sandbox restart. null if not set. |
data.settings.sandbox.dependencies.nodeJS |
array |
List of Node.js package dependencies for this user's sandbox. |
data.executedMigrationScripts |
object |
Map of migration script names to their execution status (true = executed). |
DELETE_ADMIN_USER
Permanently deletes an existing admin user from API Maker. The user is located by their apiPath.
!!! danger
This operation is irreversible. All data associated with the user will be permanently removed.
Sample Request:
{
"token": "aBcDe_FgHiJ_KlMnO_PqRsT_UvWxY_ZaBcD_EfGhI_JkLmN_OpQrS",
"operation": "DELETE_ADMIN_USER",
"payload": {
"apiPath": "john_doe"
}
}
payload Fields
| Field |
Type |
Required |
Description |
apiPath |
string |
Yes |
The apiPath of the user to delete. Must match exactly. |
Response — Success 200
{
"success": true,
"statusCode": 200,
"data": true
}
Response Fields
| Field |
Type |
Description |
data |
boolean |
true if the user was successfully deleted. |
UPDATE_SECRET
Updates the secrets code for an existing admin user, identified by their apiPath.
Sample Request:
{
"token": "aBcDe_FgHiJ_KlMnO_PqRsT_UvWxY_ZaBcD_EfGhI_JkLmN_OpQrS",
"operation": "UPDATE_SECRET",
"payload": {
"apiPath": "john_doe",
"keysCode": "your-secrets-code-here"
}
}
payload Fields
| Field |
Type |
Required |
Description |
apiPath |
string |
Yes |
The apiPath of the user whose secret will be updated. |
keysCode |
string |
Yes |
The new secrets code to apply to the user. |
Response — Success 200
{
"success": true,
"statusCode": 200,
"data": true
}
Response Fields
| Field |
Type |
Description |
data |
boolean |
true if the secret was successfully updated. |
Error Responses
The following error responses apply to all operations.
Invalid Token — 401
{
"success": false,
"statusCode": 401,
"errors": [
{ "message": "Unauthorized. Invalid communication token." }
]
}
Feature Disabled — 403
{
"success": false,
"statusCode": 403,
"errors": [
{ "message": "Operate API Maker using API feature is not enabled." }
]
}
Validation Rules
Top-level Fields
| Field |
Rule |
token |
Required. Must be a string. Minimum 48 characters. |
operation |
Required. Must be one of: CREATE_ADMIN_USER, UPDATE_ADMIN_USER, DELETE_ADMIN_USER, UPDATE_SECRET. |
payload |
Required. Must be an object. |
CREATE_ADMIN_USER — payload Fields
| Field |
Rule |
user |
Required. Must be an object containing admin user details. |
secret |
Optional. Must be an object if provided. |
CREATE_ADMIN_USER — payload.user Fields
| Field |
Rule |
name |
Required. Must be a string. |
email |
Required. Must be a valid email string. |
password |
Required. Must be a string. Minimum 4 characters. |
apiPath |
Required. Must be a string. Allowed: [a-z, 0-9, _]. |
gitUrlWithCredentials |
Optional. Must be a string if provided. |
gitCommitUserEmail |
Optional. Must be a string if provided. |
gitBranch |
Optional. Must be a string if provided. |
CREATE_ADMIN_USER — payload.secret Fields
| Field |
Rule |
name |
Required. Must be a string. |
keysCode |
Optional. Must be a string if provided. |
UPDATE_ADMIN_USER — payload Fields
| Field |
Rule |
find |
Required. Must be an object. |
updateData |
Required. Must be an object. At least one field must be present. |
UPDATE_ADMIN_USER — payload.find Fields
| Field |
Rule |
apiPath |
Required. Must be a string. |
UPDATE_ADMIN_USER — payload.updateData Fields
| Field |
Rule |
name |
Optional. Must be a string if provided. |
email |
Optional. Must be a valid email string if provided. |
password |
Optional. Must be a string. Minimum 4 characters. |
apiPath |
Optional. Must be a string. Allowed: [a-z, 0-9, _]. |
gitUrlWithCredentials |
Optional. Must be a string if provided. |
gitCommitUserEmail |
Optional. Must be a string if provided. |
gitBranch |
Optional. Must be a string if provided. |
DELETE_ADMIN_USER — payload Fields
| Field |
Rule |
apiPath |
Required. Must be a string. Must match exactly. |
UPDATE_SECRET — payload Fields
| Field |
Rule |
apiPath |
Required. Must be a string. |
keysCode |
Required. Must be a string. |
Security Notes
- This endpoint does not require an AM user session or JWT token. Authentication is performed solely via the
token field in the request body.
- Always use HTTPS in production to prevent token exposure.
- The Communication Token should be at least 48 characters. The built-in generator creates a strong token exceeding this minimum.
gitUrlWithCredentials is stored encrypted in the database.
- The
deploymentUrl in the CREATE_ADMIN_USER response contains sensitive tokens. Store it securely and never expose it in client-side code.