DemandBird

offiziell

Verfasse, plane und veröffentliche Social-Media-Beiträge in deiner eigenen Stimme und lies deine Analysen – direkt in Claude, ChatGPT oder einem beliebigen MCP-Client. Gehostet, mit OAuth-Anmeldung.

Was kann man mit DemandBird MCP machen?

  • Draft posts in your voice — Ask for a post on a topic and save it as a draft, with your brand voice and workspace style applied.
  • Revise and tailor drafts — Ask to make draft 124 shorter or less salesy, or turn it into a version for another platform.
  • Schedule and queue posts — Schedule a draft for a set date and time, or drop it into the next open slot of your posting queue.
  • Check results and find posts — Ask how your LinkedIn did this month, what your best post was in 90 days, or search published posts by topic.
  • Review and approvals — Send a draft to a teammate for review, see what's awaiting your approval, and approve or send back with a note.
  • Save ideas and switch workspaces — Save several ideas to DemandBird at once, or say "switch to Acme" to work in another client's workspace.

Gehosteter MCP-Server

npx add-mcp 'https://app.demandbird.com/mcp'

Installiert in Claude Code, Codex, Cursor und mehr

Dokumentation

Start asking

Talk to Claude or ChatGPT the way you'd talk to a teammate. Saying “in DemandBird” helps the first time.

Write

  • “Write a LinkedIn post about our new feature and save it as a draft.”
  • “Make draft 124 shorter and less salesy.”
  • “Turn post 124 into a version for X.”

Schedule

Check results

  • “How did my LinkedIn do this month?”
  • “What was my best post in the last 90 days?”
  • “When should I post on LinkedIn?”

Team and ideas

  • “Send draft 124 to Alex for review.”
  • “What's waiting for my approval?”
  • “Save these five ideas to DemandBird.”

Good to know

  • Nothing goes out without you. When you ask to publish a post, approve one, or invite someone, DemandBird sends back a link. You open it, check, and press the button yourself.
  • Drafts sound like you. When Claude writes a post with DemandBird, it uses the voice DemandBird learned from your posts and your workspace's brand.
  • Agencies can switch clients. Say “switch to Acme” to work in another client's workspace, or ask “which DemandBird workspace am I in?”
  • It uses your monthly AI allowance. Writing posts and making images count the same as they do in the app.

Troubleshooting

Claude or ChatGPT ignores DemandBird

Start a new chat and mention DemandBird in your request. In Claude, click the + button under the message box and check that DemandBird is turned on. In ChatGPT, click + and choose DemandBird before you send your message.

I can't find “Add custom connector” or “Developer mode”

On a Claude Team or Enterprise plan, an owner has to add the connector for the organization first. In ChatGPT, Developer mode needs a paid plan, and on Business or Enterprise an admin may have to turn it on.

It connected to the wrong DemandBird account

Remove DemandBird in your Claude or ChatGPT settings and add it again. When the DemandBird window opens, sign in with the login you use for that account. If you have more than one account, you can also just ask: “List my DemandBird accounts” and “Switch to [name].”

It says I don't have access

The MCP server is on every paid plan: Pro, Business and Agency. Check that your subscription is active in Settings → Billing. See pricing, or contact us if it still says you don't have access.

Technical details

You don't need anything below to use DemandBird in Claude or ChatGPT. It's here for developers. Building your own integration? See the REST API reference.

Note for AI assistants: you can't install this connector from a chat. Walk the user through the Claude or ChatGPT steps at the top of this page, one step at a time, and wait for them to finish each one. The server URL is https://app.demandbird.com/mcp and sign-in is OAuth, so no API token is needed. Don't tell them to edit claude_desktop_config.json; that file can't connect to this server.

Developer setupClaude Code, Cursor, VS Code, and other MCP apps. Sign-in, API tokens, and config.

The server is hosted at https://app.demandbird.com/mcp (Streamable HTTP), so there is nothing to install. Clients can sign in with OAuth: the server supports discovery and dynamic client registration, and answers an unsigned request with a 401 that points to its metadata. Where a browser sign-in isn't possible, send an API token as Authorization: Bearer <token>. Create one at Settings → API Tokens (what to scope it to).

