Add a block
POST /v1/pages/{page_id}/blocks — Append ONE block to the page DRAFT, preserving every existing block byte-for-byte. Optionally wire an uploaded file (public_path…
Append ONE block to the page DRAFT, preserving every existing block byte-for-byte. Optionally wire an uploaded file (public_path from List files) into IMAGE/FILE/CAROUSEL/PRODUCT blocks. Requires expected_updated_at.
Requires scope: pages:write. Plan entitlement: public_api (Creator and Pro).
Consequential operation — send an Idempotency-Key header.
API key (bf_live_… / bf_test_…) as a Bearer token.
In: header
Path Parameters
Page ID from List pages
1 <= lengthRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X POST "https://example.com/v1/pages/string/blocks" \ -H "Content-Type: application/json" \ -d '{ "expected_updated_at": "string", "kind": "string" }'{ "id": "string", "title": "string", "description": "string", "slug": "string", "status": "DRAFT", "locale": "string", "public_url": "string", "theme": { "label": "string", "preset_key": "string" }, "draft": { "updated_at": "2019-08-24T14:15:22Z", "block_count": 0, "blocks": [ { "id": "string", "kind": "string", "enabled": true, "label": "string" } ] }, "published": { "is_live": true, "block_count": 0, "live_updated_at": "2019-08-24T14:15:22Z" }}Publish a page POST
POST /v1/pages/{page_id}/publish — Publish the page's current DRAFT to its live public route — the same code path as the editor's Publish button. Pass starts_at to…
Remove a block DELETE
DELETE /v1/pages/{page_id}/blocks/{block_id} — Delete one block from the page DRAFT, preserving everything else. Removing the last remaining block is refused…