EN IT

Content Actions

Endpoints for executing custom actions and navigations on content items. Actions can run synchronously or asynchronously with callback support for long-running workflows.

Base URL: https://api.contit.cloud

GET /actions/{contentTypeKey}/{contentId}/{actionId}/execute

Execute action

Execute a custom action defined on a content type for a specific content item. If the action has UseCallback enabled, returns an operationId and callbackUrl for async tracking. Otherwise, executes synchronously and returns the result.

Requires ReadAccess policy

Path Parameters

NameTypeRequiredDescription
contentTypeKey string The content type key
contentId string The content item ID (GUID)
actionId string The action identifier

Responses

200 Success — action executed (sync) or accepted (async with callback)
operationId string Execution tracking ID (callback mode only)
callbackUrl string URL for the external service to report results (callback mode only)
result object Action-specific result data (sync mode only)
401 Unauthorized
404 Not Found — content or action does not exist
409 Conflict — action is already running (callback mode, duplicate prevention)

Code examples

curl -X GET "https://api.contit.cloud/actions/{contentTypeKey}/{contentId}/{actionId}/execute" \
  -H "X-Api-Key: YOUR_API_KEY"
using var http = new HttpClient();
http.DefaultRequestHeaders.Add("X-Api-Key", "YOUR_API_KEY");

var response = await http.GetAsync("https://api.contit.cloud/actions/{contentTypeKey}/{contentId}/{actionId}/execute");

response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();
const response = await fetch(
  "https://api.contit.cloud/actions/{contentTypeKey}/{contentId}/{actionId}/execute",
  {
    method: "GET",
    headers: {
      "X-Api-Key": "YOUR_API_KEY",
    }
  }
);

const data = await response.json();
import requests

headers = {"X-Api-Key": "YOUR_API_KEY"}

response = requests.get(
    "https://api.contit.cloud/actions/{contentTypeKey}/{contentId}/{actionId}/execute",
    headers=headers
)

data = response.json()
Example Request
GET /actions/Article/a1b2c3d4-e5f6-7890-abcd-ef1234567890/send-notification/execute
Example Response 200
{
  "operationId": "d4f5a6b7-c8d9-4e0f-a1b2-c3d4e5f6a7b8",
  "callbackUrl": "https://api.contit.cloud/actions/callback/ws-123/d4f5a6b7-c8d9-4e0f-a1b2-c3d4e5f6a7b8"
}
Try it Live
GET /actions/{contentTypeKey}/{contentId}/{actionId}/navigate

Get navigation URL

Get a navigation URL for a custom action, typically used to redirect users to an external page or detail view.

Requires ReadAccess policy

Path Parameters

NameTypeRequiredDescription
contentTypeKey string The content type key
contentId string The content item ID (GUID)
actionId string The action identifier

Responses

200 Success — returns a navigation URL
url string The navigation URL to redirect to
401 Unauthorized
404 Not Found

Code examples

curl -X GET "https://api.contit.cloud/actions/{contentTypeKey}/{contentId}/{actionId}/navigate" \
  -H "X-Api-Key: YOUR_API_KEY"
using var http = new HttpClient();
http.DefaultRequestHeaders.Add("X-Api-Key", "YOUR_API_KEY");

var response = await http.GetAsync("https://api.contit.cloud/actions/{contentTypeKey}/{contentId}/{actionId}/navigate");

response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();
const response = await fetch(
  "https://api.contit.cloud/actions/{contentTypeKey}/{contentId}/{actionId}/navigate",
  {
    method: "GET",
    headers: {
      "X-Api-Key": "YOUR_API_KEY",
    }
  }
);

const data = await response.json();
import requests

headers = {"X-Api-Key": "YOUR_API_KEY"}

response = requests.get(
    "https://api.contit.cloud/actions/{contentTypeKey}/{contentId}/{actionId}/navigate",
    headers=headers
)

data = response.json()
Example Request
GET /actions/Product/b2c3d4e5-f6a7-8901-bcde-f12345678901/view-external/navigate
Example Response 200
{
  "url": "https://shop.example.com/products/b2c3d4e5-f6a7-8901-bcde-f12345678901"
}
Try it Live
GET /actions/{contentTypeKey}/{contentId}/{actionId}/status

Get action execution status

Get the current execution status of a content action. Used to poll for completion when UseCallback is enabled.

Requires ReadAccess policy

Path Parameters

