curl --request POST \
--url https://api.example.com/v0/subscriptions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"idempotency_key": "<string>",
"name": "<string>",
"saved_query_id": "<string>",
"saved_query_version_id": "<string>",
"evaluator": {
"plugin_id": "<string>",
"version": "<string>",
"configuration": {}
},
"destination_id": "<string>",
"owner": "<string>"
}
'import requests
url = "https://api.example.com/v0/subscriptions"
payload = {
"idempotency_key": "<string>",
"name": "<string>",
"saved_query_id": "<string>",
"saved_query_version_id": "<string>",
"evaluator": {
"plugin_id": "<string>",
"version": "<string>",
"configuration": {}
},
"destination_id": "<string>",
"owner": "<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>',
name: '<string>',
saved_query_id: '<string>',
saved_query_version_id: '<string>',
evaluator: {plugin_id: '<string>', version: '<string>', configuration: {}},
destination_id: '<string>',
owner: '<string>'
})
};
fetch('https://api.example.com/v0/subscriptions', 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",
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>',
'name' => '<string>',
'saved_query_id' => '<string>',
'saved_query_version_id' => '<string>',
'evaluator' => [
'plugin_id' => '<string>',
'version' => '<string>',
'configuration' => [
]
],
'destination_id' => '<string>',
'owner' => '<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"
payload := strings.NewReader("{\n \"idempotency_key\": \"<string>\",\n \"name\": \"<string>\",\n \"saved_query_id\": \"<string>\",\n \"saved_query_version_id\": \"<string>\",\n \"evaluator\": {\n \"plugin_id\": \"<string>\",\n \"version\": \"<string>\",\n \"configuration\": {}\n },\n \"destination_id\": \"<string>\",\n \"owner\": \"<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")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"idempotency_key\": \"<string>\",\n \"name\": \"<string>\",\n \"saved_query_id\": \"<string>\",\n \"saved_query_version_id\": \"<string>\",\n \"evaluator\": {\n \"plugin_id\": \"<string>\",\n \"version\": \"<string>\",\n \"configuration\": {}\n },\n \"destination_id\": \"<string>\",\n \"owner\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v0/subscriptions")
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 \"name\": \"<string>\",\n \"saved_query_id\": \"<string>\",\n \"saved_query_version_id\": \"<string>\",\n \"evaluator\": {\n \"plugin_id\": \"<string>\",\n \"version\": \"<string>\",\n \"configuration\": {}\n },\n \"destination_id\": \"<string>\",\n \"owner\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"subscription_id": "<string>",
"name": "<string>",
"enabled": true,
"deleted": true,
"current_version": {
"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>"
},
"owner": "<string>"
}{
"code": "<string>",
"message": "<string>",
"retryable": true,
"field": "<string>",
"resync_url": "<string>"
}Create subscription
Atomically create enabled Subscription/Version and activation boundary in commit-ordered journal. Evaluate future eligible transitions, not existing history. Replay same key/request returns same identity and does not reactivate a disabled Subscription. The evaluator must be installed (422 unsupported_evaluator); the pinned Saved Query Version expression and the evaluator configuration must satisfy the evaluator’s declared schemas (422 invalid_expression with field /saved_query_version_id, or invalid_subscription_configuration with field /evaluator/configuration/…; message names the first schema issue).
curl --request POST \
--url https://api.example.com/v0/subscriptions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"idempotency_key": "<string>",
"name": "<string>",
"saved_query_id": "<string>",
"saved_query_version_id": "<string>",
"evaluator": {
"plugin_id": "<string>",
"version": "<string>",
"configuration": {}
},
"destination_id": "<string>",
"owner": "<string>"
}
'import requests
url = "https://api.example.com/v0/subscriptions"
payload = {
"idempotency_key": "<string>",
"name": "<string>",
"saved_query_id": "<string>",
"saved_query_version_id": "<string>",
"evaluator": {
"plugin_id": "<string>",
"version": "<string>",
"configuration": {}
},
"destination_id": "<string>",
"owner": "<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>',
name: '<string>',
saved_query_id: '<string>',
saved_query_version_id: '<string>',
evaluator: {plugin_id: '<string>', version: '<string>', configuration: {}},
destination_id: '<string>',
owner: '<string>'
})
};
fetch('https://api.example.com/v0/subscriptions', 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",
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>',
'name' => '<string>',
'saved_query_id' => '<string>',
'saved_query_version_id' => '<string>',
'evaluator' => [
'plugin_id' => '<string>',
'version' => '<string>',
'configuration' => [
]
],
'destination_id' => '<string>',
'owner' => '<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"
payload := strings.NewReader("{\n \"idempotency_key\": \"<string>\",\n \"name\": \"<string>\",\n \"saved_query_id\": \"<string>\",\n \"saved_query_version_id\": \"<string>\",\n \"evaluator\": {\n \"plugin_id\": \"<string>\",\n \"version\": \"<string>\",\n \"configuration\": {}\n },\n \"destination_id\": \"<string>\",\n \"owner\": \"<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")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"idempotency_key\": \"<string>\",\n \"name\": \"<string>\",\n \"saved_query_id\": \"<string>\",\n \"saved_query_version_id\": \"<string>\",\n \"evaluator\": {\n \"plugin_id\": \"<string>\",\n \"version\": \"<string>\",\n \"configuration\": {}\n },\n \"destination_id\": \"<string>\",\n \"owner\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v0/subscriptions")
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 \"name\": \"<string>\",\n \"saved_query_id\": \"<string>\",\n \"saved_query_version_id\": \"<string>\",\n \"evaluator\": {\n \"plugin_id\": \"<string>\",\n \"version\": \"<string>\",\n \"configuration\": {}\n },\n \"destination_id\": \"<string>\",\n \"owner\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"subscription_id": "<string>",
"name": "<string>",
"enabled": true,
"deleted": true,
"current_version": {
"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>"
},
"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.
Body
Create enabled from-now Subscription. An optional owner makes it the Subscription of one end user of the client application; without one it is global to the Organization. The owner is fixed for the Subscription's life and part of the idempotent request. One deployment-configured destination per version; destination belongs to this Organization. URL and signing key are provisioned outside this API and not returned. No inline secret or dynamic destination registry in the tracer.
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 - 128Response
Successful response
Absent owner means a global, organization-wide Subscription.
11Logically deleted for good; a deleted Subscription is also disabled and stays readable with its Versions, Matches and Deliveries.
Immutable Subscription configuration. Every Version keeps the Subscription's owner, absent for a global Subscription.
Show child attributes
Show child attributes
Subscription 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