BioFlow / API docs / updatePage
PATCH /v1/pages/{page_id}Merge-patch the DRAFT: title, description, theme preset, per-block data patches, and/or full reorder via block_order — everything unmentioned is preserved. Requires expected_updated_at; a stale stamp is refused with 409 stale_snapshot.
Requires scope: pages:write. Plan entitlement: public_api (Creator and Pro).
curl "https://app.getbioflow.com/v1/pages/PAGE_ID" \
-X PATCH \
-H "Authorization: Bearer bf_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"expected_updated_at": "string",
"title": "string",
"description": "string",
"theme_preset_key": "string",
"block_updates": [
{
"block_id": "string",
"data": {}
}
],
"block_order": [
"string"
]
}'| Name | In | Type | Required | Description |
|---|---|---|---|---|
page_id | path | string | yes | Page ID from List pages |
| Field | Type | Required | Description |
|---|---|---|---|
expected_updated_at | string | yes | Concurrency stamp: the draft.updated_at you last read. A mismatch is refused with 409 stale_snapshot — re-read the page and retry. |
title | string | no | — |
description | string | no | — |
theme_preset_key | string | no | — |
block_updates | array<object> | no | — |
block_order | array<string> | no | Every existing block ID exactly once, in the new top-to-bottom order |
| Field | Type | Description |
|---|---|---|
id | string | — |
title | string | — |
description | string | — |
slug | string | — |
status | DRAFT | PUBLISHED | ARCHIVED | — |
locale | string | — |
public_url | string | null | Live URL when routed; null for unrouted drafts |
theme | object | — |
draft | object | — |
published | object | — |
Every response also carries X-Request-Id plus the IETF draft-11 RateLimit / RateLimit-Policy headers.
| Code | Status | Meaning |
|---|---|---|
invalid_request | 400 | The request body or parameters failed validation |
invalid_api_key | 401 | Missing, malformed, unknown, disabled, or expired API key |
insufficient_scope | 403 | The API key was not granted the required scope |
feature_not_enabled | 403 | The workspace plan does not include public API access |
test_key_read_only | 403 | Test-mode keys are restricted to read operations |
rate_limited | 429 | Per-key rate limit exceeded |
quota_exhausted | 429 | Monthly API quota exhausted |
internal_error | 500 | Something went wrong on our side |
All errors are RFC 9457 application/problem+json — branch on code, quote request_id to support. Full registry on the API docs hub; interactive playground in the API reference.