curl --request POST \
--url https://api.example.com/v0/subscriptions/{subscription_id}/versions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"idempotency_key": "<string>",
"saved_query_version_id": "<string>",
"evaluator": {
"plugin_id": "<string>",
"version": "<string>",
"configuration": {}
},
"destination_id": "<string>"
}
'import requests
url = "https://api.example.com/v0/subscriptions/{subscription_id}/versions"
payload = {
"idempotency_key": "<string>",
"saved_query_version_id": "<string>",
"evaluator": {
"plugin_id": "<string>",
"version": "<string>",
"configuration": {}
},
"destination_id": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
idempotency_key: '<string>',
saved_query_version_id: '<string>',
evaluator: {plugin_id: '<string>', version: '<string>', configuration: {}},
destination_id: '<string>'
})
};
fetch('https://api.example.com/v0/subscriptions/{subscription_id}/versions', 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/v0/subscriptions/{subscription_id}/versions",
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([
'idempotency_key' => '<string>',
'saved_query_version_id' => '<string>',
'evaluator' => [
'plugin_id' => '<string>',
'version' => '<string>',
'configuration' => [
]
],
'destination_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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/v0/subscriptions/{subscription_id}/versions"
payload := strings.NewReader("{\n \"idempotency_key\": \"<string>\",\n \"saved_query_version_id\": \"<string>\",\n \"evaluator\": {\n \"plugin_id\": \"<string>\",\n \"version\": \"<string>\",\n \"configuration\": {}\n },\n \"destination_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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/v0/subscriptions/{subscription_id}/versions")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"idempotency_key\": \"<string>\",\n \"saved_query_version_id\": \"<string>\",\n \"evaluator\": {\n \"plugin_id\": \"<string>\",\n \"version\": \"<string>\",\n \"configuration\": {}\n },\n \"destination_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v0/subscriptions/{subscription_id}/versions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"idempotency_key\": \"<string>\",\n \"saved_query_version_id\": \"<string>\",\n \"evaluator\": {\n \"plugin_id\": \"<string>\",\n \"version\": \"<string>\",\n \"configuration\": {}\n },\n \"destination_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"subscription_id": "<string>",
"version_id": "<string>",
"saved_query_id": "<string>",
"saved_query_version_id": "<string>",
"evaluator": {
"plugin_id": "<string>",
"version": "<string>",
"configuration": {}
},
"destination_id": "<string>",
"owner": "<string>"
}{
"code": "<string>",
"message": "<string>",
"retryable": true,
"field": "<string>",
"resync_url": "<string>"
}Create subscription version
Edit a Subscription by committing a new immutable Version that becomes current. It pins the current Version of the Subscription’s own Saved Query (422 unknown_saved_query otherwise), an evaluator and a destination. It takes effect from its commit, recorded as its activation position with subscription.updated in every Corpus of the previous and new scope. Each later change is judged by the new Version, each earlier one by the Version effective before it. Nothing is backfilled and Matches keep the Version that produced them. Enabled state is unchanged. The evaluator, expression and configuration are checked as on creation (422 unsupported_evaluator, invalid_expression or invalid_subscription_configuration). Replay of the same key and request returns the same Version; a changed request is 409 idempotency_conflict. A deleted Subscription is 409 subscription_deleted.
curl --request POST \
--url https://api.example.com/v0/subscriptions/{subscription_id}/versions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"idempotency_key": "<string>",
"saved_query_version_id": "<string>",
"evaluator": {
"plugin_id": "<string>",
"version": "<string>",
"configuration": {}
},
"destination_id": "<string>"
}
'import requests
url = "https://api.example.com/v0/subscriptions/{subscription_id}/versions"
payload = {
"idempotency_key": "<string>",
"saved_query_version_id": "<string>",
"evaluator": {
"plugin_id": "<string>",
"version": "<string>",
"configuration": {}
},
"destination_id": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
idempotency_key: '<string>',
saved_query_version_id: '<string>',
evaluator: {plugin_id: '<string>', version: '<string>', configuration: {}},
destination_id: '<string>'
})
};
fetch('https://api.example.com/v0/subscriptions/{subscription_id}/versions', 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/v0/subscriptions/{subscription_id}/versions",
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([
'idempotency_key' => '<string>',
'saved_query_version_id' => '<string>',
'evaluator' => [
'plugin_id' => '<string>',
'version' => '<string>',
'configuration' => [
]
],
'destination_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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/v0/subscriptions/{subscription_id}/versions"
payload := strings.NewReader("{\n \"idempotency_key\": \"<string>\",\n \"saved_query_version_id\": \"<string>\",\n \"evaluator\": {\n \"plugin_id\": \"<string>\",\n \"version\": \"<string>\",\n \"configuration\": {}\n },\n \"destination_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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/v0/subscriptions/{subscription_id}/versions")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"idempotency_key\": \"<string>\",\n \"saved_query_version_id\": \"<string>\",\n \"evaluator\": {\n \"plugin_id\": \"<string>\",\n \"version\": \"<string>\",\n \"configuration\": {}\n },\n \"destination_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v0/subscriptions/{subscription_id}/versions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"idempotency_key\": \"<string>\",\n \"saved_query_version_id\": \"<string>\",\n \"evaluator\": {\n \"plugin_id\": \"<string>\",\n \"version\": \"<string>\",\n \"configuration\": {}\n },\n \"destination_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"subscription_id": "<string>",
"version_id": "<string>",
"saved_query_id": "<string>",
"saved_query_version_id": "<string>",
"evaluator": {
"plugin_id": "<string>",
"version": "<string>",
"configuration": {}
},
"destination_id": "<string>",
"owner": "<string>"
}{
"code": "<string>",
"message": "<string>",
"retryable": true,
"field": "<string>",
"resync_url": "<string>"
}Authorizations
API key, not necessarily a JWT. Server derives Organization, permitted actions and Corpus scope; every resource access is authorized.
Path Parameters
1Body
New immutable configuration of an existing Subscription. The Saved Query and name are unchanged (rename changes the name); saved_query_version_id is the current Version of that Saved Query.
11Pins an installed evaluator by plugin id and version, and its configuration. Evaluators are the subscription Contributions of the plugins pinned at startup (Plugin Protocol v0); test deployments may also install the deterministic fixture quivr.fixture@1. The configuration must satisfy the evaluator's declared configuration schema.
Show child attributes
Show child attributes
1Response
Successful response
Immutable Subscription configuration. Every Version keeps the Subscription's owner, absent for a global Subscription.
1111Pins an installed evaluator by plugin id and version, and its configuration. Evaluators are the subscription Contributions of the plugins pinned at startup (Plugin Protocol v0); test deployments may also install the deterministic fixture quivr.fixture@1. The configuration must satisfy the evaluator's declared configuration schema.
Show child attributes
Show child attributes
1Subscription Owner, an opaque end-user reference defined by the client application (for example user-123). Quivr stores, filters and echoes it without interpreting it. At most 128 characters without control characters; none is reserved for the listing filter (422 invalid_owner).
1 - 128