curl --request GET \
--url https://openapi.enginy.ai/v1/social-selling/posts/{postId}/performance \
--header 'x-api-key: <api-key>'import requests
url = "https://openapi.enginy.ai/v1/social-selling/posts/{postId}/performance"
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}/performance', 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}/performance",
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}/performance"
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}/performance")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://openapi.enginy.ai/v1/social-selling/posts/{postId}/performance")
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,
"identity": {
"id": 123,
"name": "<string>"
},
"url": "<string>",
"postType": "<string>",
"postedAt": "<string>",
"ageHours": 123,
"appUrl": "<string>"
},
"current": {
"totals": {
"impressions": 123,
"reactions": 123,
"comments": 123,
"reposts": 123
},
"reactionsByType": {},
"engagedAccounts": 123,
"newEngagers": 123,
"engagedAccountsLatestRead": 123,
"engagement": {
"external": {
"accounts": 123,
"reactions": 123,
"comments": 123
},
"internal": {
"accounts": 123,
"reactions": 123,
"comments": 123
},
"blockedAccounts": 123
}
},
"freshness": {
"metricsObservedAt": "<string>",
"metricsSource": "DAILY_SYNC",
"engagersObservedAt": "<string>",
"latestSnapshotRecordedAt": "<string>",
"collectionCadence": "DAILY",
"hourlyCollected": false
},
"history": {
"trackingStartedOn": "<string>",
"snapshots": [
{
"date": "<string>",
"recordedAt": "<string>",
"isBaseline": true,
"daysCovered": 123,
"cumulative": {
"impressions": 123,
"reactions": 123,
"comments": 123,
"reposts": 123
},
"delta": {
"impressions": 123,
"reactions": 123,
"comments": 123,
"reposts": 123,
"newEngagers": 123
}
}
]
},
"windows": [
{
"window": "firstHour",
"hours": 123,
"availability": "OBSERVED",
"reason": "<string>",
"observedAt": "<string>",
"hoursAfterPublication": 123,
"totals": {
"impressions": 123,
"reactions": 123,
"comments": 123,
"reposts": 123
},
"authorBaseline": {
"availability": "AVAILABLE",
"sampleSize": 123,
"windowDays": 123,
"impressions": {
"median": 123,
"p75": 123
},
"reactions": {
"median": 123,
"p75": 123
},
"comments": {
"median": 123,
"p75": 123
},
"reposts": {
"median": 123,
"p75": 123
}
},
"relativeToAuthor": {
"impressions": 123,
"reactions": 123,
"comments": 123
}
}
],
"definitions": {}
}
}Get Social Selling post performance
Measure one tracked LinkedIn post: its recorded daily history (lifetime counters and daily changes, with baseline imports flagged and never counted as growth), its first-day and first-week totals when a daily snapshot really answers them (availability says why otherwise; no hourly data is collected), the same windows on the author’s other posts of the last 180 days (median, p75 and sample size, nothing below 3 posts) with the ratio to that baseline, engagement split between external people and teammates, freshness and the definition of every metric. Unknown values are null, never 0. postId is the tracked post id from list_social_selling_posts. Read-only: nothing is refreshed or relinked.
Responses include direct Enginy app URLs when available. The post includes an appUrl that opens it in Enginy once it has a publishing post. 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}/performance \
--header 'x-api-key: <api-key>'import requests
url = "https://openapi.enginy.ai/v1/social-selling/posts/{postId}/performance"
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}/performance', 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}/performance",
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}/performance"
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}/performance")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://openapi.enginy.ai/v1/social-selling/posts/{postId}/performance")
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,
"identity": {
"id": 123,
"name": "<string>"
},
"url": "<string>",
"postType": "<string>",
"postedAt": "<string>",
"ageHours": 123,
"appUrl": "<string>"
},
"current": {
"totals": {
"impressions": 123,
"reactions": 123,
"comments": 123,
"reposts": 123
},
"reactionsByType": {},
"engagedAccounts": 123,
"newEngagers": 123,
"engagedAccountsLatestRead": 123,
"engagement": {
"external": {
"accounts": 123,
"reactions": 123,
"comments": 123
},
"internal": {
"accounts": 123,
"reactions": 123,
"comments": 123
},
"blockedAccounts": 123
}
},
"freshness": {
"metricsObservedAt": "<string>",
"metricsSource": "DAILY_SYNC",
"engagersObservedAt": "<string>",
"latestSnapshotRecordedAt": "<string>",
"collectionCadence": "DAILY",
"hourlyCollected": false
},
"history": {
"trackingStartedOn": "<string>",
"snapshots": [
{
"date": "<string>",
"recordedAt": "<string>",
"isBaseline": true,
"daysCovered": 123,
"cumulative": {
"impressions": 123,
"reactions": 123,
"comments": 123,
"reposts": 123
},
"delta": {
"impressions": 123,
"reactions": 123,
"comments": 123,
"reposts": 123,
"newEngagers": 123
}
}
]
},
"windows": [
{
"window": "firstHour",
"hours": 123,
"availability": "OBSERVED",
"reason": "<string>",
"observedAt": "<string>",
"hoursAfterPublication": 123,
"totals": {
"impressions": 123,
"reactions": 123,
"comments": 123,
"reposts": 123
},
"authorBaseline": {
"availability": "AVAILABLE",
"sampleSize": 123,
"windowDays": 123,
"impressions": {
"median": 123,
"p75": 123
},
"reactions": {
"median": 123,
"p75": 123
},
"comments": {
"median": 123,
"p75": 123
},
"reposts": {
"median": 123,
"p75": 123
}
},
"relativeToAuthor": {
"impressions": 123,
"reactions": 123,
"comments": 123
}
}
],
"definitions": {}
}
}Authorizations
Path Parameters
Tracked post id (id in the posts list).