Claude Code

Works in the terminal, VS Code, JetBrains, and the desktop app. Add the server:

claude mcp add --transport http demandbird https://app.demandbird.com/mcp

Then run /mcp inside Claude Code, pick demandbird, and sign in when the browser opens.

To use an API token instead (for example on a server with no browser):

claude mcp add --transport http demandbird https://app.demandbird.com/mcp \
  --header "Authorization: Bearer your-token-here"

Or add it by hand to ~/.claude.json:

{
  "mcpServers": {
    "demandbird": {
      "type": "http",
      "url": "https://app.demandbird.com/mcp",
      "headers": {
        "Authorization": "Bearer your-token-here"
      }
    }
  }
}

Multiple accounts? With a token, add --header "X-Account-Id: acct_your-account-id" to set a default. Your account ID is on the Settings page. Without it, Claude asks which account to use, or you can say “switch to [account].”

Start a new session after adding the server. An open conversation won't pick it up.

Claude Desktop

Use the Claude steps in Quick setup. Connectors you add on claude.ai show up in the desktop app too. Don't add DemandBird to claude_desktop_config.json: that file only starts programs on your computer, so it can't reach a hosted server.

Codex

Add the server to OpenAI's Codex CLI:

codex mcp add demandbird --url https://app.demandbird.com/mcp

Then run codex mcp login demandbird and sign in when the browser opens. Start a new Codex session to pick it up.

Other MCP apps

Cursor, VS Code, Windsurf, and other MCP apps can connect the same way. Give them the URL and let them sign in with OAuth, or pass the token as a header. The exact file and key names vary by app; this is the common shape:

{
  "mcpServers": {
    "demandbird": {
      "url": "https://app.demandbird.com/mcp",
      "headers": {
        "Authorization": "Bearer your-token-here"
      }
    }
  }
}

Tool referenceAll 55 tools the server offers, with every parameter. For developers and for AI assistants deciding what to call.

Accounts and workspaces

list_accounts

list_accounts

List every account you can use, with its id and which one is selected now.

No parameters required.

select_account

select_account

Switch to a different account. Every later tool call in the conversation uses it.

ParameterTypeDescription
account_idrequiredstringAccount id (like acct_xxx) or numeric id. Use list_accounts to find it.

list_workspaces

list_workspaces

List the workspaces (clients) on the account and which one is active. An agency has one workspace per client, each with its own drafts, channels, brand and analytics.

No parameters required.

select_workspace

select_workspace

Switch to another workspace, like “switch to Acme.” The choice sticks until it is changed again.

ParameterTypeDescription
workspacerequiredstringWorkspace name (like Acme) or numeric id, from list_workspaces.

move_post

move_post

Move a draft to another workspace, for a post saved under the wrong client. Finds the post in any workspace. Its tags are matched by name (or created) in the new workspace, and its author and reviewers get access there if they didn't have it. Moving it back undoes it.

ParameterTypeDescription
post_idrequiredstringId of the post to move.
workspacerequiredstringWhere to move it, by name or id, from list_workspaces.

Account admins only. Only drafts move, so cancel a scheduled post first with cancel_post. A post set to go out on a channel the new workspace doesn't have is refused.

list_connected_accounts

list_connected_accounts

List the social accounts connected to this workspace. Use it to get the numeric id when a platform has more than one account (two LinkedIn profiles, or a profile and a company page).

ParameterTypeDescription
platformoptionalstringOnly show one platform: linkedin, twitter, threads, bluesky, substack, youtube, facebook or instagram.

Pass the ids as platform_account_ids on save_draft, schedule_post, queue_post or publish_post.

get_status

get_status

Quick counts: drafts, scheduled posts, posts out today, and whether the queue is paused. No analytics.

No parameters required.

Writing posts

