curl --request POST \
--url https://mcp.sagescreen.net/tools/relay_bc_task_created \
--header 'Content-Type: application/json' \
--header 'X-Service-Token: <api-key>' \
--data '
{
"record_id": "<string>",
"task_id": "<string>",
"title": "<string>",
"workspace_id": "<string>",
"due_at": "<string>",
"cross_record_type": "<string>",
"cross_record_id": "<string>"
}
'import requests
url = "https://mcp.sagescreen.net/tools/relay_bc_task_created"
payload = {
"record_id": "<string>",
"task_id": "<string>",
"title": "<string>",
"workspace_id": "<string>",
"due_at": "<string>",
"cross_record_type": "<string>",
"cross_record_id": "<string>"
}
headers = {
"X-Service-Token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Service-Token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
record_id: '<string>',
task_id: '<string>',
title: '<string>',
workspace_id: '<string>',
due_at: '<string>',
cross_record_type: '<string>',
cross_record_id: '<string>'
})
};
fetch('https://mcp.sagescreen.net/tools/relay_bc_task_created', 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://mcp.sagescreen.net/tools/relay_bc_task_created",
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([
'record_id' => '<string>',
'task_id' => '<string>',
'title' => '<string>',
'workspace_id' => '<string>',
'due_at' => '<string>',
'cross_record_type' => '<string>',
'cross_record_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Service-Token: <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://mcp.sagescreen.net/tools/relay_bc_task_created"
payload := strings.NewReader("{\n \"record_id\": \"<string>\",\n \"task_id\": \"<string>\",\n \"title\": \"<string>\",\n \"workspace_id\": \"<string>\",\n \"due_at\": \"<string>\",\n \"cross_record_type\": \"<string>\",\n \"cross_record_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Service-Token", "<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://mcp.sagescreen.net/tools/relay_bc_task_created")
.header("X-Service-Token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"record_id\": \"<string>\",\n \"task_id\": \"<string>\",\n \"title\": \"<string>\",\n \"workspace_id\": \"<string>\",\n \"due_at\": \"<string>\",\n \"cross_record_type\": \"<string>\",\n \"cross_record_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://mcp.sagescreen.net/tools/relay_bc_task_created")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Service-Token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"record_id\": \"<string>\",\n \"task_id\": \"<string>\",\n \"title\": \"<string>\",\n \"workspace_id\": \"<string>\",\n \"due_at\": \"<string>\",\n \"cross_record_type\": \"<string>\",\n \"cross_record_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{}{
"error": "<string>",
"detail": "<string>"
}{
"error": "Unauthorized"
}{
"error": "<string>",
"detail": "<string>"
}{
"error": "<string>",
"detail": "<string>"
}Build a Breakcold ``task.created``-shaped payload and POST it to the
Build a Breakcold task.created-shaped payload and POST it to the
fixed Zapier catch-hook. Breakcold itself is never called.
Called by triage-bc right after tasks_create so the downstream
Zapier flow (enrichment, Akiflow twin, Notion tracking page) runs. The
routine’s own sandbox cannot reach Zapier directly; this server can.
record_id: the Breakcold CRM record id the task is linked to
task_id: the new Breakcold task id, from tasks_create’s response
title: the task title
workspace_id: the Breakcold workspace id (from workspaces_list)
due_at: the due date just set on the task, ISO 8601
cross_record_type: optional BC Index cross-reference type for the row
(one of person, company, deal, investor_deals,
consulting_deals). When set, cross_record_id must also be set
(both or neither); a type without an id, or an id without a type, is
rejected as a caller defect. When both are set they are included in the
POSTed payload’s data as crossRecordType / crossRecordId so
the downstream enrich flow can persist them onto the BC Index row’s
cross_record_type (select) and cross_record_id (rich_text)
columns. Omitted from the payload when neither is set, so callers that
pass none of this keep the prior shape unchanged.
cross_record_id: optional BC Index cross-reference id (the deal id when
cross_record_type is a deal variant). Both-or-neither with
cross_record_type.
Returns a JSON string:
{"status": "ok"}when Zapier accepted (2xx){"status": "error", "error": "..."}on validation failure or Zapier error. Never includes the catch-hook URL’s secret path beyond what is already fixed in this module.
curl --request POST \
--url https://mcp.sagescreen.net/tools/relay_bc_task_created \
--header 'Content-Type: application/json' \
--header 'X-Service-Token: <api-key>' \
--data '
{
"record_id": "<string>",
"task_id": "<string>",
"title": "<string>",
"workspace_id": "<string>",
"due_at": "<string>",
"cross_record_type": "<string>",
"cross_record_id": "<string>"
}
'import requests
url = "https://mcp.sagescreen.net/tools/relay_bc_task_created"
payload = {
"record_id": "<string>",
"task_id": "<string>",
"title": "<string>",
"workspace_id": "<string>",
"due_at": "<string>",
"cross_record_type": "<string>",
"cross_record_id": "<string>"
}
headers = {
"X-Service-Token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Service-Token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
record_id: '<string>',
task_id: '<string>',
title: '<string>',
workspace_id: '<string>',
due_at: '<string>',
cross_record_type: '<string>',
cross_record_id: '<string>'
})
};
fetch('https://mcp.sagescreen.net/tools/relay_bc_task_created', 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://mcp.sagescreen.net/tools/relay_bc_task_created",
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([
'record_id' => '<string>',
'task_id' => '<string>',
'title' => '<string>',
'workspace_id' => '<string>',
'due_at' => '<string>',
'cross_record_type' => '<string>',
'cross_record_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Service-Token: <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://mcp.sagescreen.net/tools/relay_bc_task_created"
payload := strings.NewReader("{\n \"record_id\": \"<string>\",\n \"task_id\": \"<string>\",\n \"title\": \"<string>\",\n \"workspace_id\": \"<string>\",\n \"due_at\": \"<string>\",\n \"cross_record_type\": \"<string>\",\n \"cross_record_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Service-Token", "<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://mcp.sagescreen.net/tools/relay_bc_task_created")
.header("X-Service-Token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"record_id\": \"<string>\",\n \"task_id\": \"<string>\",\n \"title\": \"<string>\",\n \"workspace_id\": \"<string>\",\n \"due_at\": \"<string>\",\n \"cross_record_type\": \"<string>\",\n \"cross_record_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://mcp.sagescreen.net/tools/relay_bc_task_created")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Service-Token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"record_id\": \"<string>\",\n \"task_id\": \"<string>\",\n \"title\": \"<string>\",\n \"workspace_id\": \"<string>\",\n \"due_at\": \"<string>\",\n \"cross_record_type\": \"<string>\",\n \"cross_record_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{}{
"error": "<string>",
"detail": "<string>"
}{
"error": "Unauthorized"
}{
"error": "<string>",
"detail": "<string>"
}{
"error": "<string>",
"detail": "<string>"
}Authorizations
Body
Response
Tool result. The shape is tool-specific; most tools return a JSON object, some a {"result": ...} envelope.
The response is of type object.