cURL
curl --request POST \
--url https://api.vooma.ai/v0/quote-events/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"pagination": {
"limit": 123,
"after": "<string>",
"before": "<string>",
"last": 123,
"first": 123
},
"updatedAtFilter": {
"end": "2023-11-07T05:31:56Z",
"start": "2023-11-07T05:31:56Z"
},
"dateFilter": {
"end": "2023-11-07T05:31:56Z",
"start": "2023-11-07T05:31:56Z"
},
"types": [],
"quoteIds": [
"<string>"
]
}
'import requests
url = "https://api.vooma.ai/v0/quote-events/search"
payload = {
"pagination": {
"limit": 123,
"after": "<string>",
"before": "<string>",
"last": 123,
"first": 123
},
"updatedAtFilter": {
"end": "2023-11-07T05:31:56Z",
"start": "2023-11-07T05:31:56Z"
},
"dateFilter": {
"end": "2023-11-07T05:31:56Z",
"start": "2023-11-07T05:31:56Z"
},
"types": [],
"quoteIds": ["<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({
pagination: {limit: 123, after: '<string>', before: '<string>', last: 123, first: 123},
updatedAtFilter: {end: '2023-11-07T05:31:56Z', start: '2023-11-07T05:31:56Z'},
dateFilter: {end: '2023-11-07T05:31:56Z', start: '2023-11-07T05:31:56Z'},
types: [],
quoteIds: ['<string>']
})
};
fetch('https://api.vooma.ai/v0/quote-events/search', 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.vooma.ai/v0/quote-events/search",
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([
'pagination' => [
'limit' => 123,
'after' => '<string>',
'before' => '<string>',
'last' => 123,
'first' => 123
],
'updatedAtFilter' => [
'end' => '2023-11-07T05:31:56Z',
'start' => '2023-11-07T05:31:56Z'
],
'dateFilter' => [
'end' => '2023-11-07T05:31:56Z',
'start' => '2023-11-07T05:31:56Z'
],
'types' => [
],
'quoteIds' => [
'<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.vooma.ai/v0/quote-events/search"
payload := strings.NewReader("{\n \"pagination\": {\n \"limit\": 123,\n \"after\": \"<string>\",\n \"before\": \"<string>\",\n \"last\": 123,\n \"first\": 123\n },\n \"updatedAtFilter\": {\n \"end\": \"2023-11-07T05:31:56Z\",\n \"start\": \"2023-11-07T05:31:56Z\"\n },\n \"dateFilter\": {\n \"end\": \"2023-11-07T05:31:56Z\",\n \"start\": \"2023-11-07T05:31:56Z\"\n },\n \"types\": [],\n \"quoteIds\": [\n \"<string>\"\n ]\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.vooma.ai/v0/quote-events/search")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"pagination\": {\n \"limit\": 123,\n \"after\": \"<string>\",\n \"before\": \"<string>\",\n \"last\": 123,\n \"first\": 123\n },\n \"updatedAtFilter\": {\n \"end\": \"2023-11-07T05:31:56Z\",\n \"start\": \"2023-11-07T05:31:56Z\"\n },\n \"dateFilter\": {\n \"end\": \"2023-11-07T05:31:56Z\",\n \"start\": \"2023-11-07T05:31:56Z\"\n },\n \"types\": [],\n \"quoteIds\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.vooma.ai/v0/quote-events/search")
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 \"pagination\": {\n \"limit\": 123,\n \"after\": \"<string>\",\n \"before\": \"<string>\",\n \"last\": 123,\n \"first\": 123\n },\n \"updatedAtFilter\": {\n \"end\": \"2023-11-07T05:31:56Z\",\n \"start\": \"2023-11-07T05:31:56Z\"\n },\n \"dateFilter\": {\n \"end\": \"2023-11-07T05:31:56Z\",\n \"start\": \"2023-11-07T05:31:56Z\"\n },\n \"types\": [],\n \"quoteIds\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"quoteEvents": [
{
"actor": {
"user": {
"id": "<string>",
"externalIds": [
{
"type": "CUSTOM",
"value": "<string>"
}
]
},
"type": "USER"
},
"updatedAt": "2023-11-07T05:31:56Z",
"createdAt": "2023-11-07T05:31:56Z",
"quoteId": "<string>",
"id": "<string>",
"from": "NEW",
"to": "NEW",
"type": "STATUS_CHANGED"
}
],
"pageInfo": {
"endCursor": "<string>",
"startCursor": "<string>",
"hasPreviousPage": true,
"hasNextPage": true
},
"totalCount": 123,
"count": 123
}Quote Events
Search Quote Events
POST
/
quote-events
/
search
cURL
curl --request POST \
--url https://api.vooma.ai/v0/quote-events/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"pagination": {
"limit": 123,
"after": "<string>",
"before": "<string>",
"last": 123,
"first": 123
},
"updatedAtFilter": {
"end": "2023-11-07T05:31:56Z",
"start": "2023-11-07T05:31:56Z"
},
"dateFilter": {
"end": "2023-11-07T05:31:56Z",
"start": "2023-11-07T05:31:56Z"
},
"types": [],
"quoteIds": [
"<string>"
]
}
'import requests
url = "https://api.vooma.ai/v0/quote-events/search"
payload = {
"pagination": {
"limit": 123,
"after": "<string>",
"before": "<string>",
"last": 123,
"first": 123
},
"updatedAtFilter": {
"end": "2023-11-07T05:31:56Z",
"start": "2023-11-07T05:31:56Z"
},
"dateFilter": {
"end": "2023-11-07T05:31:56Z",
"start": "2023-11-07T05:31:56Z"
},
"types": [],
"quoteIds": ["<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({
pagination: {limit: 123, after: '<string>', before: '<string>', last: 123, first: 123},
updatedAtFilter: {end: '2023-11-07T05:31:56Z', start: '2023-11-07T05:31:56Z'},
dateFilter: {end: '2023-11-07T05:31:56Z', start: '2023-11-07T05:31:56Z'},
types: [],
quoteIds: ['<string>']
})
};
fetch('https://api.vooma.ai/v0/quote-events/search', 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.vooma.ai/v0/quote-events/search",
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([
'pagination' => [
'limit' => 123,
'after' => '<string>',
'before' => '<string>',
'last' => 123,
'first' => 123
],
'updatedAtFilter' => [
'end' => '2023-11-07T05:31:56Z',
'start' => '2023-11-07T05:31:56Z'
],
'dateFilter' => [
'end' => '2023-11-07T05:31:56Z',
'start' => '2023-11-07T05:31:56Z'
],
'types' => [
],
'quoteIds' => [
'<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.vooma.ai/v0/quote-events/search"
payload := strings.NewReader("{\n \"pagination\": {\n \"limit\": 123,\n \"after\": \"<string>\",\n \"before\": \"<string>\",\n \"last\": 123,\n \"first\": 123\n },\n \"updatedAtFilter\": {\n \"end\": \"2023-11-07T05:31:56Z\",\n \"start\": \"2023-11-07T05:31:56Z\"\n },\n \"dateFilter\": {\n \"end\": \"2023-11-07T05:31:56Z\",\n \"start\": \"2023-11-07T05:31:56Z\"\n },\n \"types\": [],\n \"quoteIds\": [\n \"<string>\"\n ]\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.vooma.ai/v0/quote-events/search")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"pagination\": {\n \"limit\": 123,\n \"after\": \"<string>\",\n \"before\": \"<string>\",\n \"last\": 123,\n \"first\": 123\n },\n \"updatedAtFilter\": {\n \"end\": \"2023-11-07T05:31:56Z\",\n \"start\": \"2023-11-07T05:31:56Z\"\n },\n \"dateFilter\": {\n \"end\": \"2023-11-07T05:31:56Z\",\n \"start\": \"2023-11-07T05:31:56Z\"\n },\n \"types\": [],\n \"quoteIds\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.vooma.ai/v0/quote-events/search")
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 \"pagination\": {\n \"limit\": 123,\n \"after\": \"<string>\",\n \"before\": \"<string>\",\n \"last\": 123,\n \"first\": 123\n },\n \"updatedAtFilter\": {\n \"end\": \"2023-11-07T05:31:56Z\",\n \"start\": \"2023-11-07T05:31:56Z\"\n },\n \"dateFilter\": {\n \"end\": \"2023-11-07T05:31:56Z\",\n \"start\": \"2023-11-07T05:31:56Z\"\n },\n \"types\": [],\n \"quoteIds\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"quoteEvents": [
{
"actor": {
"user": {
"id": "<string>",
"externalIds": [
{
"type": "CUSTOM",
"value": "<string>"
}
]
},
"type": "USER"
},
"updatedAt": "2023-11-07T05:31:56Z",
"createdAt": "2023-11-07T05:31:56Z",
"quoteId": "<string>",
"id": "<string>",
"from": "NEW",
"to": "NEW",
"type": "STATUS_CHANGED"
}
],
"pageInfo": {
"endCursor": "<string>",
"startCursor": "<string>",
"hasPreviousPage": true,
"hasNextPage": true
},
"totalCount": 123,
"count": 123
}Returns a read-only, incremental feed of the changes Vooma recorded against
your quotes: status transitions, rate changes, and auto-reply outcomes.
Events are returned oldest first (
createdAt ascending), so you can sync
incrementally by paging forward with pagination.after and persisting the last
endCursor you processed. To pick up changes since your last run, filter on
dateFilter (the event’s createdAt) or updatedAtFilter (the event’s
updatedAt).
Event coverage
Only the event types listed inQuoteEventType are published. Internal Vooma
events — AI pipeline steps, rating lifecycle, extracted-data edits, owner and
customer reassignments, and simulation runs — are never returned.
Event history is best effort. Events recorded before this endpoint existed may
have incomplete details; for example from on a status change is always null
because Vooma does not store the prior status.
Quote visibility
Quote events are scoped to the organization behind your API key and cover every quote in that organization that has not been deleted.POST /quotes/search
applies additional relevance filters, so a quoteId returned here may not
appear in quote search results.Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
application/json
Show child attributes
Show child attributes
Filters on the event's updatedAt timestamp.
Show child attributes
Show child attributes
Filters on the event's createdAt timestamp.
Show child attributes
Show child attributes
Stable, public subset of the events Vooma records against a quote. Internal event types are only exposed once they are explicitly mapped onto one of these values.
Available options:
STATUS_CHANGED, RATE_CHANGED, AUTO_REPLY_SENT, AUTO_REPLY_SEND_FAILED, AUTO_REPLY_DRAFTED, AUTO_REPLY_DRAFT_FAILED 
