Complete MCP tool reference
The human-readable contract for every public Tareno Remote MCP tool. Runtime clients should still treattools/list as the source of truth for the current JSON Schema.
https://tareno.co/api/mcpSupported social channels
Core account, post, draft, scheduling and publishing workflows cover all ten channels. Remote account-post history, comments and public-video extraction have narrower platform support. An available adapter does not override a missing or expired platform permission.
| Channel | Core MCP | Account posts | Comments | Transcript | Video download |
|---|---|---|---|---|---|
| Bluesky | yes | Tareno posts only | — | — | — |
| yes | yes | if permitted | yes | yes | |
| yes | yes | if permitted | yes | yes | |
| yes | Tareno posts only | — | — | yes | |
| Mastodon | yes | Tareno posts only | — | — | — |
| yes | yes | — | yes | yes | |
| Threads | yes | yes | if permitted | yes | yes |
| TikTok | yes | yes | — | yes | yes |
| X / Twitter | yes | Tareno posts only | — | — | yes |
| YouTube | yes | yes | if permitted | yes | yes |
Transcript: Facebook, Instagram, Pinterest, Threads, TikTok and YouTube. Download: those six plus LinkedIn and X/Twitter. Only public HTTPS posts are accepted.
For account videos: call list_accounts, then list_account_posts with mediaType=video, and pass the returned postRef to get_account_post, get_post_analytics or list_post_comments. ACCOUNT_RECONNECT_REQUIRED means reconnect the platform account; PROVIDER_PERMISSION_DENIED means the platform token cannot access that data.
Execution and approval rules
- Read tools and draft tools execute immediately.
- Scheduling, publishing, scheduled edits, rescheduling, and deletion only create a pending action.
- No connector or post mutation occurs before dashboard approval.
- Approval status is one of: pending, executing, succeeded, failed, rejected, expired.
- Every risky batch is limited to 50 items.
- Risky writes require an idempotencyKey with 8–128 trimmed characters.
- After approval, the executor rechecks ownership, key, plan, scopes, and platform rules.
- Mixed provider results use
partial_failureand expose each item result. start_viral_analysisreserves AI credits only after dashboard approval and an approval can never outlive its quote.get_viral_run_statusandget_action_statusare audited but excluded from monthly API-call usage.
Scope matrix
| Scope | Tools |
|---|---|
| workspaces:read | list_workspaces |
| accounts:read | list_accounts, get_platform_schema, get_platform_options |
| posts:read | list_posts, get_post, list_account_posts, get_account_post |
| comments:read | list_post_comments |
| posts:draft | create_drafts |
| posts:update | update_draft, reschedule_post, update_scheduled_post |
| posts:schedule | schedule_posts, reschedule_post, update_scheduled_post |
| posts:publish | publish_posts |
| posts:delete | delete_post |
| media:read | list_media, get_social_media_transcript, get_social_video_download |
| media:write | upload_media_from_url |
| analytics:read | get_analytics_overview, get_platform_analytics, get_content_strategy, get_post_analytics |
| viral:read | get_viral_capabilities, discover_viral_videos, list_viral_projects, get_viral_run_status, get_viral_blueprint |
| viral:write | create_viral_project, get_viral_analysis_quote |
| viral:run | start_viral_analysis (explicit only; never inherited from legacy publish/write) |
| actions:read | get_action_status |
Legacy read, write, and publish API-key scopes are expanded server-side into compatible granular scopes. viral:run is always explicit because an approved run may consume AI credits.
pinterest_boards
Load this option after list_accounts and get_platform_schema; the account platform must match.
Request
{
"accountId": "pinterest-account-uuid",
"option": "pinterest_boards"
}Response
{
"status": "ok",
"option": "pinterest_boards",
"items": [
{
"value": "board-id",
"label": "Summer ideas",
"description": "Campaign board"
}
]
}tiktok_creator_info
Load this option after list_accounts and get_platform_schema; the account platform must match.
Request
{
"accountId": "tiktok-account-uuid",
"option": "tiktok_creator_info"
}Response
{
"status": "ok",
"option": "tiktok_creator_info",
"creator": {
"creator_nickname": "Acme",
"privacy_level_options": [
"PUBLIC_TO_EVERYONE"
],
"max_video_post_duration_sec": 60
}
}Tool contracts
list_workspacesLists workspaces owned by or shared with the authenticated user.
workspacesworkspaces:readdirect
list_workspacesLists workspaces owned by or shared with the authenticated user.
Input fields
| Field | Type | Required | Details |
|---|---|---|---|
| No input fields. | |||
Request
{}Success response
{
"status": "ok",
"count": 1,
"workspaces": [
{
"id": "workspace-uuid",
"name": "Acme",
"slug": "acme",
"ownerId": "user-uuid",
"updatedAt": "2026-07-13T09:00:00.000Z",
"_count": {
"workspaceAccounts": 3,
"members": 2
}
}
]
}Tool errors
| Code | When | Retryable |
|---|---|---|
| INSUFFICIENT_SCOPE | The API key lacks one of the required scopes. | no |
| MONTHLY_API_LIMIT_REACHED | The plan's monthly API allowance is exhausted. | yes |
list_accountsLists personal and accessible workspace social accounts, optionally filtered by workspace or platform. Includes profilePicture, followersCount, workspace memberships and publishing health. Follower totals come from cached analytics, not a live platform refresh; null means unknown (not zero). audience.updatedAt identifies the measurement age. Sync account analytics in the dashboard if unavailable. Start content workflows with this tool.
accountsaccounts:readdirect
list_accountsLists personal and accessible workspace social accounts, optionally filtered by workspace or platform. Includes profilePicture, followersCount, workspace memberships and publishing health. Follower totals come from cached analytics, not a live platform refresh; null means unknown (not zero). audience.updatedAt identifies the measurement age. Sync account analytics in the dashboard if unavailable. Start content workflows with this tool.
Input fields
| Field | Type | Required | Details |
|---|---|---|---|
| workspaceId | string | no | Optional workspace filter. |
| platform | string | no | One of: bluesky, facebook, instagram, linkedin, mastodon, pinterest, threads, tiktok, twitter, youtube. |
Request
{
"platform": "instagram"
}Success response
{
"status": "ok",
"count": 1,
"accounts": [
{
"id": "account-uuid",
"platform": "instagram",
"platformAccountId": "provider-id",
"username": "acme",
"displayName": "Acme",
"profilePicture": "https://cdn.example.com/avatar.jpg",
"followersCount": 3200,
"audience": {
"source": "analytics_cache",
"updatedAt": "2026-07-13T08:00:00.000Z",
"unavailableReason": null
},
"workspaces": [
{
"id": "workspace-uuid",
"name": "Acme"
}
],
"health": {
"status": "healthy",
"reason": null,
"action": null,
"publishingDisabled": false
},
"connectedAt": "2026-07-13T09:00:00.000Z"
}
]
}Tool errors
| Code | When | Retryable |
|---|---|---|
| INSUFFICIENT_SCOPE | The API key lacks one of the required scopes. | no |
| WORKSPACE_NOT_FOUND | The workspace is not owned by or shared with the authenticated user. | no |
| MONTHLY_API_LIMIT_REACHED | The plan's monthly API allowance is exhausted. | yes |
get_platform_schemaReturns server-derived platform capabilities and publishing requirements for one account.
accountsaccounts:readdirect
get_platform_schemaReturns server-derived platform capabilities and publishing requirements for one account.
Input fields
| Field | Type | Required | Details |
|---|---|---|---|
| accountId | string (UUID) | yes | Connected account to inspect. |
Request
{
"accountId": "account-uuid"
}Success response
{
"status": "ok",
"account": {
"id": "account-uuid",
"platform": "pinterest",
"username": "acme",
"healthStatus": "healthy"
},
"capabilities": {
"contentTypes": {
"text": {
"requiresMedia": true
}
}
},
"requirements": {
"accountId": true,
"mediaRequired": true,
"pinterestBoardRequired": true,
"dynamicOptions": [
"pinterest_boards"
]
}
}Tool errors
| Code | When | Retryable |
|---|---|---|
| INSUFFICIENT_SCOPE | The API key lacks one of the required scopes. | no |
| ACCOUNT_NOT_FOUND | The account is not accessible to the authenticated user. | no |
| VALIDATION_ERROR | Input does not match the tool schema. | no |
| MONTHLY_API_LIMIT_REACHED | The plan's monthly API allowance is exhausted. | yes |
get_platform_optionsLoads whitelisted dynamic options from Pinterest or TikTok.
accountsaccounts:readdirect
get_platform_optionsLoads whitelisted dynamic options from Pinterest or TikTok.
Input fields
| Field | Type | Required | Details |
|---|---|---|---|
| accountId | string (UUID) | yes | Connected Pinterest or TikTok account. |
| option | string | yes | Either pinterest_boards or tiktok_creator_info. |
Request
{
"accountId": "pinterest-account-uuid",
"option": "pinterest_boards"
}Success response
{
"status": "ok",
"option": "pinterest_boards",
"items": [
{
"value": "board-id",
"label": "Summer ideas",
"description": "Campaign board"
}
]
}Tool errors
| Code | When | Retryable |
|---|---|---|
| INSUFFICIENT_SCOPE | The API key lacks one of the required scopes. | no |
| ACCOUNT_NOT_FOUND | The account is not accessible to the authenticated user. | no |
| OPTION_PLATFORM_MISMATCH | The option does not belong to the selected account's platform. | no |
| ACCOUNT_RECONNECT_REQUIRED | The provider token is missing or expired. | no |
| PROVIDER_ERROR | A connected platform returned an upstream failure. | yes |
| UNSUPPORTED_OPTION | The option is not on the allowlist. | no |
| MONTHLY_API_LIMIT_REACHED | The plan's monthly API allowance is exhausted. | yes |
list_postsLists posts for the authenticated user's account or workspace.
postsposts:readdirect
list_postsLists posts for the authenticated user's account or workspace.
Input fields
| Field | Type | Required | Details |
|---|---|---|---|
| workspaceId | string | no | Optional workspace filter. |
| status | string | no | draft, scheduled, processing, published, or failed. |
| platform | string | no | One of: bluesky, facebook, instagram, linkedin, mastodon, pinterest, threads, tiktok, twitter, youtube. |
| accountId | string (UUID) | no | Optional account filter. |
| from | string (ISO 8601 with offset) | no | Optional inclusive start time. |
| to | string (ISO 8601 with offset) | no | Optional inclusive end time. |
| limit | integer | no | Maximum number of posts. 1–100. Default: 50. |
Request
{
"status": "scheduled",
"limit": 20
}Success response
{
"status": "ok",
"count": 1,
"posts": [
{
"id": "post-uuid",
"platform": "instagram",
"status": "scheduled",
"start": "2026-07-14T09:00:00.000Z",
"content": "Launch update"
}
]
}Tool errors
| Code | When | Retryable |
|---|---|---|
| INSUFFICIENT_SCOPE | The API key lacks one of the required scopes. | no |
| WORKSPACE_NOT_FOUND | The workspace is not owned by or shared with the authenticated user. | no |
| VALIDATION_ERROR | Input does not match the tool schema. | no |
| MONTHLY_API_LIMIT_REACHED | The plan's monthly API allowance is exhausted. | yes |
get_postReturns the full stored post record when it belongs to the user or an accessible workspace.
postsposts:readdirect
get_postReturns the full stored post record when it belongs to the user or an accessible workspace.
Input fields
| Field | Type | Required | Details |
|---|---|---|---|
| postId | string (UUID) | yes | Post to retrieve. |
Request
{
"postId": "post-uuid"
}Success response
{
"status": "ok",
"post": {
"id": "post-uuid",
"platform": "linkedin",
"status": "draft",
"content": "Launch update"
}
}Tool errors
| Code | When | Retryable |
|---|---|---|
| INSUFFICIENT_SCOPE | The API key lacks one of the required scopes. | no |
| POST_NOT_FOUND | The post is not accessible to the authenticated user. | no |
| VALIDATION_ERROR | Input does not match the tool schema. | no |
| MONTHLY_API_LIMIT_REACHED | The plan's monthly API allowance is exhausted. | yes |
list_account_postsLists posts and videos of one accessible connected account. Six provider APIs are supported; other channels return Tareno-published posts only. The result exposes capabilities, source, measuredAt, providerUnavailable and signed postRef values. A video filter and signed pagination cursor are available. Default reads a 15-minute cache; refresh requests the provider. ACCOUNT_RECONNECT_REQUIRED means the platform token expired; reconnect the channel in Tareno rather than replacing the Tareno API key.
postsposts:readdirect
list_account_postsLists posts and videos of one accessible connected account. Six provider APIs are supported; other channels return Tareno-published posts only. The result exposes capabilities, source, measuredAt, providerUnavailable and signed postRef values. A video filter and signed pagination cursor are available. Default reads a 15-minute cache; refresh requests the provider. ACCOUNT_RECONNECT_REQUIRED means the platform token expired; reconnect the channel in Tareno rather than replacing the Tareno API key.
Input fields
| Field | Type | Required | Details |
|---|---|---|---|
| accountId | string (UUID) | yes | Account from list_accounts. |
| mediaType | string | no | all or video. Default: all. |
| limit | integer | no | 1–50 results; provider pages can be smaller. Default: 20. |
| cursor | string | no | Signed nextCursor from the previous response; do not edit. |
| refresh | boolean | no | Bypass the first-page cache. Default: false. |
Request
{
"accountId": "account-uuid",
"mediaType": "video",
"limit": 20
}Success response
{
"status": "ok",
"accountId": "account-uuid",
"platform": "youtube",
"count": 1,
"posts": [
{
"platformPostId": "video-id",
"tarenoPostId": null,
"mediaType": "video",
"postRef": "signed-reference",
"permalink": "https://www.youtube.com/watch?v=video-id"
}
],
"nextCursor": null,
"source": "provider",
"measuredAt": "2026-07-13T09:00:00.000Z",
"capabilities": {
"remotePosts": true,
"comments": true,
"transcript": true
},
"providerUnavailable": null
}Tool errors
| Code | When | Retryable |
|---|---|---|
| INSUFFICIENT_SCOPE | The API key lacks one of the required scopes. | no |
| ACCOUNT_NOT_FOUND | The account is not accessible to the authenticated user. | no |
| PROVIDER_ERROR | A connected platform returned an upstream failure. | yes |
| VALIDATION_ERROR | Input does not match the tool schema. | no |
| MONTHLY_API_LIMIT_REACHED | The plan's monthly API allowance is exhausted. | yes |
get_account_postReturns content, media, permalink and available metadata for an account-owned post. Requires the short-lived postRef returned by list_account_posts; a raw platform post ID is not sufficient.
postsposts:readdirect
get_account_postReturns content, media, permalink and available metadata for an account-owned post. Requires the short-lived postRef returned by list_account_posts; a raw platform post ID is not sufficient.
Input fields
| Field | Type | Required | Details |
|---|---|---|---|
| accountId | string (UUID) | yes | Connected account. |
| postRef | string | yes | Signed postRef from list_account_posts. |
Request
{
"accountId": "account-uuid",
"postRef": "signed-reference"
}Success response
{
"status": "ok",
"post": {
"accountId": "account-uuid",
"platformPostId": "video-id",
"tarenoPostId": null,
"mediaType": "video",
"text": "Launch video",
"permalink": "https://www.youtube.com/watch?v=video-id"
}
}Tool errors
| Code | When | Retryable |
|---|---|---|
| INSUFFICIENT_SCOPE | The API key lacks one of the required scopes. | no |
| ACCOUNT_NOT_FOUND | The account is not accessible to the authenticated user. | no |
| POST_NOT_FOUND | The post is not accessible to the authenticated user. | no |
| PROVIDER_ERROR | A connected platform returned an upstream failure. | yes |
| MONTHLY_API_LIMIT_REACHED | The plan's monthly API allowance is exhausted. | yes |
get_post_analyticsReturns per-post views, likes, comments, shares and engagement rate where available. Source, measuredAt and metrics window are explicit; unavailable values are null, not zero. refresh=true queries the provider.
analyticsanalytics:readdirect
get_post_analyticsReturns per-post views, likes, comments, shares and engagement rate where available. Source, measuredAt and metrics window are explicit; unavailable values are null, not zero. refresh=true queries the provider.
Input fields
| Field | Type | Required | Details |
|---|---|---|---|
| accountId | string (UUID) | yes | Connected account. |
| postRef | string | yes | Signed postRef from list_account_posts. |
| refresh | boolean | no | Fetch current values from the provider. Default: false. |
Request
{
"accountId": "account-uuid",
"postRef": "signed-reference",
"refresh": true
}Success response
{
"status": "ok",
"accountId": "account-uuid",
"platformPostId": "video-id",
"metrics": {
"views": 1200,
"likes": 80,
"comments": 4,
"shares": null,
"engagementRate": 7
},
"source": "provider",
"measuredAt": "2026-07-13T09:00:00.000Z",
"window": "lifetime"
}Tool errors
| Code | When | Retryable |
|---|---|---|
| INSUFFICIENT_SCOPE | The API key lacks one of the required scopes. | no |
| ACCOUNT_NOT_FOUND | The account is not accessible to the authenticated user. | no |
| POST_NOT_FOUND | The post is not accessible to the authenticated user. | no |
| PROVIDER_ERROR | A connected platform returned an upstream failure. | yes |
| MONTHLY_API_LIMIT_REACHED | The plan's monthly API allowance is exhausted. | yes |
list_post_commentsReads a page of available top-level comments where the connected platform and token permit; a reply count may be included. PROVIDER_PERMISSION_DENIED is an explicit unavailable result when the platform token cannot read that video's comments. No reply, moderation or write capability. TikTok Research API comment access is not used.
postscomments:readdirect
list_post_commentsReads a page of available top-level comments where the connected platform and token permit; a reply count may be included. PROVIDER_PERMISSION_DENIED is an explicit unavailable result when the platform token cannot read that video's comments. No reply, moderation or write capability. TikTok Research API comment access is not used.
Input fields
| Field | Type | Required | Details |
|---|---|---|---|
| accountId | string (UUID) | yes | Connected account. |
| postRef | string | yes | Signed postRef from list_account_posts. |
| limit | integer | no | 1–50 comments. Default: 20. |
| cursor | string | no | Signed nextCursor from the previous response. |
Request
{
"accountId": "account-uuid",
"postRef": "signed-reference",
"limit": 20
}Success response
{
"status": "ok",
"accountId": "account-uuid",
"platformPostId": "video-id",
"count": 1,
"comments": [
{
"id": "comment-id",
"text": "Great video",
"author": "viewer",
"createdAt": "2026-07-13T09:00:00.000Z"
}
],
"nextCursor": null
}Tool errors
| Code | When | Retryable |
|---|---|---|
| INSUFFICIENT_SCOPE | The API key lacks one of the required scopes. | no |
| ACCOUNT_NOT_FOUND | The account is not accessible to the authenticated user. | no |
| POST_NOT_FOUND | The post is not accessible to the authenticated user. | no |
| PROVIDER_ERROR | A connected platform returned an upstream failure. | yes |
| MONTHLY_API_LIMIT_REACHED | The plan's monthly API allowance is exhausted. | yes |
create_draftsCreates one to 50 drafts. Draft creation does not schedule or publish anything.
postsposts:draftdirect
create_draftsCreates one to 50 drafts. Draft creation does not schedule or publish anything.
Input fields
| Field | Type | Required | Details |
|---|---|---|---|
| items | array of post objects | yes | Draft items. 1–50 items; each item uses the post fields below. |
| idempotencyKey | string | no | Optional replay key. 8–128 trimmed characters. |
| accountId | string (UUID) | no | Connected account used for the post. Required for scheduling and publishing; optional only for an unassigned draft. |
| platform | string | yes | One of: bluesky, facebook, instagram, linkedin, mastodon, pinterest, threads, tiktok, twitter, youtube. Required for every item and must match accountId when an account is supplied. |
| title | string | no | Optional post title. Maximum 200 characters. |
| text | string | no | Optional post body. Maximum 20,000 characters; omit only for a platform-valid media-only post. |
| mediaUrls | array | no | An object with required url and optional kind, thumbnailUrl, and altText. Maximum 35 items; URLs must be valid; remote imports require public HTTPS. Omit when no media is needed; platform rules are validated after account lookup. |
| format | string | no | Optional publishing format. post, carousel, reel, story, video, or shorts. |
| workspaceId | string | no | Optional workspace to associate with the post. |
| pinterestBoardId | string | no | Pinterest Board ID. Required only for platform=pinterest; retrieve it with get_platform_options using option=pinterest_boards. |
| blueskyThread | array of strings | no | Optional Bluesky replies after the root post. Accepted only for platform=bluesky. Maximum 24 replies; each maximum 300 characters. |
Request
{
"items": [
{
"accountId": "account-uuid",
"platform": "instagram",
"text": "Draft caption",
"mediaUrls": []
}
]
}Success response
{
"status": "ok",
"count": 1,
"posts": [
{
"id": "post-uuid",
"platform": "instagram",
"status": "draft"
}
]
}Tool errors
| Code | When | Retryable |
|---|---|---|
| INSUFFICIENT_SCOPE | The API key lacks one of the required scopes. | no |
| VALIDATION_ERROR | Input does not match the tool schema. | no |
| ACCOUNT_NOT_FOUND | The account is not accessible to the authenticated user. | no |
| ACCOUNT_PLATFORM_MISMATCH | The account and requested platform differ. | no |
| UNSUPPORTED_PLATFORM | The platform is not supported. | no |
| MONTHLY_API_LIMIT_REACHED | The plan's monthly API allowance is exhausted. | yes |
update_draftUpdates editable fields on an existing draft without approval.
postsposts:updatedirect
update_draftUpdates editable fields on an existing draft without approval.
Input fields
| Field | Type | Required | Details |
|---|---|---|---|
| postId | string (UUID) | yes | Draft to update. |
| title | string | no | Optional replacement title. Maximum 200 characters. |
| text | string | no | Optional replacement body. Maximum 20,000 characters. |
| mediaUrls | array | no | An object with required url and optional kind, thumbnailUrl, and altText. Maximum 35 items; URLs must be valid; remote imports require public HTTPS. |
| tags | array of strings | no | Optional tags. Maximum 50 tags; each maximum 100 characters. |
| pinterestBoardId | string | no | Optional Pinterest Board ID; supply only for a Pinterest draft. |
| blueskyThread | array of strings | no | Optional Bluesky replies; supply only for a Bluesky draft. Maximum 24 replies; each maximum 300 characters. |
Request
{
"postId": "post-uuid",
"text": "Updated draft copy",
"tags": [
"launch"
]
}Success response
{
"status": "ok",
"post": {
"id": "post-uuid",
"status": "draft",
"content": "Updated draft copy"
}
}Tool errors
| Code | When | Retryable |
|---|---|---|
| INSUFFICIENT_SCOPE | The API key lacks one of the required scopes. | no |
| POST_NOT_FOUND | The post is not accessible to the authenticated user. | no |
| POST_NOT_DRAFT | The post is not a draft. | no |
| VALIDATION_ERROR | Input does not match the tool schema. | no |
| MONTHLY_API_LIMIT_REACHED | The plan's monthly API allowance is exhausted. | yes |
schedule_postsValidates and prepares one to 50 future posts for dashboard approval; no post mutation occurs before approval.
postsposts:scheduleapproval required
schedule_postsValidates and prepares one to 50 future posts for dashboard approval; no post mutation occurs before approval.
Input fields
| Field | Type | Required | Details |
|---|---|---|---|
| items | array of scheduled post objects | yes | Posts to schedule. 1–50 items; accountId, scheduledAt and all post fields apply. |
| idempotencyKey | string | yes | Required replay key. 8–128 trimmed characters. |
| scheduledAt | string (ISO 8601 with offset) | yes | Future publication time for each item. |
| timezone | string | no | IANA timezone used for display and metadata. Default: UTC. |
| accountId | string (UUID) | no | Connected account used for the post. Required for scheduling and publishing; optional only for an unassigned draft. |
| platform | string | yes | One of: bluesky, facebook, instagram, linkedin, mastodon, pinterest, threads, tiktok, twitter, youtube. Required for every item and must match accountId when an account is supplied. |
| title | string | no | Optional post title. Maximum 200 characters. |
| text | string | no | Optional post body. Maximum 20,000 characters; omit only for a platform-valid media-only post. |
| mediaUrls | array | no | An object with required url and optional kind, thumbnailUrl, and altText. Maximum 35 items; URLs must be valid; remote imports require public HTTPS. Omit when no media is needed; platform rules are validated after account lookup. |
| format | string | no | Optional publishing format. post, carousel, reel, story, video, or shorts. |
| workspaceId | string | no | Optional workspace to associate with the post. |
| pinterestBoardId | string | no | Pinterest Board ID. Required only for platform=pinterest; retrieve it with get_platform_options using option=pinterest_boards. |
| blueskyThread | array of strings | no | Optional Bluesky replies after the root post. Accepted only for platform=bluesky. Maximum 24 replies; each maximum 300 characters. |
Request
{
"items": [
{
"accountId": "account-uuid",
"platform": "linkedin",
"text": "Scheduled update",
"scheduledAt": "2026-07-14T09:00:00+02:00",
"timezone": "Europe/Berlin"
}
],
"idempotencyKey": "schedule-20260714-01"
}Success response
{
"status": "approval_required",
"actionId": "action-uuid",
"expiresAt": "2026-07-13T09:15:00.000Z",
"approvalUrl": "https://tareno.co/dashboard/agents/actions/action-uuid"
}Tool errors
| Code | When | Retryable |
|---|---|---|
| INSUFFICIENT_SCOPE | The API key lacks one of the required scopes. | no |
| VALIDATION_ERROR | Input does not match the tool schema. | no |
| ACCOUNT_NOT_FOUND | The account is not accessible to the authenticated user. | no |
| INVALID_SCHEDULE_TIME | scheduledAt is not a future ISO 8601 timestamp with offset. | no |
| INVALID_TIMEZONE | timezone is not a valid IANA timezone. | no |
| IDEMPOTENCY_KEY_REUSED | The key is reused with different input. | no |
| PROVIDER_ERROR | A connected platform returned an upstream failure. | yes |
| MONTHLY_API_LIMIT_REACHED | The plan's monthly API allowance is exhausted. | yes |
publish_postsValidates and prepares one to 50 immediate publications for dashboard approval; no connector call occurs before approval.
postsposts:publishapproval required
publish_postsValidates and prepares one to 50 immediate publications for dashboard approval; no connector call occurs before approval.
Input fields
| Field | Type | Required | Details |
|---|---|---|---|
| items | array of post objects | yes | Posts to publish. 1–50 items; accountId is required per item. |
| idempotencyKey | string | yes | Required replay key. 8–128 trimmed characters. |
| accountId | string (UUID) | no | Connected account used for the post. Required for scheduling and publishing; optional only for an unassigned draft. |
| platform | string | yes | One of: bluesky, facebook, instagram, linkedin, mastodon, pinterest, threads, tiktok, twitter, youtube. Required for every item and must match accountId when an account is supplied. |
| title | string | no | Optional post title. Maximum 200 characters. |
| text | string | no | Optional post body. Maximum 20,000 characters; omit only for a platform-valid media-only post. |
| mediaUrls | array | no | An object with required url and optional kind, thumbnailUrl, and altText. Maximum 35 items; URLs must be valid; remote imports require public HTTPS. Omit when no media is needed; platform rules are validated after account lookup. |
| format | string | no | Optional publishing format. post, carousel, reel, story, video, or shorts. |
| workspaceId | string | no | Optional workspace to associate with the post. |
| pinterestBoardId | string | no | Pinterest Board ID. Required only for platform=pinterest; retrieve it with get_platform_options using option=pinterest_boards. |
| blueskyThread | array of strings | no | Optional Bluesky replies after the root post. Accepted only for platform=bluesky. Maximum 24 replies; each maximum 300 characters. |
Request
{
"items": [
{
"accountId": "account-uuid",
"platform": "instagram",
"text": "Live launch post",
"mediaUrls": [
{
"url": "https://cdn.example.com/launch.jpg",
"kind": "image"
}
]
}
],
"idempotencyKey": "publish-20260713-01"
}Success response
{
"status": "approval_required",
"actionId": "action-uuid",
"expiresAt": "2026-07-13T09:15:00.000Z",
"approvalUrl": "https://tareno.co/dashboard/agents/actions/action-uuid"
}Tool errors
| Code | When | Retryable |
|---|---|---|
| INSUFFICIENT_SCOPE | The API key lacks one of the required scopes. | no |
| VALIDATION_ERROR | Input does not match the tool schema. | no |
| ACCOUNT_NOT_FOUND | The account is not accessible to the authenticated user. | no |
| ACCOUNT_PLATFORM_MISMATCH | The account and requested platform differ. | no |
| UNSUPPORTED_PLATFORM | The platform is not supported. | no |
| IDEMPOTENCY_KEY_REUSED | The key is reused with different input. | no |
| PROVIDER_ERROR | A connected platform returned an upstream failure. | yes |
| MONTHLY_API_LIMIT_REACHED | The plan's monthly API allowance is exhausted. | yes |
reschedule_postPrepares a new time for an existing scheduled post and requires dashboard approval.
postsposts:update, posts:scheduleapproval required
reschedule_postPrepares a new time for an existing scheduled post and requires dashboard approval.
Input fields
| Field | Type | Required | Details |
|---|---|---|---|
| postId | string (UUID) | yes | Scheduled post to move. |
| scheduledAt | string (ISO 8601 with offset) | yes | New future time. |
| timezone | string | no | IANA timezone. Default: UTC. |
| idempotencyKey | string | yes | Required replay key. 8–128 trimmed characters. |
Request
{
"postId": "post-uuid",
"scheduledAt": "2026-07-15T10:00:00+02:00",
"timezone": "Europe/Berlin",
"idempotencyKey": "reschedule-20260715-01"
}Success response
{
"status": "approval_required",
"actionId": "action-uuid",
"expiresAt": "2026-07-13T09:15:00.000Z",
"approvalUrl": "https://tareno.co/dashboard/agents/actions/action-uuid"
}Tool errors
| Code | When | Retryable |
|---|---|---|
| INSUFFICIENT_SCOPE | The API key lacks one of the required scopes. | no |
| POST_NOT_FOUND | The post is not accessible to the authenticated user. | no |
| POST_NOT_SCHEDULED | Only scheduled posts can be rescheduled. | no |
| INVALID_SCHEDULE_TIME | The new time is not in the future. | no |
| INVALID_TIMEZONE | timezone is not a valid IANA timezone. | no |
| IDEMPOTENCY_KEY_REUSED | The key is reused with different input. | no |
| MONTHLY_API_LIMIT_REACHED | The plan's monthly API allowance is exhausted. | yes |
update_scheduled_postPrepares content or media changes for an existing scheduled post and requires dashboard approval.
postsposts:update, posts:scheduleapproval required
update_scheduled_postPrepares content or media changes for an existing scheduled post and requires dashboard approval.
Input fields
| Field | Type | Required | Details |
|---|---|---|---|
| postId | string (UUID) | yes | Scheduled post to update. |
| title | string | no | Optional replacement title. Maximum 200 characters. |
| text | string | no | Optional replacement body. Maximum 20,000 characters. |
| mediaUrls | array | no | An object with required url and optional kind, thumbnailUrl, and altText. Maximum 35 items; URLs must be valid; remote imports require public HTTPS. |
| pinterestBoardId | string | no | Optional Pinterest Board ID; supply only for a Pinterest scheduled post. |
| blueskyThread | array of strings | no | Optional Bluesky replies; supply only for a Bluesky scheduled post. Maximum 24 replies; each maximum 300 characters. |
| idempotencyKey | string | yes | Required replay key. 8–128 trimmed characters. |
Request
{
"postId": "post-uuid",
"text": "Updated scheduled copy",
"idempotencyKey": "scheduled-edit-20260713-01"
}Success response
{
"status": "approval_required",
"actionId": "action-uuid",
"expiresAt": "2026-07-13T09:15:00.000Z",
"approvalUrl": "https://tareno.co/dashboard/agents/actions/action-uuid"
}Tool errors
| Code | When | Retryable |
|---|---|---|
| INSUFFICIENT_SCOPE | The API key lacks one of the required scopes. | no |
| POST_NOT_FOUND | The post is not accessible to the authenticated user. | no |
| POST_NOT_SCHEDULED | Only scheduled posts can be updated. | no |
| INVALID_SCHEDULE_TIME | The existing scheduled time is no longer valid. | no |
| IDEMPOTENCY_KEY_REUSED | The key is reused with different input. | no |
| MONTHLY_API_LIMIT_REACHED | The plan's monthly API allowance is exhausted. | yes |
delete_postPrepares deletion of a draft or scheduled post and requires dashboard approval.
postsposts:deleteapproval required
delete_postPrepares deletion of a draft or scheduled post and requires dashboard approval.
Input fields
| Field | Type | Required | Details |
|---|---|---|---|
| postId | string (UUID) | yes | Draft or scheduled post to delete. |
| idempotencyKey | string | yes | Required replay key. 8–128 trimmed characters. |
Request
{
"postId": "post-uuid",
"idempotencyKey": "delete-20260713-01"
}Success response
{
"status": "approval_required",
"actionId": "action-uuid",
"expiresAt": "2026-07-13T09:15:00.000Z",
"approvalUrl": "https://tareno.co/dashboard/agents/actions/action-uuid"
}Tool errors
| Code | When | Retryable |
|---|---|---|
| INSUFFICIENT_SCOPE | The API key lacks one of the required scopes. | no |
| POST_NOT_FOUND | The post is not accessible to the authenticated user. | no |
| POST_NOT_DELETABLE | Only draft or scheduled posts can be deleted. | no |
| IDEMPOTENCY_KEY_REUSED | The key is reused with different input. | no |
| MONTHLY_API_LIMIT_REACHED | The plan's monthly API allowance is exhausted. | yes |
list_mediaLists media assets in the authenticated user's media library.
mediamedia:readdirect
list_mediaLists media assets in the authenticated user's media library.
Input fields
| Field | Type | Required | Details |
|---|---|---|---|
| folder | string | no | Optional folder filter. Maximum 100 characters. |
| type | string | no | image or video. |
| limit | integer | no | Maximum number of assets. 1–100. Default: 50. |
Request
{
"folder": "campaigns",
"type": "image",
"limit": 20
}Success response
{
"status": "ok",
"count": 1,
"media": [
{
"id": "media-uuid",
"name": "launch.jpg",
"url": "https://cdn.example.com/launch.jpg",
"type": "image",
"size": 245760,
"folder": "campaigns",
"tags": [
"launch"
]
}
]
}Tool errors
| Code | When | Retryable |
|---|---|---|
| INSUFFICIENT_SCOPE | The API key lacks one of the required scopes. | no |
| VALIDATION_ERROR | Input does not match the tool schema. | no |
| MONTHLY_API_LIMIT_REACHED | The plan's monthly API allowance is exhausted. | yes |
upload_media_from_urlDownloads an allowed public HTTPS image or video into the user's media library.
mediamedia:writedirect
upload_media_from_urlDownloads an allowed public HTTPS image or video into the user's media library.
Input fields
| Field | Type | Required | Details |
|---|---|---|---|
| url | string (URI) | yes | Public HTTPS source URL. Private IPs, local hosts, unsafe redirects, unsupported MIME types and files over 50 MB are rejected. |
| fileName | string | no | Optional output filename. Maximum 200 characters. |
| folder | string | no | Destination folder. Maximum 100 characters. Default: uploads. |
| tags | array of strings | no | Optional asset tags. Maximum 50 tags; each maximum 100 characters. Default: []. |
Request
{
"url": "https://cdn.example.com/launch.mp4",
"fileName": "launch.mp4",
"folder": "campaigns",
"tags": [
"launch",
"video"
]
}Success response
{
"status": "ok",
"media": {
"id": "media-uuid",
"name": "launch.mp4",
"url": "https://cdn.tareno.co/launch.mp4",
"type": "video",
"size": 5242880,
"folder": "campaigns"
}
}Tool errors
| Code | When | Retryable |
|---|---|---|
| INSUFFICIENT_SCOPE | The API key lacks one of the required scopes. | no |
| UNSAFE_MEDIA_URL | The URL is non-HTTPS, local, private, or resolves to a private address. | no |
| MEDIA_REDIRECT_REJECTED | The redirect chain is invalid or exceeds three redirects. | no |
| UNSUPPORTED_MEDIA_TYPE | The response MIME type is not allowlisted. | no |
| MEDIA_TOO_LARGE | The download exceeds 50 MB. | no |
| MEDIA_DOWNLOAD_FAILED | The remote server cannot be downloaded. | yes |
| MONTHLY_API_LIMIT_REACHED | The plan's monthly API allowance is exhausted. | yes |
get_analytics_overviewReturns the cross-platform analytics overview for a period.
analyticsanalytics:readdirect
get_analytics_overviewReturns the cross-platform analytics overview for a period.
Input fields
| Field | Type | Required | Details |
|---|---|---|---|
| period | string | no | day, week, month, or quarter. Default: month. |
Request
{
"period": "month"
}Success response
{
"status": "ok",
"analytics": {
"period": "month",
"impressions": 12400,
"engagements": 860,
"followers": 3200
}
}Tool errors
| Code | When | Retryable |
|---|---|---|
| INSUFFICIENT_SCOPE | The API key lacks one of the required scopes. | no |
| VALIDATION_ERROR | Input does not match the tool schema. | no |
| MONTHLY_API_LIMIT_REACHED | The plan's monthly API allowance is exhausted. | yes |
get_platform_analyticsReturns cached analytics for one platform and optionally one account.
analyticsanalytics:readdirect
get_platform_analyticsReturns cached analytics for one platform and optionally one account.
Input fields
| Field | Type | Required | Details |
|---|---|---|---|
| platform | string | yes | One of: bluesky, facebook, instagram, linkedin, mastodon, pinterest, threads, tiktok, twitter, youtube. |
| accountId | string (UUID) | no | Optional account filter. |
| period | string | no | day, week, month, or quarter. Default: month. |
Request
{
"platform": "instagram",
"period": "week"
}Success response
{
"status": "ok",
"platform": "instagram",
"count": 1,
"analytics": [
{
"period": "week",
"impressions": 4200,
"engagements": 310,
"cachedAt": "2026-07-13T09:00:00.000Z"
}
]
}Tool errors
| Code | When | Retryable |
|---|---|---|
| INSUFFICIENT_SCOPE | The API key lacks one of the required scopes. | no |
| ACCOUNT_NOT_FOUND | The account is not accessible to the authenticated user. | no |
| VALIDATION_ERROR | Input does not match the tool schema. | no |
| MONTHLY_API_LIMIT_REACHED | The plan's monthly API allowance is exhausted. | yes |
get_content_strategyReturns analytics-backed content recommendations for the user, platform, or account.
analyticsanalytics:readdirect
get_content_strategyReturns analytics-backed content recommendations for the user, platform, or account.
Input fields
| Field | Type | Required | Details |
|---|---|---|---|
| platform | string | no | One of: bluesky, facebook, instagram, linkedin, mastodon, pinterest, threads, tiktok, twitter, youtube. |
| accountId | string (UUID) | no | Optional account filter. |
| period | string | no | day, week, month, or quarter. Default: month. |
Request
{
"platform": "tiktok",
"period": "month"
}Success response
{
"status": "ok",
"strategy": {
"period": "month",
"recommendations": [
"Repurpose the top tutorial into a short video series."
],
"repurposingOpportunities": []
}
}Tool errors
| Code | When | Retryable |
|---|---|---|
| INSUFFICIENT_SCOPE | The API key lacks one of the required scopes. | no |
| ACCOUNT_NOT_FOUND | The account is not accessible to the authenticated user. | no |
| VALIDATION_ERROR | Input does not match the tool schema. | no |
| MONTHLY_API_LIMIT_REACHED | The plan's monthly API allowance is exhausted. | yes |
get_action_statusReturns approval status and per-item results for an MCP action.
actionsactions:readdirect
get_action_statusReturns approval status and per-item results for an MCP action.
Input fields
| Field | Type | Required | Details |
|---|---|---|---|
| actionId | string | yes | Action ID returned by an approval-required tool. |
Request
{
"actionId": "action-uuid"
}Success response
{
"status": "ok",
"action": {
"id": "action-uuid",
"toolName": "publish_posts",
"status": "pending",
"expiresAt": "2026-07-13T09:15:00.000Z",
"approvalUrl": "https://tareno.co/dashboard/agents/actions/action-uuid",
"output": null,
"error": null
}
}Tool errors
| Code | When | Retryable |
|---|---|---|
| INSUFFICIENT_SCOPE | The API key lacks one of the required scopes. | no |
| ACTION_NOT_FOUND | The action does not belong to the authenticated user or does not exist. | no |
Stable error envelope
{
"isError": true,
"structuredContent": {
"status": "error",
"code": "VALIDATION_ERROR",
"message": "scheduledAt must be in the future.",
"retryable": false,
"fieldErrors": {
"scheduledAt": [
"Must be in the future and include an explicit UTC offset."
]
}
},
"content": [
{
"type": "text",
"text": "<same JSON as structuredContent>"
}
]
}Success responses mirror the same object in structuredContent and the JSON text fallback.
The complete known application error-code set is: VALIDATION_ERROR, INSUFFICIENT_SCOPE, MONTHLY_API_LIMIT_REACHED, WORKSPACE_NOT_FOUND, ACCOUNT_NOT_FOUND, ACCOUNT_PLATFORM_MISMATCH, ACCOUNT_RECONNECT_REQUIRED, OPTION_PLATFORM_MISMATCH, UNSUPPORTED_OPTION, UNSUPPORTED_PLATFORM, POST_NOT_FOUND, POST_NOT_DRAFT, POST_NOT_SCHEDULED, POST_NOT_DELETABLE, INVALID_SCHEDULE_TIME, INVALID_TIMEZONE, IDEMPOTENCY_KEY_REUSED, PROVIDER_ERROR, UNSAFE_MEDIA_URL, MEDIA_REDIRECT_REJECTED, UNSUPPORTED_MEDIA_TYPE, MEDIA_TOO_LARGE, MEDIA_DOWNLOAD_FAILED, INVALID_SOCIAL_MEDIA_URL, TRANSCRIPT_UNAVAILABLE, VIDEO_DOWNLOAD_UNAVAILABLE, MEDIA_BACKEND_UNAVAILABLE, MEDIA_BACKEND_TIMEOUT, GET_VIRAL_DISABLED, GET_VIRAL_NOT_IN_ROLLOUT, VIRAL_PROJECT_NOT_FOUND, VIRAL_RESEARCH_NOT_AVAILABLE, VIRAL_QUOTE_NOT_FOUND, VIRAL_QUOTE_USED, VIRAL_QUOTE_EXPIRED, INSUFFICIENT_CREDITS, DISCOVERY_QUOTA_REACHED, DISCOVERY_UNAVAILABLE, VIRAL_RUN_NOT_FOUND, VIRAL_BLUEPRINT_NOT_FOUND, ACTION_NOT_FOUND, ACTION_ALREADY_DECIDED, ACTION_EXPIRED, API_KEY_MISSING, API_KEY_REVOKED, API_KEY_EXPIRED, PLAN_ACCESS_REVOKED, APPROVAL_REQUIRED, TOOL_NOT_EXECUTABLE, UNKNOWN_TOOL.
Inspector and curl smoke test
export TARENO_API_KEY="tk_live_…"
# Protocol initialize
curl -i https://tareno.co/api/mcp \
-H "Authorization: Bearer $TARENO_API_KEY" \
-H "Accept: application/json, text/event-stream" \
-H "Content-Type: application/json" \
--data '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"curl-check","version":"1.0"}}}'
# List tools
curl -sS https://tareno.co/api/mcp \
-H "Authorization: Bearer $TARENO_API_KEY" \
-H "Accept: application/json, text/event-stream" \
-H "Content-Type: application/json" \
--data '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'
# Get a timestamped transcript
curl -sS https://tareno.co/api/mcp \
-H "Authorization: Bearer $TARENO_API_KEY" \
-H "Accept: application/json, text/event-stream" \
-H "Content-Type: application/json" \
--data '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"get_social_media_transcript","arguments":{"platform":"youtube","url":"https://www.youtube.com/watch?v=…","includeTimestamps":true}}}'
# Resolve a public video download
curl -sS https://tareno.co/api/mcp \
-H "Authorization: Bearer $TARENO_API_KEY" \
-H "Accept: application/json, text/event-stream" \
-H "Content-Type: application/json" \
--data '{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"get_social_video_download","arguments":{"platform":"instagram","url":"https://www.instagram.com/reel/…"}}}'
# MCP Inspector
npx @modelcontextprotocol/inspector
# Connect with Streamable HTTP URL and Authorization: Bearer $TARENO_API_KEYNever put the key in the URL, commit it, or paste it into chat. Anonymous requests should return 401; an Origin outside the configured allowlist should return 403.
Use an existing tk_live_ API key in the Authorization header. OAuth clients use their own bearer-token flow when configured. Never include either token in a URL.