curl --request GET \
--url https://openapi.enginy.ai/v1/social-selling/posts/{postId}/content \
--header 'x-api-key: <api-key>'import requests
url = "https://openapi.enginy.ai/v1/social-selling/posts/{postId}/content"
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}/content', 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}/content",
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}/content"
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}/content")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://openapi.enginy.ai/v1/social-selling/posts/{postId}/content")
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": {
"postId": 123,
"publishingPostId": 123,
"identity": {
"id": 123,
"name": "<string>"
},
"linkedinPostUrn": "<string>",
"url": "<string>",
"postType": "<string>",
"repostKind": "SIMPLE",
"postedAt": "<string>",
"text": "<string>",
"links": [
"<string>"
],
"mentions": [
{
"start": 123,
"length": 123,
"kind": "PROFILE",
"urn": "<string>",
"label": "<string>"
}
],
"mentionsAvailability": "AVAILABLE",
"firstComment": {
"commentUrn": "<string>",
"text": "<string>",
"links": [
"<string>"
],
"createdAt": "<string>"
},
"firstCommentAvailability": "FOUND",
"repostedPost": {
"linkedinPostUrn": "<string>",
"url": "<string>",
"authorName": "<string>",
"authorHeadline": "<string>",
"text": "<string>"
},
"media": [
{
"assetId": "<string>",
"position": 123,
"origin": "POST",
"type": "IMAGE",
"mimeType": "<string>",
"width": 123,
"height": 123,
"sizeBytes": 123,
"durationMs": 123,
"pageCount": 123,
"title": "<string>",
"description": "<string>",
"altText": "<string>",
"altTextSource": "AUTHOR",
"linkUrl": "<string>",
"pollOptions": [
"<string>"
],
"transcript": {
"status": "NOT_COLLECTED"
},
"access": {
"status": "AVAILABLE",
"downloadUrl": "<string>",
"previewUrl": "<string>",
"expiresAt": "<string>",
"durable": true,
"refreshable": true,
"verifiedAt": "<string>",
"reason": "<string>"
},
"source": {
"trackedPostId": 123,
"position": 123,
"credit": "<string>"
}
}
],
"mediaMetadataStored": true,
"appUrl": "<string>"
}
}Get Social Selling post content
Everything a tracked post shows, to inspect or reuse it: the text and its links, structured mentions (posts published through Enginy), the reposted original, the author’s first comment (where a “link in the first comment” lives) and every image, video or document in post order. Each media item has a stable assetId and, under access, a downloadUrl any HTTP client can GET without a login or cookies (the original bytes), a previewUrl, MIME type, dimensions, size, alt text and expiry. By default each URL is probed first: a URL that does not serve the file is reported UNAVAILABLE with no URL rather than handed out. LinkedIn-hosted URLs expire (EXPIRING, expiresAt): call refresh_social_selling_media_access with the assetId for a durable copy. MCP results also carry the images as resource links. Read-only.
Required scope:
SOCIAL_SELLING_READRate limit: 100 requests per minute
curl --request GET \
--url https://openapi.enginy.ai/v1/social-selling/posts/{postId}/content \
--header 'x-api-key: <api-key>'import requests
url = "https://openapi.enginy.ai/v1/social-selling/posts/{postId}/content"
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}/content', 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}/content",
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}/content"
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}/content")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://openapi.enginy.ai/v1/social-selling/posts/{postId}/content")
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": {
"postId": 123,
"publishingPostId": 123,
"identity": {
"id": 123,
"name": "<string>"
},
"linkedinPostUrn": "<string>",
"url": "<string>",
"postType": "<string>",
"repostKind": "SIMPLE",
"postedAt": "<string>",
"text": "<string>",
"links": [
"<string>"
],
"mentions": [
{
"start": 123,
"length": 123,
"kind": "PROFILE",
"urn": "<string>",
"label": "<string>"
}
],
"mentionsAvailability": "AVAILABLE",
"firstComment": {
"commentUrn": "<string>",
"text": "<string>",
"links": [
"<string>"
],
"createdAt": "<string>"
},
"firstCommentAvailability": "FOUND",
"repostedPost": {
"linkedinPostUrn": "<string>",
"url": "<string>",
"authorName": "<string>",
"authorHeadline": "<string>",
"text": "<string>"
},
"media": [
{
"assetId": "<string>",
"position": 123,
"origin": "POST",
"type": "IMAGE",
"mimeType": "<string>",
"width": 123,
"height": 123,
"sizeBytes": 123,
"durationMs": 123,
"pageCount": 123,
"title": "<string>",
"description": "<string>",
"altText": "<string>",
"altTextSource": "AUTHOR",
"linkUrl": "<string>",
"pollOptions": [
"<string>"
],
"transcript": {
"status": "NOT_COLLECTED"
},
"access": {
"status": "AVAILABLE",
"downloadUrl": "<string>",
"previewUrl": "<string>",
"expiresAt": "<string>",
"durable": true,
"refreshable": true,
"verifiedAt": "<string>",
"reason": "<string>"
},
"source": {
"trackedPostId": 123,
"position": 123,
"credit": "<string>"
}
}
],
"mediaMetadataStored": true,
"appUrl": "<string>"
}
}Authorizations
Path Parameters
Tracked post id (id in list_social_selling_posts).
Query Parameters
Probe every file URL before answering (confirms access, size, type and image dimensions). Default true; false skips the probes.