curl --request GET \
--url https://api.sonderplan.com/v2/project \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.sonderplan.com/v2/project"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.sonderplan.com/v2/project', 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.sonderplan.com/v2/project",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.sonderplan.com/v2/project"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.sonderplan.com/v2/project")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sonderplan.com/v2/project")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": 2342354,
"name": "Andor S1 EP7 Annoucement",
"code": "AND-S1-EP7",
"description": "Colonel Yularen announces that the ISB has gained more surveillance and punitive authority, while Meero is challenged by Blevin for breaking protocol by accessing Imperial data without authorization.",
"status": [
{
"id": 2,
"name": "Second Hold",
"description": "Has second priority if the first hold cancels",
"notification": true
}
],
"private": 0,
"parent_folder_id": 5,
"color_background": "#B0A7F1",
"color_text": "#000000",
"start": 1547501100,
"end": 1547538900,
"client": [
{
"id": 4,
"uuid": "p4",
"name": "Jane Someone",
"type": "person",
"email": "[email protected]",
"contact_person": {
"id": 2837,
"name": "Fred Flintstone"
}
}
],
"custom_fields": [
{
"id": 7823,
"name": "Type",
"value": "Video Editing",
"value_id": 8973,
"update_key": "2_1_7823"
}
],
"people": {
"users": [
{
"id": 4,
"name": "Jane Smith",
"admin_flag": 0,
"role_id": 0,
"role_name": 0,
"project_admin": true,
"group_write_admin": false
}
]
},
"time_entries": [
{
"id": 9879871,
"owner_id": 872383,
"name": "Colour Grading",
"description": "Opening scenes completed",
"start": 1547501100,
"end": 1547538900,
"booking_id": 872383
}
],
"created_id": 3,
"created": 1388552400,
"created_name": "John Smith",
"updated_id": 3,
"updated": 1388552400,
"updated_name": "John Smith"
}
],
"meta": {
"pagination": {
"total": 1,
"count": 1,
"per_page": 1,
"current_page": 1
}
}
}Get Projects
In Sonderplan a project represents a container for grouping related bookings, files, quotes and invoices. Projects allow users to organize their work by associating bookings with a specific purpose, client, or final deliverable (such as a movie or commercial).
Projects include metadata such as the project name, client information, deadlines, files, and any custom attributes defined (via custom fields) by the user. This helps streamline project management and reporting by keeping all relevant details in one place.
READ access to the PROJECT module is required to access this endpointcurl --request GET \
--url https://api.sonderplan.com/v2/project \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.sonderplan.com/v2/project"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.sonderplan.com/v2/project', 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.sonderplan.com/v2/project",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.sonderplan.com/v2/project"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.sonderplan.com/v2/project")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sonderplan.com/v2/project")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": 2342354,
"name": "Andor S1 EP7 Annoucement",
"code": "AND-S1-EP7",
"description": "Colonel Yularen announces that the ISB has gained more surveillance and punitive authority, while Meero is challenged by Blevin for breaking protocol by accessing Imperial data without authorization.",
"status": [
{
"id": 2,
"name": "Second Hold",
"description": "Has second priority if the first hold cancels",
"notification": true
}
],
"private": 0,
"parent_folder_id": 5,
"color_background": "#B0A7F1",
"color_text": "#000000",
"start": 1547501100,
"end": 1547538900,
"client": [
{
"id": 4,
"uuid": "p4",
"name": "Jane Someone",
"type": "person",
"email": "[email protected]",
"contact_person": {
"id": 2837,
"name": "Fred Flintstone"
}
}
],
"custom_fields": [
{
"id": 7823,
"name": "Type",
"value": "Video Editing",
"value_id": 8973,
"update_key": "2_1_7823"
}
],
"people": {
"users": [
{
"id": 4,
"name": "Jane Smith",
"admin_flag": 0,
"role_id": 0,
"role_name": 0,
"project_admin": true,
"group_write_admin": false
}
]
},
"time_entries": [
{
"id": 9879871,
"owner_id": 872383,
"name": "Colour Grading",
"description": "Opening scenes completed",
"start": 1547501100,
"end": 1547538900,
"booking_id": 872383
}
],
"created_id": 3,
"created": 1388552400,
"created_name": "John Smith",
"updated_id": 3,
"updated": 1388552400,
"updated_name": "John Smith"
}
],
"meta": {
"pagination": {
"total": 1,
"count": 1,
"per_page": 1,
"current_page": 1
}
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
One or more (comma seperated) IDs of projects to retrieve
Perform a partial match text search for the project name
Perform a partial match text search for the project code
Perform a partial match text search for the project description
Perform an exact match for the project status_id
Perform an exact match for the project private boolean
Perform an exact match for the project parent_folder_id
Perform a partial match text search for the projects background color
Perform a partial match text search for the projects text color
Filter projects that have a end greater than this value
Filter projects that have a start lesser than this value
Filter projects where updated is greater than this value
Filter projects where updated is lesser than this value
Return results that were added, edited or deleted since this UNIX timestamp
Comma seperated list of fields you wish to return
Specify the page of results you wish to return
The number of results returned per page. Default if not specified is 10
Specify the field (with type of string or integer) you wish to order (ascending) the response with
Specify the field (with type of string or integer) you wish to order (descending) the response with
Specify if multiple filters should be combined with OR or AND logic
OR, AND