Create Post
curl --request POST \
--url https://api.linkupapi.com/v2/content \
--header 'Content-Type: application/json' \
--header 'x-api-key: <x-api-key>' \
--data '
{
"account_id": "<string>",
"action": "<string>",
"params": {
"message": "<string>",
"file": {
"filename": "<string>",
"data": "<string>"
},
"thumbnail": {},
"document_title": "<string>",
"files": [
{
"filename": "<string>",
"data": "<string>",
"altText": "<string>"
}
]
}
}
'import requests
url = "https://api.linkupapi.com/v2/content"
payload = {
"account_id": "<string>",
"action": "<string>",
"params": {
"message": "<string>",
"file": {
"filename": "<string>",
"data": "<string>"
},
"thumbnail": {},
"document_title": "<string>",
"files": [
{
"filename": "<string>",
"data": "<string>",
"altText": "<string>"
}
]
}
}
headers = {
"x-api-key": "<x-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': '<x-api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
account_id: '<string>',
action: '<string>',
params: {
message: '<string>',
file: {filename: '<string>', data: '<string>'},
thumbnail: {},
document_title: '<string>',
files: [{filename: '<string>', data: '<string>', altText: '<string>'}]
}
})
};
fetch('https://api.linkupapi.com/v2/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://api.linkupapi.com/v2/content",
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([
'account_id' => '<string>',
'action' => '<string>',
'params' => [
'message' => '<string>',
'file' => [
'filename' => '<string>',
'data' => '<string>'
],
'thumbnail' => [
],
'document_title' => '<string>',
'files' => [
[
'filename' => '<string>',
'data' => '<string>',
'altText' => '<string>'
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <x-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://api.linkupapi.com/v2/content"
payload := strings.NewReader("{\n \"account_id\": \"<string>\",\n \"action\": \"<string>\",\n \"params\": {\n \"message\": \"<string>\",\n \"file\": {\n \"filename\": \"<string>\",\n \"data\": \"<string>\"\n },\n \"thumbnail\": {},\n \"document_title\": \"<string>\",\n \"files\": [\n {\n \"filename\": \"<string>\",\n \"data\": \"<string>\",\n \"altText\": \"<string>\"\n }\n ]\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<x-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://api.linkupapi.com/v2/content")
.header("x-api-key", "<x-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"account_id\": \"<string>\",\n \"action\": \"<string>\",\n \"params\": {\n \"message\": \"<string>\",\n \"file\": {\n \"filename\": \"<string>\",\n \"data\": \"<string>\"\n },\n \"thumbnail\": {},\n \"document_title\": \"<string>\",\n \"files\": [\n {\n \"filename\": \"<string>\",\n \"data\": \"<string>\",\n \"altText\": \"<string>\"\n }\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.linkupapi.com/v2/content")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<x-api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"account_id\": \"<string>\",\n \"action\": \"<string>\",\n \"params\": {\n \"message\": \"<string>\",\n \"file\": {\n \"filename\": \"<string>\",\n \"data\": \"<string>\"\n },\n \"thumbnail\": {},\n \"document_title\": \"<string>\",\n \"files\": [\n {\n \"filename\": \"<string>\",\n \"data\": \"<string>\",\n \"altText\": \"<string>\"\n }\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"post_url": "https://www.linkedin.com/feed/update/urn:li:activity:7654321098765432100",
"post_urn": "urn:li:activity:7654321098765432100"
},
"metadata": {
"action": "create",
"account_id": "your-account-id",
"credits_consumed": 1,
"timestamp": "2026-03-24T12:00:00Z"
}
}
{
"success": false,
"error": {
"code": "INVALID_PARAMS",
"message": "message or file is required to create a post."
},
"metadata": {
"action": "create",
"account_id": "your-account-id",
"credits_consumed": 0,
"timestamp": "2026-03-24T12:00:00Z"
}
}
Content
Create Post
Create a new post with text, images, video, a document, or carousel content.
POST
/
v2
/
content
Create Post
curl --request POST \
--url https://api.linkupapi.com/v2/content \
--header 'Content-Type: application/json' \
--header 'x-api-key: <x-api-key>' \
--data '
{
"account_id": "<string>",
"action": "<string>",
"params": {
"message": "<string>",
"file": {
"filename": "<string>",
"data": "<string>"
},
"thumbnail": {},
"document_title": "<string>",
"files": [
{
"filename": "<string>",
"data": "<string>",
"altText": "<string>"
}
]
}
}
'import requests
url = "https://api.linkupapi.com/v2/content"
payload = {
"account_id": "<string>",
"action": "<string>",
"params": {
"message": "<string>",
"file": {
"filename": "<string>",
"data": "<string>"
},
"thumbnail": {},
"document_title": "<string>",
"files": [
{
"filename": "<string>",
"data": "<string>",
"altText": "<string>"
}
]
}
}
headers = {
"x-api-key": "<x-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': '<x-api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
account_id: '<string>',
action: '<string>',
params: {
message: '<string>',
file: {filename: '<string>', data: '<string>'},
thumbnail: {},
document_title: '<string>',
files: [{filename: '<string>', data: '<string>', altText: '<string>'}]
}
})
};
fetch('https://api.linkupapi.com/v2/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://api.linkupapi.com/v2/content",
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([
'account_id' => '<string>',
'action' => '<string>',
'params' => [
'message' => '<string>',
'file' => [
'filename' => '<string>',
'data' => '<string>'
],
'thumbnail' => [
],
'document_title' => '<string>',
'files' => [
[
'filename' => '<string>',
'data' => '<string>',
'altText' => '<string>'
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <x-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://api.linkupapi.com/v2/content"
payload := strings.NewReader("{\n \"account_id\": \"<string>\",\n \"action\": \"<string>\",\n \"params\": {\n \"message\": \"<string>\",\n \"file\": {\n \"filename\": \"<string>\",\n \"data\": \"<string>\"\n },\n \"thumbnail\": {},\n \"document_title\": \"<string>\",\n \"files\": [\n {\n \"filename\": \"<string>\",\n \"data\": \"<string>\",\n \"altText\": \"<string>\"\n }\n ]\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<x-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://api.linkupapi.com/v2/content")
.header("x-api-key", "<x-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"account_id\": \"<string>\",\n \"action\": \"<string>\",\n \"params\": {\n \"message\": \"<string>\",\n \"file\": {\n \"filename\": \"<string>\",\n \"data\": \"<string>\"\n },\n \"thumbnail\": {},\n \"document_title\": \"<string>\",\n \"files\": [\n {\n \"filename\": \"<string>\",\n \"data\": \"<string>\",\n \"altText\": \"<string>\"\n }\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.linkupapi.com/v2/content")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<x-api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"account_id\": \"<string>\",\n \"action\": \"<string>\",\n \"params\": {\n \"message\": \"<string>\",\n \"file\": {\n \"filename\": \"<string>\",\n \"data\": \"<string>\"\n },\n \"thumbnail\": {},\n \"document_title\": \"<string>\",\n \"files\": [\n {\n \"filename\": \"<string>\",\n \"data\": \"<string>\",\n \"altText\": \"<string>\"\n }\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"post_url": "https://www.linkedin.com/feed/update/urn:li:activity:7654321098765432100",
"post_urn": "urn:li:activity:7654321098765432100"
},
"metadata": {
"action": "create",
"account_id": "your-account-id",
"credits_consumed": 1,
"timestamp": "2026-03-24T12:00:00Z"
}
}
{
"success": false,
"error": {
"code": "INVALID_PARAMS",
"message": "message or file is required to create a post."
},
"metadata": {
"action": "create",
"account_id": "your-account-id",
"credits_consumed": 0,
"timestamp": "2026-03-24T12:00:00Z"
}
}
Overview
Create a post from the authenticated account. Supports plain text posts, single image, video or document attachments, and multi-image carousels.This endpoint consumes 1 credit per request. Ignore this if you’re on per-seat pricing: usage is unlimited.
Request
string
required
Your API key for authentication.
string
required
The unique identifier of the account to use.
string
required
Must be
"create".object
Show params properties
Show params properties
string
The text content of the post. Supports hashtags (
#tag), line breaks and people mentions.
To mention someone, use mention_user(public_id, display_text) where public_id is the slug of their profile URL (linkedin.com/in/<public_id>) and display_text is the clickable text shown in the post — e.g. "Great talk mention_user(williamhgates, Bill Gates)!". To mention a company page, use mention_company(slug, display_text) where slug is from linkedin.com/company/<slug> — e.g. "Proud to partner with mention_company(microsoft, Microsoft)".string | object
A single file to attach — an image (
.jpg, .png, .gif, .webp), a video (.mp4, .mov, .webm…) or a document (.pdf, .doc, .docx, .ppt, .pptx), which LinkedIn publishes as a page carousel. Can be a URL string or an object with filename and data properties.string | object
Custom cover image for a video post. Only valid when
file is a single video (.mp4, .mov, .webm…). Same format as file: a URL string or an object with filename and data (base64). Without it, LinkedIn picks a frame of the video.string
Title displayed under a document post, and used by LinkedIn to build the post URL. Only valid when
file is a document. Defaults to the file name without its extension.array
Response
boolean
Indicates whether the request was successful.
object
object
{
"success": true,
"data": {
"post_url": "https://www.linkedin.com/feed/update/urn:li:activity:7654321098765432100",
"post_urn": "urn:li:activity:7654321098765432100"
},
"metadata": {
"action": "create",
"account_id": "your-account-id",
"credits_consumed": 1,
"timestamp": "2026-03-24T12:00:00Z"
}
}
{
"success": false,
"error": {
"code": "INVALID_PARAMS",
"message": "message or file is required to create a post."
},
"metadata": {
"action": "create",
"account_id": "your-account-id",
"credits_consumed": 0,
"timestamp": "2026-03-24T12:00:00Z"
}
}
Was this page helpful?