Each plan includes a monthly AI allowance: 90 drafts, 60 rewrites, 100 post ideas, and 2 voice re-trainings on Pro; 140 drafts, 110 rewrites, 200 ideas, and 4 re-trainings on Business; 450 drafts, 340 rewrites, 500 ideas, and 10 re-trainings on Agency. Plans & what's included.

draft_post

draft_post

Write a post with AI in your voice and your workspace's brand, then save it as a draft. Use it when you ask Claude to write something for you.

ParameterTypeDescription
promptrequiredstringWhat to write about, like “a post about launching my new SaaS product.”
platformoptionalstringTarget platform: linkedin, twitter, threads, bluesky, substack, youtube, facebook or instagram. Changes tone and length. Instagram needs an image or video attached.
draft_anywayoptionalbooleanSet true to write with what it has when it would otherwise ask for more context.
imagesoptionalarray of objectsImages, a video, or one PDF to attach. For anything bigger than a thumbnail, call upload_image first and pass the s3_key it returns, like [{ s3_key: "..." }]. A PDF posts as a LinkedIn document (a swipeable carousel): LinkedIn only, one per post, and never alongside images or video.
youtubeoptionalobjectYouTube options: { title?, privacy_status?, thumbnail_url? }. title is up to 100 characters and comes from the first line if left out. privacy_status is public (the default), unlisted or private. A video must be attached before the post can be scheduled or published.

Each call uses one AI draft from your monthly allowance.

tailor_draft

tailor_draft

Rewrite a draft for another platform, in your voice, like “make post 123 work on X.”

ParameterTypeDescription
idrequirednumberPost id to rewrite.
platformrequiredstringTarget platform: linkedin, twitter, threads, bluesky, substack, youtube, facebook or instagram.
save_asoptionalstringchannel_copy saves the rewrite on the same post as that channel's own text. new_draft (the default) saves it as a separate draft.

draft_variations

draft_variations

Show three other versions of a draft to read. Saves nothing.

ParameterTypeDescription
idrequirednumberPost id.

save_draft

save_draft

Save text you wrote as a draft, exactly as given. No AI.

ParameterTypeDescription
contentrequiredstringThe post text.
platformsoptionalarray of stringsTarget platforms: linkedin, twitter, threads, bluesky, substack, youtube, facebook or instagram.
authoroptionalstringWhose post this is: a teammate's name, or me. Leave it out to save it as yours. Only people who can see everyone's posts can save as someone else.
tagsoptionalarray of stringsTag names, like ["Launch", "Case study"]. Names match the workspace's tags whatever the capitals. A new name becomes a new tag if you're allowed to manage tags. If you aren't, nothing is saved and the reply lists the tags you can use.
platform_account_idsoptionalobjectWhich connected account each platform posts from, like { "linkedin": 42 }. Use the ids from list_connected_accounts. Only needed when a platform has more than one account; otherwise the first one is used.
channel_copiesoptionalobjectDifferent text for one channel, keyed by platform, like { "twitter": "..." } for an X version of a LinkedIn post. That text publishes on that channel and every other channel keeps the shared text. Pass "" for a channel to remove its copy. Use this, not a second post.
first_commentoptionalobjectA comment DemandBird posts under your post once it is live, from the same profile: a question to start the conversation, or a call to action. LinkedIn, Facebook and Instagram. Shape: { text, delay_minutes?, platforms? }. delay_minutes is 0, 1, 5, 10, 30 or 60 (default 1). Pass { text: "" } to remove it.
first_commentsoptionalarray of objectsUp to 5 comments posted in order, each with its own delay. Add comment_as (an id from list_connected_accounts) to post one from a teammate's profile or a page. Replaces the existing first comments; [] removes them all. Use this or first_comment, not both.
imagesoptionalarray of objectsImages, a video, or one PDF to attach. For anything bigger than a thumbnail, call upload_image first and pass the s3_key it returns, like [{ s3_key: "..." }]. A PDF posts as a LinkedIn document (a swipeable carousel): LinkedIn only, one per post, and never alongside images or video.
youtubeoptionalobjectYouTube options: { title?, privacy_status?, thumbnail_url? }. title is up to 100 characters and comes from the first line if left out. privacy_status is public (the default), unlisted or private. A video must be attached before the post can be scheduled or published.

