Creative Formats
Carousel, document, event, text, spotlight, follower, jobs, conversation, and thought-leader ads
Creative Formats
Every LinkedIn format goes through the same POST /v1/ads/create, selected by a key inside platformSpecificData. Formats are mutually exclusive with each other and with the top-level imageUrl / video (the plain single image / video ad).
| Format | platformSpecificData key | Goals | Notes |
|---|---|---|---|
| Carousel | carousel | any | 2-10 cards |
| Document | document | any | PDF/PPT/DOC up to 100 MB |
| Event | event | any | promotes an existing LinkedIn Event |
| Text Ad | textAd | any | right-rail classic, no post |
| Spotlight | spotlight | traffic, awareness | dynamic, personalized per viewer |
| Follower | follower | engagement, awareness | dynamic, drives Page follows |
| Jobs | jobs | job_applicants | pulls the Page's active job postings |
| Conversation | conversation | any | message-tree ad in LinkedIn messaging |
| Thought-leader | thoughtLeader | any | sponsors an existing post under your campaign |
| Article / Newsletter | — (top-level imageUrl + linkUrl) | any | the default link-ad shape |
Carousel
{ "platformSpecificData": { "carousel": { "cards": [
{ "imageUrl": "...", "headline": "Card 1", "landingUrl": "https://..." },
{ "imageUrl": "...", "landingUrl": "https://..." }
]}}}2-10 cards. Every card needs a landingUrl; the ad-level linkUrl backfills cards that omit it (a card with neither is a 400).
Document
{ "platformSpecificData": { "document": { "url": "https://cdn.example.com/whitepaper.pdf", "title": "Q3 Whitepaper" } } }PDF, PPT or DOC up to 100 MB, uploaded to LinkedIn under the Company Page and rendered as a swipeable document in the feed.
Event
{ "platformSpecificData": { "event": { "urn": "urn:li:event:7654321" } } }Promotes an existing LinkedIn Event. No headline needed, the Event carries its own presentation.
Text Ad
{ "platformSpecificData": { "textAd": {
"headline": "Try Zernio",
"description": "Schedule everywhere from one API",
"landingUrl": "https://zernio.com",
"imageUrl": "https://cdn.example.com/logo-100x100.png"
}}}The right-rail classic: no post behind it. headline ≤ 25 chars, description ≤ 75. imageUrl is an optional 100×100 logo. Manual bidding is not required (LinkedIn accepts CPC/CPM without unitCost here).
Spotlight (dynamic)
{
"goal": "traffic",
"platformSpecificData": { "spotlight": {
"headline": "See our platform",
"description": "One API for every network",
"callToAction": "Visit us",
"landingUrl": "https://zernio.com",
"logoUrl": "https://cdn.example.com/logo.png",
"organizationName": "Zernio"
}}
}A dynamic ad personalized with the viewer's own photo and name. Goals: traffic, awareness.
Set logoUrl and organizationName explicitly if LinkedIn 404s. They default from the Company Page, but some pages fail LinkedIn's identity fallback; passing them explicitly always works.
Follower (dynamic)
{
"goal": "engagement",
"platformSpecificData": { "follower": {
"headline": { "preApproved": "GROW_YOUR_BUSINESS_INSIGHTS" },
"description": { "custom": "Follow us for updates" },
"callToAction": "VISIT_ORGANIZATION_COMPANY_PAGE"
}}
}Drives Page follows. Goals: engagement, awareness. headline and description each take exactly one of preApproved (a LinkedIn preset id) or custom (free text). callToAction uses LinkedIn's VISIT_ORGANIZATION_* enum.
Jobs (dynamic)
Uses the LinkedIn-only goal job_applicants:
{
"goal": "job_applicants",
"platformSpecificData": { "jobs": {
"headline": { "preApproved": "MEMBER_READY_FOR_YOUR_DREAM_JOB" },
"buttonLabel": { "preApproved": "CAREERS_AT_COMPANY" }
}}
}The ad renders the Company Page's active job postings, so the Page must have some; a page without live postings fails creative creation on LinkedIn's side.
Conversation
A clickable message tree delivered in LinkedIn messaging:
{ "platformSpecificData": { "conversation": {
"subject": "Chat with us",
"firstMessageId": "intro",
"messages": [
{ "id": "intro", "text": "Hi!", "buttons": [
{ "text": "Tell me more", "nextMessageId": "more" },
{ "text": "Visit site", "url": "https://zernio.com" }
]},
{ "id": "more", "text": "Details here." }
]
}}}Up to 25 message nodes, 5 buttons per node, 500-char message text, 35-char button text. Each button takes exactly one of nextMessageId or url; Zernio validates the graph (unknown ids, cycles, unreachable firstMessageId) before anything reaches LinkedIn.
The sender must be pre-approved. LinkedIn requires the sending identity to be approved for the ad account in Campaign Manager ("Manage message ad senders" in account settings) — including organization senders. An unapproved sender fails with SINMAIL_SENDER_NOT_APPROVED.
Thought-leader
Attach an existing LinkedIn post (a share or ugcPost, from any author who has authorized it) as a sponsored creative under a campaign you control:
{ "platformSpecificData": { "thoughtLeader": {
"postUrn": "urn:li:ugcPost:7482739454772752385"
}}}postUrn:urn:li:share:Norurn:li:ugcPost:N. Get it from "Copy link to post" on the target post — the copied URL contains-share-or-ugcPost-plus the numeric id. The address-bar/feed/update/urn:li:activity:NURL is not usable (activity URNs are rejected).- No
headline,body,imageUrlor organization needed, the referenced post carries its own commentary and author. - Different from
POST /v1/ads/boost: boost provisions its own Campaign Group + Campaign around the post; thought-leader slots into the campaign/v1/ads/createbuilds (or anexistingCampaignId), so bidding, targeting and schedule are yours.
Article / Newsletter
No extra shape needed — the default imageUrl + linkUrl create publishes LinkedIn's article/link ad (content.article on the wire):
{
"imageUrl": "https://cdn.example.com/hero.jpg",
"linkUrl": "https://blog.example.com/post",
"headline": "Read the post",
"body": "..."
}The same shape works for LinkedIn Article and Newsletter URLs. Set callToAction for the button label.
Verification caveats
Spotlight, carousel, document, text ad and conversation are live-verified end to end. Follower, jobs and event ads depend on real Page state LinkedIn resolves at create time (follow-target resolution, active job postings, a real Event) — on a Page missing that state, LinkedIn 404s/422s the creative even though the request is well-formed. The error is LinkedIn's, verbatim; fix the Page state, not the payload.