AIエージェント向け

エージェントをワンステップで接続。ソーシャルチャネルの運用を任せる。

Markaestro はソフトウェアに操作されることを前提に作られています。Claude Code のような MCP クライアントはブラウザでサインインし、一つのブランドに紐づいたキーを受け取ります。それ以外のエージェントは設定から同じキーを取得します。どちらの場合も、エージェントは投稿できるアカウントを発見し、メディアをアップロードし、投稿の下書きと予約を行い、公開し、実際に配信された内容を報告できます。対象は Facebook、Instagram、TikTok、LinkedIn、Threads、Pinterest です。

インストールする SDK も、管理すべきプラットフォーム認証情報もありません。チームがダッシュボードで一度アカウントを接続すれば、以降エージェントは単一の Bearer トークン API と対話するだけです。

自律性のために設計され、目的に応じて制限されています

なぜAPIキーが統合のすべてなのか

エージェントにソーシャルメディアを扱わせる上で難しいのはHTTPそのものではありません。混乱したモデルが間違ったブランドに投稿したり、リトライで二重投稿したり、誰も確認していないものを公開してしまったりしないようにすることです。これらの保証は、プロンプトではなくAPIサーフェス自体に組み込まれています。

1つのキー、1つのブランド
すべてのAPIキーは作成時に単一のブランドに紐付けられます。そのキーを持つエージェントは、そのブランドのみを閲覧・投稿できます、ブランドをまたぐリクエストは、慣習によってではなく認証の段階で拒否されます。
ハードコードされたIDではなく発見
エージェントは投稿可能なアカウントを尋ね、そのまま渡し返せる不透明なIDを受け取ります。ページIDの管理も、Business Managerを探し回る必要も、接続が再連携されるたびに陳腐化する設定ファイルも不要です。
冪等な書き込み
作成や公開のリクエストにIdempotency-Keyを付けて送信してください。24時間以内のリトライは、2つ目の投稿を作成する代わりに元のレスポンスを再現します、これはエージェントが最も陥りやすい失敗モードです。
人間が常にループの中に
Facebook、Instagram、TikTokの投稿はマニュアルファーストです:エージェントが準備し、人間がネイティブに投稿します。明示的にオプトインしない限り、何も無人のまま公開されることはありません。

MCP クライアント

クライアントからサインイン。貼り付けるものは何もありません。

Claude Code、Claude、Cursor、ChatGPT、Grok、Grok Bot、OpenClaw、Hermes など Model Context Protocol を話すあらゆるクライアントは、認証情報を設定せずに Markaestro のホスト型 MCP サーバーへ接続できます。最初のツール呼び出しでブラウザが開きます。サインインし、エージェントが操作できるワークスペースとブランドを選び、権限を確認して「許可」をクリックしてください。クライアントはそのブランドに紐づいたキーを受け取り、自動で更新します。

これは PKCE と動的クライアント登録を備えた標準の OAuth 2.1 で、他のホスト型 MCP サーバーと同じ仕組みのため、Markaestro 専用のプラグインなしで動作します。サーバーは https://markaestro.com/api/public/v1/mcp にあり、公開 API の上に 31 のツールを公開しています。ブランドと配信先の発見、メディアのアップロード、下書きと予約投稿、ジョブ実行のポーリング付き公開、一括操作、Webhook、チャネルごとのルールです。

エージェントを接続

エージェントを選んでください。3 ステップで投稿できるようになります。

以下のクライアントはすべて同じホスト型 MCP サーバーに接続します。多くはブラウザでサインインします。最初のツール呼び出しで同意ページが開き、エージェントが操作できるワークスペースとブランドを選ぶと、クライアントはそのブランドに限定されたキーを受け取ります。ブラウザを開けないクライアントは、代わりにワークスペースの API キーを使います。同じサーバー、同じ権限、同じ一覧が設定に表示されます。

Claude Code

プラグインがスキルとホスト型サーバーをまとめてインストールします。設定も貼り付けも不要です。

サインインまたは API キーClaude Code のドキュメント
01

