curl --request POST \
--url https://app.thareja.ai/api/v3/project/create \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"project": "Mobile App Development",
"key": "MAD",
"client_id": 10,
"description": "Development of a cross-platform mobile application for iOS and Android",
"team_id": 1,
"project_manager": [
5,
7
],
"qa_lead": 8,
"users": [
1,
2,
3,
4
],
"groups": [
1,
2
],
"start_date": "2025-12-01T00:00:00Z",
"due_date": "2026-06-30T23:59:59Z",
"billable": "yes",
"visible": 1
}
'import requests
url = "https://app.thareja.ai/api/v3/project/create"
payload = {
"project": "Mobile App Development",
"key": "MAD",
"client_id": 10,
"description": "Development of a cross-platform mobile application for iOS and Android",
"team_id": 1,
"project_manager": [5, 7],
"qa_lead": 8,
"users": [1, 2, 3, 4],
"groups": [1, 2],
"start_date": "2025-12-01T00:00:00Z",
"due_date": "2026-06-30T23:59:59Z",
"billable": "yes",
"visible": 1
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
project: 'Mobile App Development',
key: 'MAD',
client_id: 10,
description: 'Development of a cross-platform mobile application for iOS and Android',
team_id: 1,
project_manager: [5, 7],
qa_lead: 8,
users: [1, 2, 3, 4],
groups: [1, 2],
start_date: '2025-12-01T00:00:00Z',
due_date: '2026-06-30T23:59:59Z',
billable: 'yes',
visible: 1
})
};
fetch('https://app.thareja.ai/api/v3/project/create', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.thareja.ai/api/v3/project/create",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'project' => 'Mobile App Development',
'key' => 'MAD',
'client_id' => 10,
'description' => 'Development of a cross-platform mobile application for iOS and Android',
'team_id' => 1,
'project_manager' => [
5,
7
],
'qa_lead' => 8,
'users' => [
1,
2,
3,
4
],
'groups' => [
1,
2
],
'start_date' => '2025-12-01T00:00:00Z',
'due_date' => '2026-06-30T23:59:59Z',
'billable' => 'yes',
'visible' => 1
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.thareja.ai/api/v3/project/create"
payload := strings.NewReader("{\n \"project\": \"Mobile App Development\",\n \"key\": \"MAD\",\n \"client_id\": 10,\n \"description\": \"Development of a cross-platform mobile application for iOS and Android\",\n \"team_id\": 1,\n \"project_manager\": [\n 5,\n 7\n ],\n \"qa_lead\": 8,\n \"users\": [\n 1,\n 2,\n 3,\n 4\n ],\n \"groups\": [\n 1,\n 2\n ],\n \"start_date\": \"2025-12-01T00:00:00Z\",\n \"due_date\": \"2026-06-30T23:59:59Z\",\n \"billable\": \"yes\",\n \"visible\": 1\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.thareja.ai/api/v3/project/create")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"project\": \"Mobile App Development\",\n \"key\": \"MAD\",\n \"client_id\": 10,\n \"description\": \"Development of a cross-platform mobile application for iOS and Android\",\n \"team_id\": 1,\n \"project_manager\": [\n 5,\n 7\n ],\n \"qa_lead\": 8,\n \"users\": [\n 1,\n 2,\n 3,\n 4\n ],\n \"groups\": [\n 1,\n 2\n ],\n \"start_date\": \"2025-12-01T00:00:00Z\",\n \"due_date\": \"2026-06-30T23:59:59Z\",\n \"billable\": \"yes\",\n \"visible\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.thareja.ai/api/v3/project/create")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"project\": \"Mobile App Development\",\n \"key\": \"MAD\",\n \"client_id\": 10,\n \"description\": \"Development of a cross-platform mobile application for iOS and Android\",\n \"team_id\": 1,\n \"project_manager\": [\n 5,\n 7\n ],\n \"qa_lead\": 8,\n \"users\": [\n 1,\n 2,\n 3,\n 4\n ],\n \"groups\": [\n 1,\n 2\n ],\n \"start_date\": \"2025-12-01T00:00:00Z\",\n \"due_date\": \"2026-06-30T23:59:59Z\",\n \"billable\": \"yes\",\n \"visible\": 1\n}"
response = http.request(request)
puts response.read_body{
"error": "This project name is already exist in your organization"
}
{
"error": "This key is already exist in your organization"
}
{
"error": "project key can't be empty!"
}
{
"error": "Project name can't be empty!"
}
{
"error": 401,
"message": "Invalid or missing authentication token"
}
{
"error": 400,
"message": "Invalid request parameters"
}
Create Project
Creates a new project in the workspace with unique name and key
curl --request POST \
--url https://app.thareja.ai/api/v3/project/create \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"project": "Mobile App Development",
"key": "MAD",
"client_id": 10,
"description": "Development of a cross-platform mobile application for iOS and Android",
"team_id": 1,
"project_manager": [
5,
7
],
"qa_lead": 8,
"users": [
1,
2,
3,
4
],
"groups": [
1,
2
],
"start_date": "2025-12-01T00:00:00Z",
"due_date": "2026-06-30T23:59:59Z",
"billable": "yes",
"visible": 1
}
'import requests
url = "https://app.thareja.ai/api/v3/project/create"
payload = {
"project": "Mobile App Development",
"key": "MAD",
"client_id": 10,
"description": "Development of a cross-platform mobile application for iOS and Android",
"team_id": 1,
"project_manager": [5, 7],
"qa_lead": 8,
"users": [1, 2, 3, 4],
"groups": [1, 2],
"start_date": "2025-12-01T00:00:00Z",
"due_date": "2026-06-30T23:59:59Z",
"billable": "yes",
"visible": 1
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
project: 'Mobile App Development',
key: 'MAD',
client_id: 10,
description: 'Development of a cross-platform mobile application for iOS and Android',
team_id: 1,
project_manager: [5, 7],
qa_lead: 8,
users: [1, 2, 3, 4],
groups: [1, 2],
start_date: '2025-12-01T00:00:00Z',
due_date: '2026-06-30T23:59:59Z',
billable: 'yes',
visible: 1
})
};
fetch('https://app.thareja.ai/api/v3/project/create', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.thareja.ai/api/v3/project/create",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'project' => 'Mobile App Development',
'key' => 'MAD',
'client_id' => 10,
'description' => 'Development of a cross-platform mobile application for iOS and Android',
'team_id' => 1,
'project_manager' => [
5,
7
],
'qa_lead' => 8,
'users' => [
1,
2,
3,
4
],
'groups' => [
1,
2
],
'start_date' => '2025-12-01T00:00:00Z',
'due_date' => '2026-06-30T23:59:59Z',
'billable' => 'yes',
'visible' => 1
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.thareja.ai/api/v3/project/create"
payload := strings.NewReader("{\n \"project\": \"Mobile App Development\",\n \"key\": \"MAD\",\n \"client_id\": 10,\n \"description\": \"Development of a cross-platform mobile application for iOS and Android\",\n \"team_id\": 1,\n \"project_manager\": [\n 5,\n 7\n ],\n \"qa_lead\": 8,\n \"users\": [\n 1,\n 2,\n 3,\n 4\n ],\n \"groups\": [\n 1,\n 2\n ],\n \"start_date\": \"2025-12-01T00:00:00Z\",\n \"due_date\": \"2026-06-30T23:59:59Z\",\n \"billable\": \"yes\",\n \"visible\": 1\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.thareja.ai/api/v3/project/create")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"project\": \"Mobile App Development\",\n \"key\": \"MAD\",\n \"client_id\": 10,\n \"description\": \"Development of a cross-platform mobile application for iOS and Android\",\n \"team_id\": 1,\n \"project_manager\": [\n 5,\n 7\n ],\n \"qa_lead\": 8,\n \"users\": [\n 1,\n 2,\n 3,\n 4\n ],\n \"groups\": [\n 1,\n 2\n ],\n \"start_date\": \"2025-12-01T00:00:00Z\",\n \"due_date\": \"2026-06-30T23:59:59Z\",\n \"billable\": \"yes\",\n \"visible\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.thareja.ai/api/v3/project/create")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"project\": \"Mobile App Development\",\n \"key\": \"MAD\",\n \"client_id\": 10,\n \"description\": \"Development of a cross-platform mobile application for iOS and Android\",\n \"team_id\": 1,\n \"project_manager\": [\n 5,\n 7\n ],\n \"qa_lead\": 8,\n \"users\": [\n 1,\n 2,\n 3,\n 4\n ],\n \"groups\": [\n 1,\n 2\n ],\n \"start_date\": \"2025-12-01T00:00:00Z\",\n \"due_date\": \"2026-06-30T23:59:59Z\",\n \"billable\": \"yes\",\n \"visible\": 1\n}"
response = http.request(request)
puts response.read_body{
"error": "This project name is already exist in your organization"
}
{
"error": "This key is already exist in your organization"
}
{
"error": "project key can't be empty!"
}
{
"error": "Project name can't be empty!"
}
{
"error": 401,
"message": "Invalid or missing authentication token"
}
{
"error": 400,
"message": "Invalid request parameters"
}
Overview
Create a new project in your workspace. Projects help organize tasks, track progress, and manage team collaboration. Each project requires a unique name and key within the team.Request Body
"Mobile App Development""MAD"10"Development of a cross-platform mobile application for iOS and Android"1[5, 7] or "5"8[1, 2, 3, 4] or "1,2,3"[1, 2] or "1,2""2025-12-01T00:00:00Z""2026-06-30T23:59:59Z""yes", "no"Default: "yes"1Response
Example Request
curl --request POST \
--url https://app.thareja.ai/api/v3/mobile/project/create \
--header 'Authorization: Bearer YOUR_API_TOKEN' \
--header 'Content-Type: application/json' \
--data '{
"project": "Mobile App Development",
"key": "MAD",
"description": "Development of a cross-platform mobile application for iOS and Android",
"team_id": 1,
"client_id": 10,
"project_manager": [5, 7],
"qa_lead": 8,
"users": [1, 2, 3, 4],
"groups": [1, 2],
"start_date": "2025-12-01T00:00:00Z",
"due_date": "2026-06-30T23:59:59Z",
"billable": "yes",
"visible": 1
}'
Example Request (JavaScript)
fetch('https://app.thareja.ai/api/v3/mobile/project/create', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Content-Type': 'application/json'
},
body: JSON.stringify({
project: "Mobile App Development",
key: "MAD",
description: "Development of a cross-platform mobile application for iOS and Android",
team_id: 1,
client_id: 10,
project_manager: [5, 7],
qa_lead: 8,
users: [1, 2, 3, 4],
groups: [1, 2],
start_date: "2025-12-01T00:00:00Z",
due_date: "2026-06-30T23:59:59Z",
billable: "yes",
visible: 1
})
})
.then(response => response.json())
.then(data => console.log(data));
Example Response
{
"id": 123,
"project": "Mobile App Development",
"key": "MAD",
"project_description": "Development of a cross-platform mobile application for iOS and Android",
"team_id": 1,
"client": {
"id": 10,
"name": "Acme Corporation",
"profile": "https://app.thareja.ai/profiles/acme.jpg"
},
"project_manager": [5, 7],
"qa_lead": 8,
"users": ["1", "2", "3", "4"],
"groups": [1, 2],
"watcher": [],
"starting_date": "2025-12-01T00:00:00Z",
"due_date": "2026-06-30T23:59:59Z",
"isBillable": true,
"billable": "yes",
"visible": 1,
"visiblity": 1,
"task": [],
"completed": 0,
"user_id": 1,
"created_at": "2025-11-28T10:30:00Z",
"updated_at": "2025-11-28T10:30:00Z"
}
Error Responses
{
"error": "This project name is already exist in your organization"
}
{
"error": "This key is already exist in your organization"
}
{
"error": "project key can't be empty!"
}
{
"error": "Project name can't be empty!"
}
{
"error": 401,
"message": "Invalid or missing authentication token"
}
{
"error": 400,
"message": "Invalid request parameters"
}
Notes
- Unique constraints: Both project name and key must be unique within the team
- Key format: Project keys are automatically converted to uppercase and special characters are removed
- Default team: If
team_idis not provided, the current user’s team is used - Default client: If no
client_idis provided, the internal client of the team is used (or created if it doesn’t exist) - Default QA lead: If not provided, defaults to the current user
- Array or string: Fields like
project_manager,users, andgroupsaccept both array format and comma-separated string format - Billable default: Projects are billable by default unless explicitly set to “no”
- Groups: When groups are provided, the project is automatically added to those groups
- Case sensitivity: Project names are automatically capitalized
Related Endpoints
- Get Projects - List all projects
- Get Project - Retrieve project details
- Update Project - Update project information
- Delete Project - Delete a project
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
The name of the project (must be unique within team)
"Mobile App Development"
Unique project key (2-5 uppercase letters)
"MAD"
The ID of the client associated with this project
10
Detailed description of the project
"Development of a cross-platform mobile application for iOS and Android"
The ID of the team this project belongs to
1
User ID(s) of project manager(s)
[5, 7]
User ID of the QA lead
8
User ID(s) of team members
[1, 2, 3, 4]
Group ID(s) associated with this project
[1, 2]
The start date of the project
"2025-12-01T00:00:00Z"
The due date for project completion
"2026-06-30T23:59:59Z"
Whether the project is billable
yes, no "yes"
Visibility setting for the project
1
Response
Project created successfully
123
"Mobile App Development"
"MAD"
"Development of a cross-platform mobile application"
1
Show child attributes
Show child attributes
[5, 7]
8
["1", "2", "3", "4"]
[1, 2]
true
"yes"
1
1
0
1