NameTypeRequiredDescription
contentTypeKey string The content type key
contentId string The content item ID (GUID)
actionId string The action identifier

Responses

200 Success — returns execution status
operationId string Execution tracking ID
status string Execution status: Running (0), Succeeded (1), Failed (-1)
result string Result data (available when Succeeded)
progress integer? Progress percentage 0-100 (optional, set by external service)
message string Status message for display
error string Error details (available when Failed)
updatedAt datetime Last update timestamp
401 Unauthorized
404 Not Found — no execution record exists

Code examples

curl -X GET "https://api.contit.cloud/actions/{contentTypeKey}/{contentId}/{actionId}/status" \
  -H "X-Api-Key: YOUR_API_KEY"
using var http = new HttpClient();
http.DefaultRequestHeaders.Add("X-Api-Key", "YOUR_API_KEY");

var response = await http.GetAsync("https://api.contit.cloud/actions/{contentTypeKey}/{contentId}/{actionId}/status");

response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();
const response = await fetch(
  "https://api.contit.cloud/actions/{contentTypeKey}/{contentId}/{actionId}/status",
  {
    method: "GET",
    headers: {
      "X-Api-Key": "YOUR_API_KEY",
    }
  }
);

const data = await response.json();
import requests

headers = {"X-Api-Key": "YOUR_API_KEY"}

response = requests.get(
    "https://api.contit.cloud/actions/{contentTypeKey}/{contentId}/{actionId}/status",
    headers=headers
)

data = response.json()
Example Request
GET /actions/Article/a1b2c3d4-e5f6-7890-abcd-ef1234567890/send-notification/status
Example Response 200
{
  "operationId": "d4f5a6b7-c8d9-4e0f-a1b2-c3d4e5f6a7b8",
  "status": "Running",
  "result": null,
  "progress": 50,
  "message": "Processing order items...",
  "error": null,
  "updatedAt": "2026-04-02T10:30:00Z"
}
Try it Live
POST /actions/callback/{workspaceId}/{operationId}

Action execution callback

Callback endpoint for external services (n8n, Zapier, etc.) to report action execution results. Does not require authentication — security is based on the unguessable operation ID. Send progress < 100 for intermediate updates, or set success to true/false for final completion.

Path Parameters

NameTypeRequiredDescription
workspaceId string The workspace ID
operationId string The operation ID returned by the execute endpoint

Request Body application/json

PropertyTypeRequiredDescription
success boolean true for success, false for failure
result string Result data returned to the client on success
error string Error message returned to the client on failure
message string Status message displayed in the UI
progress integer? Progress percentage (0-100). Values < 100 update progress without completing the action

Responses

200 Success — status updated
404 Not Found — operation does not exist or has expired
409 Conflict — action has already completed

Code examples

curl -X POST "https://api.contit.cloud/actions/callback/{workspaceId}/{operationId}" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "success": true,
  "result": "result_value",
  "error": "error_value",
  "message": "message_value",
  "progress": "progress_value"
}'
using var http = new HttpClient();
http.DefaultRequestHeaders.Add("X-Api-Key", "YOUR_API_KEY");

var content = new StringContent("{
  \"success\": true,
  \"result\": \"result_value\",
  \"error\": \"error_value\",
  \"message\": \"message_value\",
  \"progress\": \"progress_value\"
}",
    Encoding.UTF8, "application/json");
var response = await http.PostAsync(
    "https://api.contit.cloud/actions/callback/{workspaceId}/{operationId}", content);

response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();
const response = await fetch(
  "https://api.contit.cloud/actions/callback/{workspaceId}/{operationId}",
  {
    method: "POST",
    headers: {
      "X-Api-Key": "YOUR_API_KEY",
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
  "success": true,
  "result": "result_value",
  "error": "error_value",
  "message": "message_value",
  "progress": "progress_value"
})
  }
);

const data = await response.json();
import requests

headers = {"X-Api-Key": "YOUR_API_KEY"}
payload = {
  "success": true,
  "result": "result_value",
  "error": "error_value",
  "message": "message_value",
  "progress": "progress_value"
}

response = requests.post(
    "https://api.contit.cloud/actions/callback/{workspaceId}/{operationId}",
    json=payload,
    headers=headers
)

data = response.json()
Example Request
POST /actions/callback/ws-123/d4f5a6b7-c8d9-4e0f-a1b2-c3d4e5f6a7b8

{
  "success": true,
  "result": "Order processed successfully",
  "message": "Completed"
}
Try it Live