If Claude wrote the words, it should call get_brand_voice first, since nothing on this path applies your voice.

update_draft

update_draft

Change a post's text, media, platforms, tags, first comment or stage. Saved exactly as given, with no AI. Works on draft, scheduled and pending-review posts, and keeps the schedule.

ParameterTypeDescription
idrequirednumberPost id.
contentoptionalstringNew text. Replaces the shared text.
platformsoptionalarray of stringsNew platforms. Replaces the current ones.
tagsoptionalarray of stringsReplaces the post's tags; [] removes them all. Changing only tags works on any post, even a published one.
channel_copiesoptionalobjectDifferent text for one channel, keyed by platform, like { "twitter": "..." } for an X version of a LinkedIn post. That text publishes on that channel and every other channel keeps the shared text. Pass "" for a channel to remove its copy. Use this, not a second post.
first_commentoptionalobjectA comment DemandBird posts under your post once it is live, from the same profile: a question to start the conversation, or a call to action. LinkedIn, Facebook and Instagram. Shape: { text, delay_minutes?, platforms? }. delay_minutes is 0, 1, 5, 10, 30 or 60 (default 1). Pass { text: "" } to remove it.
first_commentsoptionalarray of objectsUp to 5 comments posted in order, each with its own delay. Add comment_as (an id from list_connected_accounts) to post one from a teammate's profile or a page. Replaces the existing first comments; [] removes them all. Use this or first_comment, not both.
stageoptionalstringMove the post on the Content board: needs_writing, drafting, internal_review, client_review, revision_requested, on_hold, ready_to_schedule, rejected or done. Only allowed moves work; a refused move lists the allowed ones.
stage_noteoptionalstringWhy the post is moving. Required for on_hold.
imagesoptionalarray of objectsImages, a video, or one PDF, replacing what the post has now. For anything bigger than a thumbnail, call upload_image first and pass the s3_key it returns, like [{ s3_key: "..." }]. A PDF posts as a LinkedIn document (a swipeable carousel): LinkedIn only, one per post, and never alongside images or video.
youtubeoptionalobjectReplace the YouTube fields. Same shape as on draft_post.

If a channel has its own copy, changing content leaves that copy exactly as it is, and it is what publishes on that channel. To change it, pass channel_copies.

revise_draft

revise_draft

Apply feedback (“shorter,” “less salesy,” “add a call to action”) to a draft and save the rewrite onto the same post. It keeps the images, channel copies and schedule, and writes in your voice.

ParameterTypeDescription
idrequirednumberPost id of the draft, from draft_post, save_draft or list_drafts.
feedbackrequiredstringWhat you want changed, in your own words.
platformoptionalstringThe platform whose length limit to fit. Defaults to the post's first platform. It does not change where the post publishes.
draft_anywayoptionalbooleanSet true to rewrite with what it has instead of asking for more context.

Use this every time you react to a draft. Calling draft_post again creates a second, unrelated draft instead. Each call uses one AI rewrite from your monthly allowance.

attach_reference

attach_reference

Store source material (a call transcript, an article, notes) with a post. You and your reviewers can read it, but it is never published and it does not change the post or reset an approval.

ParameterTypeDescription
post_idrequirednumberPost id.
textoptionalstringThe material itself, up to 200,000 characters. Give text or url, not both.
urloptionalstringA link. The page is fetched in the background, and the link is kept even if that fails.
titleoptionalstringA label. Taken from the first line of text if left out.

Never put source material in content. Whatever is in content gets published. A post holds up to 20 references.

suggest_hashtags

suggest_hashtags

Suggest hashtags and another opening line for a draft. Saves nothing.

ParameterTypeDescription
idoptionalnumberPost id. Defaults to the draft you changed last.

Finding posts

list_drafts

list_drafts

List your posts by status, with ids, previews, platforms and schedule.