始める前に

  • メール確認済みのワークスペース所有者または管理者で、そのワークスペースに有効なプランと 1 つ以上のブランドがあること。
  • Claude Code がインストールされ、Anthropic アカウントにサインインしていること。
03

サインイン

  1. Claude に Markaestro について何か聞くか、/mcp を実行して markaestro を選びます。
  2. ブラウザで同意ページが開きます。ワークスペースとブランドを選び、権限を確認して「許可」をクリックします。
  3. 後でブランドを切り替えるには、/mcp を再実行してサインアウトし、別のブランドでサインインします。
サインインを優先してください。キーはクライアントがブラウザを開けない場合だけ使います。
04

確認

  • エージェントに list_products を呼ばせてください。許可した 1 つのブランドと、その接続済みチャネルが返るはずです。
  • 接続は「設定、API」に「接続済みエージェント」バッジ、最終使用日時、リクエスト数とともに表示されます。いつでもそこから取り消せます。
設定、API を開く
02

サーバーを追加

  1. 任意のターミナルでプラグインの 2 つのコマンドを実行するか、3 つ目のコマンドでサーバーだけを追加します。
Bash
# The plugin bundles the skill and the hosted server.
claude plugin marketplace add D3vBaba/Markaestro
claude plugin install markaestro@markaestro

# Or add just the server. No key, no header: the first call opens the browser.
claude mcp add --transport http markaestro https://markaestro.com/api/public/v1/mcp

クライアント接続時に起こること

5 つのステップはすべてクライアントとブラウザが処理します。あなたが目にするのは同意ページだけです。

01チャレンジ
POST /api/public/v1/mcp → 401 + WWW-Authenticate

クライアントは認証情報なしで MCP エンドポイントを呼び出します。Markaestro は保護リソースのメタデータ文書を示す WWW-Authenticate ヘッダー付きで 401 を返します。このヘッダーがサインイン可能であることをクライアントに伝えます。

02ディスカバリー
GET /.well-known/oauth-protected-resource · /.well-known/oauth-authorization-server

クライアントは 2 つの公開文書を読みます。どの認可サーバーがエンドポイントを保護しているか、そしてそのサーバーの登録、認可、トークンの各エンドポイントがどこにあるかです。どちらも markaestro.com で配信され、キャッシュ可能です。

03登録
POST /api/public/v1/oauth/register

クライアントは名前とコールバックアドレスを使って自身を登録します。ループバックアドレス、https コールバック、ネイティブアプリのスキームは受け付けられ、実ホストへの平文 http は拒否されます。事前共有のクライアント ID は不要です。

04同意
GET /oauth/authorize (browser)

ブラウザに同意ページが開きます。メール確認済みのワークスペースのオーナーまたは管理者がワークスペースとブランドを選び、権限を調整して「許可」をクリックします。Markaestro は一回限りのコードを付けてブラウザをクライアントへ戻します。

05トークン
POST /api/public/v1/oauth/token

クライアントはコードと PKCE verifier をアクセストークンとリフレッシュトークンに交換します。アクセストークンは選択したブランドに紐づいた通常のワークスペース API キーです。30 日で期限切れになり、リフレッシュでシークレットがローテーションされ、さらに 30 日延長されます。

トークンは本物の API キー

スコープ、ブランドの紐づけ、レート制限、サブスクリプション確認、冪等性、失効は、手動で作成したキーと同じコードパスを通ります。理解すべき第二の権限モデルはありません。

設定で一覧表示と失効が可能

接続済みエージェントは設定の API に「接続済みエージェント」バッジ、最終使用日時、リクエスト量とともに表示されます。そこで失効させれば次の呼び出しは失敗します。切断時にはクライアント自身がトークンを失効させることもできます。

一つの接続に一つのブランド

各接続は同意時に選んだ一つのブランドに厳密に紐づきます。エージェントに別のブランドを扱わせるには、再度接続してそのブランドを選びます。クライアントは許可されていないブランドには決して到達できません。

コードとリフレッシュトークンは使い捨て

認可コードの有効期間は 10 分で、原子的に消費されるため、再利用は失敗します。リフレッシュトークンは使用のたびにローテーションされ、ハッシュ化して保存されます。使われていないクライアント登録は 180 日で失効します。

