curl --request POST \
--url https://openapi.enginy.ai/v1/social-selling/posts \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"url": "https://www.linkedin.com/feed/update/urn:li:activity:7380000000000000000/",
"name": "<string>"
}
'import requests
url = "https://openapi.enginy.ai/v1/social-selling/posts"
payload = {
"url": "https://www.linkedin.com/feed/update/urn:li:activity:7380000000000000000/",
"name": "<string>"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
url: 'https://www.linkedin.com/feed/update/urn:li:activity:7380000000000000000/',
name: '<string>'
})
};
fetch('https://openapi.enginy.ai/v1/social-selling/posts', 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",
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([
'url' => 'https://www.linkedin.com/feed/update/urn:li:activity:7380000000000000000/',
'name' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://openapi.enginy.ai/v1/social-selling/posts"
payload := strings.NewReader("{\n \"url\": \"https://www.linkedin.com/feed/update/urn:li:activity:7380000000000000000/\",\n \"name\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<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://openapi.enginy.ai/v1/social-selling/posts")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"url\": \"https://www.linkedin.com/feed/update/urn:li:activity:7380000000000000000/\",\n \"name\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://openapi.enginy.ai/v1/social-selling/posts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"url\": \"https://www.linkedin.com/feed/update/urn:li:activity:7380000000000000000/\",\n \"name\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"message": "<string>",
"data": {
"publishingPostId": 29371,
"trackedPostId": 123,
"url": "<string>",
"name": "<string>",
"content": "<string>",
"postedAt": "<string>",
"identityId": 123,
"appUrl": "<string>"
}
}Track a Social Selling post
Start tracking a published LinkedIn post in Enginy by its URL (linkedin.com/posts/…, lnkd.in/… or linkedin.com/feed/update/urn:li:activity:<id>). Idempotent per post: any URL of a post Enginy already knows returns that same post. Answers publishingPostId, the id the comment and comment-suggestion tools take (publishingPostId), and trackedPostId, set only when one of the workspace’s own identities published it (its metrics and engagers are then in the tracked-post tools). The text is read from the workspace’s synced copy, or from the public LinkedIn page when there is none (it can come back empty when LinkedIn refuses the request). Users restricted to specific identities only get posts of their identities or third-party posts (a post of another identity of the workspace answers 404), and can only comment on posts of their own identities: for them, a third-party post’s publishingPostId answers 404 in the comment and comment-suggestion tools (pass its text as postContent to get suggestions). Side effects: creates the post record in Enginy (nothing is posted on LinkedIn).
Required scope:
SOCIAL_SELLING_WRITERate limit: 30 requests per minute
curl --request POST \
--url https://openapi.enginy.ai/v1/social-selling/posts \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"url": "https://www.linkedin.com/feed/update/urn:li:activity:7380000000000000000/",
"name": "<string>"
}
'import requests
url = "https://openapi.enginy.ai/v1/social-selling/posts"
payload = {
"url": "https://www.linkedin.com/feed/update/urn:li:activity:7380000000000000000/",
"name": "<string>"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
url: 'https://www.linkedin.com/feed/update/urn:li:activity:7380000000000000000/',
name: '<string>'
})
};
fetch('https://openapi.enginy.ai/v1/social-selling/posts', 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",
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([
'url' => 'https://www.linkedin.com/feed/update/urn:li:activity:7380000000000000000/',
'name' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://openapi.enginy.ai/v1/social-selling/posts"
payload := strings.NewReader("{\n \"url\": \"https://www.linkedin.com/feed/update/urn:li:activity:7380000000000000000/\",\n \"name\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<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://openapi.enginy.ai/v1/social-selling/posts")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"url\": \"https://www.linkedin.com/feed/update/urn:li:activity:7380000000000000000/\",\n \"name\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://openapi.enginy.ai/v1/social-selling/posts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"url\": \"https://www.linkedin.com/feed/update/urn:li:activity:7380000000000000000/\",\n \"name\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"message": "<string>",
"data": {
"publishingPostId": 29371,
"trackedPostId": 123,
"url": "<string>",
"name": "<string>",
"content": "<string>",
"postedAt": "<string>",
"identityId": 123,
"appUrl": "<string>"
}
}Authorizations
Body
The LinkedIn post URL: https://www.linkedin.com/posts/…, a https://lnkd.in/… short link, or https://www.linkedin.com/feed/update/urn:li:activity:<id> (also share / ugcPost URNs).
1 - 2048"https://www.linkedin.com/feed/update/urn:li:activity:7380000000000000000/"
Display name in Enginy. Defaults to the first line of the post (40 characters).
1 - 200