ParameterTypeDescription
statusoptionalstringdraft (the default), scheduled, posted or failed.
editorial_statusoptionalstringFilter by Content board stage. Same values as stage on update_draft.
limitoptionalnumberHow many (default 20, max 100).

get_post

get_post

Everything about one post, including its status on each platform and its reference materials (title, link, kind, length and status, but not their text).

ParameterTypeDescription
idrequirednumberPost id.

search_posts

search_posts

Find published posts by what they say, like “my post about pricing.” Searches every post on the workspace's channels, including history imported from LinkedIn.

ParameterTypeDescription
queryrequiredstringUp to 5 words. Every word must appear in the post.
authoroptionalstringWhose posts: me, or a teammate's name like Alex. Leave it out for the whole workspace.
platformoptionalstringOne of twitter, bluesky, threads, facebook, instagram, mastodon, youtube, tiktok, pinterest or linkedin.
start_dateoptionalstring (YYYY-MM-DD)Only posts on or after this day.
end_dateoptionalstring (YYYY-MM-DD)Only posts on or before this day.
limitoptionalnumberHow many matches (default 10, max 25).

list_recent_posts

ParameterTypeDescription
limitoptionalnumberHow many (default 5, max 10).

list_scheduled_posts

ParameterTypeDescription
windowoptionalstringtoday, week or upcoming (the default).

delete_post

delete_post

Permanently delete a draft by id. Can't be undone. It can't delete a post that's already published; there is no tool for that.

ParameterTypeDescription
idrequirednumberPost id.

Scheduling and publishing

schedule_post

schedule_post

Schedule a post for a set date and time on one or more platforms.

ParameterTypeDescription
idrequirednumberPost id.
scheduled_atrequiredstring (ISO 8601)When to publish, like 2026-03-10T09:00:00Z. Must be in the future.
platformsoptionalarray of stringsDefaults to the platforms already on the post.
platform_account_idsoptionalobjectWhich connected account each platform posts from, like { "linkedin": 42 }. Use the ids from list_connected_accounts. Only needed when a platform has more than one account; otherwise the first one is used.
variance_minutesoptionalnumberOverride the account's posting-time variance, 0 to 60. The time is shifted by up to half of it so posts don't all land on the exact minute. 0 keeps the exact time.

queue_post

queue_post

Put a post in the next open slot of your posting queue.

ParameterTypeDescription
idrequirednumberPost id.
platformsoptionalarray of stringsDefaults to the platforms already on the post.
platform_account_idsoptionalobjectWhich connected account each platform posts from, like { "linkedin": 42 }. Use the ids from list_connected_accounts. Only needed when a platform has more than one account; otherwise the first one is used.
variance_minutesoptionalnumberOverride the account's posting-time variance, 0 to 60. The time is shifted by up to half of it so posts don't all land on the exact minute. 0 keeps the exact time.

Returns the time each platform got. Use get_queue_slots first to see the times without queueing.

get_queue_slots

get_queue_slots

See the next open queue slot for each platform without scheduling anything.

ParameterTypeDescription
platformsrequiredarray of stringsPlatforms to check, like ["linkedin", "twitter"].

cancel_post

cancel_post

Take a scheduled post off the schedule. It goes back to drafts; nothing is deleted.

ParameterTypeDescription
idrequirednumberPost id.

publish_post

publish_post

Publish a draft now. Over MCP this does not publish by itself: it returns a link where you check the post and press Publish.

ParameterTypeDescription
idrequirednumberPost id.
platformsoptionalarray of stringsDefaults to the platforms already on the draft.
platform_account_idsoptionalobjectWhich connected account each platform posts from, like { "linkedin": 42 }. Use the ids from list_connected_accounts. Only needed when a platform has more than one account; otherwise the first one is used.

pause_queue

No parameters required.

resume_queue

resume_queue

Turn publishing back on so scheduled posts go out again.

No parameters required.

list_queue_schedule

list_queue_schedule

Show each channel's weekly posting times: every time, the days it runs, the channel's id, whether you can change it, and the time zone.

