curl --request GET \
--url https://openapi.enginy.ai/v1/social-selling/posts/{postId}/outcomes \
--header 'x-api-key: <api-key>'import requests
url = "https://openapi.enginy.ai/v1/social-selling/posts/{postId}/outcomes"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://openapi.enginy.ai/v1/social-selling/posts/{postId}/outcomes', 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://openapi.enginy.ai/v1/social-selling/posts/{postId}/outcomes",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <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"
"net/http"
"io"
)
func main() {
url := "https://openapi.enginy.ai/v1/social-selling/posts/{postId}/outcomes"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://openapi.enginy.ai/v1/social-selling/posts/{postId}/outcomes")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://openapi.enginy.ai/v1/social-selling/posts/{postId}/outcomes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"status": "success",
"message": "<string>",
"data": {
"post": {
"id": 123,
"publishingPostId": 123,
"identityId": 123,
"postedAt": "<string>",
"appUrl": "<string>"
},
"attribution": {
"method": "INFERRED_TEMPORAL",
"windowDays": 123,
"directEvidence": {
"available": false,
"reason": "<string>"
}
},
"summary": {
"externalEngagers": 123,
"internalEngagers": 123,
"blockedEngagersExcluded": 123,
"engagersInCrm": 123,
"contactsMessaged": 123,
"contactsReplied": 123,
"meetingsBooked": 123,
"deals": {
"available": false,
"reason": "<string>"
},
"truncated": true
},
"engagers": [
{
"prospectId": 123,
"fullName": "<string>",
"headline": "<string>",
"company": "<string>",
"linkedinProfileUrl": "<string>",
"interactions": [
"REACTION"
],
"firstInteractionAt": "<string>",
"contactId": 123,
"companyId": 123,
"contactAppUrl": "<string>",
"touchpoints": [
{
"type": "MESSAGE_SENT",
"occurredAt": "<string>",
"daysAfterInteraction": 123,
"attributionMethod": "DIRECT",
"conversationId": 123,
"campaignId": 123,
"channel": "<string>",
"meetingId": 123
}
]
}
],
"meta": {
"page": 123,
"pageSize": 123,
"total": 123
}
}
}Get Social Selling post outcomes
What happened with the people who engaged with one tracked post: for each external engager (blocklisted people excluded from rows and counts, teammates counted apart), whether they are an Enginy contact you may see, and the touchpoints that followed their first interaction within windowDays — first message sent and first reply of each conversation, meetings booked. Every touchpoint is INFERRED_TEMPORAL (it happened after the interaction); Enginy records no click or form event tied to a post, so nothing is DIRECT, and no deal data exists. Contacts behind several engager profiles count once. Read-only.
Responses include direct Enginy app URLs when available. The post includes an appUrl; engagers already in the CRM include a contactAppUrl. MCP agents should return those URLs to users whenever they are present in the response.
Required scope:
SOCIAL_SELLING_READRate limit: 100 requests per minute
curl --request GET \
--url https://openapi.enginy.ai/v1/social-selling/posts/{postId}/outcomes \
--header 'x-api-key: <api-key>'import requests
url = "https://openapi.enginy.ai/v1/social-selling/posts/{postId}/outcomes"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://openapi.enginy.ai/v1/social-selling/posts/{postId}/outcomes', 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://openapi.enginy.ai/v1/social-selling/posts/{postId}/outcomes",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <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"
"net/http"
"io"
)
func main() {
url := "https://openapi.enginy.ai/v1/social-selling/posts/{postId}/outcomes"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://openapi.enginy.ai/v1/social-selling/posts/{postId}/outcomes")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://openapi.enginy.ai/v1/social-selling/posts/{postId}/outcomes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"status": "success",
"message": "<string>",
"data": {
"post": {
"id": 123,
"publishingPostId": 123,
"identityId": 123,
"postedAt": "<string>",
"appUrl": "<string>"
},
"attribution": {
"method": "INFERRED_TEMPORAL",
"windowDays": 123,
"directEvidence": {
"available": false,
"reason": "<string>"
}
},
"summary": {
"externalEngagers": 123,
"internalEngagers": 123,
"blockedEngagersExcluded": 123,
"engagersInCrm": 123,
"contactsMessaged": 123,
"contactsReplied": 123,
"meetingsBooked": 123,
"deals": {
"available": false,
"reason": "<string>"
},
"truncated": true
},
"engagers": [
{
"prospectId": 123,
"fullName": "<string>",
"headline": "<string>",
"company": "<string>",
"linkedinProfileUrl": "<string>",
"interactions": [
"REACTION"
],
"firstInteractionAt": "<string>",
"contactId": 123,
"companyId": 123,
"contactAppUrl": "<string>",
"touchpoints": [
{
"type": "MESSAGE_SENT",
"occurredAt": "<string>",
"daysAfterInteraction": 123,
"attributionMethod": "DIRECT",
"conversationId": 123,
"campaignId": 123,
"channel": "<string>",
"meetingId": 123
}
]
}
],
"meta": {
"page": 123,
"pageSize": 123,
"total": 123
}
}
}Authorizations
Path Parameters
Tracked post id (id in the posts list).
Query Parameters
Count touchpoints this many days after each person first engaged (1-90, default 30).
1 <= x <= 90x >= 11 <= x <= 100