Events feed
Read time: 4 minutes. Who it's for: Developers who want an ordered history of quote activity, or a way to catch up on webhooks their endpoint missed.
⚠️ Requires the Enterprise plan and the
read_quotesscope.
What is an event?
Every time something public happens to a quote - a request arrives, a proposal is sent, the buyer accepts - QuotWay records an event. The same event is what a webhook delivers. The feed and webhooks use one catalog of 25 event types (see the event catalog).
{
"object": "event",
"id": "clz9m1a2b0004qw7hx8y9z0ab",
"type": "quote.partially_accepted",
"created_at": "2026-09-29T14:12:00.000Z",
"sequence": "48213",
"quote_id": "clz8k2x9f0001qw7h3m4n5p6r",
"actor": "buyer",
"data": {
"previous_status": "proposal_sent",
"new_status": "partially_accepted",
"version_number": 2
}
}
| Field | Description |
|---|---|
id |
The event's id. It equals the webhook-id header of the webhook delivery for the same event. |
type |
The event type, e.g. quote.accepted. |
created_at |
When it happened. |
sequence |
A monotonically increasing ordering key, as a string (it can exceed the largest integer JavaScript represents exactly). Compare as a big integer. |
quote_id |
The quote it's about. |
actor |
Who caused it: buyer, merchant or system (automation, scheduled jobs, API and Flow actions). |
data |
Event-specific detail - see Event data. Never contains buyer personal data. |
Events carry a quote id, not the quote. Fetch GET /v1/quotes/{id} when you need its current
state.
List events - GET /v1/events
Returns every published event for the store, oldest first.
curl -G https://api.quotway.com/v1/events \
-H "Authorization: Bearer $QUOTWAY_API_KEY" \
--data-urlencode "type=quote.accepted,quote.partially_accepted,quote.converted" \
--data-urlencode "created[gte]=2026-09-01T00:00:00Z" \
--data-urlencode "limit=50"
| Parameter | Description |
|---|---|
limit |
1–50, default 20. |
starting_after |
An event id; returns the events after it. Use the previous page's next_cursor. |
type |
Comma-separated event types. An unknown type is 400 invalid_request. |
created[gte], created[lte] |
ISO-8601 bounds on created_at. |
next_cursor is the id of the page's last event; pass it as starting_after.
One quote's events - GET /v1/quotes/{id}/events
The same, filtered to one quote - handy for a timeline in a CRM record. Takes the same parameters.
Returns 404 not_found if the quote isn't in the store.
How long are events kept?
30 days. After that they're deleted, and a starting_after that points at a deleted event
returns 400 invalid_request. For a longer history, store events as you receive them.
Recovering missed webhooks
The feed is the safety net under webhooks. If your endpoint was down, a delivery gave up, or you disabled the endpoint for a while:
- Take the
idof the last event you processed successfully (thewebhook-idof its delivery). - Page through
GET /v1/events?starting_after=<that id>untilhas_moreisfalse. - Process each event, skipping any
idyou've already handled.
Because event ids and webhook ids are the same, one de-duplication table covers both paths.
Related
- Webhooks - the event catalog and payloads.
- Pagination
- The quote object
Besoin d'un coup de main ? L'équipe est là pour vous aider.