Restore a Scheduled Function version
curl --request POST \
--url https://api.getnexor.ai/api/public/scheduled-functions/{id}/versions/{versionNumber}/restore \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"replace_draft": false
}
'import requests
url = "https://api.getnexor.ai/api/public/scheduled-functions/{id}/versions/{versionNumber}/restore"
payload = { "replace_draft": False }
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({replace_draft: false})
};
fetch('https://api.getnexor.ai/api/public/scheduled-functions/{id}/versions/{versionNumber}/restore', 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.getnexor.ai/api/public/scheduled-functions/{id}/versions/{versionNumber}/restore",
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([
'replace_draft' => false
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$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.getnexor.ai/api/public/scheduled-functions/{id}/versions/{versionNumber}/restore"
payload := strings.NewReader("{\n \"replace_draft\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<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))
}HttpResponse<String> response = Unirest.post("https://api.getnexor.ai/api/public/scheduled-functions/{id}/versions/{versionNumber}/restore")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"replace_draft\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getnexor.ai/api/public/scheduled-functions/{id}/versions/{versionNumber}/restore")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"replace_draft\": false\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"function": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"client_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"description": "<string>",
"cron_expression": "<string>",
"timezone": "<string>",
"run_count": 123,
"is_active": true,
"lookup_config": {
"leads": {
"include": true,
"query": {
"filters": [
{
"column": "id",
"op": "eq",
"value": "<unknown>"
}
],
"order": [
{
"column": "id",
"ascending": false
}
],
"limit": 2
},
"filters": {
"search": "<string>",
"workflowId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"statusId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"campaignId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"activeFilter": "active",
"assignedTo": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"olderThan": {
"value": 1,
"unit": "hours"
},
"newerThan": {
"value": 1,
"unit": "hours"
},
"dateFrom": "2023-11-07T05:31:56Z",
"dateTo": "2023-11-07T05:31:56Z",
"sortBy": "created_at",
"sortDir": "asc"
},
"limit": 2
},
"agents": {
"include": false
},
"hosts": {
"include": false
}
},
"max_leads_per_cycle": 250,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"next_run_at": "2023-11-07T05:31:56Z",
"last_run_at": "2023-11-07T05:31:56Z",
"last_run_status": "<string>",
"has_draft": true,
"draft_updated_at": "2023-11-07T05:31:56Z",
"deploy_error": "<string>",
"published_version": 123,
"code": "<string>",
"code_draft": "<string>",
"draft_hash": "<string>"
},
"draft_hash": "<string>"
}Restore a Scheduled Function version
Copy a published version of a Scheduled Function into its draft. Production keeps the published code until the draft is tested and published.
POST
/
scheduled-functions
/
{id}
/
versions
/
{versionNumber}
/
restore
Restore a Scheduled Function version
curl --request POST \
--url https://api.getnexor.ai/api/public/scheduled-functions/{id}/versions/{versionNumber}/restore \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"replace_draft": false
}
'import requests
url = "https://api.getnexor.ai/api/public/scheduled-functions/{id}/versions/{versionNumber}/restore"
payload = { "replace_draft": False }
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({replace_draft: false})
};
fetch('https://api.getnexor.ai/api/public/scheduled-functions/{id}/versions/{versionNumber}/restore', 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.getnexor.ai/api/public/scheduled-functions/{id}/versions/{versionNumber}/restore",
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([
'replace_draft' => false
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$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.getnexor.ai/api/public/scheduled-functions/{id}/versions/{versionNumber}/restore"
payload := strings.NewReader("{\n \"replace_draft\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<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))
}HttpResponse<String> response = Unirest.post("https://api.getnexor.ai/api/public/scheduled-functions/{id}/versions/{versionNumber}/restore")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"replace_draft\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getnexor.ai/api/public/scheduled-functions/{id}/versions/{versionNumber}/restore")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"replace_draft\": false\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"function": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"client_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"description": "<string>",
"cron_expression": "<string>",
"timezone": "<string>",
"run_count": 123,
"is_active": true,
"lookup_config": {
"leads": {
"include": true,
"query": {
"filters": [
{
"column": "id",
"op": "eq",
"value": "<unknown>"
}
],
"order": [
{
"column": "id",
"ascending": false
}
],
"limit": 2
},
"filters": {
"search": "<string>",
"workflowId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"statusId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"campaignId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"activeFilter": "active",
"assignedTo": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"olderThan": {
"value": 1,
"unit": "hours"
},
"newerThan": {
"value": 1,
"unit": "hours"
},
"dateFrom": "2023-11-07T05:31:56Z",
"dateTo": "2023-11-07T05:31:56Z",
"sortBy": "created_at",
"sortDir": "asc"
},
"limit": 2
},
"agents": {
"include": false
},
"hosts": {
"include": false
}
},
"max_leads_per_cycle": 250,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"next_run_at": "2023-11-07T05:31:56Z",
"last_run_at": "2023-11-07T05:31:56Z",
"last_run_status": "<string>",
"has_draft": true,
"draft_updated_at": "2023-11-07T05:31:56Z",
"deploy_error": "<string>",
"published_version": 123,
"code": "<string>",
"code_draft": "<string>",
"draft_hash": "<string>"
},
"draft_hash": "<string>"
}Copy a published version of a Scheduled Function into its draft. Production keeps running the published code until you test and publish the draft, so restoring never changes production by itself.
Replacing an open draft
When the function already has a draft, the call returns 409draft_already_open and changes nothing. Send replace_draft: true only when the unpublished changes can be lost.
Good to know
- Restoring the published version clears the draft, and
draft_hashcomes backnull. - Keep the returned
draft_hashto publish the restored code. - A version number that does not exist returns 404
version_not_found.
Authorizations
API key for authentication. Keys are prefixed with nxr_live_.
Path Parameters
Scheduled Function id.
Version number from the versions list. A number that does not exist returns 404 version_not_found.
Required range:
x >= 1Body
application/json
Replace an open draft. Its unpublished changes are lost.
Last modified on October 6, 2026
⌘I