# File generated from our OpenAPI spec
# frozen_string_literal: true

# typed: true
module Stripe
  module V2
    module Core
      # Events are generated to keep you informed of activity in your business account. APIs in the /v2 namespace generate [thin events](https://docs.stripe.com/event-destinations#benefits-of-thin-events) which have small, unversioned payloads that include a reference to the ID of the object that has changed. The Events v2 API returns these new thin events. [Retrieve the event object](https://docs.stripe.com/event-destinations#fetch-data) for additional data about the event. Use the related object ID in the event payload to [fetch the API resource](https://docs.stripe.com/event-destinations#retrieve-the-object-associated-with-thin-events) of the object associated with the event. Comparatively, events generated by most API v1 include a versioned snapshot of an API object in their payload.
      class Event < APIResource
        class Reason < ::Stripe::StripeObject
          class Request < ::Stripe::StripeObject
            # ID of the API request that caused the event.
            sig { returns(String) }
            def id; end
            # The idempotency key transmitted during the request.
            sig { returns(String) }
            def idempotency_key; end
            def self.inner_class_types
              @inner_class_types = {}
            end
            def self.field_remappings
              @field_remappings = {}
            end
          end
          # Event reason type.
          sig { returns(String) }
          def type; end
          # Information on the API request that instigated the event.
          sig { returns(T.nilable(Request)) }
          def request; end
          def self.inner_class_types
            @inner_class_types = {request: Request}
          end
          def self.field_remappings
            @field_remappings = {}
          end
        end
        # Before and after changes for the primary related object.
        sig { returns(T.nilable(T::Hash[String, T.untyped])) }
        def changes; end
        # Authentication context needed to fetch the event or related object.
        sig { returns(T.nilable(String)) }
        def context; end
        # Time at which the object was created.
        sig { returns(String) }
        def created; end
        # Unique identifier for the event.
        sig { returns(String) }
        def id; end
        # Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode.
        sig { returns(T::Boolean) }
        def livemode; end
        # String representing the object's type. Objects of the same type share the same value of the object field.
        sig { returns(String) }
        def object; end
        # Reason for the event.
        sig { returns(T.nilable(Reason)) }
        def reason; end
        # The type of the event.
        sig { returns(String) }
        def type; end
      end
    end
  end
end