Models
Create a new model version
Create a new version of an existing model with an updated YAML definition. Can only be called on the latest version. The new version inherits the model name and increments the version number.
POST
/
models
/
{model_id}
/
versions
Create a new model version
curl --request POST \
--url https://app.gomangrove.com/api/v1/models/{model_id}/versions \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"yaml": "nexus:\n - name: Updated Net Carbon Removal\n formula: input_1 - input_2 - input_3\n"
}
'import requests
url = "https://app.gomangrove.com/api/v1/models/{model_id}/versions"
payload = { "yaml": "nexus:
- name: Updated Net Carbon Removal
formula: input_1 - input_2 - input_3
" }
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({
yaml: 'nexus:\n - name: Updated Net Carbon Removal\n formula: input_1 - input_2 - input_3\n'
})
};
fetch('https://app.gomangrove.com/api/v1/models/{model_id}/versions', 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}/versions",
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([
'yaml' => 'nexus:
- name: Updated Net Carbon Removal
formula: input_1 - input_2 - input_3
'
]),
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}/versions"
payload := strings.NewReader("{\n \"yaml\": \"nexus:\\n - name: Updated Net Carbon Removal\\n formula: input_1 - input_2 - input_3\\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}/versions")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"yaml\": \"nexus:\\n - name: Updated Net Carbon Removal\\n formula: input_1 - input_2 - input_3\\n\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.gomangrove.com/api/v1/models/{model_id}/versions")
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 \"yaml\": \"nexus:\\n - name: Updated Net Carbon Removal\\n formula: input_1 - input_2 - input_3\\n\"\n}"
response = http.request(request)
puts response.read_body{
"id": "mdl_xyz789abc123",
"name": "Carbon Calculation Model",
"version": 2,
"is_latest": true,
"cadence": "monthly",
"partition_type": "feedstock",
"order": 1,
"created_at": "2025-01-16T10:00:00.000Z",
"updated_at": "2025-01-16T10:00:00.000Z"
}{
"status": "error",
"statusCode": 422,
"errors": [
{
"message": "Can only create versions from the latest model version"
}
]
}Authorizations
Path Parameters
Model friendly ID (e.g., mdl_abc123def456)
Body
application/json
YAML defining the updated node tree
⌘I
Create a new model version
curl --request POST \
--url https://app.gomangrove.com/api/v1/models/{model_id}/versions \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"yaml": "nexus:\n - name: Updated Net Carbon Removal\n formula: input_1 - input_2 - input_3\n"
}
'import requests
url = "https://app.gomangrove.com/api/v1/models/{model_id}/versions"
payload = { "yaml": "nexus:
- name: Updated Net Carbon Removal
formula: input_1 - input_2 - input_3
" }
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({
yaml: 'nexus:\n - name: Updated Net Carbon Removal\n formula: input_1 - input_2 - input_3\n'
})
};
fetch('https://app.gomangrove.com/api/v1/models/{model_id}/versions', 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}/versions",
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([
'yaml' => 'nexus:
- name: Updated Net Carbon Removal
formula: input_1 - input_2 - input_3
'
]),
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}/versions"
payload := strings.NewReader("{\n \"yaml\": \"nexus:\\n - name: Updated Net Carbon Removal\\n formula: input_1 - input_2 - input_3\\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}/versions")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"yaml\": \"nexus:\\n - name: Updated Net Carbon Removal\\n formula: input_1 - input_2 - input_3\\n\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.gomangrove.com/api/v1/models/{model_id}/versions")
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 \"yaml\": \"nexus:\\n - name: Updated Net Carbon Removal\\n formula: input_1 - input_2 - input_3\\n\"\n}"
response = http.request(request)
puts response.read_body{
"id": "mdl_xyz789abc123",
"name": "Carbon Calculation Model",
"version": 2,
"is_latest": true,
"cadence": "monthly",
"partition_type": "feedstock",
"order": 1,
"created_at": "2025-01-16T10:00:00.000Z",
"updated_at": "2025-01-16T10:00:00.000Z"
}{
"status": "error",
"statusCode": 422,
"errors": [
{
"message": "Can only create versions from the latest model version"
}
]
}