Developers
API documentation
Read your LinkedIn content, manage your engagement feeds, and drive outreach campaigns from your own scripts and automations.
https://myfeedin.co/api/v1Introduction
The MyFeedIn API is a REST API over HTTPS. It returns JSON, uses standard HTTP status codes, and is authenticated with an API key. Every request is scoped to the account or workspace that key belongs to, so a key never sees data outside its scope.
Create and manage keys in Settings, API keys.
Prefer chatting with your data from Claude instead of writing code? Connect the MyFeedIn MCP server, it exposes the same posts, analytics and feeds as conversational tools.
Authentication
Pass your key as a bearer token on every request. Keys are shown once at creation and stored hashed, so keep yours somewhere safe and never expose it in client-side code.
curl https://myfeedin.co/api/v1/me \
-H "Authorization: Bearer mfi_live_your_key_here"A missing or invalid key returns 401. An inactive subscription returns 402.
Scopes
Each key grants a chosen subset of permissions. The campaign scopes require an active Growth plan, checked at request time. Feed scopes work on every plan, except adding people to a feed, which also needs Growth.
| Field | Type | Description |
|---|---|---|
| posts:read | scope | Read your published LinkedIn posts. |
| feeds:read | scope | List your feeds and the people in them. |
| feeds:write | scope | Create feeds, remove people, and add people by URL (adding requires Growth). |
| campaigns:read | scope | List campaigns and read their stats. Requires Growth. |
| campaigns:write | scope | Create campaigns and add profiles. Requires Growth. |
Rate limits
Requests are rate limited per key. When you exceed the limit the API returns 429 with a retry_after value in seconds. Back off and retry after that window.
Errors
Errors return a JSON body of the shape { "error": "message" } with a conventional status code.
| Field | Type | Description |
|---|---|---|
| 400 | Bad Request | Missing or malformed parameters. |
| 401 | Unauthorized | Missing, invalid, or revoked key. |
| 402 | Payment Required | Subscription inactive. |
| 403 | Forbidden | Key lacks the required scope or plan. |
| 404 | Not Found | Resource does not exist in this scope. |
| 429 | Too Many Requests | Rate limit exceeded. |
Account
Current key
Returns the calling key's user id, scope, and granted scopes. The simplest way to confirm a key works.
{
"user_id": "a418d3f9-…",
"workspace_id": null,
"scope": "personal",
"scopes": ["posts:read", "campaigns:read", "campaigns:write"]
}Posts
List posts
Your published LinkedIn posts, newest first. Requires posts:read.
| Field | Type | Description |
|---|---|---|
| limit | integer | 1 to 100. Default 20. |
| since | string | Earliest published_at, ISO 8601. |
| until | string | Latest published_at, ISO 8601. |
curl "https://myfeedin.co/api/v1/posts?limit=5" \
-H "Authorization: Bearer mfi_live_your_key_here"{
"count": 1,
"posts": [
{
"id": "9ba6e7c7-…",
"url": "https://www.linkedin.com/posts/…",
"num_likes": 24,
"num_comments": 5,
"num_impressions": 1330,
"published_at": "2026-06-17T06:58:07Z",
"excerpt": "I posted the exact same article on X and LinkedIn…"
}
]
}Feeds
List feeds
Your engagement feeds, newest first, each with a member count. Requires feeds:read.
curl https://myfeedin.co/api/v1/feeds \
-H "Authorization: Bearer mfi_live_your_key_here"{
"count": 2,
"feeds": [
{
"id": "7f2c9a10-…",
"name": "SaaS founders",
"member_count": 24,
"created_at": "2026-05-02T09:12:44Z"
},
{
"id": "b81d4e63-…",
"name": "Clients",
"member_count": 9,
"created_at": "2026-03-18T14:03:21Z"
}
]
}Create feed
Creates an empty feed. Requires feeds:write. Fill it from the app, the Chrome extension, or the add-people endpoint below (Growth plan).
| Field | Type | Description |
|---|---|---|
| name | string | Feed name. Required, max 120 characters. |
curl -X POST https://myfeedin.co/api/v1/feeds \
-H "Authorization: Bearer mfi_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{"name":"SaaS founders"}'{
"feed": {
"id": "7f2c9a10-…",
"name": "SaaS founders",
"member_count": 0,
"created_at": "2026-07-20T10:04:12Z"
}
}List people in a feed
The people in one feed. Use the returned person ids with the remove endpoint below. Requires feeds:read.
| Field | Type | Description |
|---|---|---|
| limit | integer | 1 to 200. Default 100. |
curl "https://myfeedin.co/api/v1/feeds/FEED_ID/people?limit=50" \
-H "Authorization: Bearer mfi_live_your_key_here"{
"feed": { "id": "7f2c9a10-…", "name": "SaaS founders" },
"count": 1,
"people": [
{
"id": "c3f81b52-…",
"full_name": "Jane Doe",
"headline": "Founder at Acme",
"linkedin_url": "https://www.linkedin.com/in/jane-doe",
"picture_url": "https://media.licdn.com/dms/image/…"
}
]
}Add people to a feed
Adds LinkedIn profiles to a feed by URL. Each URL is resolved through your connected LinkedIn account to its real LinkedIn identifier (a feed member without one would never appear in the feed), created in your CRM if new, then attached to the feed. Requires feeds:write, the Growth plan, and a connected LinkedIn account. Keys on other plans get a 403; without a connected account the API returns 400.
| Field | Type | Description |
|---|---|---|
| linkedin_url | string | A single profile URL. |
| linkedin_urls | string[] | Up to 25 profile URLs. Use instead of linkedin_url for batches. |
curl -X POST https://myfeedin.co/api/v1/feeds/FEED_ID/people \
-H "Authorization: Bearer mfi_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{"linkedin_urls":["https://www.linkedin.com/in/jane-doe"]}'{
"added": 1,
"created": 1,
"matched": 0,
"already_in_feed": 0
}created counts people new to your CRM, matched counts people you already had. Someone already in the feed is skipped and counted in already_in_feed. A URL that cannot be resolved (private or out of network) is reported in an errors array without failing the rest of the batch.
Remove person from feed
Removes a person from the feed. The person stays in your CRM and in any other feed they belong to; only this membership is deleted. The personId comes from the list endpoint above. Requires feeds:write.
curl -X DELETE https://myfeedin.co/api/v1/feeds/FEED_ID/people/PERSON_ID \
-H "Authorization: Bearer mfi_live_your_key_here"{ "removed": true }Campaigns
List campaigns
Lists your outreach campaigns with per-campaign enrollment counts and step counts. Requires campaigns:read.
{
"campaigns": [
{
"id": "…",
"name": "Solopreneurs Q3",
"status": "active",
"step_count": 3,
"enrollment_counts": { "total": 42, "active": 30, "replied": 4 }
}
]
}Create campaign
Creates a draft campaign, locked to your connected LinkedIn account. Requires campaigns:write and a connected account.
| Field | Type | Description |
|---|---|---|
| name | string | Campaign name. Defaults to Untitled campaign. |
| icon | string | Optional icon name. Defaults to Megaphone. |
curl -X POST https://myfeedin.co/api/v1/campaigns \
-H "Authorization: Bearer mfi_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{"name":"Solopreneurs Q3"}'Get campaign
One campaign with its ordered steps, warmup state, and enrollments (each joined to its person). Requires campaigns:read.
Add profiles by URL
Adds LinkedIn profiles to a campaign by URL. Each URL is resolved through your connected LinkedIn account, upserted into your CRM, then enrolled. Requires campaigns:write and the Growth plan.
| Field | Type | Description |
|---|---|---|
| linkedin_url | string | A single profile URL. |
| linkedin_urls | string[] | Up to 25 profile URLs. Use instead of linkedin_url for batches. |
curl -X POST https://myfeedin.co/api/v1/campaigns/CAMPAIGN_ID/profiles \
-H "Authorization: Bearer mfi_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{"linkedin_url":"https://www.linkedin.com/in/some-person"}'{
"enrolled": 1,
"created": 1,
"matched": 0,
"skipped": 0,
"skipped_active_elsewhere": 0
}Guides
Guide: add a profile to a campaign
The most common workflow: find a campaign, then push profiles into it by URL. First list your campaigns to get an id.
curl https://myfeedin.co/api/v1/campaigns \
-H "Authorization: Bearer mfi_live_your_key_here"Then add one or more profiles to it.
curl -X POST https://myfeedin.co/api/v1/campaigns/CAMPAIGN_ID/profiles \
-H "Authorization: Bearer mfi_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"linkedin_urls": [
"https://www.linkedin.com/in/person-a",
"https://www.linkedin.com/in/person-b"
]
}'A person already active in another campaign is skipped rather than enrolled twice, and appears in skipped_active_elsewhere. A URL that cannot be resolved (private or out of network) is reported in an errors array without failing the rest of the batch.
Guide: manage a feed
Keep a feed clean from a script: list your feeds to get an id, list the people in it, then remove the ones that no longer belong.
curl https://myfeedin.co/api/v1/feeds \
-H "Authorization: Bearer mfi_live_your_key_here"curl https://myfeedin.co/api/v1/feeds/FEED_ID/people \
-H "Authorization: Bearer mfi_live_your_key_here"curl -X DELETE https://myfeedin.co/api/v1/feeds/FEED_ID/people/PERSON_ID \
-H "Authorization: Bearer mfi_live_your_key_here"Removing a person only detaches them from that feed; their CRM record and their other feed memberships are untouched. To rebuild the list, add people again from the app, the Chrome extension, or the add-people endpoint if you are on the Growth plan.