Update a project
Update project metadata or move the project to another milestone in the current project template.
curl --request PATCH \
--url https://api.slant.app/v1/projects/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Updated onboarding",
"description": "<string>",
"projectable_id": "<string>",
"project_template_id": "<string>",
"project_milestone_id": "<string>",
"assigned_to_id": "<string>"
}
'import requests
url = "https://api.slant.app/v1/projects/{id}"
payload = {
"name": "Updated onboarding",
"description": "<string>",
"projectable_id": "<string>",
"project_template_id": "<string>",
"project_milestone_id": "<string>",
"assigned_to_id": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Updated onboarding',
description: '<string>',
projectable_id: '<string>',
project_template_id: '<string>',
project_milestone_id: '<string>',
assigned_to_id: '<string>'
})
};
fetch('https://api.slant.app/v1/projects/{id}', 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://api.slant.app/v1/projects/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Updated onboarding',
'description' => '<string>',
'projectable_id' => '<string>',
'project_template_id' => '<string>',
'project_milestone_id' => '<string>',
'assigned_to_id' => '<string>'
]),
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://api.slant.app/v1/projects/{id}"
payload := strings.NewReader("{\n \"name\": \"Updated onboarding\",\n \"description\": \"<string>\",\n \"projectable_id\": \"<string>\",\n \"project_template_id\": \"<string>\",\n \"project_milestone_id\": \"<string>\",\n \"assigned_to_id\": \"<string>\"\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.slant.app/v1/projects/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Updated onboarding\",\n \"description\": \"<string>\",\n \"projectable_id\": \"<string>\",\n \"project_template_id\": \"<string>\",\n \"project_milestone_id\": \"<string>\",\n \"assigned_to_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.slant.app/v1/projects/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Updated onboarding\",\n \"description\": \"<string>\",\n \"projectable_id\": \"<string>\",\n \"project_template_id\": \"<string>\",\n \"project_milestone_id\": \"<string>\",\n \"assigned_to_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "project123xyz",
"name": "Smith Family Onboarding",
"book_id": "book123xyz",
"project_milestone": {
"id": "milestone123xyz",
"title": "Initial Setup",
"project_template_id": "template123xyz",
"guid": "milestone-guid",
"color": "<string>",
"sort_order": 123,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"project_milestone_outcomes": [
{
"id": "outcome123xyz",
"label": "Ready for accounts",
"default_comment": "<string>",
"sort_order": 123,
"target_project_milestone_id": "<string>"
}
],
"project_milestone_form_fields": [
{
"id": "field123xyz",
"label": "Custodian",
"required": true,
"guid": "field-guid",
"placeholder": "<string>",
"sort_order": 123,
"household_record_source": "<string>",
"select_options": [
"<string>"
]
}
]
},
"project_template": {
"id": "template123xyz",
"title": "New Client Onboarding",
"project_milestones": [
{
"id": "milestone123xyz",
"title": "Initial Setup",
"project_template_id": "template123xyz",
"guid": "milestone-guid",
"color": "<string>",
"sort_order": 123,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"project_milestone_outcomes": [
{
"id": "outcome123xyz",
"label": "Ready for accounts",
"default_comment": "<string>",
"sort_order": 123,
"target_project_milestone_id": "<string>"
}
],
"project_milestone_form_fields": [
{
"id": "field123xyz",
"label": "Custodian",
"required": true,
"guid": "field-guid",
"placeholder": "<string>",
"sort_order": 123,
"household_record_source": "<string>",
"select_options": [
"<string>"
]
}
]
}
],
"guid": "template-guid",
"description": "<string>",
"enable_kanban_view": true,
"book_id": "<string>",
"order_index": 123,
"book_name": "<string>",
"book_initials": "<string>",
"attachments": [
{
"file_name": "onboarding.pdf",
"file_type": "application/pdf",
"file_size": 123456,
"source": "uploaded",
"signed_id": "signed-blob-id",
"download_url": "<string>",
"view_url": "<string>"
}
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
},
"milestone_progress": 123,
"overall_progress": 123,
"milestone_updated_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"project_template_id": "template123xyz",
"project_milestone_id": "milestone123xyz",
"assigned_to_id": "<string>",
"created_by_id": "<string>",
"household_id": "<string>",
"projectable_id": "<string>",
"description": {
"html": "<string>",
"markdown": "<string>",
"nodes": null,
"preferred_format": "<string>"
},
"comments_count": 123,
"milestone_progresses": [
{}
],
"visited_project_milestone_ids": [
"<string>"
],
"attachments": [
{
"file_name": "onboarding.pdf",
"file_type": "application/pdf",
"file_size": 123456,
"source": "uploaded",
"signed_id": "signed-blob-id",
"download_url": "<string>",
"view_url": "<string>"
}
],
"household": {
"id": "<string>",
"name": "<string>"
},
"projectable": {
"id": "abc123xyz",
"name": "Smith Household",
"person": {
"id": "abc123xyz",
"book_id": "book123xyz",
"first_name": "John",
"last_name": "Doe",
"household_id": "xyz789abc",
"contact_id": "cnt456def",
"role_type": "client",
"middle_name": "Robert",
"salutation": "Mr.",
"suffix": "Jr.",
"maiden_name": "Smith",
"gender": "male",
"designations": "CPA, CFP",
"household_role": "head_of_household",
"preferred_name": "Johnny",
"date_of_birth": "1985-06-15",
"job_title": "Software Engineer",
"ssn": "***-**-6789",
"drivers_license_number": "******7890",
"email_addresses": [
{
"email": "john.doe@example.com",
"email_type": "personal",
"is_primary": true
}
],
"phone_numbers": [
{
"phone_number": "+15555551234",
"phone_type": "mobile",
"is_primary": true,
"extension": "1234"
}
],
"addresses": [
{
"address_type": "home",
"is_primary": true,
"line1": "123 Main St",
"line2": "Apt 4B",
"city": "New York",
"state": "NY",
"zip": "10001",
"country_code": "US"
}
],
"employments": [
{
"business_name": "Acme Corp",
"id": "emp123xyz",
"person_id": "abc123xyz",
"role": "Software Engineer",
"start_date": "2023-01-15",
"end_date": "2024-12-31",
"actively_employed": true
}
],
"custom_fields": {
"preferred_contact_method": "Email",
"risk_tolerance": "Moderate"
}
}
},
"assigned_to": {
"id": "abc123xyz",
"email": "user@example.com",
"first_name": "John",
"last_name": "Doe",
"api_access": {
"auth_type": "personal_access_token",
"scope": "read_write"
}
},
"created_by": {
"id": "abc123xyz",
"email": "user@example.com",
"first_name": "John",
"last_name": "Doe",
"api_access": {
"auth_type": "personal_access_token",
"scope": "read_write"
}
},
"project_form_field_responses": [
{
"id": "response123xyz",
"project_milestone_form_field_id": "field123xyz",
"value": "<unknown>",
"display_value": "<string>"
}
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}{
"error": "invalid_json",
"detail": "<string>"
}{
"detail": "<string>"
}{
"error": "record_not_found",
"detail": "<string>"
}Authorizations
OAuth 2.0 Bearer Token from Clerk authentication
Headers
Unique key to ensure idempotent request handling.
Path Parameters
The project ID
Body
Project name
"Updated onboarding"
Project description as markdown
Related record type. Set to null with projectable_id null for ownerless projects.
Household, Contact, Business Related household, contact, or business ID. Set to null with projectable_type null for ownerless projects.
Project template ID
Current project milestone ID. Must belong to the final project template.
Assigned user ID
Response
project updated
The project ID
"project123xyz"
The project name
"Smith Family Onboarding"
Project status
in_progress, overdue, completed, cancelled The book ID
"book123xyz"
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Percent complete for the current milestone
Percent complete for the whole project
The project template ID
"template123xyz"
The current project milestone ID
"milestone123xyz"
Assigned user ID
Creator user ID
Attached household ID for household projects
Related record model type, or null for ownerless projects
Household, Contact, Business Related record ID, or null for ownerless projects
Show child attributes
Show child attributes
Active comment count
Show child attributes
Show child attributes
Show child attributes
Show child attributes
The related household, contact, or business. Null for ownerless projects.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
curl --request PATCH \
--url https://api.slant.app/v1/projects/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Updated onboarding",
"description": "<string>",
"projectable_id": "<string>",
"project_template_id": "<string>",
"project_milestone_id": "<string>",
"assigned_to_id": "<string>"
}
'import requests
url = "https://api.slant.app/v1/projects/{id}"
payload = {
"name": "Updated onboarding",
"description": "<string>",
"projectable_id": "<string>",
"project_template_id": "<string>",
"project_milestone_id": "<string>",
"assigned_to_id": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Updated onboarding',
description: '<string>',
projectable_id: '<string>',
project_template_id: '<string>',
project_milestone_id: '<string>',
assigned_to_id: '<string>'
})
};
fetch('https://api.slant.app/v1/projects/{id}', 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://api.slant.app/v1/projects/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Updated onboarding',
'description' => '<string>',
'projectable_id' => '<string>',
'project_template_id' => '<string>',
'project_milestone_id' => '<string>',
'assigned_to_id' => '<string>'
]),
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://api.slant.app/v1/projects/{id}"
payload := strings.NewReader("{\n \"name\": \"Updated onboarding\",\n \"description\": \"<string>\",\n \"projectable_id\": \"<string>\",\n \"project_template_id\": \"<string>\",\n \"project_milestone_id\": \"<string>\",\n \"assigned_to_id\": \"<string>\"\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.slant.app/v1/projects/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Updated onboarding\",\n \"description\": \"<string>\",\n \"projectable_id\": \"<string>\",\n \"project_template_id\": \"<string>\",\n \"project_milestone_id\": \"<string>\",\n \"assigned_to_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.slant.app/v1/projects/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Updated onboarding\",\n \"description\": \"<string>\",\n \"projectable_id\": \"<string>\",\n \"project_template_id\": \"<string>\",\n \"project_milestone_id\": \"<string>\",\n \"assigned_to_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "project123xyz",
"name": "Smith Family Onboarding",
"book_id": "book123xyz",
"project_milestone": {
"id": "milestone123xyz",
"title": "Initial Setup",
"project_template_id": "template123xyz",
"guid": "milestone-guid",
"color": "<string>",
"sort_order": 123,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"project_milestone_outcomes": [
{
"id": "outcome123xyz",
"label": "Ready for accounts",
"default_comment": "<string>",
"sort_order": 123,
"target_project_milestone_id": "<string>"
}
],
"project_milestone_form_fields": [
{
"id": "field123xyz",
"label": "Custodian",
"required": true,
"guid": "field-guid",
"placeholder": "<string>",
"sort_order": 123,
"household_record_source": "<string>",
"select_options": [
"<string>"
]
}
]
},
"project_template": {
"id": "template123xyz",
"title": "New Client Onboarding",
"project_milestones": [
{
"id": "milestone123xyz",
"title": "Initial Setup",
"project_template_id": "template123xyz",
"guid": "milestone-guid",
"color": "<string>",
"sort_order": 123,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"project_milestone_outcomes": [
{
"id": "outcome123xyz",
"label": "Ready for accounts",
"default_comment": "<string>",
"sort_order": 123,
"target_project_milestone_id": "<string>"
}
],
"project_milestone_form_fields": [
{
"id": "field123xyz",
"label": "Custodian",
"required": true,
"guid": "field-guid",
"placeholder": "<string>",
"sort_order": 123,
"household_record_source": "<string>",
"select_options": [
"<string>"
]
}
]
}
],
"guid": "template-guid",
"description": "<string>",
"enable_kanban_view": true,
"book_id": "<string>",
"order_index": 123,
"book_name": "<string>",
"book_initials": "<string>",
"attachments": [
{
"file_name": "onboarding.pdf",
"file_type": "application/pdf",
"file_size": 123456,
"source": "uploaded",
"signed_id": "signed-blob-id",
"download_url": "<string>",
"view_url": "<string>"
}
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
},
"milestone_progress": 123,
"overall_progress": 123,
"milestone_updated_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"project_template_id": "template123xyz",
"project_milestone_id": "milestone123xyz",
"assigned_to_id": "<string>",
"created_by_id": "<string>",
"household_id": "<string>",
"projectable_id": "<string>",
"description": {
"html": "<string>",
"markdown": "<string>",
"nodes": null,
"preferred_format": "<string>"
},
"comments_count": 123,
"milestone_progresses": [
{}
],
"visited_project_milestone_ids": [
"<string>"
],
"attachments": [
{
"file_name": "onboarding.pdf",
"file_type": "application/pdf",
"file_size": 123456,
"source": "uploaded",
"signed_id": "signed-blob-id",
"download_url": "<string>",
"view_url": "<string>"
}
],
"household": {
"id": "<string>",
"name": "<string>"
},
"projectable": {
"id": "abc123xyz",
"name": "Smith Household",
"person": {
"id": "abc123xyz",
"book_id": "book123xyz",
"first_name": "John",
"last_name": "Doe",
"household_id": "xyz789abc",
"contact_id": "cnt456def",
"role_type": "client",
"middle_name": "Robert",
"salutation": "Mr.",
"suffix": "Jr.",
"maiden_name": "Smith",
"gender": "male",
"designations": "CPA, CFP",
"household_role": "head_of_household",
"preferred_name": "Johnny",
"date_of_birth": "1985-06-15",
"job_title": "Software Engineer",
"ssn": "***-**-6789",
"drivers_license_number": "******7890",
"email_addresses": [
{
"email": "john.doe@example.com",
"email_type": "personal",
"is_primary": true
}
],
"phone_numbers": [
{
"phone_number": "+15555551234",
"phone_type": "mobile",
"is_primary": true,
"extension": "1234"
}
],
"addresses": [
{
"address_type": "home",
"is_primary": true,
"line1": "123 Main St",
"line2": "Apt 4B",
"city": "New York",
"state": "NY",
"zip": "10001",
"country_code": "US"
}
],
"employments": [
{
"business_name": "Acme Corp",
"id": "emp123xyz",
"person_id": "abc123xyz",
"role": "Software Engineer",
"start_date": "2023-01-15",
"end_date": "2024-12-31",
"actively_employed": true
}
],
"custom_fields": {
"preferred_contact_method": "Email",
"risk_tolerance": "Moderate"
}
}
},
"assigned_to": {
"id": "abc123xyz",
"email": "user@example.com",
"first_name": "John",
"last_name": "Doe",
"api_access": {
"auth_type": "personal_access_token",
"scope": "read_write"
}
},
"created_by": {
"id": "abc123xyz",
"email": "user@example.com",
"first_name": "John",
"last_name": "Doe",
"api_access": {
"auth_type": "personal_access_token",
"scope": "read_write"
}
},
"project_form_field_responses": [
{
"id": "response123xyz",
"project_milestone_form_field_id": "field123xyz",
"value": "<unknown>",
"display_value": "<string>"
}
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}{
"error": "invalid_json",
"detail": "<string>"
}{
"detail": "<string>"
}{
"error": "record_not_found",
"detail": "<string>"
}