curl --request POST \
--url https://openapi.enginy.ai/v1/social-selling/drafts/{draftId}/schedule \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"version": 123,
"scheduledAt": "2026-11-03T08:30:00Z",
"localDateTime": "2026-11-03T09:30",
"timezone": "Europe/Madrid",
"publishNow": true,
"reactionsAmount": 250,
"reactionTypes": [],
"idempotencyKey": "<string>"
}
'import requests
url = "https://openapi.enginy.ai/v1/social-selling/drafts/{draftId}/schedule"
payload = {
"version": 123,
"scheduledAt": "2026-11-03T08:30:00Z",
"localDateTime": "2026-11-03T09:30",
"timezone": "Europe/Madrid",
"publishNow": True,
"reactionsAmount": 250,
"reactionTypes": [],
"idempotencyKey": "<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({
version: 123,
scheduledAt: '2026-11-03T08:30:00Z',
localDateTime: '2026-11-03T09:30',
timezone: 'Europe/Madrid',
publishNow: true,
reactionsAmount: 250,
reactionTypes: [],
idempotencyKey: '<string>'
})
};
fetch('https://openapi.enginy.ai/v1/social-selling/drafts/{draftId}/schedule', 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/drafts/{draftId}/schedule",
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([
'version' => 123,
'scheduledAt' => '2026-11-03T08:30:00Z',
'localDateTime' => '2026-11-03T09:30',
'timezone' => 'Europe/Madrid',
'publishNow' => true,
'reactionsAmount' => 250,
'reactionTypes' => [
],
'idempotencyKey' => '<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/drafts/{draftId}/schedule"
payload := strings.NewReader("{\n \"version\": 123,\n \"scheduledAt\": \"2026-11-03T08:30:00Z\",\n \"localDateTime\": \"2026-11-03T09:30\",\n \"timezone\": \"Europe/Madrid\",\n \"publishNow\": true,\n \"reactionsAmount\": 250,\n \"reactionTypes\": [],\n \"idempotencyKey\": \"<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/drafts/{draftId}/schedule")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"version\": 123,\n \"scheduledAt\": \"2026-11-03T08:30:00Z\",\n \"localDateTime\": \"2026-11-03T09:30\",\n \"timezone\": \"Europe/Madrid\",\n \"publishNow\": true,\n \"reactionsAmount\": 250,\n \"reactionTypes\": [],\n \"idempotencyKey\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://openapi.enginy.ai/v1/social-selling/drafts/{draftId}/schedule")
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 \"version\": 123,\n \"scheduledAt\": \"2026-11-03T08:30:00Z\",\n \"localDateTime\": \"2026-11-03T09:30\",\n \"timezone\": \"Europe/Madrid\",\n \"publishNow\": true,\n \"reactionsAmount\": 250,\n \"reactionTypes\": [],\n \"idempotencyKey\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"message": "<string>",
"data": {
"draft": {
"draftId": 123,
"version": 123,
"status": "DRAFT",
"identity": {
"id": 123,
"name": "<string>"
},
"title": "<string>",
"text": "<string>",
"mentions": [
{
"start": 1,
"length": 2,
"kind": "PROFILE",
"urn": "urn:li:fsd_company:98422414",
"label": "<string>"
}
],
"attachments": [
{
"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>"
}
}
],
"firstComment": "<string>",
"visibility": "ANYONE",
"postAsCompany": true,
"companyUrn": "<string>",
"lineage": {
"sourcePostId": 123,
"sourceDraftId": 123,
"sourceAttribution": "<string>"
},
"planning": {
"series": "<string>",
"pillar": "<string>",
"objective": "<string>",
"audience": "<string>",
"factualSources": [
"<string>"
],
"notes": "<string>"
},
"schedule": {
"publishingPostId": 123,
"scheduledVersion": 123,
"scheduledAt": "<string>",
"timezone": "<string>"
},
"createdById": 123,
"updatedById": 123,
"createdAt": "<string>",
"updatedAt": "<string>"
},
"publication": {
"publishingPostId": 123,
"draftId": 123,
"draftVersion": 123,
"identityId": 123,
"status": "SCHEDULED",
"scheduledAt": "<string>",
"publishedAt": "<string>",
"linkedinUrl": "<string>",
"linkedinPostUrn": "<string>",
"trackedPostId": 123,
"error": "<string>",
"firstComment": {
"scheduledCommentId": 123,
"status": "QUEUED",
"commentUrn": "<string>"
},
"appUrl": "<string>"
},
"replayed": true
}
}Schedule a Social Selling draft
Schedules exactly the approved version of a draft at scheduledAt (ISO instant), at localDateTime in timezone (IANA, daylight-saving aware), or with publishNow (about a minute from now). The draft is locked to that version first (a concurrent edit or second schedule answers 409), then published through the same flow as the app: owner confirmation email, teammate-consent rules for the first comment (it may wait for the owner’s approval), reactions from the pool. The first comment goes on the published post 30 seconds after it is live. Answers the publication (status SCHEDULED; it becomes PUBLISHED only once LinkedIn returned the post — poll get_social_selling_publication_status). Pass idempotencyKey so a retry after a timeout returns the same publication instead of scheduling twice.
Required scope:
SOCIAL_SELLING_WRITERate limit: 10 requests per minute
curl --request POST \
--url https://openapi.enginy.ai/v1/social-selling/drafts/{draftId}/schedule \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"version": 123,
"scheduledAt": "2026-11-03T08:30:00Z",
"localDateTime": "2026-11-03T09:30",
"timezone": "Europe/Madrid",
"publishNow": true,
"reactionsAmount": 250,
"reactionTypes": [],
"idempotencyKey": "<string>"
}
'import requests
url = "https://openapi.enginy.ai/v1/social-selling/drafts/{draftId}/schedule"
payload = {
"version": 123,
"scheduledAt": "2026-11-03T08:30:00Z",
"localDateTime": "2026-11-03T09:30",
"timezone": "Europe/Madrid",
"publishNow": True,
"reactionsAmount": 250,
"reactionTypes": [],
"idempotencyKey": "<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({
version: 123,
scheduledAt: '2026-11-03T08:30:00Z',
localDateTime: '2026-11-03T09:30',
timezone: 'Europe/Madrid',
publishNow: true,
reactionsAmount: 250,
reactionTypes: [],
idempotencyKey: '<string>'
})
};
fetch('https://openapi.enginy.ai/v1/social-selling/drafts/{draftId}/schedule', 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/drafts/{draftId}/schedule",
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([
'version' => 123,
'scheduledAt' => '2026-11-03T08:30:00Z',
'localDateTime' => '2026-11-03T09:30',
'timezone' => 'Europe/Madrid',
'publishNow' => true,
'reactionsAmount' => 250,
'reactionTypes' => [
],
'idempotencyKey' => '<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/drafts/{draftId}/schedule"
payload := strings.NewReader("{\n \"version\": 123,\n \"scheduledAt\": \"2026-11-03T08:30:00Z\",\n \"localDateTime\": \"2026-11-03T09:30\",\n \"timezone\": \"Europe/Madrid\",\n \"publishNow\": true,\n \"reactionsAmount\": 250,\n \"reactionTypes\": [],\n \"idempotencyKey\": \"<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/drafts/{draftId}/schedule")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"version\": 123,\n \"scheduledAt\": \"2026-11-03T08:30:00Z\",\n \"localDateTime\": \"2026-11-03T09:30\",\n \"timezone\": \"Europe/Madrid\",\n \"publishNow\": true,\n \"reactionsAmount\": 250,\n \"reactionTypes\": [],\n \"idempotencyKey\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://openapi.enginy.ai/v1/social-selling/drafts/{draftId}/schedule")
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 \"version\": 123,\n \"scheduledAt\": \"2026-11-03T08:30:00Z\",\n \"localDateTime\": \"2026-11-03T09:30\",\n \"timezone\": \"Europe/Madrid\",\n \"publishNow\": true,\n \"reactionsAmount\": 250,\n \"reactionTypes\": [],\n \"idempotencyKey\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"message": "<string>",
"data": {
"draft": {
"draftId": 123,
"version": 123,
"status": "DRAFT",
"identity": {
"id": 123,
"name": "<string>"
},
"title": "<string>",
"text": "<string>",
"mentions": [
{
"start": 1,
"length": 2,
"kind": "PROFILE",
"urn": "urn:li:fsd_company:98422414",
"label": "<string>"
}
],
"attachments": [
{
"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>"
}
}
],
"firstComment": "<string>",
"visibility": "ANYONE",
"postAsCompany": true,
"companyUrn": "<string>",
"lineage": {
"sourcePostId": 123,
"sourceDraftId": 123,
"sourceAttribution": "<string>"
},
"planning": {
"series": "<string>",
"pillar": "<string>",
"objective": "<string>",
"audience": "<string>",
"factualSources": [
"<string>"
],
"notes": "<string>"
},
"schedule": {
"publishingPostId": 123,
"scheduledVersion": 123,
"scheduledAt": "<string>",
"timezone": "<string>"
},
"createdById": 123,
"updatedById": 123,
"createdAt": "<string>",
"updatedAt": "<string>"
},
"publication": {
"publishingPostId": 123,
"draftId": 123,
"draftVersion": 123,
"identityId": 123,
"status": "SCHEDULED",
"scheduledAt": "<string>",
"publishedAt": "<string>",
"linkedinUrl": "<string>",
"linkedinPostUrn": "<string>",
"trackedPostId": 123,
"error": "<string>",
"firstComment": {
"scheduledCommentId": 123,
"status": "QUEUED",
"commentUrn": "<string>"
},
"appUrl": "<string>"
},
"replayed": true
}
}Authorizations
Path Parameters
Draft id (draftId).
Body
The version you previewed and approve. An edited draft answers 409 VERSION_CONFLICT.
ISO 8601 instant with offset. Give exactly one of scheduledAt, localDateTime + timezone, publishNow.
"2026-11-03T08:30:00Z"
Wall-clock time in timezone, without offset. A time skipped by daylight saving answers 400; a repeated one means its first occurrence.
^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(:\d{2})?$"2026-11-03T09:30"
IANA zone.
1 - 64"Europe/Madrid"
Publish about a minute from now.
Reactions from the workspace’s identity pool once live. Default 0.
0 <= x <= 5001LIKE, PRAISE, EMPATHY, INTEREST, APPRECIATION, ENTERTAINMENT Any unique string per intended schedule. A retry with the same key returns the first answer (replayed: true) instead of scheduling twice. The Idempotency-Key header works too.
1 - 200