Skip to main content
POST
/
api
/
conversations
/
{conversation_id}
/
generate_title
Generate Conversation Title
curl --request POST \
  --url https://api.example.com/api/conversations/{conversation_id}/generate_title \
  --header 'Content-Type: application/json' \
  --data '
{
  "max_length": 50,
  "llm": {
    "model": "claude-sonnet-4-20250514",
    "api_key": "<string>",
    "base_url": "<string>",
    "api_version": "<string>",
    "aws_access_key_id": "<string>",
    "aws_secret_access_key": "<string>",
    "aws_region_name": "<string>",
    "openrouter_site_url": "https://docs.all-hands.dev/",
    "openrouter_app_name": "OpenHands",
    "num_retries": 5,
    "retry_multiplier": 8,
    "retry_min_wait": 8,
    "retry_max_wait": 64,
    "timeout": 300,
    "max_message_chars": 30000,
    "temperature": 1,
    "top_p": 1,
    "top_k": 1,
    "max_input_tokens": 2,
    "max_output_tokens": 2,
    "model_canonical_name": "<string>",
    "extra_headers": {},
    "input_cost_per_token": 1,
    "output_cost_per_token": 1,
    "ollama_base_url": "<string>",
    "stream": false,
    "drop_params": true,
    "modify_params": true,
    "disable_vision": true,
    "disable_stop_word": false,
    "caching_prompt": true,
    "log_completions": false,
    "log_completions_folder": "logs/completions",
    "custom_tokenizer": "<string>",
    "native_tool_calling": true,
    "force_string_serializer": true,
    "reasoning_effort": "high",
    "enable_encrypted_reasoning": true,
    "prompt_cache_retention": "24h",
    "extended_thinking_budget": 200000,
    "seed": 123,
    "safety_settings": [
      {}
    ],
    "usage_id": "default",
    "litellm_extra_body": {}
  }
}
'
import requests

url = "https://api.example.com/api/conversations/{conversation_id}/generate_title"

payload = {
    "max_length": 50,
    "llm": {
        "model": "claude-sonnet-4-20250514",
        "api_key": "<string>",
        "base_url": "<string>",
        "api_version": "<string>",
        "aws_access_key_id": "<string>",
        "aws_secret_access_key": "<string>",
        "aws_region_name": "<string>",
        "openrouter_site_url": "https://docs.all-hands.dev/",
        "openrouter_app_name": "OpenHands",
        "num_retries": 5,
        "retry_multiplier": 8,
        "retry_min_wait": 8,
        "retry_max_wait": 64,
        "timeout": 300,
        "max_message_chars": 30000,
        "temperature": 1,
        "top_p": 1,
        "top_k": 1,
        "max_input_tokens": 2,
        "max_output_tokens": 2,
        "model_canonical_name": "<string>",
        "extra_headers": {},
        "input_cost_per_token": 1,
        "output_cost_per_token": 1,
        "ollama_base_url": "<string>",
        "stream": False,
        "drop_params": True,
        "modify_params": True,
        "disable_vision": True,
        "disable_stop_word": False,
        "caching_prompt": True,
        "log_completions": False,
        "log_completions_folder": "logs/completions",
        "custom_tokenizer": "<string>",
        "native_tool_calling": True,
        "force_string_serializer": True,
        "reasoning_effort": "high",
        "enable_encrypted_reasoning": True,
        "prompt_cache_retention": "24h",
        "extended_thinking_budget": 200000,
        "seed": 123,
        "safety_settings": [{}],
        "usage_id": "default",
        "litellm_extra_body": {}
    }
}
headers = {"Content-Type": "application/json"}

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

print(response.text)
const options = {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: JSON.stringify({
    max_length: 50,
    llm: {
      model: 'claude-sonnet-4-20250514',
      api_key: '<string>',
      base_url: '<string>',
      api_version: '<string>',
      aws_access_key_id: '<string>',
      aws_secret_access_key: '<string>',
      aws_region_name: '<string>',
      openrouter_site_url: 'https://docs.all-hands.dev/',
      openrouter_app_name: 'OpenHands',
      num_retries: 5,
      retry_multiplier: 8,
      retry_min_wait: 8,
      retry_max_wait: 64,
      timeout: 300,
      max_message_chars: 30000,
      temperature: 1,
      top_p: 1,
      top_k: 1,
      max_input_tokens: 2,
      max_output_tokens: 2,
      model_canonical_name: '<string>',
      extra_headers: {},
      input_cost_per_token: 1,
      output_cost_per_token: 1,
      ollama_base_url: '<string>',
      stream: false,
      drop_params: true,
      modify_params: true,
      disable_vision: true,
      disable_stop_word: false,
      caching_prompt: true,
      log_completions: false,
      log_completions_folder: 'logs/completions',
      custom_tokenizer: '<string>',
      native_tool_calling: true,
      force_string_serializer: true,
      reasoning_effort: 'high',
      enable_encrypted_reasoning: true,
      prompt_cache_retention: '24h',
      extended_thinking_budget: 200000,
      seed: 123,
      safety_settings: [{}],
      usage_id: 'default',
      litellm_extra_body: {}
    }
  })
};

