Restore a Postgres service
This endpoint is in beta. API contract is stable, and no breaking changes are expected in the future.
Restore a Postgres database from continuous backup, optionally at a specific point in time.
curl --request POST \
--url https://api.clickhouse.cloud/v1/organizations/{organizationId}/postgres/{postgresId}/restoredService \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"restoreTarget": "2026-03-31T18:17:37Z",
"pgConfig": {
"max_connections": 100
},
"pgBouncerConfig": {
"default_pool_size": "16"
},
"tags": [
{
"key": "Environment",
"value": "staging"
}
]
}
'import requests
url = "https://api.clickhouse.cloud/v1/organizations/{organizationId}/postgres/{postgresId}/restoredService"
payload = {
"name": "<string>",
"restoreTarget": "2026-03-31T18:17:37Z",
"pgConfig": { "max_connections": 100 },
"pgBouncerConfig": { "default_pool_size": "16" },
"tags": [
{
"key": "Environment",
"value": "staging"
}
]
}
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Basic <encoded-value>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
restoreTarget: '2026-03-31T18:17:37Z',
pgConfig: {max_connections: 100},
pgBouncerConfig: {default_pool_size: '16'},
tags: [{key: 'Environment', value: 'staging'}]
})
};
fetch('https://api.clickhouse.cloud/v1/organizations/{organizationId}/postgres/{postgresId}/restoredService', 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.clickhouse.cloud/v1/organizations/{organizationId}/postgres/{postgresId}/restoredService",
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([
'name' => '<string>',
'restoreTarget' => '2026-03-31T18:17:37Z',
'pgConfig' => [
'max_connections' => 100
],
'pgBouncerConfig' => [
'default_pool_size' => '16'
],
'tags' => [
[
'key' => 'Environment',
'value' => 'staging'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"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.clickhouse.cloud/v1/organizations/{organizationId}/postgres/{postgresId}/restoredService"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"restoreTarget\": \"2026-03-31T18:17:37Z\",\n \"pgConfig\": {\n \"max_connections\": 100\n },\n \"pgBouncerConfig\": {\n \"default_pool_size\": \"16\"\n },\n \"tags\": [\n {\n \"key\": \"Environment\",\n \"value\": \"staging\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Basic <encoded-value>")
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.clickhouse.cloud/v1/organizations/{organizationId}/postgres/{postgresId}/restoredService")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"restoreTarget\": \"2026-03-31T18:17:37Z\",\n \"pgConfig\": {\n \"max_connections\": 100\n },\n \"pgBouncerConfig\": {\n \"default_pool_size\": \"16\"\n },\n \"tags\": [\n {\n \"key\": \"Environment\",\n \"value\": \"staging\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.clickhouse.cloud/v1/organizations/{organizationId}/postgres/{postgresId}/restoredService")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Basic <encoded-value>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"restoreTarget\": \"2026-03-31T18:17:37Z\",\n \"pgConfig\": {\n \"max_connections\": 100\n },\n \"pgBouncerConfig\": {\n \"default_pool_size\": \"16\"\n },\n \"tags\": [\n {\n \"key\": \"Environment\",\n \"value\": \"staging\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"status": 200,
"requestId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"result": {
"name": "<string>",
"provider": "aws",
"region": "<string>",
"tags": [
{
"key": "Environment",
"value": "staging"
}
],
"id": "f71df78e-ddad-82d0-8dfa-abbec741b82e",
"storageSize": 123,
"createdAt": "2026-03-26T20:51:16.384Z",
"isPrimary": false,
"connectionString": "<string>",
"username": "<string>",
"password": "<string>",
"hostname": "<string>"
}
}{
"status": 400,
"error": "<string>",
"requestId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}{
"status": 500,
"error": "<string>",
"requestId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}Restore a Postgres database from continuous backup, optionally at a specific point in time.
Authorizations
Use key ID and key secret obtained in ClickHouse Cloud console: https://clickhouse.com/docs/cloud/manage/openapi
Path Parameters
ID of the organization that owns the Postgres service.
ID of the requested Postgres service.
Body
Name of the Postgres service. Alphanumerical string with whitespaces up to 50 characters.
1 - 50The point in time at which to recover, as either date/time, named restore point, or a specific transaction ID.
"2026-03-31T18:17:37Z"
Postgres runtime configuration configuration.
Show child attributes
Show child attributes
{ "max_connections": 100 }
PgBouncer runtime configuration configuration.
Show child attributes
Show child attributes
{ "default_pool_size": "16" }
Tags associated with the Postgres service. Tag keys starting with “chc_” are reserved for internal use.
50Show child attributes
Show child attributes
Was this page helpful?
curl --request POST \
--url https://api.clickhouse.cloud/v1/organizations/{organizationId}/postgres/{postgresId}/restoredService \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"restoreTarget": "2026-03-31T18:17:37Z",
"pgConfig": {
"max_connections": 100
},
"pgBouncerConfig": {
"default_pool_size": "16"
},
"tags": [
{
"key": "Environment",
"value": "staging"
}
]
}
'import requests
url = "https://api.clickhouse.cloud/v1/organizations/{organizationId}/postgres/{postgresId}/restoredService"
payload = {
"name": "<string>",
"restoreTarget": "2026-03-31T18:17:37Z",
"pgConfig": { "max_connections": 100 },
"pgBouncerConfig": { "default_pool_size": "16" },
"tags": [
{
"key": "Environment",
"value": "staging"
}
]
}
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Basic <encoded-value>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
restoreTarget: '2026-03-31T18:17:37Z',
pgConfig: {max_connections: 100},
pgBouncerConfig: {default_pool_size: '16'},
tags: [{key: 'Environment', value: 'staging'}]
})
};
fetch('https://api.clickhouse.cloud/v1/organizations/{organizationId}/postgres/{postgresId}/restoredService', 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.clickhouse.cloud/v1/organizations/{organizationId}/postgres/{postgresId}/restoredService",
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([
'name' => '<string>',
'restoreTarget' => '2026-03-31T18:17:37Z',
'pgConfig' => [
'max_connections' => 100
],
'pgBouncerConfig' => [
'default_pool_size' => '16'
],
'tags' => [
[
'key' => 'Environment',
'value' => 'staging'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"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.clickhouse.cloud/v1/organizations/{organizationId}/postgres/{postgresId}/restoredService"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"restoreTarget\": \"2026-03-31T18:17:37Z\",\n \"pgConfig\": {\n \"max_connections\": 100\n },\n \"pgBouncerConfig\": {\n \"default_pool_size\": \"16\"\n },\n \"tags\": [\n {\n \"key\": \"Environment\",\n \"value\": \"staging\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Basic <encoded-value>")
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.clickhouse.cloud/v1/organizations/{organizationId}/postgres/{postgresId}/restoredService")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"restoreTarget\": \"2026-03-31T18:17:37Z\",\n \"pgConfig\": {\n \"max_connections\": 100\n },\n \"pgBouncerConfig\": {\n \"default_pool_size\": \"16\"\n },\n \"tags\": [\n {\n \"key\": \"Environment\",\n \"value\": \"staging\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.clickhouse.cloud/v1/organizations/{organizationId}/postgres/{postgresId}/restoredService")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Basic <encoded-value>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"restoreTarget\": \"2026-03-31T18:17:37Z\",\n \"pgConfig\": {\n \"max_connections\": 100\n },\n \"pgBouncerConfig\": {\n \"default_pool_size\": \"16\"\n },\n \"tags\": [\n {\n \"key\": \"Environment\",\n \"value\": \"staging\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"status": 200,
"requestId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"result": {
"name": "<string>",
"provider": "aws",
"region": "<string>",
"tags": [
{
"key": "Environment",
"value": "staging"
}
],
"id": "f71df78e-ddad-82d0-8dfa-abbec741b82e",
"storageSize": 123,
"createdAt": "2026-03-26T20:51:16.384Z",
"isPrimary": false,
"connectionString": "<string>",
"username": "<string>",
"password": "<string>",
"hostname": "<string>"
}
}{
"status": 400,
"error": "<string>",
"requestId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}{
"status": 500,
"error": "<string>",
"requestId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}