开发者
公开发布 API
上传素材、创建内容,并发布到 Facebook、Instagram、TikTok、LinkedIn、Threads 和 Pinterest,全部通过工作区 API 密钥限定到某个产品范围内。推荐的集成方式是 Connect API,一个精简、扁平的 /api/connect/v1 接口,绝大多数排期工具都能直接对接。
需要更完整的控制能力,显式发布、任务执行状态轮询、已签名 Webhook、批量操作、按渠道配置?下方更高级的 /api/public/v1 API 提供了这一切功能。两者共享相同的认证方式、产品体系和发布流水线;请仅使用这些带版本号的公开路由(内部应用路由需要 Firebase 用户认证,不属于公开接口约定的一部分)。
Facebook、Instagram 和 TikTok 在 API 层面同样以人工优先。 这些渠道默认使用 manual_reminder:Markaestro 不调用平台 API,而是将内容移入「待发布」队列。传入 deliveryMode: "direct_publish" 可选择官方 API 发布。TikTok 默认转交至收件箱;当 settings.postMode 为 direct_post 时则请求 Direct Post。LinkedIn、Threads 和 Pinterest 默认以程序化方式发布。
一个工作区可以拥有多个产品。每个 API 密钥在创建时都会绑定到一个产品,因此调用会自动定向到该产品,针对其他产品的请求将被拒绝。
/api/connect/v1、扁平且采用 snake_case 命名的接口,绝大多数排期工具都能直接对接。它将常见的 create-upload-url → PUT → post 流程,映射到与下方完整 API 相同的工作区、认证、产品体系和发布流水线上。请将客户端的基础 URL 设置为 /api/connect,并使用限定产品范围的工作区 API 密钥进行认证(权限范围:posts.read、posts.write、media.write)。/api/connect/v1/social-accounts以扁平账号列表返回已连接的 Facebook、Instagram、TikTok 和 LinkedIn 目标,每个都标注所属产品,便于客户端分组和区分。每个渠道有各自的专用路径,不做跨渠道扇出。
/api/connect/v1/products列出品牌(接口命名为 products),并嵌套显示各自已连接的账号,以品牌为优先的选择器。
/api/connect/v1/media/create-upload-url返回一个短时有效、一次性使用的已签名 PUT URL,以及一个素材 ID。
<upload_url>将图片的原始字节数据上传至该已签名 URL。无需 API 密钥,签名本身即完成授权。
/api/connect/v1/posts为每个选定账号创建一份草稿。设置 is_draft=false 并附带 scheduled_at 即可排期投递;TikTok 使用创作者收件箱转交方式。
/api/connect/v1/posts以扁平化的状态、文案和素材 URL 列出工作区内容。
# 1. List connected accounts
curl "$MARKAESTRO_URL/api/connect/v1/social-accounts" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY"
# 2. Request a signed upload url, then PUT the bytes
curl -X POST "$MARKAESTRO_URL/api/connect/v1/media/create-upload-url" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "mime_type": "image/png", "size_bytes": 184320, "name": "slide-1.png" }'
curl -X PUT "<upload_url>" -H "Content-Type: image/png" --data-binary @slide-1.png
# 3. Create a draft post for one or more accounts
curl -X POST "$MARKAESTRO_URL/api/connect/v1/posts" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"caption": "New drop",
"media": ["ast_111", "ast_222"],
"social_accounts": ["prod_123#instagram:instagram:ig_123"]
}'/social-accounts 返回的每个账号都会标注其 product,表示品牌的接口命名(同一账号可能出现在多个品牌下),其 id 编码了 productId#destinationId,你可以将其原样传回 social_accounts,此时请求会按账号数量扩散为多篇内容。每个密钥仅绑定一个品牌,因此只能查看并发布到该品牌。Facebook、Instagram 和 TikTok 的内容以人工优先,均以草稿形式创建,由工作区所有者从 Markaestro 的「待发布」队列中原生发布,绝不通过平台 API 直接发布。LinkedIn、Threads 和 Pinterest 会在明确的发布操作后以程序化方式发布。内容状态为 draft、processing、posted 或 failed 之一。Facebook、Instagram、LinkedIn、TikTok 和 Threads 各自拥有独立的专属发布目标,发布到其中一个渠道不会扩散到其他渠道。可通过 GET /api/connect/v1/posts 跟踪发布状态。
高级功能:完整版公开 API
完整的 /api/public/v1 接口,显式发布、异步任务执行、已签名 Webhook、批量创建,以及按渠道配置。当 Connect API 无法满足需求时可使用此接口。
/api/public/v1/products列出该密钥所拥有的品牌,以及每个品牌当前可用的渠道。
/api/public/v1/products/:id/destinations列出该品牌的发布目标,包括独立的 Instagram 登录、Facebook 主页、Threads、LinkedIn 个人资料/主页,以及已连接的 TikTok 发布目标。
/api/public/v1/media/upload-sessions使用文件名、内容类型和精确大小创建一个有效期为 15 分钟的直传会话。
<uploadSession.uploadUrl>使用返回的 Content-Type 将字节直接上传到存储;不要发送 API 密钥。
/api/public/v1/media/upload-sessions/:id/finalize验证类型和大小并返回媒体素材;已完成的会话可安全重试。
/api/public/v1/media兼容用多部分上传。返回素材 ID 和托管 URL。
/api/public/v1/posts在工作区中创建草稿。Facebook、Instagram 和 TikTok 默认使用手动发布(deliveryMode manual_reminder);传入 deliveryMode direct_publish 可选择改用 API 发布。
/api/public/v1/posts按最新优先列出内容。使用 ?status=scheduled 筛选出排期中的内容,使用 ?productId= 限定到某个品牌。品牌绑定的密钥始终只限于其自身品牌,可省略 productId。
/api/public/v1/posts/:id返回当前内容状态、投递方式和发布结果。
/api/public/v1/posts/:id/publish将一次异步发布任务加入队列。手动内容会进入工作区的「待发布」队列以供原生发布;LinkedIn、Threads 和 Pinterest 直接发布;已选用 API 的 Meta 内容通过官方 API 发布,已选用 API 的 TikTok 内容使用收件箱转交方式。
/api/public/v1/posts/:id从 Markaestro 中删除该内容。使用现有的 posts.write 权限范围。如果发布任务正在进行中,将返回 400 VALIDATION_POST_IS_PUBLISHING。删除已发布的内容不会撤回平台上已发布的副本。
/api/public/v1/job-runs/:id返回 queued、running、succeeded 或 failed。
/api/public/v1/webhook-endpoints注册一个 Webhook 目标;每个工作区最多可有 25 个活跃端点。
/api/public/v1/webhook-endpoints列出该 API 密钥权限范围下已注册的 Webhook 目标。
/api/public/v1/webhook-endpoints/:id停用某个 Webhook 目标。
curl "$MARKAESTRO_URL/api/public/v1/products" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY"destinationId。curl "$MARKAESTRO_URL/api/public/v1/products/prod_123/destinations" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY"# 1. Create a 15-minute upload session
UPLOAD=$(curl -s -X POST "$MARKAESTRO_URL/api/public/v1/media/upload-sessions" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"fileName":"launch-1.jpg","contentType":"image/jpeg","sizeBytes":184320}')
# 2. PUT bytes directly to uploadSession.uploadUrl with its returned headers
curl -X PUT "<upload_url>" -H "Content-Type: image/jpeg" --data-binary @launch-1.jpg
# 3. Finalize; the response contains asset.id for mediaAssetIds
curl -X POST "$MARKAESTRO_URL/api/public/v1/media/upload-sessions/<session_id>/finalize" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY""deliveryMode": "direct_publish" 即可为该内容选用官方 API 发布。curl -X POST "$MARKAESTRO_URL/api/public/v1/posts" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: post-001" \
-d '{
"channel": "instagram",
"caption": "Launch day carousel",
"mediaAssetIds": ["ast_123", "ast_124"],
"productId": "prod_123",
"destinationId": "instagram:instagram:ig_123"
}'deliveryMode: "platform_inbox"(或 direct_publish),一次显式发布会将草稿改为发送至创作者的 TikTok 收件箱。curl -X POST "$MARKAESTRO_URL/api/public/v1/posts" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: post-tt-001" \
-d '{
"channel": "tiktok",
"caption": "Spring drop teaser",
"mediaAssetIds": ["ast_vid_123"],
"productId": "prod_123",
"destinationId": "tiktok:tiktok:tt_open_123"
}'post.action_required;LinkedIn、Threads、Pinterest 以及已选用 API 的 Meta 内容直接发布;已选用 API 的 TikTok 内容将排队进行收件箱转交。curl -X POST "$MARKAESTRO_URL/api/public/v1/posts/pst_123/publish" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY" \
-H "Idempotency-Key: publish-001"posts.read 和 posts.write。# The key is already bound to one brand
curl "$MARKAESTRO_URL/api/public/v1/posts?status=scheduled&limit=100" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY"
# Cancel one
curl -X DELETE "$MARKAESTRO_URL/api/public/v1/posts/pst_123" \
-H "Authorization: Bearer $MARKAESTRO_API_KEY"{
"id": "evt_123",
"type": "post.action_required",
"createdAt": "2026-04-08T18:06:10.000Z",
"workspaceId": "ws_123",
"data": {
"postId": "pst_123",
"channel": "instagram",
"status": "platform_action_required",
"nextAction": "post_manually_from_reminder"
}
}支持纯文字、图片或视频内容。每篇内容最多 10 张图片或 1 个视频。默认为手动发布;选用 API 后可直接发布。
至少需要一张图片或一个视频,最多 10 项内容。单个视频将以 Reel 形式发布。默认为手动发布;选用 API 后可直接发布。
TikTok
至少一张图片或一个视频。最多 35 张图片或 1 个视频。默认人工发布;选择开启的帖子会进入创作者的 TikTok 收件箱,或通过 TikTok 的 postMode direct_post 直接发布到主页。
支持文字、单图、单视频,或最多 20 张图片的原生多图内容。可定向到已连接的个人资料,或已管理的主页。
X
文本、最多四张图片、一个 GIF 或一个视频。回复权限按帖子应用;当工作区的 X 成本预算耗尽时,发布会被阻止。