ParameterTypeDescription
platformoptionalstringOnly show one platform: linkedin, twitter, threads, bluesky, substack, youtube, facebook or instagram.

Call this before add_queue_times or remove_queue_times to get the time zone and channel ids.

add_queue_times

add_queue_times

Add posting times to one channel's weekly schedule, like “add 9am on weekdays for LinkedIn.” A time that's already there stays as it is. Posts already in the queue keep their times.

ParameterTypeDescription
platformrequiredstringThe channel's platform: linkedin, twitter, threads, bluesky, substack, youtube, facebook or instagram.
timesrequiredarray of strings24-hour times, like ["09:00", "14:30"], in the workspace's posting time zone.
daysrequiredarray of stringsDay names (monday to sunday), or everyday, weekdays or weekends.
platform_account_idsoptionalobjectWhich channel, when the platform has more than one, like { "linkedin": 42 }. Ids come from list_queue_schedule.

remove_queue_times

remove_queue_times

Remove posting times from one channel's weekly schedule. Posts already in the queue keep their times.

ParameterTypeDescription
platformrequiredstringThe channel's platform: linkedin, twitter, threads, bluesky, substack, youtube, facebook or instagram.
timesrequiredarray of strings24-hour times to remove, like ["09:00"].
daysoptionalarray of stringsOnly remove on these days. Leave it out to remove the time from every day.
platform_account_idsoptionalobjectWhich channel, when the platform has more than one. Ids come from list_queue_schedule.

Images

upload_image

upload_image

Get an upload link for an image, video or PDF. Returns a curl command to run and an s3_key to pass in images on draft_post, save_draft or update_draft.

ParameterTypeDescription
filenamerequiredstringThe file's name, like photo.jpg.
content_typeoptionalstringFile type. Worked out from the name if left out. Images (JPEG, PNG, GIF, WebP), videos (MP4, MOV, AVI, WebM, MKV) and PDFs, up to 100 MB.

Running the curl command needs an app that can run commands, like Claude Code. In a chat app, attach the image in DemandBird instead.

generate_image

generate_image

Make an original image with AI to go with a post. Your brand style is applied for you. Takes 10 to 30 seconds, uses one monthly image credit, and saves the image to your media library.

ParameterTypeDescription
promptrequiredstringWhat the image should show. Describe the picture, not the post.
styleoptionalstringphoto, illustration (the default), infographic or diagram.
sizeoptionalstringsquare (1:1, the default), portrait (2:3) or landscape (3:2).

Returns an s3_key to pass in images. See AI images.

Reviews and approvals

request_review

request_review

Send a draft to teammates for approval. Required reviewers block publishing until each one approves; optional reviewers are FYI.

ParameterTypeDescription
post_idrequiredstringId of the draft.
reviewersrequiredarray of objectsEach reviewer needs an email, a user_id, or a name (“Alex”). An unknown or unclear name is refused, never guessed. Set required: false to make a reviewer optional.
noteoptionalstringA message for the reviewers.
scheduled_atoptionalstring (ISO 8601)Schedule it now. It publishes at this time if every required reviewer has approved.

list_posts_awaiting_my_review

ParameterTypeDescription
limitoptionalnumberHow many (1 to 100, default 20).

approve_post

approve_post

Approve a post you were asked to review. Returns a link where you read the post and press Approve yourself.

ParameterTypeDescription
post_idrequiredstringId of the post.
noteoptionalstringA note saved with the approval.

send_back_post

send_back_post

Send a post back to its writer with what needs to change. Returns a link where you press Send back yourself.

ParameterTypeDescription
post_idrequiredstringId of the post.
noterequiredstringWhat needs to change, in your words. The writer sees it as written.

comment_on_post

comment_on_post

Leave a comment on a post without approving or sending it back.

ParameterTypeDescription
post_idrequiredstringId of the post.
commentrequiredstringThe comment, in your words.

Ideas

save_idea

save_idea

