POST
Projects.Add
Create a project like dashboard project Add modal (Project::save_project when project_id is empty). Sets type=project, created_by=org owner, user_id=actor. Optional projects_template_id copies template missions. Private projects require allowed_to_private_projects_and_missions.
Permissions
- User must be logged in with a valid bearer token.
- Returned or changed records are limited by the user permissions, team access, folder access, and account settings.
Action
- Creates a Projects record or sends the requested data after validation.
Push Service
No push is sent because this function only reads data or returns helper information.
Automation
No automation is run for this function.
Special Instructions
- Same form as dashboard Add Project: project_name, client_id, organizations_user[], credentials, note, flags.
- Private project: private_project=1 clears client and members (dashboard behavior).
- organizations_user / member always includes the logged-in user id.
- Update existing: Projects.Update or Projects.Save with project_id.
- Dashboard one-shot save: Projects.Save (add when project_id empty).
Required Parameters
| Name | Type | Sample | Explanation |
|---|---|---|---|
project_namepost | string | Website redesign | Project name. Alias: name. |
Optional Parameters
| Name | Type | Sample | What it gives |
|---|---|---|---|
client_idpost | int | 12614595 | Customer id. Aliases: customer_id, cust_id. Ignored when private_project=1. |
organizations_userpost | mixed | [47,52] | Team member ids (JSON array / comma list). Aliases: member, member_ids, team_members, organizations_user[]. |
default_userpost | mixed | [47] | Default assignee user ids. |
credentialspost | string | ftp login | Credentials text. |
notepost | string | Kickoff notes | Project note. |
tagspost | mixed | 1,2 | Tag ids (comma list or JSON array). |
private_projectpost | int | 0 | 1 = private project (no client / members). |
use_as_templatepost | int | 0 | 1 = save as template project. |
allow_add_missionpost | int | 0 | Allow add mission flag. |
show_hide_tagpost | int | 1 | Show/hide tags. Default 1. |
mission_dependencypost | int | 0 | Mission dependency flag. |
donepost | int | 0 | Done flag. |
projects_template_idpost | int | 10 | Copy missions from this template project. Alias: template_project_id. |
custom_fieldspost | mixed | {"project-priority":"high"} | Custom fields object, or send project-* keys like the dashboard form. |
Authentication
Send the bearer token returned by Login in the request header.
Authorization: Bearer YOUR TOKEN
Sample Request
{
"url": "\/app\/Projects.Add",
"method": "POST",
"headers": {
"Authorization": "Bearer YOUR TOKEN"
},
"body": {
"project_name": "Website redesign",
"client_id": "12614595",
"organizations_user": "[47]",
"note": "Kickoff"
},
"url_user": "https:\/\/{user}.bull36.com\/app\/Projects.Add",
"url_domain": "https:\/\/{domain}\/app\/Projects.Add"
}Endpoint
POST /app/Projects.Add
POST https://{user}.bull36.com/app/Projects.Add
POST https://{domain}/app/Projects.AddSample Output
{
"success": 1,
"id": 900,
"project_id": 900,
"message": "Your Projects Details Add",
"data": {
"id": 900,
"name": "Website redesign",
"client_id": 12614595
}
}JavaScript Example
const token = 'YOUR TOKEN';
const body = new URLSearchParams({
project_name: 'Website redesign',
client_id: '12614595',
organizations_user: JSON.stringify([47]),
});
const res = await fetch('/app/Projects.Add', { method: 'POST', headers: { Authorization: 'Bearer ' + token }, body });
console.log(await res.json());Error Example
{
"success": 0,
"error": "missing_required_parameter",
"message": "Missing required parameter: project_name"
}