synced_block, link_to_pagetemplate のブロックタイプが API でサポートされた。以下、実際に試してみる。

Synced block

ChangeLog 内の説明

UI と同じで、二つの synced_block が存在する。-- 最初のものはオリジナルでこれは同期しない。参照ブロックはオリジナルの synced_block に同期する。

Original Synced Block synced_blockを作るために、開発者はオリジナルの synced block を作る必要がある。開発者は synced_from が設定されていない(null にセットされている)ことを確認することで、それがオリジナルかどうかを確認することができる。

検証

ChangeLog にあったサンプルをこのページに追加してみる。コードはこんな感じ。

#!/bin/sh

curl -X PATCH '<https://api.notion.com/v1/blocks/c322dfe679bc4d68b50e1cf544f064ac/children>' \\
  -H 'Authorization: Bearer '"$NOTION_API_KEY"'' \\
  -H "Content-Type: application/json" \\
  -H "Notion-Version: 2021-08-16" \\
  --data '{
	"children": [
    {
      "type": "synced_block",
      "synced_block": {
        "synced_from": null,
        "children": [
          {
            "callout": {
              "text": [
                {
                  "type": "text",
                  "text": {
                    "content": "Synced block 内の Callout"
                  }
                }
              ]
            }
          }
        ]
      }
    }
  ]
}'

返ってきた JSON はこちら。synced_from が null の synced_block が生成されている。has_children が true になっているので、この id で block children を取得すれば、上の callout が入っていると思う。

{
    "object": "list",
    "results": [
        {
            "object": "block",
            "id": "d3137469-5cd5-4372-9e39-10183c6dd028",
            "created_time": "2021-11-18T01:36:00.000Z",
            "last_edited_time": "2021-11-18T01:36:00.000Z",
            "has_children": true,
            "archived": false,
            "type": "synced_block",
            "synced_block": {
                "synced_from": null
            }
        }
    ],
    "next_cursor": null,
    "has_more": false
}

作成されたオリジナルの synced block はこれ。

<aside> 💡 Synced block 内の Callout

</aside>

ChangeLog 内の説明

Reference Synced Blocks オリジナル synced_block を他の synced_blockと同期するには、開発者は単に synced_blocksynced_from プロパティを使って参照すればよい。

検証

説明通りにsynced_from に block_id を設定する。先ほどの JSON に先ほど作成した synced block の id が入っているので、それを設定すればよい。

#!/bin/sh

curl -X PATCH '<https://api.notion.com/v1/blocks/c322dfe679bc4d68b50e1cf544f064ac/children>' \\
  -H 'Authorization: Bearer '"$NOTION_API_KEY"'' \\
  -H "Content-Type: application/json" \\
  -H "Notion-Version: 2021-08-16" \\
  --data '{
	"children": [
    {
      "type": "synced_block",
      "synced_block": {
        "synced_from": {
          "block_id": "d3137469-5cd5-4372-9e39-10183c6dd028"
        }
      }
    }
  ]
}'

返ってきた JSON はこんな感じ。synced_from に block_id が設定されています。上のスクリプトには子供を設定していないが、同期しているため has_children が設定されている。

{
    "object": "list",
    "results": [
        {
            "object": "block",
            "id": "b329ea36-e5a6-41ab-8e2c-d49af1f14ab5",
            "created_time": "2021-11-18T04:51:00.000Z",
            "last_edited_time": "2021-11-18T04:51:00.000Z",
            "has_children": true,
            "archived": false,
            "type": "synced_block",
            "synced_block": {
                "synced_from": {
                    "type": "block_id",
                    "block_id": "d3137469-5cd5-4372-9e39-10183c6dd028"
                }
            }
        }
    ],
    "next_cursor": null,
    "has_more": false
}

作成された参照の synced block はこれ。見た目ではどちらかはわからない。