curl --request POST \
--url https://api.conare.ai/api/v1/connectors/{type}/actions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"endUserId": "u_123",
"method": "PATCH",
"path": "/v2/objects/companies/records/rec_123",
"body": {
"data": {
"values": {
"domains": [
{
"domain": "caeros.com"
}
]
}
}
}
}
'import requests
url = "https://api.conare.ai/api/v1/connectors/{type}/actions"
payload = {
"endUserId": "u_123",
"method": "PATCH",
"path": "/v2/objects/companies/records/rec_123",
"body": { "data": { "values": { "domains": [{ "domain": "caeros.com" }] } } }
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
endUserId: 'u_123',
method: 'PATCH',
path: '/v2/objects/companies/records/rec_123',
body: JSON.stringify({data: {values: {domains: [{domain: 'caeros.com'}]}}})
})
};
fetch('https://api.conare.ai/api/v1/connectors/{type}/actions', 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.conare.ai/api/v1/connectors/{type}/actions",
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([
'endUserId' => 'u_123',
'method' => 'PATCH',
'path' => '/v2/objects/companies/records/rec_123',
'body' => [
'data' => [
'values' => [
'domains' => [
[
'domain' => 'caeros.com'
]
]
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Idempotency-Key: <idempotency-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.conare.ai/api/v1/connectors/{type}/actions"
payload := strings.NewReader("{\n \"endUserId\": \"u_123\",\n \"method\": \"PATCH\",\n \"path\": \"/v2/objects/companies/records/rec_123\",\n \"body\": {\n \"data\": {\n \"values\": {\n \"domains\": [\n {\n \"domain\": \"caeros.com\"\n }\n ]\n }\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
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.conare.ai/api/v1/connectors/{type}/actions")
.header("Idempotency-Key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"endUserId\": \"u_123\",\n \"method\": \"PATCH\",\n \"path\": \"/v2/objects/companies/records/rec_123\",\n \"body\": {\n \"data\": {\n \"values\": {\n \"domains\": [\n {\n \"domain\": \"caeros.com\"\n }\n ]\n }\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.conare.ai/api/v1/connectors/{type}/actions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"endUserId\": \"u_123\",\n \"method\": \"PATCH\",\n \"path\": \"/v2/objects/companies/records/rec_123\",\n \"body\": {\n \"data\": {\n \"values\": {\n \"domains\": [\n {\n \"domain\": \"caeros.com\"\n }\n ]\n }\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"actionId": "<string>",
"response": {
"status": 349,
"contentType": "<string>",
"headers": {},
"body": "<string>",
"truncated": true,
"latencyMs": 123
}
}{
"statusCode": 123,
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": {}
}{
"statusCode": 123,
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": {}
}{
"statusCode": 123,
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": {}
}{
"statusCode": 123,
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": {}
}{
"statusCode": 123,
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": {}
}{
"statusCode": 123,
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": {}
}{
"statusCode": 123,
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": {}
}{
"statusCode": 123,
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": {}
}Execute an action
Execute one provider-relative write through this end user’s connected
account. Conare appends path to the connection’s fixed provider base
URL and supplies the connection’s stored credentials. Absolute URLs,
authentication headers, and GET requests are rejected, so this is
neither an SSRF primitive nor a generic read tunnel.
Requires an Integration credential with connectors:write and a
stable Idempotency-Key. Conare validates the request against the
connected account’s live contract before executing it and lazily
enables that account’s action gateway on the first valid write.
A successfully completed upstream call returns HTTP 200 even when the
provider rejects the write. Inspect success and response.status;
this keeps provider 401/403/429 responses distinct from Conare
authentication and rate-limit failures.
curl --request POST \
--url https://api.conare.ai/api/v1/connectors/{type}/actions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"endUserId": "u_123",
"method": "PATCH",
"path": "/v2/objects/companies/records/rec_123",
"body": {
"data": {
"values": {
"domains": [
{
"domain": "caeros.com"
}
]
}
}
}
}
'import requests
url = "https://api.conare.ai/api/v1/connectors/{type}/actions"
payload = {
"endUserId": "u_123",
"method": "PATCH",
"path": "/v2/objects/companies/records/rec_123",
"body": { "data": { "values": { "domains": [{ "domain": "caeros.com" }] } } }
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
endUserId: 'u_123',
method: 'PATCH',
path: '/v2/objects/companies/records/rec_123',
body: JSON.stringify({data: {values: {domains: [{domain: 'caeros.com'}]}}})
})
};
fetch('https://api.conare.ai/api/v1/connectors/{type}/actions', 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.conare.ai/api/v1/connectors/{type}/actions",
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([
'endUserId' => 'u_123',
'method' => 'PATCH',
'path' => '/v2/objects/companies/records/rec_123',
'body' => [
'data' => [
'values' => [
'domains' => [
[
'domain' => 'caeros.com'
]
]
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Idempotency-Key: <idempotency-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.conare.ai/api/v1/connectors/{type}/actions"
payload := strings.NewReader("{\n \"endUserId\": \"u_123\",\n \"method\": \"PATCH\",\n \"path\": \"/v2/objects/companies/records/rec_123\",\n \"body\": {\n \"data\": {\n \"values\": {\n \"domains\": [\n {\n \"domain\": \"caeros.com\"\n }\n ]\n }\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
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.conare.ai/api/v1/connectors/{type}/actions")
.header("Idempotency-Key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"endUserId\": \"u_123\",\n \"method\": \"PATCH\",\n \"path\": \"/v2/objects/companies/records/rec_123\",\n \"body\": {\n \"data\": {\n \"values\": {\n \"domains\": [\n {\n \"domain\": \"caeros.com\"\n }\n ]\n }\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.conare.ai/api/v1/connectors/{type}/actions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"endUserId\": \"u_123\",\n \"method\": \"PATCH\",\n \"path\": \"/v2/objects/companies/records/rec_123\",\n \"body\": {\n \"data\": {\n \"values\": {\n \"domains\": [\n {\n \"domain\": \"caeros.com\"\n }\n ]\n }\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"actionId": "<string>",
"response": {
"status": 349,
"contentType": "<string>",
"headers": {},
"body": "<string>",
"truncated": true,
"latencyMs": 123
}
}{
"statusCode": 123,
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": {}
}{
"statusCode": 123,
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": {}
}{
"statusCode": 123,
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": {}
}{
"statusCode": 123,
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": {}
}{
"statusCode": 123,
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": {}
}{
"statusCode": 123,
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": {}
}{
"statusCode": 123,
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": {}
}{
"statusCode": 123,
"code": "<string>",
"message": "<string>",
"requestId": "<string>",
"details": {}
}Authorizations
A scoped Integration key, prefixed cint_. Send as
Authorization: Bearer cint_... on every request. Server-side only.
Legacy personal cmem_... keys remain accepted during migration;
team/org-scoped cmem_... keys are not valid on this API.
Headers
Stable key for this logical upstream mutation. Reuse it only when retrying the exact same request.
Optional stable source-event key.
^[A-Za-z0-9][A-Za-z0-9._:-]{0,199}$Path Parameters
Data-source type id. Any source-capable type in the connector catalog
(~200 sources — Gmail, Slack, HubSpot, Notion, Linear, Salesforce,
warehouses, …); enumerate them via GET /api/v1/connectors/catalog.
^[a-z0-9][a-z0-9_-]{0,63}$"hubspot"
Body
Your stable internal user ID. No colon allowed.
1 - 128^[A-Za-z0-9@._-]{1,128}$"u_123"
POST, PUT, PATCH, DELETE Provider-relative path without query or fragment. Use query or
rawQuery for query parameters.
2048^/(?!/)Show child attributes
Show child attributes
Exact encoded query fragment without a leading ?.
4096Optional provider headers. Authentication, host, cookie, content length, connection, transfer-encoding, and every header blocked by the live connection contract are rejected.
Show child attributes
Show child attributes
JSON object, string, or null; maximum 262144 UTF-8 bytes.