エンドポイント

MCP クライアントを構築する方やフローを監査する方向けです。すべて 2 つの well-known 文書から発見できるため、手動で設定するものはありません。

リファレンス
# Discovery (public, cacheable)
GET  /.well-known/oauth-protected-resource            RFC 9728
GET  /.well-known/oauth-authorization-server          RFC 8414

# Authorization server
POST /api/public/v1/oauth/register                    RFC 7591, public clients (PKCE) or client_secret
GET  /oauth/authorize?response_type=code&client_id=…&redirect_uri=…
                     &code_challenge=…&code_challenge_method=S256&state=…
POST /api/public/v1/oauth/token                       grant_type=authorization_code | refresh_token
POST /api/public/v1/oauth/revoke                      RFC 7009

# Token response
{ "access_token": "mk_live_<ws>.<client>.<secret>", "token_type": "Bearer",
  "expires_in": 2592000, "refresh_token": "…", "scope": "products.read posts.write …" }

エージェントのループ

最初から最後まで、5回の呼び出し

Markaestroのすべての自動化は、このループのバリエーションです。ステップ1〜3はConnect API、ほとんどのエージェントが対象とすべきフラットなサーフェスです。ステップ4と5は、明示的な公開と実行の追跡のために完全な/api/public/v1 APIにアクセスします。

01発見
GET /api/connect/v1/social-accounts

キーのブランドに紐付いた、接続済みで公開可能なすべてのアカウントを返します。それぞれにプラットフォーム、ユーザー名、不透明なIDが含まれます。実行の開始時に呼び出してください、接続は変化します。

02メディアをアップロード
POST /api/connect/v1/media/create-upload-url → PUT

短時間有効で1回限りの署名付きURLを発行し、そこへ生のバイトデータをPUTします。メディアIDが返されます。画像は最大10MB、完全版APIでは動画も最大250MBまで対応します。

03下書きまたは予約
POST /api/connect/v1/posts

キャプション、メディアID、アカウントIDをそのまま渡してください。確認のために下書きのままにするか、is_draft falseとscheduled_atを送信してカレンダーに登録します。

04公開
POST /api/public/v1/posts/:id/publish

非同期の実行をキューに追加します。LinkedIn、Threads、Pinterestは公式APIを通じて配信されます。Facebook、Instagram、TikTokは、人間がネイティブに投稿できるようワークスペースの「投稿待ち」キューに入ります。

05報告
GET /api/public/v1/job-runs/:id · webhooks

実行IDをポーリングするか、Webhookエンドポイントを登録してMarkaestroからpost.published、post.action_required、post.failedをプッシュしてもらいます。公開が同期的に完了したと決して仮定しないでください。

クイックスタート

4コマンドで完結する統合

まずキーを発行しましょう:設定 → APIを開き、アクセスを許可するブランドを選択し、必要なスコープにチェックを入れ、必要に応じて有効期限を設定します。キーは一度しか表示されないので、そのままエージェントのシークレットストアに保存してください。キーの作成には、メール認証済みの管理者またはオーナーが必要です。

1. アカウントを発見
すべての実行における最初の呼び出しです。接続は変化するため、IDをプロンプトに焼き込むべきではありません。
Bash
# The API is served from the marketing apex and the app subdomain alike.
export MARKAESTRO_URL="https://markaestro.com"
export MARKAESTRO_API_KEY="mk_live_<workspaceId>.<clientId>.<secret>"

# 1. What can this key post to?
curl -s "$MARKAESTRO_URL/api/connect/v1/social-accounts" \
  -H "Authorization: Bearer $MARKAESTRO_API_KEY"
