Model Runs
Create a model run
Create and execute a model run. Provide the time range and the data point IDs to use as inputs. The model’s node tree is evaluated against the provided data points.
POST
/
models
/
{model_id}
/
model_runs
Create a model run
curl --request POST \
--url https://app.gomangrove.com/api/v1/models/{model_id}/model_runs \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"model_run": {
"start_time": "2025-01-01T00:00:00Z",
"end_time": "2025-03-31T23:59:59Z",
"data_point_ids": [
"in_abc123",
"in_def456"
]
}
}
'import requests
url = "https://app.gomangrove.com/api/v1/models/{model_id}/model_runs"
payload = { "model_run": {
"start_time": "2025-01-01T00:00:00Z",
"end_time": "2025-03-31T23:59:59Z",
"data_point_ids": ["in_abc123", "in_def456"]
} }
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model_run: {
start_time: '2025-01-01T00:00:00Z',
end_time: '2025-03-31T23:59:59Z',
data_point_ids: ['in_abc123', 'in_def456']
}
})
};
fetch('https://app.gomangrove.com/api/v1/models/{model_id}/model_runs', 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.gomangrove.com/api/v1/models/{model_id}/model_runs",
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([
'model_run' => [
'start_time' => '2025-01-01T00:00:00Z',
'end_time' => '2025-03-31T23:59:59Z',
'data_point_ids' => [
'in_abc123',
'in_def456'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"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.gomangrove.com/api/v1/models/{model_id}/model_runs"
payload := strings.NewReader("{\n \"model_run\": {\n \"start_time\": \"2025-01-01T00:00:00Z\",\n \"end_time\": \"2025-03-31T23:59:59Z\",\n \"data_point_ids\": [\n \"in_abc123\",\n \"in_def456\"\n ]\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
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.gomangrove.com/api/v1/models/{model_id}/model_runs")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"model_run\": {\n \"start_time\": \"2025-01-01T00:00:00Z\",\n \"end_time\": \"2025-03-31T23:59:59Z\",\n \"data_point_ids\": [\n \"in_abc123\",\n \"in_def456\"\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.gomangrove.com/api/v1/models/{model_id}/model_runs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model_run\": {\n \"start_time\": \"2025-01-01T00:00:00Z\",\n \"end_time\": \"2025-03-31T23:59:59Z\",\n \"data_point_ids\": [\n \"in_abc123\",\n \"in_def456\"\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "mr_AbCd1234567890Ef",
"start_time": "2025-01-01T00:00:00.000Z",
"end_time": "2025-03-31T23:59:59.000Z",
"state": "updated",
"error_message": null,
"processed": true,
"incomplete_nodes": [],
"created_at": "2025-01-15T10:00:00.000Z",
"updated_at": "2025-01-15T10:00:00.000Z",
"calculations": [
{
"id": 1,
"name": "Net Carbon Removal",
"value": 100.5,
"unit": "t",
"ghg": "co2e",
"lca_role": "net",
"category": "removal"
}
],
"output_data_points": [
{
"id": "in_abc123",
"slug": "net-carbon-removal",
"data_point_type": "Net Carbon Removal",
"value": 100.5,
"unit": "t",
"status": "complete"
}
]
}{
"errors": [
{
"message": "Missing required data points"
}
]
}Authorizations
Path Parameters
Model friendly ID (e.g., mod_abc123def456)
Body
application/json
Show child attributes
Show child attributes
Response
201
Model run friendly ID.
Available options:
incomplete, staged, processing, updated, error Whether the run has been through processing. false with state: incomplete means the run has not been processed yet.
The nodes a run in the incomplete state could not compute, up to 50. Empty in every other state.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
⌘I
Create a model run
curl --request POST \
--url https://app.gomangrove.com/api/v1/models/{model_id}/model_runs \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"model_run": {
"start_time": "2025-01-01T00:00:00Z",
"end_time": "2025-03-31T23:59:59Z",
"data_point_ids": [
"in_abc123",
"in_def456"
]
}
}
'import requests
url = "https://app.gomangrove.com/api/v1/models/{model_id}/model_runs"
payload = { "model_run": {
"start_time": "2025-01-01T00:00:00Z",
"end_time": "2025-03-31T23:59:59Z",
"data_point_ids": ["in_abc123", "in_def456"]
} }
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model_run: {
start_time: '2025-01-01T00:00:00Z',
end_time: '2025-03-31T23:59:59Z',
data_point_ids: ['in_abc123', 'in_def456']
}
})
};
fetch('https://app.gomangrove.com/api/v1/models/{model_id}/model_runs', 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.gomangrove.com/api/v1/models/{model_id}/model_runs",
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([
'model_run' => [
'start_time' => '2025-01-01T00:00:00Z',
'end_time' => '2025-03-31T23:59:59Z',
'data_point_ids' => [
'in_abc123',
'in_def456'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"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.gomangrove.com/api/v1/models/{model_id}/model_runs"
payload := strings.NewReader("{\n \"model_run\": {\n \"start_time\": \"2025-01-01T00:00:00Z\",\n \"end_time\": \"2025-03-31T23:59:59Z\",\n \"data_point_ids\": [\n \"in_abc123\",\n \"in_def456\"\n ]\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
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.gomangrove.com/api/v1/models/{model_id}/model_runs")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"model_run\": {\n \"start_time\": \"2025-01-01T00:00:00Z\",\n \"end_time\": \"2025-03-31T23:59:59Z\",\n \"data_point_ids\": [\n \"in_abc123\",\n \"in_def456\"\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.gomangrove.com/api/v1/models/{model_id}/model_runs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model_run\": {\n \"start_time\": \"2025-01-01T00:00:00Z\",\n \"end_time\": \"2025-03-31T23:59:59Z\",\n \"data_point_ids\": [\n \"in_abc123\",\n \"in_def456\"\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "mr_AbCd1234567890Ef",
"start_time": "2025-01-01T00:00:00.000Z",
"end_time": "2025-03-31T23:59:59.000Z",
"state": "updated",
"error_message": null,
"processed": true,
"incomplete_nodes": [],
"created_at": "2025-01-15T10:00:00.000Z",
"updated_at": "2025-01-15T10:00:00.000Z",
"calculations": [
{
"id": 1,
"name": "Net Carbon Removal",
"value": 100.5,
"unit": "t",
"ghg": "co2e",
"lca_role": "net",
"category": "removal"
}
],
"output_data_points": [
{
"id": "in_abc123",
"slug": "net-carbon-removal",
"data_point_type": "Net Carbon Removal",
"value": 100.5,
"unit": "t",
"status": "complete"
}
]
}{
"errors": [
{
"message": "Missing required data points"
}
]
}