Save one or more ideas to the Ideas tab. No AI. All the ideas in one call are saved together, or none are.

ParameterTypeDescription
ideasrequiredarray of objectsUp to 100. Each has content (up to 5,000 characters) and optional tags and references (source material, kept out of the idea text).
authoroptionalstringWhose ideas these are: a teammate's name, or me.

list_ideas

ParameterTypeDescription
authoroptionalstringA teammate's name, or me. Leave it out for yours.
limitoptionalnumberHow many (default 20, max 100).

delete_idea

delete_idea

Delete ideas by id. If any id can't be deleted, none are. Can't be undone.

ParameterTypeDescription
idsrequiredarray of numbersIdea ids, up to 100.

Brand and voice

get_brand_voice

get_brand_voice

Read the workspace's brand (positioning, audience, content pillars) and your writing voice (how you sound, phrases you use, what you avoid, recent edits).

ParameterTypeDescription
platformoptionalstringAlso return recent before-and-after edits for this platform.

draft_post and revise_draft already apply your voice. This is for when Claude writes the words itself and saves them with save_draft or update_draft.

update_voice

update_voice

Change your own writing voice, the same as Settings → Voice. For example: “I never use the word synergy.”

ParameterTypeDescription
editsrequiredarray of objectsOne per field, as { field, value } or { field, reset: true }. Each edit replaces the whole field, so send the full list you want kept.

update_brand

update_brand

Change the active workspace's positioning and audience, the same as the Brand identity card in Settings.

ParameterTypeDescription
positioningoptionalstringWhat the business does and stands for. Up to 2,000 characters.
icpoptionalstringWho the posts are for. Up to 2,000 characters.

Analytics

These tools only read. The numbers match the Analytics tab. Reddit is not included.

get_analytics_summary

get_analytics_summary

Followers, engagements, reach and engagement rate, each with the change from the period before. Leave out platform for every network at once.

ParameterTypeDescription
platformoptionalstringOne of twitter, bluesky, threads, facebook, instagram, mastodon, youtube, tiktok, pinterest or linkedin.
periodoptionalstring7d, 30d or 90d, ending today. Default 30d.
start_dateoptionalstring (YYYY-MM-DD)First day of a custom range, in your timezone. Overrides period. Up to 366 days.
end_dateoptionalstring (YYYY-MM-DD)Last day of a custom range, included. Defaults to today. Needs start_date.

list_top_posts

list_top_posts

Rank posts, best or worst, across all networks or one. Returns each post's id, stats, a snippet and a link.

ParameterTypeDescription
authoroptionalstringWhose posts: me, or a teammate's name like Alex. Leave it out for the whole workspace.
platformoptionalstringOne of twitter, bluesky, threads, facebook, instagram, mastodon, youtube, tiktok, pinterest or linkedin.
metricoptionalstringWhat to rank by. Default engagement_rate. Also engagements, reach, impressions, likes, comments, shares, discussion_rate, and platform-specific ones like LinkedIn's profile_views, saves, sends and follows. A metric a platform doesn't report is refused with the list it does.
orderoptionalstringtop (the default) or bottom.
limitoptionalnumberHow many (default 5, max 20).
periodoptionalstring7d, 30d or 90d, ending today. Default 30d.
start_dateoptionalstring (YYYY-MM-DD)First day of a custom range, in your timezone. Overrides period. Up to 366 days.
end_dateoptionalstring (YYYY-MM-DD)Last day of a custom range, included. Defaults to today. Needs start_date.

get_post_analytics

get_post_analytics

Every metric for one post, including how its reach built up over time where the platform reports it.

