Skip to main content
PATCH
/
assets
/
{assetId}
/
blocks
Patch specific blocks
curl --request PATCH \
  --url https://versuno.ai/api/public/assets/{assetId}/blocks \
  --header 'Authorization: <api-key>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "contentBlocks": [
    {
      "id": "b_35effee2-0c97-463b-9a0a-8973eca1b4da",
      "content": "Only this block is updated"
    }
  ]
}
'
import requests

url = "https://versuno.ai/api/public/assets/{assetId}/blocks"

payload = { "contentBlocks": [
        {
            "id": "b_35effee2-0c97-463b-9a0a-8973eca1b4da",
            "content": "Only this block is updated"
        }
    ] }
headers = {
    "Authorization": "<api-key>",
    "Content-Type": "application/json"
}

response = requests.patch(url, json=payload, headers=headers)

print(response.text)
const options = {
  method: 'PATCH',
  headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
  body: JSON.stringify({
    contentBlocks: [
      {
        id: 'b_35effee2-0c97-463b-9a0a-8973eca1b4da',
        content: 'Only this block is updated'
      }
    ]
  })
};

fetch('https://versuno.ai/api/public/assets/{assetId}/blocks', options)
  .then(res => res.json())
  .then(res => console.log(res))
  .catch(err => console.error(err));
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://versuno.ai/api/public/assets/{assetId}/blocks"

	payload := strings.NewReader("{\n  \"contentBlocks\": [\n    {\n      \"id\": \"b_35effee2-0c97-463b-9a0a-8973eca1b4da\",\n      \"content\": \"Only this block is updated\"\n    }\n  ]\n}")

	req, _ := http.NewRequest("PATCH", url, payload)

	req.Header.Add("Authorization", "<api-key>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(string(body))

}
<?php

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://versuno.ai/api/public/assets/{assetId}/blocks",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "PATCH",
  CURLOPT_POSTFIELDS => json_encode([
    'contentBlocks' => [
        [
                'id' => 'b_35effee2-0c97-463b-9a0a-8973eca1b4da',
                'content' => 'Only this block is updated'
        ]
    ]
  ]),
  CURLOPT_HTTPHEADER => [
    "Authorization: <api-key>",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
require 'uri'
require 'net/http'

url = URI("https://versuno.ai/api/public/assets/{assetId}/blocks")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"contentBlocks\": [\n    {\n      \"id\": \"b_35effee2-0c97-463b-9a0a-8973eca1b4da\",\n      \"content\": \"Only this block is updated\"\n    }\n  ]\n}"

response = http.request(request)
puts response.read_body
HttpResponse<String> response = Unirest.patch("https://versuno.ai/api/public/assets/{assetId}/blocks")
  .header("Authorization", "<api-key>")
  .header("Content-Type", "application/json")
  .body("{\n  \"contentBlocks\": [\n    {\n      \"id\": \"b_35effee2-0c97-463b-9a0a-8973eca1b4da\",\n      \"content\": \"Only this block is updated\"\n    }\n  ]\n}")
  .asString();
using RestSharp;


var options = new RestClientOptions("https://versuno.ai/api/public/assets/{assetId}/blocks");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "<api-key>");
request.AddJsonBody("{\n  \"contentBlocks\": [\n    {\n      \"id\": \"b_35effee2-0c97-463b-9a0a-8973eca1b4da\",\n      \"content\": \"Only this block is updated\"\n    }\n  ]\n}", false);
var response = await client.PatchAsync(request);

Console.WriteLine("{0}", response.Content);
{
  "assetId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "updatedBlockIds": [
    "<string>"
  ],
  "content": "<string>",
  "contentBlocks": [
    {
      "id": "b_35effee2-0c97-463b-9a0a-8973eca1b4da",
      "type": "paragraph",
      "meta": {},
      "content": "This block was updated",
      "inline": [
        {}
      ],
      "children": "<array>"
    }
  ]
}
{
  "error": "Wrong data: assetType is required"
}
{
  "error": "Invalid API key"
}
{
  "error": "Forbidden"
}
{
  "error": "Not found"
}
Patch one or many blocks by ID. Only the provided fields are changed on each block. This endpoint only supports field updates (content, inline, meta). Structural changes like wrapping and block-type transforms are handled by POST /assets/{assetId}/blocks/operations.
This endpoint does not create a manual version checkpoint. Use POST /assets/{assetId}/versions for manual versioning.

Authorizations

Authorization
string
header
default:Bearer uk_live_your_api_key_here
required

Versuno API key. Must be prefixed with Bearer. Format: Bearer uk_live_...

Path Parameters

assetId
string<uuid>
required

Query Parameters

assetType
enum<string>

Optional type guard. If supplied, it must match the asset's actual type.

Available options:
prompt,
persona,
context,
system_prompt,
skill

Body

application/json
contentBlocks
object[]
required
Minimum array length: 1

Response

Patched blocks and full updated block tree.

assetId
string<uuid>
updatedBlockIds
string[]
content
string
contentBlocks
object[]