curl --request POST \
--url https://api.openworklabs.com/v1/apps/{appId}/save \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"revisionId": "<string>",
"title": "<string>",
"useInWorkflow": true,
"expectedActiveRevisionId": "<string>"
}
'import requests
url = "https://api.openworklabs.com/v1/apps/{appId}/save"
payload = {
"revisionId": "<string>",
"title": "<string>",
"useInWorkflow": True,
"expectedActiveRevisionId": "<string>"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
revisionId: '<string>',
title: '<string>',
useInWorkflow: true,
expectedActiveRevisionId: '<string>'
})
};
fetch('https://api.openworklabs.com/v1/apps/{appId}/save', 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.openworklabs.com/v1/apps/{appId}/save",
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([
'revisionId' => '<string>',
'title' => '<string>',
'useInWorkflow' => true,
'expectedActiveRevisionId' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$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.openworklabs.com/v1/apps/{appId}/save"
payload := strings.NewReader("{\n \"revisionId\": \"<string>\",\n \"title\": \"<string>\",\n \"useInWorkflow\": true,\n \"expectedActiveRevisionId\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<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://api.openworklabs.com/v1/apps/{appId}/save")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"revisionId\": \"<string>\",\n \"title\": \"<string>\",\n \"useInWorkflow\": true,\n \"expectedActiveRevisionId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.openworklabs.com/v1/apps/{appId}/save")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"revisionId\": \"<string>\",\n \"title\": \"<string>\",\n \"useInWorkflow\": true,\n \"expectedActiveRevisionId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"configObjectId": "<string>",
"title": "<string>",
"description": "<string>",
"status": "active",
"activeRevisionId": "<string>",
"revisions": [
{
"id": "<string>",
"artifactViewId": "<string>",
"resourceUri": "<string>",
"buildStatus": "ready",
"sourceDigest": "<string>",
"resourceDigest": "<string>",
"outputSchemaDigest": "<string>",
"csp": {
"connectDomains": [
"<string>"
],
"resourceDomains": [
"<string>"
],
"frameDomains": [
"<string>"
],
"baseUriDomains": [
"<string>"
]
},
"diagnostics": [
{
"level": "error",
"message": "<string>",
"line": 4503599627370495,
"column": 4503599627370495
}
],
"compilerName": "<string>",
"compilerVersion": "<string>",
"reactVersion": "<string>",
"compiledHtmlBytes": 4503599627370495,
"retiredAt": "2023-11-07T05:31:56Z",
"createdAt": "2023-11-07T05:31:56Z"
}
],
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"dataMode": "live",
"useInWorkflow": true
}Save an exact app revision for reuse
Activates the exact revisionId as the app’s saved revision, sets its title and useInWorkflow flag, and places the app on the caller’s dashboard in one transaction. Requires manager access to the Workflow; the revision must have finished building (artifact_view_revision_not_ready) and its output schema must match the Workflow’s current version (artifact_view_schema_incompatible). expectedActiveRevisionId must equal the revision that is active right now (null when none); otherwise the save is refused with 409 app_changed_since_preview so a stale preview cannot overwrite a newer save.
curl --request POST \
--url https://api.openworklabs.com/v1/apps/{appId}/save \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"revisionId": "<string>",
"title": "<string>",
"useInWorkflow": true,
"expectedActiveRevisionId": "<string>"
}
'import requests
url = "https://api.openworklabs.com/v1/apps/{appId}/save"
payload = {
"revisionId": "<string>",
"title": "<string>",
"useInWorkflow": True,
"expectedActiveRevisionId": "<string>"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
revisionId: '<string>',
title: '<string>',
useInWorkflow: true,
expectedActiveRevisionId: '<string>'
})
};
fetch('https://api.openworklabs.com/v1/apps/{appId}/save', 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.openworklabs.com/v1/apps/{appId}/save",
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([
'revisionId' => '<string>',
'title' => '<string>',
'useInWorkflow' => true,
'expectedActiveRevisionId' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$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.openworklabs.com/v1/apps/{appId}/save"
payload := strings.NewReader("{\n \"revisionId\": \"<string>\",\n \"title\": \"<string>\",\n \"useInWorkflow\": true,\n \"expectedActiveRevisionId\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<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://api.openworklabs.com/v1/apps/{appId}/save")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"revisionId\": \"<string>\",\n \"title\": \"<string>\",\n \"useInWorkflow\": true,\n \"expectedActiveRevisionId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.openworklabs.com/v1/apps/{appId}/save")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"revisionId\": \"<string>\",\n \"title\": \"<string>\",\n \"useInWorkflow\": true,\n \"expectedActiveRevisionId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"configObjectId": "<string>",
"title": "<string>",
"description": "<string>",
"status": "active",
"activeRevisionId": "<string>",
"revisions": [
{
"id": "<string>",
"artifactViewId": "<string>",
"resourceUri": "<string>",
"buildStatus": "ready",
"sourceDigest": "<string>",
"resourceDigest": "<string>",
"outputSchemaDigest": "<string>",
"csp": {
"connectDomains": [
"<string>"
],
"resourceDomains": [
"<string>"
],
"frameDomains": [
"<string>"
],
"baseUriDomains": [
"<string>"
]
},
"diagnostics": [
{
"level": "error",
"message": "<string>",
"line": 4503599627370495,
"column": 4503599627370495
}
],
"compilerName": "<string>",
"compilerVersion": "<string>",
"reactVersion": "<string>",
"compiledHtmlBytes": 4503599627370495,
"retiredAt": "2023-11-07T05:31:56Z",
"createdAt": "2023-11-07T05:31:56Z"
}
],
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"dataMode": "live",
"useInWorkflow": true
}Authorizations
Organization API key passed as the x-api-key header. The raw key is the header value; do not prefix it with Bearer.
Path Parameters
Body
Response
App saved.
1 - 1601 - 1601 - 2552000active, retired 1 - 160Show child attributes
Show child attributes
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$live, snapshot Was this page helpful?