レスポンス
{
  "data": [
    {
      "id": "prod_123#instagram:instagram:ig_123",
      "product_id": "prod_123",
      "product": "Northwind Coffee",
      "platform": "instagram",
      "username": "northwindcoffee"
    }
  ]
}
2. メディアをアップロード
2つのステップ:署名付きで1回限り使用のURLを発行し、バイトデータをPUTします。URLは15分後に失効し、独自の認証ヘッダーは不要です。
Bash
# 2. Mint a signed upload url, then PUT the bytes.
RESP=$(curl -s -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": "cold-brew.png" }')
# → { "media_id": "ast_777", "upload_url": "https://.../media/upload?token=..." }

curl -X PUT "<upload_url>" \
  -H "Content-Type: image/png" \
  --data-binary @cold-brew.png
3. 予約して、確認する
作成はデフォルトで下書き優先です。代わりにis_draft: falsescheduled_atタイムスタンプを送信すれば投稿をカレンダーに登録できます。
Bash
# 3. Put it on the calendar. Pass the account id back verbatim.
curl -X POST "$MARKAESTRO_URL/api/connect/v1/posts" \
  -H "Authorization: Bearer $MARKAESTRO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "caption": "Cold brew season starts Friday.",
    "media": ["ast_777"],
    "social_accounts": ["prod_123#instagram:instagram:ig_123"],
    "is_draft": false,
    "scheduled_at": "2026-08-14T15:00:00.000Z"
  }'

# 4. Check where everything stands.
curl -s "$MARKAESTRO_URL/api/connect/v1/posts?limit=20" \
  -H "Authorization: Bearer $MARKAESTRO_API_KEY"

そのまま使える

ツール定義とエージェント向け概要

コピーすべきものは2つあります。1つ目は、投稿ループ全体をカバーするツールスキーマ一式です、JSON Schemaで書かれているため、Claudeのツール定義、OpenAIの関数、あるいはあなたがホストするMCPサーバーの入力形式としてそのまま使えます。2つ目は、モデルが予期しないことをしないようにする運用概要です。

ツールスキーマ
6つのツール:アカウント一覧、メディアアップロード、作成、公開、一覧表示、削除。それぞれを上記の対応するエンドポイントに接続してください。
tools.json
[
  {
    "name": "markaestro_list_accounts",
    "description": "List the social accounts this Markaestro key can publish to. Call this first in every run. Never hardcode account ids. Returns id, platform, and username.",
    "input_schema": { "type": "object", "properties": {}, "required": [] }
  },
  {
    "name": "markaestro_upload_media",
    "description": "Upload one image or video to Markaestro and return a media asset id. Images: png, jpeg, webp, gif up to 10 MB. Video: mp4, mov, webm up to 250 MB.",
    "input_schema": {
      "type": "object",
      "properties": {
        "file_path": { "type": "string", "description": "Local path to the file to upload." },
        "mime_type": { "type": "string", "description": "MIME type of the file." }
      },
      "required": ["file_path", "mime_type"]
    }
  },
  {
    "name": "markaestro_create_post",
    "description": "Create a post for one channel. Facebook, Instagram, and TikTok are manual-first: a human posts them natively from the To Post queue. Omit delivery_mode unless the user explicitly asked for unattended publishing.",
    "input_schema": {
      "type": "object",
      "properties": {
        "channel": {
          "type": "string",
          "enum": ["facebook", "instagram", "tiktok", "linkedin", "threads", "pinterest", "x"]
        },
        "caption": { "type": "string", "description": "Caption text, max 4000 characters." },
        "media_asset_ids": {
          "type": "array",
          "items": { "type": "string" },
          "description": "Ids from markaestro_upload_media. Instagram and TikTok require at least one."
        },
        "destination_id": {
          "type": "string",
          "description": "From markaestro_list_accounts. Required only when the brand has more than one destination on that channel."
        },
        "delivery_mode": {
          "type": "string",
          "enum": ["manual_reminder", "direct_publish", "platform_inbox"],
          "description": "Omit for the channel default."
        }
      },
      "required": ["channel", "caption"]
    }
  },
  {
    "name": "markaestro_publish_post",
    "description": "Queue an async publish run for an existing post. Returns a run id. Poll it, do not assume the post is live.",
    "input_schema": {
      "type": "object",
      "properties": { "post_id": { "type": "string" } },
      "required": ["post_id"]
    }
  },
  {
    "name": "markaestro_list_posts",
    "description": "List posts for this brand, newest first. Filter by status: draft, scheduled, publishing, published, platform_action_required, failed, partial_failed.",
    "input_schema": {
      "type": "object",
      "properties": {
        "status": { "type": "string" },
        "limit": { "type": "integer", "minimum": 1, "maximum": 100 }
      },
      "required": []
    }
  },
  {
    "name": "markaestro_delete_post",
    "description": "Remove a post from Markaestro. Use it to cancel something scheduled. Deleting an already-published post does NOT retract the live copy on the platform.",
    "input_schema": {
      "type": "object",
      "properties": { "post_id": { "type": "string" } },
      "required": ["post_id"]
    }
  }
]
エージェント向け概要
システムプロンプトに貼り付けてください。これは、信頼できる投稿エージェントと、二重投稿をして早々に「完了」を宣言してしまうエージェントとを分ける振る舞いをエンコードしています。
システムプロンプト
You have a Markaestro API key for exactly one brand. Markaestro is the
publishing layer: you supply the caption and the media, it handles the
platform rules, the calendar, and delivery.

