curl --request POST \
--url https://api.zivio.net/api/v4/bids/{id}/eliminate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'zivio-tenant-id: <api-key>' \
--data '
{
"reason": "The proposal does not meet the mandatory delivery deadline."
}
'import requests
url = "https://api.zivio.net/api/v4/bids/{id}/eliminate"
payload = { "reason": "The proposal does not meet the mandatory delivery deadline." }
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({reason: 'The proposal does not meet the mandatory delivery deadline.'})
};
fetch('https://api.zivio.net/api/v4/bids/{id}/eliminate', 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/bids/{id}/eliminate",
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([
'reason' => 'The proposal does not meet the mandatory delivery deadline.'
]),
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/bids/{id}/eliminate"
payload := strings.NewReader("{\n \"reason\": \"The proposal does not meet the mandatory delivery deadline.\"\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/bids/{id}/eliminate")
.header("Authorization", "Bearer <token>")
.header("zivio-tenant-id", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"reason\": \"The proposal does not meet the mandatory delivery deadline.\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.zivio.net/api/v4/bids/{id}/eliminate")
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 \"reason\": \"The proposal does not meet the mandatory delivery deadline.\"\n}"
response = http.request(request)
puts response.read_body{
"bid_id": 9,
"eliminated": true,
"shortlisted": false,
"changed": true,
"message": "Proposal 9 eliminated"
}{
"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": "bids:write",
"provided_scopes": [
"welcome:read"
]
}{
"error": "not_eliminatable",
"message": "Proposal 9 has been awarded and cannot be eliminated"
}Eliminate a proposal — reject or archive it, notifying the supplier
Eliminates (rejects / archives) the proposal, mirroring the web UI’s “thumbs down” action: the proposal drops out of the evaluation and the supplier is emailed that they were unsuccessful. Because cost scores are relative to the cheapest active proposal, the remaining proposals’ scores are recalculated automatically — re-read GET /projects//evaluations for the new ranking. An optional reason is recorded on the proposal’s audit trail. Idempotent: an already-eliminated proposal reports changed: false and the supplier is not emailed again. Reverse it with POST /bids//reinstate.
curl --request POST \
--url https://api.zivio.net/api/v4/bids/{id}/eliminate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'zivio-tenant-id: <api-key>' \
--data '
{
"reason": "The proposal does not meet the mandatory delivery deadline."
}
'import requests
url = "https://api.zivio.net/api/v4/bids/{id}/eliminate"
payload = { "reason": "The proposal does not meet the mandatory delivery deadline." }
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({reason: 'The proposal does not meet the mandatory delivery deadline.'})
};
fetch('https://api.zivio.net/api/v4/bids/{id}/eliminate', 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/bids/{id}/eliminate",
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([
'reason' => 'The proposal does not meet the mandatory delivery deadline.'
]),
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/bids/{id}/eliminate"
payload := strings.NewReader("{\n \"reason\": \"The proposal does not meet the mandatory delivery deadline.\"\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/bids/{id}/eliminate")
.header("Authorization", "Bearer <token>")
.header("zivio-tenant-id", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"reason\": \"The proposal does not meet the mandatory delivery deadline.\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.zivio.net/api/v4/bids/{id}/eliminate")
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 \"reason\": \"The proposal does not meet the mandatory delivery deadline.\"\n}"
response = http.request(request)
puts response.read_body{
"bid_id": 9,
"eliminated": true,
"shortlisted": false,
"changed": true,
"message": "Proposal 9 eliminated"
}{
"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": "bids:write",
"provided_scopes": [
"welcome:read"
]
}{
"error": "not_eliminatable",
"message": "Proposal 9 has been awarded and cannot be eliminated"
}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
Bid ID
Body
Why the proposal was eliminated. Recorded on the audit trail; not sent to the supplier.
"The proposal does not meet the mandatory delivery deadline."
Response
The proposal's disposition after the call
The response is of type object.