fetch('https://api.example.com/api/conversations/{conversation_id}/generate_title', options)
  .then(res => res.json())
  .then(res => console.log(res))
  .catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://api.example.com/api/conversations/{conversation_id}/generate_title",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => json_encode([
    'max_length' => 50,
    'llm' => [
        'model' => 'claude-sonnet-4-20250514',
        'api_key' => '<string>',
        'base_url' => '<string>',
        'api_version' => '<string>',
        'aws_access_key_id' => '<string>',
        'aws_secret_access_key' => '<string>',
        'aws_region_name' => '<string>',
        'openrouter_site_url' => 'https://docs.all-hands.dev/',
        'openrouter_app_name' => 'OpenHands',
        'num_retries' => 5,
        'retry_multiplier' => 8,
        'retry_min_wait' => 8,
        'retry_max_wait' => 64,
        'timeout' => 300,
        'max_message_chars' => 30000,
        'temperature' => 1,
        'top_p' => 1,
        'top_k' => 1,
        'max_input_tokens' => 2,
        'max_output_tokens' => 2,
        'model_canonical_name' => '<string>',
        'extra_headers' => [
                
        ],
        'input_cost_per_token' => 1,
        'output_cost_per_token' => 1,
        'ollama_base_url' => '<string>',
        'stream' => false,
        'drop_params' => true,
        'modify_params' => true,
        'disable_vision' => true,
        'disable_stop_word' => false,
        'caching_prompt' => true,
        'log_completions' => false,
        'log_completions_folder' => 'logs/completions',
        'custom_tokenizer' => '<string>',
        'native_tool_calling' => true,
        'force_string_serializer' => true,
        'reasoning_effort' => 'high',
        'enable_encrypted_reasoning' => true,
        'prompt_cache_retention' => '24h',
        'extended_thinking_budget' => 200000,
        'seed' => 123,
        'safety_settings' => [
                [
                                
                ]
        ],
        'usage_id' => 'default',
        'litellm_extra_body' => [
                
        ]
    ]
  ]),
  CURLOPT_HTTPHEADER => [
    "Content-Type: application/json"
  ],
]);

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

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
package main

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

func main() {

	url := "https://api.example.com/api/conversations/{conversation_id}/generate_title"

	payload := strings.NewReader("{\n  \"max_length\": 50,\n  \"llm\": {\n    \"model\": \"claude-sonnet-4-20250514\",\n    \"api_key\": \"<string>\",\n    \"base_url\": \"<string>\",\n    \"api_version\": \"<string>\",\n    \"aws_access_key_id\": \"<string>\",\n    \"aws_secret_access_key\": \"<string>\",\n    \"aws_region_name\": \"<string>\",\n    \"openrouter_site_url\": \"https://docs.all-hands.dev/\",\n    \"openrouter_app_name\": \"OpenHands\",\n    \"num_retries\": 5,\n    \"retry_multiplier\": 8,\n    \"retry_min_wait\": 8,\n    \"retry_max_wait\": 64,\n    \"timeout\": 300,\n    \"max_message_chars\": 30000,\n    \"temperature\": 1,\n    \"top_p\": 1,\n    \"top_k\": 1,\n    \"max_input_tokens\": 2,\n    \"max_output_tokens\": 2,\n    \"model_canonical_name\": \"<string>\",\n    \"extra_headers\": {},\n    \"input_cost_per_token\": 1,\n    \"output_cost_per_token\": 1,\n    \"ollama_base_url\": \"<string>\",\n    \"stream\": false,\n    \"drop_params\": true,\n    \"modify_params\": true,\n    \"disable_vision\": true,\n    \"disable_stop_word\": false,\n    \"caching_prompt\": true,\n    \"log_completions\": false,\n    \"log_completions_folder\": \"logs/completions\",\n    \"custom_tokenizer\": \"<string>\",\n    \"native_tool_calling\": true,\n    \"force_string_serializer\": true,\n    \"reasoning_effort\": \"high\",\n    \"enable_encrypted_reasoning\": true,\n    \"prompt_cache_retention\": \"24h\",\n    \"extended_thinking_budget\": 200000,\n    \"seed\": 123,\n    \"safety_settings\": [\n      {}\n    ],\n    \"usage_id\": \"default\",\n    \"litellm_extra_body\": {}\n  }\n}")

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

	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))

}
HttpResponse<String> response = Unirest.post("https://api.example.com/api/conversations/{conversation_id}/generate_title")
  .header("Content-Type", "application/json")
  .body("{\n  \"max_length\": 50,\n  \"llm\": {\n    \"model\": \"claude-sonnet-4-20250514\",\n    \"api_key\": \"<string>\",\n    \"base_url\": \"<string>\",\n    \"api_version\": \"<string>\",\n    \"aws_access_key_id\": \"<string>\",\n    \"aws_secret_access_key\": \"<string>\",\n    \"aws_region_name\": \"<string>\",\n    \"openrouter_site_url\": \"https://docs.all-hands.dev/\",\n    \"openrouter_app_name\": \"OpenHands\",\n    \"num_retries\": 5,\n    \"retry_multiplier\": 8,\n    \"retry_min_wait\": 8,\n    \"retry_max_wait\": 64,\n    \"timeout\": 300,\n    \"max_message_chars\": 30000,\n    \"temperature\": 1,\n    \"top_p\": 1,\n    \"top_k\": 1,\n    \"max_input_tokens\": 2,\n    \"max_output_tokens\": 2,\n    \"model_canonical_name\": \"<string>\",\n    \"extra_headers\": {},\n    \"input_cost_per_token\": 1,\n    \"output_cost_per_token\": 1,\n    \"ollama_base_url\": \"<string>\",\n    \"stream\": false,\n    \"drop_params\": true,\n    \"modify_params\": true,\n    \"disable_vision\": true,\n    \"disable_stop_word\": false,\n    \"caching_prompt\": true,\n    \"log_completions\": false,\n    \"log_completions_folder\": \"logs/completions\",\n    \"custom_tokenizer\": \"<string>\",\n    \"native_tool_calling\": true,\n    \"force_string_serializer\": true,\n    \"reasoning_effort\": \"high\",\n    \"enable_encrypted_reasoning\": true,\n    \"prompt_cache_retention\": \"24h\",\n    \"extended_thinking_budget\": 200000,\n    \"seed\": 123,\n    \"safety_settings\": [\n      {}\n    ],\n    \"usage_id\": \"default\",\n    \"litellm_extra_body\": {}\n  }\n}")
  .asString();