Base URL: https://markaestro.com
Auth: Authorization: Bearer $MARKAESTRO_API_KEY

Rules:
- Call GET /api/connect/v1/social-accounts before posting. Pass the returned
  account ids back verbatim. Never invent or cache an id across runs.
- Upload media before creating a post; posts reference media ids, not files.
- Facebook, Instagram, and TikTok are manual-first. Creating and publishing
  them queues a reminder for a human. That is the intended behavior. Only
  send deliveryMode "direct_publish" if the operator explicitly asked for it.
- Send a unique Idempotency-Key on every POST. Reuse the SAME key when
  retrying the SAME request; never reuse it for a different one.
- On 429, wait the number of seconds in Retry-After, then retry. On 4xx other
  than 429, do not retry. Report the error code and requestId and stop.
- Publishing is async. POST /publish returns a run id; poll
  GET /api/public/v1/job-runs/<id> until succeeded or failed.
- To cancel, list with ?status=scheduled and DELETE the post id. Deleting a
  published post does not remove it from the platform.
- Never claim a post is live until a run reports succeeded or a post reports
  published.

エージェントはこれを自分で取得することもできます:curl https://markaestro.com/llms.txtは、エンドポイント、ルール、エラー処理を含むAPI全体のプレーンテキスト概要を返します、コンテキストに収まるほど小さなサイズです。

レシピ

エージェントが実際に実行する4つのワークフロー

公開して確認
下書きを作成し、明示的に公開し、実行をポーリングします。オペレーターに投稿が公開されたことを伝える唯一の正直な方法です。
Bash
# Full control: draft → publish → poll. No productId needed:
# the key is already bound to one brand.

POST_ID=$(curl -s -X POST "$MARKAESTRO_URL/api/public/v1/posts" \
  -H "Authorization: Bearer $MARKAESTRO_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: post-2026-08-14-linkedin" \
  -d '{
    "channel": "linkedin",
    "caption": "We shipped agent-driven publishing.",
    "mediaAssetIds": ["ast_777"]
  }' | jq -r .post.id)

RUN_ID=$(curl -s -X POST "$MARKAESTRO_URL/api/public/v1/posts/$POST_ID/publish" \
  -H "Authorization: Bearer $MARKAESTRO_API_KEY" \
  -H "Idempotency-Key: publish-$POST_ID" | jq -r .run.id)

# queued → running → succeeded | failed
curl -s "$MARKAESTRO_URL/api/public/v1/job-runs/$RUN_ID" \
  -H "Authorization: Bearer $MARKAESTRO_API_KEY"
監査してキューをキャンセル
予約中のものを一覧表示して人間に見せ、却下されたものを削除します。どちらの呼び出しも、既存のキーがすでに持つスコープを使用します。
Bash
# Review the queue, then cancel what the operator rejected.
curl -s "$MARKAESTRO_URL/api/public/v1/posts?status=scheduled&limit=100" \
  -H "Authorization: Bearer $MARKAESTRO_API_KEY"

