LINKEDMASH REST API

Programmatic access to your LinkedIn knowledge

A JSON REST API at https://api.linkedmash.com/v1 to search the saved posts you import, pull up posts from your favorite authors, and create and schedule drafts from what you save.

Authentication

Authenticate with a Bearer API key. Send it in either header:

  • Authorization: Bearer lm_...
  • linkedmash-api-key: lm_...

You can also use an OAuth 2.0 client-credentials token exchange. Generate and revoke keys in Settings, API at /integrations/api.

Grant only the scopes you need:

library:readlibrary:writecontent:readcontent:writeexports:readexports:writeanalytics:read

Responses include RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset. The Free plan returns a 20-result sample and allows 100 calls per UTC day. Premium unlocks full library access.

Quickstart

curl "https://api.linkedmash.com/v1/bookmarks?limit=20" \
  -H "Authorization: Bearer lm_live_..."

Endpoints

Saved posts

List, read, and count the LinkedIn posts you import. Filter by author, label, content type, or date, and page through with a cursor.

  • GET/v1/bookmarks

    List saved posts with filters and cursor pagination.

  • GET/v1/bookmarks/{id}

    Read one saved post.

  • GET/v1/bookmarks/count

    Count saved posts that match a filter.

  • POST/v1/posts/bulk

    Archive, unarchive, or delete every saved post that matches a filter.

Favorite authors

Find the authors you save from and pull up everything you saved from them.

  • GET/v1/authors?q=...

    Look up authors in your library by name.

  • GET/v1/bookmarks?author=...

    List saved posts from one author.

Folders, collections, and labels

Read your labels and add or remove them across every post that matches a filter.

  • GET/v1/labels

    List labels and collections.

  • POST/v1/labels/add-by-filter

    Add a label to all posts that match a filter.

  • POST/v1/labels/remove-by-filter

    Remove a label from all posts that match a filter.

Full-text and semantic search

Search across saved posts with the same endpoint. Use q for keywords or vector_search_term for meaning, and combine either with author and tag filters.

  • GET/v1/bookmarks?q=...&author=...&tag=...

    Full-text search with author and tag filters.

  • GET/v1/bookmarks?vector_search_term=...

    Semantic search by meaning or topic.

Drafts and scheduling

Create LinkedIn drafts from what you save, then schedule them into your queue.

  • POST/v1/posts

    Create a draft.

  • GET/v1/posts

    List drafts, scheduled, and published posts. Filter with ?status=.

  • PATCH/v1/posts/{id}

    Update a draft.

  • POST/v1/posts/{id}/schedule

    Schedule a draft.

  • GET/v1/queue

    Read your scheduled post queue.

Exports and analytics

Export your library and read your LinkedIn analytics.

  • POST/v1/exports/pdf

    Start a PDF export job.

  • GET/v1/exports/pdf/jobs/{job_id}

    Check the status of a PDF export job.

  • POST/v1/exports/csv

    Export saved posts as CSV.

  • POST/v1/exports/json

    Export saved posts as JSON.

  • GET/v1/analytics

    Read account analytics for a date range.

200 OK GET /v1/bookmarks
{
  "data": [
    {
      "id": "bk_01HZX3K9",
      "url": "https://www.linkedin.com/feed/update/urn:li:activity:7200000000000000000",
      "author": {
        "name": "Jane Doe",
        "headline": "Founder at Example"
      },
      "content": "Three lessons from our first 100 outbound calls...",
      "content_type": "text",
      "labels": [
        "Sales Playbook"
      ],
      "saved_at": "2026-10-01T09:30:00Z"
    }
  ],
  "has_more": true,
  "next_cursor": "eyJvIjoyMH0"
}

API FAQ

How do I authenticate?

Send your key in the Authorization header as Bearer lm_..., or in the linkedmash-api-key header. You can also exchange client credentials for an OAuth 2.0 token. Create and revoke keys in Settings, API.

What are the rate limits and plan limits?

Every response carries RateLimit-Limit, RateLimit-Remaining, and RateLimit-Reset headers. The Free plan returns a 20-result sample and allows 100 calls per UTC day. Premium and Lifetime unlock the full library and cursor pagination.

How does pagination work?

List endpoints return a has_more flag and a next_cursor value. Pass it back as the cursor parameter to fetch the next page until has_more is false.

Are there webhooks or real-time sync?

Yes. LinkedMash can notify your systems when your library changes. See the webhooks guide at /api-docs/webhooks for events, payloads, and signature checks.

How do I keep my key secure and revoke it?

Use the narrowest scopes you need and keep keys on the server. You can rotate or revoke a key at any time in Settings, API, and it stops working immediately. Your LinkedIn password is never needed.

Webhook details live in the webhooks guide.