lynkr API ガイド

lynkr(https://lynkr.jp)は、SNS・ショップ・動画などのリンクを1ページにまとめる「link in bio」サービスです。
すべての操作を REST API と MCP サーバーから行えるので、Claude Code や Codex などの AI エージェントからページを作成・編集できます。

1. 認証

管理画面の「設定 → APIトークン」でトークン(lk_ で始まる文字列)を発行し、すべてのリクエストに付けます。

Authorization: Bearer lk_xxxxxxxxxxxxxxxx
スコープできること
read取得のみ
writeページ・ブロック・画像の作成/変更/削除(read を含む)
admin管理者向け API(管理者ユーザーのみ発行可)

2. AI エージェントから使う

Claude Code

claude mcp add --transport http lynkr https://lynkr.jp/mcp --header "Authorization: Bearer lk_xxxxxxxx"

Codex(~/.codex/config.toml)

[mcp_servers.lynkr]
url = "https://lynkr.jp/mcp"
bearer_token_env_var = "LYNKR_TOKEN"

環境変数 LYNKR_TOKEN にトークンを入れて Codex を起動します。
MCP を使わない場合は、このガイドを読ませて curl か CLI で操作させてください。

MCP ツール

whoami list_pages get_page create_page update_page replace_page delete_page add_block update_block delete_block reorder_blocks get_analytics upload_image_from_url list_images fetch_link_info get_reference

3. データモデル

ブロック種別

data の早見表(* は必須)

テーマ

{
  "preset": "sunset",
  "background": { "type": "gradient", "from": "#ffa07a", "to": "#ff5e98", "angle": 160 },
  "text_color": "#ffffff",
  "font": "maru",
  "button": { "style": "shadow", "shape": "pill", "color": "#ffffff", "text_color": "#e0457b" },
  "avatar_shape": "circle"
}

4. エンドポイント

メソッドパス説明
GET/api/v1/me自分の情報とトークンのスコープ
GET/api/v1/pagesページ一覧
POST/api/v1/pagesページ作成(blocks も同時に指定可)
GET/api/v1/pages/:refページ全体(ブロック含む)
PATCH/api/v1/pages/:ref部分更新(theme / seo は JSON Merge Patch)
PUT/api/v1/pages/:refブロック全体を宣言的に同期(送ったフィールドは置き換え)
DELETE/api/v1/pages/:refページ削除
POST/api/v1/pages/:ref/blocksブロック追加(position 省略で末尾)
PATCH/api/v1/pages/:ref/blocks/:idブロック更新(data は Merge Patch、position で移動)
DELETE/api/v1/pages/:ref/blocks/:idブロック削除
POST/api/v1/pages/:ref/blocks/:id/duplicateブロック複製
POST/api/v1/pages/:ref/blocks/reorder並べ替え {"ids": [...]}
GET/api/v1/pages/:ref/analytics?days=30アクセス解析(JST)
POST/api/v1/images画像アップロード(multipart の file / 生バイナリ / {"url": "..."})
GET/api/v1/images画像一覧
DELETE/api/v1/images/:id画像削除
GET/api/v1/unfurl?url=リンク先のタイトル・OGP画像を取得
GET/api/v1/metaブロック種別(JSON Schema)・テーマ・フォント・SNS一覧(認証不要)
GET/api/v1/slugs/:slugURL の空き状況(認証不要)

エラーは {"error": {"code": "...", "message": "...", "details": [{"path": "...", "message": "..."}]}} の形式で返ります。message を読めば修正方法が分かるようにしています。

5. 例(curl)

export LYNKR=https://lynkr.jp/api/v1
export AUTH="Authorization: Bearer $LYNKR_TOKEN"

# ページ一覧
curl -s -H "$AUTH" $LYNKR/pages

# ページを作成(ブロック付き)
curl -s -H "$AUTH" -H 'Content-Type: application/json' $LYNKR/pages -d '{
  "slug": "taro",
  "title": "山田 太郎",
  "bio": "写真家 / 東京",
  "theme": { "preset": "midnight" },
  "blocks": [
    { "type": "social", "data": { "items": [{ "service": "instagram", "url": "@taro" }, { "service": "x", "url": "@taro" }] } },
    { "type": "link", "data": { "title": "作品集", "url": "https://example.com" } }
  ]
}'

# 先頭にリンクを追加
curl -s -H "$AUTH" -H 'Content-Type: application/json' $LYNKR/pages/taro/blocks \
  -d '{"type": "link", "position": 0, "data": {"title": "新作MV", "url": "https://youtu.be/xxxxxxxxxxx", "highlight": "shine"}}'

# ブロックのタイトルだけ変更
curl -s -X PATCH -H "$AUTH" -H 'Content-Type: application/json' $LYNKR/pages/taro/blocks/bk_xxxxxxxxxxxxxxxx \
  -d '{"data": {"title": "最新MV"}}'

# 背景色だけ変更(ほかのテーマ設定はそのまま)
curl -s -X PATCH -H "$AUTH" -H 'Content-Type: application/json' $LYNKR/pages/taro \
  -d '{"theme": {"background": {"type": "solid", "color": "#fff1f4"}}}'

# 画像をアップロードしてアイコンに設定
curl -s -H "$AUTH" -F file=@avatar.png $LYNKR/images   # → {"image": {"path": "/i/im_....webp", ...}}
curl -s -X PATCH -H "$AUTH" -H 'Content-Type: application/json' $LYNKR/pages/taro -d '{"avatar_url": "/i/im_xxxxxxxxxxxxxxxx.webp"}'

6. ページをファイルで管理する(pull / push)

GET /api/v1/pages/:ref の page オブジェクトを JSON ファイルに保存し、編集して PUT /api/v1/pages/:ref で送り返すと、その内容にそろいます。
id 付きのブロックは更新(アクセス解析も引き継がれる)、id なしは新規作成、ファイルにない既存ブロックは削除されます。
blocks 以外のフィールド(title・bio・theme・seo など)は、送ったものだけが置き換わり、省略したものは変わりません。

node lynkr.mjs pull taro            # → pages/taro.json
# pages/taro.json を編集
node lynkr.mjs push pages/taro.json

7. 注意