{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://fauna.com/schemas/fauna/event.json",
  "title": "Fauna Event",
  "description": "Represents a change data capture event emitted by Fauna event sources. Events are generated when tracked changes occur in a database and are delivered via event streams (real-time) or event feeds (polling). Each event includes the change type, transaction timestamp, cursor for pagination and reconnection, and the associated document data.",
  "type": "object",
  "required": ["type", "txn_ts"],
  "properties": {
    "type": {
      "type": "string",
      "enum": ["add", "remove", "update", "status"],
      "description": "The type of change event. 'add' indicates a document was added to the tracked set, 'remove' indicates removal, 'update' indicates modification, and 'status' is a heartbeat or connection status event."
    },
    "txn_ts": {
      "type": "integer",
      "description": "Transaction timestamp in microseconds since the Unix epoch when the change occurred."
    },
    "cursor": {
      "type": "string",
      "description": "Cursor position for this event. Used for pagination in event feeds and for reconnection in event streams."
    },
    "data": {
      "type": "object",
      "additionalProperties": true,
      "description": "The document data associated with the event. Present for add, remove, and update events. The structure depends on the collection schema."
    },
    "stats": {
      "$ref": "#/$defs/EventStats"
    }
  },
  "$defs": {
    "EventStats": {
      "type": "object",
      "description": "Operational statistics for the event processing.",
      "properties": {
        "read_ops": {
          "type": "integer",
          "description": "Number of Transactional Read Operations consumed."
        },
        "storage_bytes_read": {
          "type": "integer",
          "description": "Number of bytes read from storage."
        },
        "compute_ops": {
          "type": "integer",
          "description": "Number of Transactional Compute Operations consumed."
        },
        "processing_time_ms": {
          "type": "integer",
          "description": "Processing time in milliseconds."
        },
        "rate_limits_hit": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "List of rate limits that were hit during event processing."
        }
      }
    },
    "EventFeedPage": {
      "type": "object",
      "description": "A page of events returned by the event feed endpoint.",
      "required": ["events", "has_next"],
      "properties": {
        "events": {
          "type": "array",
          "items": {
            "$ref": "#"
          },
          "description": "Array of change events for the current page."
        },
        "cursor": {
          "type": "string",
          "description": "Cursor to use for fetching the next page of events."
        },
        "has_next": {
          "type": "boolean",
          "description": "Indicates whether more pages of events are available."
        },
        "stats": {
          "$ref": "#/$defs/EventStats"
        }
      }
    }
  }
}