Save an exact app revision for reuse
curl --request POST \
--url https://api.openworklabs.com/v1/apps/{appId}/save \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--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 = {
"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({
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 => [
"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.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("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.openworklabs.com/v1/apps/{appId}/save")
.header("Authorization", "Bearer <token>")
.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["Authorization"] = 'Bearer <token>'
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",
"useInWorkflow": true
}Apps
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.
POST
/
v1
/
apps
/
{appId}
/
save
Save an exact app revision for reuse
curl --request POST \
--url https://api.openworklabs.com/v1/apps/{appId}/save \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--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 = {
"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({
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 => [
"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.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("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.openworklabs.com/v1/apps/{appId}/save")
.header("Authorization", "Bearer <token>")
.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["Authorization"] = 'Bearer <token>'
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",
"useInWorkflow": true
}Authorizations
bearerAuthdenApiKey
Session token passed as Authorization: Bearer <session-token> for user-authenticated Den routes.
Path Parameters
Body
application/json
Response
200 - application/json
App saved.
Required string length:
1 - 160Required string length:
1 - 160Required string length:
1 - 255Maximum string length:
2000Available options:
active, retired Required string length:
1 - 160Show child attributes
Show child attributes
Pattern:
^(?:(?:\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))$Pattern:
^(?:(?:\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))$Was this page helpful?