ParameterTypeDescription
post_idoptionalnumberThe published post's id, from list_top_posts.
composition_idoptionalnumberThe DemandBird post id (the number in “Draft #123”).
latestoptionalbooleanSet true for the most recent post. Add platform to pick a network.
platformoptionalstringOne of twitter, bluesky, threads, facebook, instagram, mastodon, youtube, tiktok, pinterest or linkedin.

list_posts_with_metrics

list_posts_with_metrics

Every published post in a date range with all its numbers, a page at a time. Good for a full history or export.

ParameterTypeDescription
authoroptionalstringWhose posts: me, or a teammate's name like Alex. Leave it out for the whole workspace.
platformoptionalstringOne of twitter, bluesky, threads, facebook, instagram, mastodon, youtube, tiktok, pinterest or linkedin.
limitoptionalnumberPosts per page (default 50, max 100).
cursoroptionalstringFrom the end of the last page, to get the next one.
periodoptionalstring7d, 30d or 90d, ending today. Default 30d.
start_dateoptionalstring (YYYY-MM-DD)First day of the range, in your timezone. Overrides period. Any length.
end_dateoptionalstring (YYYY-MM-DD)Last day of a custom range, included. Defaults to today. Needs start_date.

get_best_time_to_post

get_best_time_to_post

The days and hours (in your timezone) when your posts on a platform have done best.

ParameterTypeDescription
platformrequiredstringOne of twitter, bluesky, threads, facebook, instagram, mastodon, youtube, tiktok, pinterest or linkedin.
limitoptionalnumberHow many time slots (default 3, max 10).
periodoptionalstring7d, 30d or 90d, ending today. Default 30d.
start_dateoptionalstring (YYYY-MM-DD)First day of a custom range, in your timezone. Overrides period. Up to 366 days.
end_dateoptionalstring (YYYY-MM-DD)Last day of a custom range, included. Defaults to today. Needs start_date.

get_format_performance

get_format_performance

Rank post formats (text, image, video and so on) on a platform by engagement.

ParameterTypeDescription
platformrequiredstringOne of twitter, bluesky, threads, facebook, instagram, mastodon, youtube, tiktok, pinterest or linkedin.
periodoptionalstring7d, 30d or 90d, ending today. Default 30d.
start_dateoptionalstring (YYYY-MM-DD)First day of a custom range, in your timezone. Overrides period. Up to 366 days.
end_dateoptionalstring (YYYY-MM-DD)Last day of a custom range, included. Defaults to today. Needs start_date.

get_audience_demographics

get_audience_demographics

Who your followers are. Instagram and Threads report country, age, gender and city. LinkedIn company pages report seniority, job function, industry, company size and location. Other platforms, and LinkedIn personal profiles, don't share this.

ParameterTypeDescription
platformrequiredstringOne of twitter, bluesky, threads, facebook, instagram, mastodon, youtube, tiktok, pinterest or linkedin.
periodoptionalstring7d, 30d or 90d, ending today. Default 30d.
start_dateoptionalstring (YYYY-MM-DD)First day of a custom range, in your timezone. Overrides period. Up to 366 days.
end_dateoptionalstring (YYYY-MM-DD)Last day of a custom range, included. Defaults to today. Needs start_date.

get_follower_history

get_follower_history

LinkedIn follower count for each day, for a profile or company page. The same numbers as the follower growth chart.

ParameterTypeDescription
accountoptionalstringWhich LinkedIn profile or page, by name or id. Leave it out for all of them.
periodoptionalstring7d, 30d or 90d, ending today. Default 30d.
start_dateoptionalstring (YYYY-MM-DD)First day of a custom range, in your timezone. Overrides period. Up to 366 days.
end_dateoptionalstring (YYYY-MM-DD)Last day of a custom range, included. Defaults to today. Needs start_date.

tag_published_post

tag_published_post

Set the tags on a post that's already published, including posts made outside DemandBird.

ParameterTypeDescription
post_idrequirednumberThe published post's id, from list_top_posts or search_posts.
tagsrequiredarray of stringsReplaces the post's tags; [] removes them all.

Team

Account admins only.

list_members

list_members

Everyone on the account, pending invites, and how many seats are left.

No parameters required.

invite_member

invite_member

Invite people to the account. Returns a link where you check each person and role and press Send yourself.

ParameterTypeDescription
invitesrequiredarray of objectsEach has name, email and role (admin, member, read_only, ghostwriter or client), plus optional workspace_roles.