curl --request GET \
--url https://openapi.enginy.ai/v1/social-selling/analytics/publishing-times \
--header 'x-api-key: <api-key>'import requests
url = "https://openapi.enginy.ai/v1/social-selling/analytics/publishing-times"
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/analytics/publishing-times', 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/analytics/publishing-times",
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/analytics/publishing-times"
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/analytics/publishing-times")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://openapi.enginy.ai/v1/social-selling/analytics/publishing-times")
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": {
"timeZone": "<string>",
"metric": "impressions",
"dateFrom": "2026-07-22",
"dateTo": "2026-10-19",
"includeReposts": true,
"minPosts": 123,
"totalPosts": 123,
"measuredPosts": 123,
"computedAt": "<string>",
"bestSlots": [
{
"weekday": "MONDAY",
"hour": 123,
"posts": 123,
"measuredPosts": 123,
"averageValue": 123
}
],
"byWeekday": [
{
"weekday": "MONDAY",
"posts": 123,
"measuredPosts": 123,
"averageValue": 123
}
],
"byHour": [
{
"hour": 123,
"posts": 123,
"measuredPosts": 123,
"averageValue": 123
}
]
}
}Get Social Selling best publishing times
Find the best weekday and hour to publish on LinkedIn, learned from the caller’s own tracked Social Selling posts. Each post counts in the weekday/hour it was published in timeZone, and slots are ranked by the average metric per measured post (engagement = reactions + comments by default). Returns the top limit slots (bestSlots, each with at least minPosts measured posts), plus averages per weekday (byWeekday, MONDAY–SUNDAY) and per hour (byHour, 0–23). Covers posts published in the last 90 days by default (at most 366), without reposts; metrics come from each post’s latest daily LinkedIn snapshot. Read-only.
Required scope:
SOCIAL_SELLING_READRate limit: 100 requests per minute
curl --request GET \
--url https://openapi.enginy.ai/v1/social-selling/analytics/publishing-times \
--header 'x-api-key: <api-key>'import requests
url = "https://openapi.enginy.ai/v1/social-selling/analytics/publishing-times"
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/analytics/publishing-times', 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/analytics/publishing-times",
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/analytics/publishing-times"
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/analytics/publishing-times")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://openapi.enginy.ai/v1/social-selling/analytics/publishing-times")
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": {
"timeZone": "<string>",
"metric": "impressions",
"dateFrom": "2026-07-22",
"dateTo": "2026-10-19",
"includeReposts": true,
"minPosts": 123,
"totalPosts": 123,
"measuredPosts": 123,
"computedAt": "<string>",
"bestSlots": [
{
"weekday": "MONDAY",
"hour": 123,
"posts": 123,
"measuredPosts": 123,
"averageValue": 123
}
],
"byWeekday": [
{
"weekday": "MONDAY",
"posts": 123,
"measuredPosts": 123,
"averageValue": 123
}
],
"byHour": [
{
"hour": 123,
"posts": 123,
"measuredPosts": 123,
"averageValue": 123
}
]
}
}Authorizations
Query Parameters
First publication day (UTC, inclusive). Defaults to 89 days before dateTo.
^\d{4}-\d{2}-\d{2}$"2026-09-01"
Last publication day (UTC, inclusive). Defaults to today. At most 366 days in total.
^\d{4}-\d{2}-\d{2}$"2026-09-01"
List of identity ids to analyse (REST also accepts a comma-separated value). Defaults to every identity the caller may see; ids outside that scope are ignored.
1"12,34"
Count reposts made by the identities. Off by default.
IANA time zone in which weekdays and hours are computed.
100"Europe/Madrid"
What "best" means: average engagement (reactions + comments), reactions, comments or impressions per post.
impressions, reactions, comments, engagement Minimum measured posts a slot needs to be ranked.
1 <= x <= 1000How many best slots to return.
1 <= x <= 20