Update workspace fork exclusions

Include or exclude selected workflows from fork sync with workspace Admin access. Excluded workflows are skipped as sources and targets. Missing, archived, and unchanged workflow IDs are skipped. Billing-enabled deployments require Enterprise. Billing-disabled deployments require forking to be enabled by deployment feature configuration, such as FORKING_ENABLED. Workspace API keys return 403; use a personal API key or scoped OAuth token.

OAuth scope: api:write.

PUT/api/v2/workspaces/{workspaceId}/fork/exclusions
X-API-Key<token>

Send a personal or workspace API key in X-API-Key. See key types and access; operations that reject workspace keys say so in their description.

In: header

Request examples use an API key. For OAuth, replace the X-API-Key header with Authorization: Bearer YOUR_ACCESS_TOKEN.

curl -X PUT "https://www.sim.ai/api/v2/workspaces/string/fork/exclusions" \  -H "X-API-Key: YOUR_API_KEY" \  -H "Content-Type: application/json" \  -d '{    "workflowIds": [      "string"    ],    "forkSyncExcluded": true  }'
const body = JSON.stringify({  "workflowIds": [    "string"  ],  "forkSyncExcluded": true})fetch("https://www.sim.ai/api/v2/workspaces/string/fork/exclusions", {  method: "PUT",  headers: {    "Content-Type": "application/json",    "X-API-Key": "YOUR_API_KEY"  },  body})
package mainimport (  "fmt"  "net/http"  "io/ioutil"  "strings")func main() {  url := "https://www.sim.ai/api/v2/workspaces/string/fork/exclusions"  body := strings.NewReader(`{    "workflowIds": [      "string"    ],    "forkSyncExcluded": true  }`)  req, _ := http.NewRequest("PUT", url, body)  req.Header.Add("X-API-Key", "YOUR_API_KEY")  req.Header.Add("Content-Type", "application/json")  res, _ := http.DefaultClient.Do(req)  defer res.Body.Close()  body, _ := ioutil.ReadAll(res.Body)  fmt.Println(res)  fmt.Println(string(body))}
import requestsurl = "https://www.sim.ai/api/v2/workspaces/string/fork/exclusions"body = """{  "workflowIds": [    "string"  ],  "forkSyncExcluded": true}"""response = requests.request("PUT", url, data = body, headers = {  "Content-Type": "application/json",   "X-API-Key": "YOUR_API_KEY"})print(response.text)
import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;import java.net.http.HttpResponse.BodyHandlers;import java.time.Duration;import java.net.http.HttpRequest.BodyPublishers;var body = BodyPublishers.ofString("""{  "workflowIds": [    "string"  ],  "forkSyncExcluded": true}""");HttpClient client = HttpClient.newBuilder()  .connectTimeout(Duration.ofSeconds(10))  .build();HttpRequest.Builder requestBuilder = HttpRequest.newBuilder()  .uri(URI.create("https://www.sim.ai/api/v2/workspaces/string/fork/exclusions"))  .header("X-API-Key", "YOUR_API_KEY")  .header("Content-Type", "application/json")  .PUT(body)  .build();try {  HttpResponse<String> response = client.send(requestBuilder.build(), BodyHandlers.ofString());  System.out.println("Status code: " + response.statusCode());  System.out.println("Response body: " + response.body());} catch (Exception e) {  e.printStackTrace();}
using System;using System.Net.Http;using System.Text;var body = new StringContent("""{  "workflowIds": [    "string"  ],  "forkSyncExcluded": true}""", Encoding.UTF8, "application/json");var client = new HttpClient();client.DefaultRequestHeaders.Add("X-API-Key", "YOUR_API_KEY");var response = await client.PutAsync("https://www.sim.ai/api/v2/workspaces/string/fork/exclusions", body);var responseBody = await response.Content.ReadAsStringAsync();
{
  "data": {
    "updated": 0
  }
}
{
  "error": {
    "code": "BAD_REQUEST",
    "message": "Invalid request"
  }
}
{
  "error": {
    "code": "UNAUTHORIZED",
    "message": "Authentication required"
  }
}
{
  "error": {
    "code": "FORBIDDEN",
    "message": "Insufficient workspace permissions",
    "details": {
      "code": "INSUFFICIENT_WORKSPACE_ROLE"
    }
  }
}
{
  "error": {
    "code": "NOT_FOUND",
    "message": "Not found"
  }
}
{
  "error": {
    "code": "CONFLICT",
    "message": "The request conflicts with current resource state"
  }
}
{
  "error": {
    "code": "PAYLOAD_TOO_LARGE",
    "message": "Request body is too large"
  }
}
{
  "error": {
    "code": "RATE_LIMITED",
    "message": "API rate limit exceeded",
    "details": {
      "retryAfter": "2026-01-01T00:00:30.000Z"
    }
  }
}
{
  "error": {
    "code": "INTERNAL_ERROR",
    "message": "Internal server error"
  }
}
{
  "error": {
    "code": "SERVICE_UNAVAILABLE",
    "message": "Service temporarily unavailable"
  }
}

Path parameters

workspaceId*string

Explicit current workspace scope.

Length1 <= length <= 128

Request body

application/json

Workflow IDs and whether to exclude them from sync.

TypeScript definitions

Use the request body type in TypeScript.

Response body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json