List Drafts
List your post drafts, optionally filtered by status. Requires a paid Creator or Lifetime plan.
GET /v1/posts lists the account's post drafts. With no query string you get everything the Studio holds; pass status to narrow to draft, scheduled or published. The response is a flat array in data with meta.count alongside it.
Use this to reconcile an external content calendar with LinkedMash, or to find the draft ids you need for the schedule and update endpoints when you did not keep them from the create call.
Example request
Authenticate with a bearer token in the Authorization header. Create a key on the API page in your LinkedMash settings and export it as LINKEDMASH_API_KEY before running this.
curl "https://api.linkedmash.com/v1/posts?status=draft" \
-H "Authorization: Bearer $LINKEDMASH_API_KEY"Header parameters
Your secret API key as a Bearer token.
Query parameters
Combine these parameters to narrow your results.
Filter by status: draft, scheduled, or published.
Response
{
"status": true,
"data": [
{
"id": "drf_8f3a21c9",
"content": "5 lessons from shipping every week for a year:",
"title": "Weekly shipping lessons",
"format": "text",
"status": "draft",
"created_at": "2026-06-22T09:14:02.118Z",
"updated_at": "2026-06-22T09:14:02.118Z"
}
],
"meta": {
"count": 1
}
}Response fields
Every response is wrapped in the same envelope: a status flag and a data payload, with meta present where there is pagination or a plan limit to report.
true on success. Every LinkedMash API response carries this envelope flag alongside data, so a client can branch on it without re-reading the HTTP status.
The matching drafts. Trashed drafts are excluded.
Draft identifier. Pass it to GET, PATCH and DELETE /v1/posts/{id} and to the schedule route.
The post body. Drafts written in the Studio editor can store this as an object with a text field rather than a bare string — handle both.
Internal working title. It is never published to LinkedIn; it exists so drafts are findable.
Composition format, e.g. text or carousel.
One of draft, scheduled or published.
ISO-8601 creation timestamp.
ISO-8601 timestamp of the last edit.
Number of drafts returned. This route is not paginated, so it is also the total for the given status filter.
Reconciling an external content calendar
This is the read that lets a planning tool outside LinkedMash stay honest about what is really queued.
Pull the three states separately
Call once each with status=draft, status=scheduled and status=published. Three narrow reads are easier to reason about than one list you then have to bucket yourself.
Match on id, not on content
Draft text gets edited in the Studio. Storing the LinkedMash draft id against your own record is the only reliable join.
Cross-check the scheduled set against the queue
status=scheduled tells you a draft has a schedule; GET /v1/queue tells you when, and gives you the scheduleId you would need to move or cancel it.
Expect trashed drafts to vanish
A soft-deleted draft drops out of this list with no tombstone. An id you hold that stops appearing was deleted, not merely published.
Behaviour and limits
Requires a Creator or Lifetime plan
Everything under /v1/posts, /v1/queue, /v1/schedule, /v1/media and /v1/analytics sits behind one middleware that checks for an unlocked Studio, so a Reader-plan or free key gets 402 with code SUBSCRIPTION_REQUIRED before the handler runs. Bookmark and label reads are on a separate router and are not affected by this gate.
No pagination
This route returns the full matching set with a count, not a cursor. Filter with status rather than expecting to page.
Scheduled posts appear here and in the queue
status=scheduled lists them as drafts with a schedule attached; GET /v1/queue lists the schedule entries themselves, keyed by scheduleId. Cancelling uses the scheduleId, not the draft id.
Trashed drafts are not returned
DELETE /v1/posts/{id} is a soft delete that sets is_trash, and trashed drafts drop out of this list.
Errors
Failures carry the same envelope as a success, with the reason in message and a stable machine-readable code where the status alone is ambiguous — several distinct conditions share a 402.