require 'uri'
require 'net/http'

url = URI("https://api.example.com/api/conversations/{conversation_id}/generate_title")

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

request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n  \"max_length\": 50,\n  \"llm\": {\n    \"model\": \"claude-sonnet-4-20250514\",\n    \"api_key\": \"<string>\",\n    \"base_url\": \"<string>\",\n    \"api_version\": \"<string>\",\n    \"aws_access_key_id\": \"<string>\",\n    \"aws_secret_access_key\": \"<string>\",\n    \"aws_region_name\": \"<string>\",\n    \"openrouter_site_url\": \"https://docs.all-hands.dev/\",\n    \"openrouter_app_name\": \"OpenHands\",\n    \"num_retries\": 5,\n    \"retry_multiplier\": 8,\n    \"retry_min_wait\": 8,\n    \"retry_max_wait\": 64,\n    \"timeout\": 300,\n    \"max_message_chars\": 30000,\n    \"temperature\": 1,\n    \"top_p\": 1,\n    \"top_k\": 1,\n    \"max_input_tokens\": 2,\n    \"max_output_tokens\": 2,\n    \"model_canonical_name\": \"<string>\",\n    \"extra_headers\": {},\n    \"input_cost_per_token\": 1,\n    \"output_cost_per_token\": 1,\n    \"ollama_base_url\": \"<string>\",\n    \"stream\": false,\n    \"drop_params\": true,\n    \"modify_params\": true,\n    \"disable_vision\": true,\n    \"disable_stop_word\": false,\n    \"caching_prompt\": true,\n    \"log_completions\": false,\n    \"log_completions_folder\": \"logs/completions\",\n    \"custom_tokenizer\": \"<string>\",\n    \"native_tool_calling\": true,\n    \"force_string_serializer\": true,\n    \"reasoning_effort\": \"high\",\n    \"enable_encrypted_reasoning\": true,\n    \"prompt_cache_retention\": \"24h\",\n    \"extended_thinking_budget\": 200000,\n    \"seed\": 123,\n    \"safety_settings\": [\n      {}\n    ],\n    \"usage_id\": \"default\",\n    \"litellm_extra_body\": {}\n  }\n}"

response = http.request(request)
puts response.read_body
{
  "title": "<string>"
}
{
  "detail": [
    {
      "loc": [
        "<string>"
      ],
      "msg": "<string>",
      "type": "<string>"
    }
  ]
}

Path Parameters

conversation_id
string<uuid>
required

Body

application/json

Payload to generate a title for a conversation.

max_length
integer
default:50

Maximum length of the generated title

Required range: 1 <= x <= 200
llm
LLM · object | null

Optional LLM to use for title generation

Response

Successful Response

Response containing the generated conversation title.

title
string
required

The generated title for the conversation