Reject a pending project with a reason
curl --request POST \
--url https://api.zivio.net/api/v4/projects/{id}/reject \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'zivio-tenant-id: <api-key>' \
--data '
{
"rejection_reason": "Please add measurable acceptance criteria and confirm the budget owner."
}
'import requests
url = "https://api.zivio.net/api/v4/projects/{id}/reject"
payload = { "rejection_reason": "Please add measurable acceptance criteria and confirm the budget owner." }
headers = {
"Authorization": "Bearer <token>",
"zivio-tenant-id": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
Authorization: 'Bearer <token>',
'zivio-tenant-id': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
rejection_reason: 'Please add measurable acceptance criteria and confirm the budget owner.'
})
};
fetch('https://api.zivio.net/api/v4/projects/{id}/reject', 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.zivio.net/api/v4/projects/{id}/reject",
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([
'rejection_reason' => 'Please add measurable acceptance criteria and confirm the budget owner.'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"zivio-tenant-id: <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.zivio.net/api/v4/projects/{id}/reject"
payload := strings.NewReader("{\n \"rejection_reason\": \"Please add measurable acceptance criteria and confirm the budget owner.\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("zivio-tenant-id", "<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.zivio.net/api/v4/projects/{id}/reject")
.header("Authorization", "Bearer <token>")
.header("zivio-tenant-id", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"rejection_reason\": \"Please add measurable acceptance criteria and confirm the budget owner.\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.zivio.net/api/v4/projects/{id}/reject")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["zivio-tenant-id"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"rejection_reason\": \"Please add measurable acceptance criteria and confirm the budget owner.\"\n}"
response = http.request(request)
puts response.read_body{
"message": "Rejection recorded for project 123",
"project_id": 123,
"state": "draft",
"approved": false,
"current_approval_level": 0
}{
"error": "invalid_token",
"error_description": "The access token provided is expired, revoked, malformed, or invalid for other reasons"
}{
"error": "insufficient_scope",
"error_description": "The request requires higher privileges than provided by the access token",
"required_scope": "project_approvals:write",
"provided_scopes": [
"welcome:read"
]
}{
"message": "rejection_reason is required"
}Projects
Reject a pending project with a reason
Records the acting user’s rejection of a pending project. Depending on the approval step configuration the project either reverts to the prior approval level or returns to draft for the owner to amend. rejection_reason is required.
POST
/
projects
/
{id}
/
reject
Reject a pending project with a reason
curl --request POST \
--url https://api.zivio.net/api/v4/projects/{id}/reject \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'zivio-tenant-id: <api-key>' \
--data '
{
"rejection_reason": "Please add measurable acceptance criteria and confirm the budget owner."
}
'import requests
url = "https://api.zivio.net/api/v4/projects/{id}/reject"
payload = { "rejection_reason": "Please add measurable acceptance criteria and confirm the budget owner." }
headers = {
"Authorization": "Bearer <token>",
"zivio-tenant-id": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
Authorization: 'Bearer <token>',
'zivio-tenant-id': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
rejection_reason: 'Please add measurable acceptance criteria and confirm the budget owner.'
})
};
fetch('https://api.zivio.net/api/v4/projects/{id}/reject', 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.zivio.net/api/v4/projects/{id}/reject",
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([
'rejection_reason' => 'Please add measurable acceptance criteria and confirm the budget owner.'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"zivio-tenant-id: <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.zivio.net/api/v4/projects/{id}/reject"
payload := strings.NewReader("{\n \"rejection_reason\": \"Please add measurable acceptance criteria and confirm the budget owner.\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("zivio-tenant-id", "<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.zivio.net/api/v4/projects/{id}/reject")
.header("Authorization", "Bearer <token>")
.header("zivio-tenant-id", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"rejection_reason\": \"Please add measurable acceptance criteria and confirm the budget owner.\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.zivio.net/api/v4/projects/{id}/reject")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["zivio-tenant-id"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"rejection_reason\": \"Please add measurable acceptance criteria and confirm the budget owner.\"\n}"
response = http.request(request)
puts response.read_body{
"message": "Rejection recorded for project 123",
"project_id": 123,
"state": "draft",
"approved": false,
"current_approval_level": 0
}{
"error": "invalid_token",
"error_description": "The access token provided is expired, revoked, malformed, or invalid for other reasons"
}{
"error": "insufficient_scope",
"error_description": "The request requires higher privileges than provided by the access token",
"required_scope": "project_approvals:write",
"provided_scopes": [
"welcome:read"
]
}{
"message": "rejection_reason is required"
}Authorizations
OAuth 2.0 client credentials. The access token from POST /oauth/token is sent as a bearer token. Request only the scopes you need.
Your Zivio organisation identifier. The regional API endpoints serve every Zivio organisation, so each request must identify yours.
Path Parameters
Project ID
Body
application/json
Why the project is being rejected; shown to the project owner.
Example:
"Please add measurable acceptance criteria and confirm the budget owner."
Response
Rejection recorded; response reports the resulting project state
The response is of type object.

