curl --request POST \
--url https://api.realtimelca.com/rest/api/BuildingProject/base \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Spacious Ship",
"buildingTypeId": 1,
"yearOfConstruction": 2024,
"yearOfCommissioning": 2026,
"projectStatusId": 1,
"models": [
{
"name": "arkitektur",
"active": true
},
{
"name": "konstruktion"
}
]
}
'import requests
url = "https://api.realtimelca.com/rest/api/BuildingProject/base"
payload = {
"name": "Spacious Ship",
"buildingTypeId": 1,
"yearOfConstruction": 2024,
"yearOfCommissioning": 2026,
"projectStatusId": 1,
"models": [{
"name": "arkitektur",
"active": True
}, { "name": "konstruktion" }]
}
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({
name: 'Spacious Ship',
buildingTypeId: 1,
yearOfConstruction: 2024,
yearOfCommissioning: 2026,
projectStatusId: 1,
models: [{name: 'arkitektur', active: true}, {name: 'konstruktion'}]
})
};
fetch('https://api.realtimelca.com/rest/api/BuildingProject/base', 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.realtimelca.com/rest/api/BuildingProject/base",
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([
'name' => 'Spacious Ship',
'buildingTypeId' => 1,
'yearOfConstruction' => 2024,
'yearOfCommissioning' => 2026,
'projectStatusId' => 1,
'models' => [
[
'name' => 'arkitektur',
'active' => true
],
[
'name' => 'konstruktion'
]
]
]),
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.realtimelca.com/rest/api/BuildingProject/base"
payload := strings.NewReader("{\n \"name\": \"Spacious Ship\",\n \"buildingTypeId\": 1,\n \"yearOfConstruction\": 2024,\n \"yearOfCommissioning\": 2026,\n \"projectStatusId\": 1,\n \"models\": [\n {\n \"name\": \"arkitektur\",\n \"active\": true\n },\n {\n \"name\": \"konstruktion\"\n }\n ]\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://api.realtimelca.com/rest/api/BuildingProject/base")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Spacious Ship\",\n \"buildingTypeId\": 1,\n \"yearOfConstruction\": 2024,\n \"yearOfCommissioning\": 2026,\n \"projectStatusId\": 1,\n \"models\": [\n {\n \"name\": \"arkitektur\",\n \"active\": true\n },\n {\n \"name\": \"konstruktion\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.realtimelca.com/rest/api/BuildingProject/base")
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 \"name\": \"Spacious Ship\",\n \"buildingTypeId\": 1,\n \"yearOfConstruction\": 2024,\n \"yearOfCommissioning\": 2026,\n \"projectStatusId\": 1,\n \"models\": [\n {\n \"name\": \"arkitektur\",\n \"active\": true\n },\n {\n \"name\": \"konstruktion\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "8f6b1c2e-5a4d-4f39-9c07-2b1d6e8a3f45",
"activeRevisionId": "c1d40a77-9e28-4bb6-8f52-7ad3e9b04c16"
}Create Base Project
Creates a building project from the smallest set of fields the platform needs, and returns the new project’s id along with the id of its initial revision. Everything else — areas, calculation type, classification, site and operational energy, transport, and members — is configured afterwards.
Use this rather than Create Project when you want the project to exist first and be filled in later.
Method: POST
URL: {{lcabaseUrl}}/BuildingProject/base
Authentication: Bearer Token ({{BearerToken}})
Permission: the caller needs the CreateProject tenant permission.
curl --request POST \
--url https://api.realtimelca.com/rest/api/BuildingProject/base \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Spacious Ship",
"buildingTypeId": 1,
"yearOfConstruction": 2024,
"yearOfCommissioning": 2026,
"projectStatusId": 1,
"models": [
{
"name": "arkitektur",
"active": true
},
{
"name": "konstruktion"
}
]
}
'import requests
url = "https://api.realtimelca.com/rest/api/BuildingProject/base"
payload = {
"name": "Spacious Ship",
"buildingTypeId": 1,
"yearOfConstruction": 2024,
"yearOfCommissioning": 2026,
"projectStatusId": 1,
"models": [{
"name": "arkitektur",
"active": True
}, { "name": "konstruktion" }]
}
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({
name: 'Spacious Ship',
buildingTypeId: 1,
yearOfConstruction: 2024,
yearOfCommissioning: 2026,
projectStatusId: 1,
models: [{name: 'arkitektur', active: true}, {name: 'konstruktion'}]
})
};
fetch('https://api.realtimelca.com/rest/api/BuildingProject/base', 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.realtimelca.com/rest/api/BuildingProject/base",
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([
'name' => 'Spacious Ship',
'buildingTypeId' => 1,
'yearOfConstruction' => 2024,
'yearOfCommissioning' => 2026,
'projectStatusId' => 1,
'models' => [
[
'name' => 'arkitektur',
'active' => true
],
[
'name' => 'konstruktion'
]
]
]),
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.realtimelca.com/rest/api/BuildingProject/base"
payload := strings.NewReader("{\n \"name\": \"Spacious Ship\",\n \"buildingTypeId\": 1,\n \"yearOfConstruction\": 2024,\n \"yearOfCommissioning\": 2026,\n \"projectStatusId\": 1,\n \"models\": [\n {\n \"name\": \"arkitektur\",\n \"active\": true\n },\n {\n \"name\": \"konstruktion\"\n }\n ]\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://api.realtimelca.com/rest/api/BuildingProject/base")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Spacious Ship\",\n \"buildingTypeId\": 1,\n \"yearOfConstruction\": 2024,\n \"yearOfCommissioning\": 2026,\n \"projectStatusId\": 1,\n \"models\": [\n {\n \"name\": \"arkitektur\",\n \"active\": true\n },\n {\n \"name\": \"konstruktion\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.realtimelca.com/rest/api/BuildingProject/base")
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 \"name\": \"Spacious Ship\",\n \"buildingTypeId\": 1,\n \"yearOfConstruction\": 2024,\n \"yearOfCommissioning\": 2026,\n \"projectStatusId\": 1,\n \"models\": [\n {\n \"name\": \"arkitektur\",\n \"active\": true\n },\n {\n \"name\": \"konstruktion\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "8f6b1c2e-5a4d-4f39-9c07-2b1d6e8a3f45",
"activeRevisionId": "c1d40a77-9e28-4bb6-8f52-7ad3e9b04c16"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
The project name.
The building type the project is assessed as. Valid values come from buildingTypeEnum on the BuildingProject Enums endpoint.
The year construction starts.
The year the building is commissioned.
The design stage the project is in: 0 Competition, 1 Design, 2 Detailed Design, 3 Construction, 4 Operation, 5 Archived, 6 On Hold. Optional — omit it to leave the stage unset. Note that 0 is a real status rather than "none".
0, 1, 2, 3, 4, 5, 6 The disciplines the project is split into — one entry per model. Optional, and capped at 100 per project.
Names are trimmed and lower-cased before they are stored, and entries that normalise to the same name are folded into a single model, active if any of them was active.
Models created here are independent of Speckle: no stream is created or required. A model's commit, pull time, and referenced object stay empty until a stream is attached to it.
100Show child attributes
Show child attributes