curl -X DELETE "$MARKAESTRO_URL/api/public/v1/posts/pst_123" \
  -H "Authorization: Bearer $MARKAESTRO_API_KEY"
# → { "deleted": true, "id": "pst_123" }
1回の呼び出しで1週間分を埋める
バッチ作成は最大25件の投稿を受け付け、項目ごとの結果を返すため、1つの不正な項目が実行全体を沈めることはありません。
Bash
# One call, up to 25 posts. Per-item results: one bad item
# does not fail the batch.
curl -X POST "$MARKAESTRO_URL/api/public/v1/posts" \
  -H "Authorization: Bearer $MARKAESTRO_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: week-33-drop" \
  -d '{
    "posts": [
      { "channel": "instagram", "caption": "Monday",  "mediaAssetIds": ["ast_1"] },
      { "channel": "facebook",  "caption": "Tuesday", "mediaAssetIds": ["ast_2"] },
      { "channel": "linkedin",  "caption": "Thursday" }
    ]
  }'
# → { "results": [...], "created": 3, "total": 3 }
ポーリングの代わりに呼び出される
長時間稼働するエージェントはWebhookを登録してスリープすべきです。配信は、作成時に一度だけ表示されるシークレットを使ってHMACで署名されます。
Bash
# Let Markaestro call you instead of polling.
curl -X POST "$MARKAESTRO_URL/api/public/v1/webhook-endpoints" \
  -H "Authorization: Bearer $MARKAESTRO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://your-agent.example.com/hooks/markaestro",
    "events": ["post.published", "post.action_required", "post.failed"]
  }'

# Each delivery carries:
#   X-Markaestro-Event      post.action_required
#   X-Markaestro-Timestamp  2026-08-14T15:00:04.000Z
#   X-Markaestro-Signature  HMAC of the body with your webhook secret
# The secret is shown once at creation and stored hashed. Verify before acting.

ガードレール

エージェントができること、できないこと

自律性は影響範囲が小さい場合にのみ有用です。Markaestroのデフォルト設定は、呼び出し元が間違っている可能性のあるソフトウェアであることを前提としています。

Facebook、Instagram、TikTokはマニュアルファースト

エージェントがこれらのチャネル向けに作成する投稿は、デフォルトでmanual_reminderになります:Markaestroはこれらに対してプラットフォームのAPIを呼び出すことはありません。公開処理により投稿はワークスペースの「投稿待ち」キューに移動し、そこで人間がメディアをダウンロードしてネイティブに投稿し、確認します、そのため投稿はまるで手作業で作られたかのように見え、公に存在する前に必ず人間が目を通します。エージェントはdeliveryMode: "direct_publish"で1件の投稿を公式API公開に選択でき、TikTokの場合はクリエイター受信箱への引き渡しを意味し、無人のパブリック投稿になることは決してありません。LinkedIn、Threads、Pinterestは、エージェントが明示的に要求した時点でプログラムによって公開されます。

キーのスコープを絞る

エージェントに必要なスコープのみを選択してください:products.read、media.write、posts.read、posts.write、posts.publish、job_runs.read、webhooks.manage。カレンダーを読むだけのリサーチエージェントには、posts.readのみを与えれば十分です。

有効期限を設定する

キーは有効期限付きで作成できます。期限切れのキーは失効したキーと全く同じように動作するため、エージェントの環境から漏洩したキーは自然と機能しなくなります。

ローテーションと失効

「設定 → API」からキーをその場でローテーションするか、完全に失効させることができます。すべてのキーは最終使用日時とリクエスト量を表示するため、静かになったエージェント、あるいは暴走したエージェント、 を可視化できます。

レート制限が適用されます

エンドポイントごとに毎分60リクエスト、キーごとに毎分240リクエストです。すべてのレスポンスにX-RateLimit-Limit、-Remaining、-Resetが含まれ、429にはRetry-Afterが含まれます。無理に押し通すのではなく、それに従ってください。

Markaestroはあなたの代わりに文章を書きません

生成のステップは存在しません。キャプションはエージェントから、メディアはあなたのライブラリまたはエージェントのパイプラインから来ます。Markaestroは手であり、声ではありません。

