本文へスキップ

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_quotes scope.

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:

  1. Take the id of the last event you processed successfully (the webhook-id of its delivery).
  2. Page through GET /v1/events?starting_after=<that id> until has_more is false.
  3. Process each event, skipping any id you've already handled.

Because event ids and webhook ids are the same, one de-duplication table covers both paths.

解決しませんか?サポートチームがお手伝いします。

サイトの利用状況を把握するため、分析用Cookieを設定したいと考えています。必須ではありません。拒否してもサイトの動作は変わらず、選択はいつでも変更できます。変更はこちらから: プライバシーページ.