Start asking
Talk to Claude or ChatGPT the way you'd talk to a teammate. Saying “in DemandBird” helps the first time.
- “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 post 124 for LinkedIn at 9am tomorrow.”
- “Add post 121 to my queue.”
- “Add a 9am LinkedIn posting time on weekdays.”
- “How did my LinkedIn do this month?”
- “What was my best post in the last 90 days?”
- “When should I post on LinkedIn?”
- “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 part of the Business and Agency plans. See pricing, or contact us if you think your plan should include it.
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/mcpThen 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"
}
}
}
}--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].”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.
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
No parameters required.
select_account
| Parameter | Type | Description |
|---|---|---|
| account_idrequired | string | Account id (like acct_xxx) or numeric id. Use list_accounts to find it. |
list_workspaces
No parameters required.
select_workspace
| Parameter | Type | Description |
|---|---|---|
| workspacerequired | string | Workspace name (like Acme) or numeric id, from list_workspaces. |
move_post
| Parameter | Type | Description |
|---|---|---|
| post_idrequired | string | Id of the post to move. |
| workspacerequired | string | Where 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
| Parameter | Type | Description |
|---|---|---|
| platformoptional | string | Only 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
No parameters required.
Writing posts
draft_post
| Parameter | Type | Description |
|---|---|---|
| promptrequired | string | What to write about, like “a post about launching my new SaaS product.” |
| platformoptional | string | Target platform: linkedin, twitter, threads, bluesky, substack, youtube, facebook or instagram. Changes tone and length. Instagram needs an image or video attached. |
| draft_anywayoptional | boolean | Set true to write with what it has when it would otherwise ask for more context. |
| imagesoptional | array of objects | Images, 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. |
| youtubeoptional | object | YouTube 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
| Parameter | Type | Description |
|---|---|---|
| idrequired | number | Post id to rewrite. |
| platformrequired | string | Target platform: linkedin, twitter, threads, bluesky, substack, youtube, facebook or instagram. |
| save_asoptional | string | channel_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
| Parameter | Type | Description |
|---|---|---|
| idrequired | number | Post id. |
save_draft
| Parameter | Type | Description |
|---|---|---|
| contentrequired | string | The post text. |
| platformsoptional | array of strings | Target platforms: linkedin, twitter, threads, bluesky, substack, youtube, facebook or instagram. |
| authoroptional | string | Whose 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. |
| tagsoptional | array of strings | Tag 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_idsoptional | object | Which 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_copiesoptional | object | Different 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_commentoptional | object | A 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_commentsoptional | array of objects | Up 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. |
| imagesoptional | array of objects | Images, 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. |
| youtubeoptional | object | YouTube 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
| Parameter | Type | Description |
|---|---|---|
| idrequired | number | Post id. |
| contentoptional | string | New text. Replaces the shared text. |
| platformsoptional | array of strings | New platforms. Replaces the current ones. |
| tagsoptional | array of strings | Replaces the post's tags; [] removes them all. Changing only tags works on any post, even a published one. |
| channel_copiesoptional | object | Different 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_commentoptional | object | A 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_commentsoptional | array of objects | Up 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. |
| stageoptional | string | Move 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_noteoptional | string | Why the post is moving. Required for on_hold. |
| imagesoptional | array of objects | Images, 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. |
| youtubeoptional | object | Replace 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
| Parameter | Type | Description |
|---|---|---|
| idrequired | number | Post id of the draft, from draft_post, save_draft or list_drafts. |
| feedbackrequired | string | What you want changed, in your own words. |
| platformoptional | string | The platform whose length limit to fit. Defaults to the post's first platform. It does not change where the post publishes. |
| draft_anywayoptional | boolean | Set 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
| Parameter | Type | Description |
|---|---|---|
| post_idrequired | number | Post id. |
| textoptional | string | The material itself, up to 200,000 characters. Give text or url, not both. |
| urloptional | string | A link. The page is fetched in the background, and the link is kept even if that fails. |
| titleoptional | string | A 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
| Parameter | Type | Description |
|---|---|---|
| idoptional | number | Post id. Defaults to the draft you changed last. |
Finding posts
list_drafts
| Parameter | Type | Description |
|---|---|---|
| statusoptional | string | draft (the default), scheduled, posted or failed. |
| editorial_statusoptional | string | Filter by Content board stage. Same values as stage on update_draft. |
| limitoptional | number | How many (default 20, max 100). |
get_post
| Parameter | Type | Description |
|---|---|---|
| idrequired | number | Post id. |
search_posts
| Parameter | Type | Description |
|---|---|---|
| queryrequired | string | Up to 5 words. Every word must appear in the post. |
| authoroptional | string | Whose posts: me, or a teammate's name like Alex. Leave it out for the whole workspace. |
| platformoptional | string | One of twitter, bluesky, threads, facebook, instagram, mastodon, youtube, tiktok, pinterest or linkedin. |
| start_dateoptional | string (YYYY-MM-DD) | Only posts on or after this day. |
| end_dateoptional | string (YYYY-MM-DD) | Only posts on or before this day. |
| limitoptional | number | How many matches (default 10, max 25). |
list_recent_posts
| Parameter | Type | Description |
|---|---|---|
| limitoptional | number | How many (default 5, max 10). |
list_scheduled_posts
| Parameter | Type | Description |
|---|---|---|
| windowoptional | string | today, week or upcoming (the default). |
delete_post
| Parameter | Type | Description |
|---|---|---|
| idrequired | number | Post id. |
Scheduling and publishing
schedule_post
| Parameter | Type | Description |
|---|---|---|
| idrequired | number | Post id. |
| scheduled_atrequired | string (ISO 8601) | When to publish, like 2026-03-10T09:00:00Z. Must be in the future. |
| platformsoptional | array of strings | Defaults to the platforms already on the post. |
| platform_account_idsoptional | object | Which 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_minutesoptional | number | Override 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
| Parameter | Type | Description |
|---|---|---|
| idrequired | number | Post id. |
| platformsoptional | array of strings | Defaults to the platforms already on the post. |
| platform_account_idsoptional | object | Which 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_minutesoptional | number | Override 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
| Parameter | Type | Description |
|---|---|---|
| platformsrequired | array of strings | Platforms to check, like ["linkedin", "twitter"]. |
cancel_post
| Parameter | Type | Description |
|---|---|---|
| idrequired | number | Post id. |
publish_post
| Parameter | Type | Description |
|---|---|---|
| idrequired | number | Post id. |
| platformsoptional | array of strings | Defaults to the platforms already on the draft. |
| platform_account_idsoptional | object | Which 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
No parameters required.
list_queue_schedule
| Parameter | Type | Description |
|---|---|---|
| platformoptional | string | Only 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
| Parameter | Type | Description |
|---|---|---|
| platformrequired | string | The channel's platform: linkedin, twitter, threads, bluesky, substack, youtube, facebook or instagram. |
| timesrequired | array of strings | 24-hour times, like ["09:00", "14:30"], in the workspace's posting time zone. |
| daysrequired | array of strings | Day names (monday to sunday), or everyday, weekdays or weekends. |
| platform_account_idsoptional | object | Which channel, when the platform has more than one, like { "linkedin": 42 }. Ids come from list_queue_schedule. |
remove_queue_times
| Parameter | Type | Description |
|---|---|---|
| platformrequired | string | The channel's platform: linkedin, twitter, threads, bluesky, substack, youtube, facebook or instagram. |
| timesrequired | array of strings | 24-hour times to remove, like ["09:00"]. |
| daysoptional | array of strings | Only remove on these days. Leave it out to remove the time from every day. |
| platform_account_idsoptional | object | Which channel, when the platform has more than one. Ids come from list_queue_schedule. |
Images
upload_image
curl command to run and an s3_key to pass in images on draft_post, save_draft or update_draft.| Parameter | Type | Description |
|---|---|---|
| filenamerequired | string | The file's name, like photo.jpg. |
| content_typeoptional | string | File 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
| Parameter | Type | Description |
|---|---|---|
| promptrequired | string | What the image should show. Describe the picture, not the post. |
| styleoptional | string | photo, illustration (the default), infographic or diagram. |
| sizeoptional | string | square (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
| Parameter | Type | Description |
|---|---|---|
| post_idrequired | string | Id of the draft. |
| reviewersrequired | array of objects | Each 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. |
| noteoptional | string | A message for the reviewers. |
| scheduled_atoptional | string (ISO 8601) | Schedule it now. It publishes at this time if every required reviewer has approved. |
list_posts_awaiting_my_review
| Parameter | Type | Description |
|---|---|---|
| limitoptional | number | How many (1 to 100, default 20). |
approve_post
| Parameter | Type | Description |
|---|---|---|
| post_idrequired | string | Id of the post. |
| noteoptional | string | A note saved with the approval. |
send_back_post
| Parameter | Type | Description |
|---|---|---|
| post_idrequired | string | Id of the post. |
| noterequired | string | What needs to change, in your words. The writer sees it as written. |
comment_on_post
| Parameter | Type | Description |
|---|---|---|
| post_idrequired | string | Id of the post. |
| commentrequired | string | The comment, in your words. |
Ideas
save_idea
| Parameter | Type | Description |
|---|---|---|
| ideasrequired | array of objects | Up to 100. Each has content (up to 5,000 characters) and optional tags and references (source material, kept out of the idea text). |
| authoroptional | string | Whose ideas these are: a teammate's name, or me. |
list_ideas
| Parameter | Type | Description |
|---|---|---|
| authoroptional | string | A teammate's name, or me. Leave it out for yours. |
| limitoptional | number | How many (default 20, max 100). |
delete_idea
| Parameter | Type | Description |
|---|---|---|
| idsrequired | array of numbers | Idea ids, up to 100. |
Brand and voice
get_brand_voice
| Parameter | Type | Description |
|---|---|---|
| platformoptional | string | Also 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
| Parameter | Type | Description |
|---|---|---|
| editsrequired | array of objects | One 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
| Parameter | Type | Description |
|---|---|---|
| positioningoptional | string | What the business does and stands for. Up to 2,000 characters. |
| icpoptional | string | Who 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
platform for every network at once.| Parameter | Type | Description |
|---|---|---|
| platformoptional | string | One of twitter, bluesky, threads, facebook, instagram, mastodon, youtube, tiktok, pinterest or linkedin. |
| periodoptional | string | 7d, 30d or 90d, ending today. Default 30d. |
| start_dateoptional | string (YYYY-MM-DD) | First day of a custom range, in your timezone. Overrides period. Up to 366 days. |
| end_dateoptional | string (YYYY-MM-DD) | Last day of a custom range, included. Defaults to today. Needs start_date. |
list_top_posts
| Parameter | Type | Description |
|---|---|---|
| authoroptional | string | Whose posts: me, or a teammate's name like Alex. Leave it out for the whole workspace. |
| platformoptional | string | One of twitter, bluesky, threads, facebook, instagram, mastodon, youtube, tiktok, pinterest or linkedin. |
| metricoptional | string | What 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. |
| orderoptional | string | top (the default) or bottom. |
| limitoptional | number | How many (default 5, max 20). |
| periodoptional | string | 7d, 30d or 90d, ending today. Default 30d. |
| start_dateoptional | string (YYYY-MM-DD) | First day of a custom range, in your timezone. Overrides period. Up to 366 days. |
| end_dateoptional | string (YYYY-MM-DD) | Last day of a custom range, included. Defaults to today. Needs start_date. |
get_post_analytics
| Parameter | Type | Description |
|---|---|---|
| post_idoptional | number | The published post's id, from list_top_posts. |
| composition_idoptional | number | The DemandBird post id (the number in “Draft #123”). |
| latestoptional | boolean | Set true for the most recent post. Add platform to pick a network. |
| platformoptional | string | One of twitter, bluesky, threads, facebook, instagram, mastodon, youtube, tiktok, pinterest or linkedin. |
list_posts_with_metrics
| Parameter | Type | Description |
|---|---|---|
| authoroptional | string | Whose posts: me, or a teammate's name like Alex. Leave it out for the whole workspace. |
| platformoptional | string | One of twitter, bluesky, threads, facebook, instagram, mastodon, youtube, tiktok, pinterest or linkedin. |
| limitoptional | number | Posts per page (default 50, max 100). |
| cursoroptional | string | From the end of the last page, to get the next one. |
| periodoptional | string | 7d, 30d or 90d, ending today. Default 30d. |
| start_dateoptional | string (YYYY-MM-DD) | First day of the range, in your timezone. Overrides period. Any length. |
| end_dateoptional | string (YYYY-MM-DD) | Last day of a custom range, included. Defaults to today. Needs start_date. |
get_best_time_to_post
| Parameter | Type | Description |
|---|---|---|
| platformrequired | string | One of twitter, bluesky, threads, facebook, instagram, mastodon, youtube, tiktok, pinterest or linkedin. |
| limitoptional | number | How many time slots (default 3, max 10). |
| periodoptional | string | 7d, 30d or 90d, ending today. Default 30d. |
| start_dateoptional | string (YYYY-MM-DD) | First day of a custom range, in your timezone. Overrides period. Up to 366 days. |
| end_dateoptional | string (YYYY-MM-DD) | Last day of a custom range, included. Defaults to today. Needs start_date. |
get_format_performance
| Parameter | Type | Description |
|---|---|---|
| platformrequired | string | One of twitter, bluesky, threads, facebook, instagram, mastodon, youtube, tiktok, pinterest or linkedin. |
| periodoptional | string | 7d, 30d or 90d, ending today. Default 30d. |
| start_dateoptional | string (YYYY-MM-DD) | First day of a custom range, in your timezone. Overrides period. Up to 366 days. |
| end_dateoptional | string (YYYY-MM-DD) | Last day of a custom range, included. Defaults to today. Needs start_date. |
get_audience_demographics
| Parameter | Type | Description |
|---|---|---|
| platformrequired | string | One of twitter, bluesky, threads, facebook, instagram, mastodon, youtube, tiktok, pinterest or linkedin. |
| periodoptional | string | 7d, 30d or 90d, ending today. Default 30d. |
| start_dateoptional | string (YYYY-MM-DD) | First day of a custom range, in your timezone. Overrides period. Up to 366 days. |
| end_dateoptional | string (YYYY-MM-DD) | Last day of a custom range, included. Defaults to today. Needs start_date. |
get_follower_history
| Parameter | Type | Description |
|---|---|---|
| accountoptional | string | Which LinkedIn profile or page, by name or id. Leave it out for all of them. |
| periodoptional | string | 7d, 30d or 90d, ending today. Default 30d. |
| start_dateoptional | string (YYYY-MM-DD) | First day of a custom range, in your timezone. Overrides period. Up to 366 days. |
| end_dateoptional | string (YYYY-MM-DD) | Last day of a custom range, included. Defaults to today. Needs start_date. |
tag_published_post
| Parameter | Type | Description |
|---|---|---|
| post_idrequired | number | The published post's id, from list_top_posts or search_posts. |
| tagsrequired | array of strings | Replaces the post's tags; [] removes them all. |
Team
Account admins only.
list_members
No parameters required.
invite_member
| Parameter | Type | Description |
|---|---|---|
| invitesrequired | array of objects | Each has name, email and role (admin, member, read_only, ghostwriter or client), plus optional workspace_roles. |