削除はMarkaestro側の処理です

予約済みの投稿を削除すると、公開前にキャンセルされます。公開済みの投稿を削除しても、Markaestro側の追跡が止まるだけです、公開済みの投稿は、誰かがプラットフォーム上で削除するまで公開されたままです。

エラー処理

リトライする価値のあるエラーを教える

すべてのエラーレスポンスは、安定したerrorコードとrequestIdを含むJSONです。エージェントには、失敗を報告する際にrequestIdを引用させてください、サポートが呼び出しを追跡するために必要な情報です。

ステータスコードエージェントが取るべき対応
401UNAUTHENTICATEDキーが存在しない、失効している、または期限切れです。停止して人間に新しいキーを依頼してください、リトライしても解決しません。
403FORBIDDENキーにこの呼び出しに必要なスコープがありません。どの呼び出しが失敗したかを報告してください。スコープは「設定 → API」で変更できます。
403API_KEY_NOT_BOUND_TO_PRODUCTブランド紐付け以前に発行されたキーです。代替キーを依頼してください。
400VALIDATION_*ペイロードがチャネルのルールに違反しています(メディア不足、不正な配信モード、誤ったscheduled_atなど)。リクエストを修正してください。変更せずにリトライしないでください。
400VALIDATION_IDEMPOTENCY_KEY_REUSED同じIdempotency-Keyが異なるボディで送信されました。区別されたリクエストごとに新しいキーを発行してください。
400VALIDATION_POST_IS_PUBLISHING公開実行が進行中に投稿を削除しようとしました。実行が落ち着くのを待ってから削除してください。
409VALIDATION_POST_ALREADY_PUBLISHINGこの投稿の公開実行はすでにキューに入っています。再度公開せず、既存の実行をポーリングしてください。
402SUBSCRIPTION_REQUIREDこのワークスペースに有効なプランが関連付けられていません。ワークスペースのオーナーに設定で請求情報を確認するよう依頼してください。
402QUOTA_EXCEEDED_MEDIA_UPLOADSワークスペースが月間アップロードクォータに達しました。アップロードを停止して表示してください、既存のメディアは引き続き公開されます。
404NOT_FOUNDIDがこのキーのブランドの範囲外です。キーが所有していないIDを探索できないよう、403ではなく404として応答されます。
429RATE_LIMITEDRetry-Afterの秒数だけ待機し、同じIdempotency-Keyで同じリクエストをリトライしてください。

お好きなスタックで

HTTPSリクエストができれば、公開できます

採用すべきMarkaestro専用クライアントライブラリも、標準化すべきフレームワークもありません。ベアラートークン、JSONを送って、JSONを受け取るだけです。

ClaudeとClaude Agent SDK

上記のツール定義をそのままツールリストに追加してください。JSON Schemaの形式はすでにClaudeのツール使用フォーマットに準拠しています。

OpenAIのfunction calling

同じスキーマがそのまま関数定義にマッピングされます、input_schemaをparametersにリネームするだけです。

MCP クライアント

Claude Code、Claude、Cursor、ChatGPT、Grok、Grok Bot、OpenClaw、Hermes はホスト型サーバーの URL を追加してブラウザでサインインするだけです。stdio 専用のクライアントには npx -y @markaestro/mcp が同じ 31 のツールをローカルで提供します。

n8n、Make、Zapier

すべてのエンドポイントは、ベアラートークン付きの単純なHTTPリクエストです。SDKも署名の儀式も、エージェント向けのOAuthダンスも不要です。

LangChainとLlamaIndex

標準的なRESTツールです。2ステップのメディアアップロードだけが唯一の複数呼び出しフローで、わずか2行で済みます。

cronジョブとcurl

すべてのエージェントにフレームワークが必要なわけではありません。上記のクイックスタートは、4コマンドで完結する完全な統合です。

エージェントに本物の仕事を与えましょう

チャネルを接続したら、次はエージェントを接続しましょう。MCP クライアントからのサインインでも、ブランド限定キーの発行でも構いません。どちらか一つで統合は完了です。