import { StripeResource } from '../../StripeResource.js';
import { PaymentMethod } from './../PaymentMethods.js';
import { MetadataParam, AddressParam, Metadata, Address } from '../../shared.js';
import { RequestOptions, Response } from '../../lib.js';
export declare class PaymentEvaluationResource extends StripeResource {
    /**
     * Request a Radar API fraud risk score from Stripe for a payment before sending it for external processor authorization.
     */
    create(params: Radar.PaymentEvaluationCreateParams, options?: RequestOptions): Promise<Response<PaymentEvaluation>>;
}
export interface PaymentEvaluation {
    /**
     * Unique identifier for the object.
     */
    id: string;
    /**
     * String representing the object's type. Objects of the same type share the same value.
     */
    object: 'radar.payment_evaluation';
    /**
     * Client device metadata attached to this payment evaluation.
     */
    client_device_metadata_details?: PaymentEvaluation.ClientDeviceMetadataDetails;
    /**
     * Time at which the object was created. Measured in seconds since the Unix epoch.
     */
    created_at: number;
    /**
     * Customer details attached to this payment evaluation.
     */
    customer_details?: PaymentEvaluation.CustomerDetails;
    /**
     * Event information associated with the payment evaluation, such as refunds, dispute, early fraud warnings, or user interventions.
     */
    events?: Array<PaymentEvaluation.Event>;
    /**
     * If the object exists in live mode, the value is `true`. If the object exists in test mode, the value is `false`.
     */
    livemode: boolean;
    /**
     * Set of [key-value pairs](https://docs.stripe.com/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
     */
    metadata: Metadata | null;
    /**
     * Indicates the final outcome for the payment evaluation.
     */
    outcome?: PaymentEvaluation.Outcome | null;
    /**
     * Payment details attached to this payment evaluation.
     */
    payment_details?: PaymentEvaluation.PaymentDetails;
    /**
     * Recommended action based on the score of the `fraudulent_payment` signal. Possible values are `block`, `continue` and `request_three_d_secure`.
     */
    recommended_action: PaymentEvaluation.RecommendedAction;
    /**
     * Collection of signals for this payment evaluation.
     */
    signals: PaymentEvaluation.Signals;
}
export declare namespace PaymentEvaluation {
    interface ClientDeviceMetadataDetails {
        /**
         * ID for the Radar Session associated with the payment evaluation. A [Radar Session](https://docs.stripe.com/radar/radar-session) is a snapshot of the browser metadata and device details that help Radar make more accurate predictions on your payments.
         */
        radar_session: string;
    }
    interface CustomerDetails {
        /**
         * The ID of the customer associated with the payment evaluation.
         */
        customer: string | null;
        /**
         * The ID of the Account representing the customer associated with the payment evaluation.
         */
        customer_account: string | null;
        /**
         * The customer's email address.
         */
        email: string | null;
        /**
         * The customer's full name or business name.
         */
        name: string | null;
        /**
         * The customer's phone number.
         */
        phone: string | null;
    }
    interface Event {
        /**
         * Dispute opened event details attached to this payment evaluation.
         */
        dispute_opened?: Event.DisputeOpened;
        /**
         * Early Fraud Warning Received event details attached to this payment evaluation.
         */
        early_fraud_warning_received?: Event.EarlyFraudWarningReceived;
        /**
         * Timestamp when the event occurred.
         */
        occurred_at: number;
        /**
         * Refunded Event details attached to this payment evaluation.
         */
        refunded?: Event.Refunded;
        /**
         * Indicates the type of event attached to the payment evaluation.
         */
        type: Event.Type;
        /**
         * User intervention raised event details attached to this payment evaluation
         */
        user_intervention_raised?: Event.UserInterventionRaised;
        /**
         * User Intervention Resolved Event details attached to this payment evaluation
         */
        user_intervention_resolved?: Event.UserInterventionResolved;
    }
    interface Outcome {
        /**
         * Details of a merchant_blocked outcome attached to this payment evaluation.
         */
        merchant_blocked?: Outcome.MerchantBlocked;
        /**
         * The PaymentIntent ID associated with the payment evaluation.
         */
        payment_intent_id?: string;
        /**
         * Details of an rejected outcome attached to this payment evaluation.
         */
        rejected?: Outcome.Rejected;
        /**
         * Details of a succeeded outcome attached to this payment evaluation.
         */
        succeeded?: Outcome.Succeeded;
        /**
         * Indicates the outcome of the payment evaluation.
         */
        type: Outcome.Type;
    }
    interface PaymentDetails {
        /**
         * Amount intended to be collected by this payment. A positive integer representing how much to charge in the [smallest currency unit](https://docs.stripe.com/currencies#zero-decimal) (e.g., 100 cents to charge $1.00 or 100 to charge ¥100, a zero-decimal currency). The minimum amount is $0.50 US or [equivalent in charge currency](https://docs.stripe.com/currencies#minimum-and-maximum-charge-amounts). The amount value supports up to eight digits (e.g., a value of 99999999 for a USD charge of $999,999.99).
         */
        amount: number;
        /**
         * Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies).
         */
        currency: string;
        /**
         * An arbitrary string attached to the object. Often useful for displaying to users.
         */
        description: string | null;
        /**
         * Details about the payment's customer presence and type.
         */
        money_movement_details: PaymentDetails.MoneyMovementDetails | null;
        /**
         * Details about the payment method used for the payment.
         */
        payment_method_details: PaymentDetails.PaymentMethodDetails | null;
        /**
         * Shipping details for the payment evaluation.
         */
        shipping_details: PaymentDetails.ShippingDetails | null;
        /**
         * Payment statement descriptor.
         */
        statement_descriptor: string | null;
    }
    type RecommendedAction = 'block' | 'continue';
    interface Signals {
        /**
         * A payment evaluation signal with evaluated_at, risk_level, and score fields.
         */
        fraudulent_payment: Signals.FraudulentPayment;
    }
    namespace Event {
        interface DisputeOpened {
            /**
             * Amount to dispute for this payment. A positive integer representing how much to charge in [the smallest currency unit](https://docs.stripe.com/currencies#zero-decimal) (for example, 100 cents to charge 1.00 USD or 100 to charge 100 Yen, a zero-decimal currency).
             */
            amount: number;
            /**
             * Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies).
             */
            currency: string;
            /**
             * Reason given by cardholder for dispute.
             */
            reason: DisputeOpened.Reason;
        }
        interface EarlyFraudWarningReceived {
            /**
             * The type of fraud labeled by the issuer.
             */
            fraud_type: EarlyFraudWarningReceived.FraudType;
        }
        interface Refunded {
            /**
             * Amount refunded for this payment. A positive integer representing how much to charge in [the smallest currency unit](https://docs.stripe.com/currencies#zero-decimal) (for example, 100 cents to charge 1.00 USD or 100 to charge 100 Yen, a zero-decimal currency).
             */
            amount: number;
            /**
             * Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies).
             */
            currency: string;
            /**
             * Indicates the reason for the refund.
             */
            reason: Refunded.Reason;
        }
        type Type = 'dispute_opened' | 'early_fraud_warning_received' | 'refunded' | 'user_intervention_raised' | 'user_intervention_resolved';
        interface UserInterventionRaised {
            /**
             * User intervention raised custom event details attached to this payment evaluation
             */
            custom?: UserInterventionRaised.Custom;
            /**
             * Unique identifier for the user intervention event.
             */
            key: string;
            /**
             * Type of user intervention raised.
             */
            type: UserInterventionRaised.Type;
        }
        interface UserInterventionResolved {
            /**
             * Unique ID of this intervention. Use this to provide the result.
             */
            key: string;
            /**
             * Result of the intervention if it has been completed.
             */
            outcome: UserInterventionResolved.Outcome | null;
        }
        namespace DisputeOpened {
            type Reason = 'account_not_available' | 'credit_not_processed' | 'customer_initiated' | 'duplicate' | 'fraudulent' | 'general' | 'noncompliant' | 'product_not_received' | 'product_unacceptable' | 'subscription_canceled' | 'unrecognized';
        }
        namespace EarlyFraudWarningReceived {
            type FraudType = 'made_with_lost_card' | 'made_with_stolen_card' | 'other' | 'unauthorized_use_of_card';
        }
        namespace Refunded {
            type Reason = 'duplicate' | 'fraudulent' | 'other' | 'requested_by_customer';
        }
        namespace UserInterventionRaised {
            interface Custom {
                /**
                 * Custom type of user intervention raised. The string must use a snake case description for the type of intervention performed.
                 */
                type: string;
            }
            type Type = '3ds' | 'captcha' | 'custom';
        }
        namespace UserInterventionResolved {
            type Outcome = 'abandoned' | 'failed' | 'passed';
        }
    }
    namespace Outcome {
        interface MerchantBlocked {
            /**
             * The reason the payment was blocked by the merchant.
             */
            reason: MerchantBlocked.Reason;
        }
        interface Rejected {
            /**
             * Details of an rejected card outcome attached to this payment evaluation.
             */
            card?: Rejected.Card;
        }
        interface Succeeded {
            /**
             * Details of an succeeded card outcome attached to this payment evaluation.
             */
            card?: Succeeded.Card;
        }
        type Type = 'failed' | 'merchant_blocked' | 'rejected' | 'succeeded';
        namespace MerchantBlocked {
            type Reason = 'authentication_required' | 'blocked_for_fraud' | 'invalid_payment' | 'other';
        }
        namespace Rejected {
            interface Card {
                /**
                 * Result of the address line 1 check.
                 */
                address_line1_check: Card.AddressLine1Check;
                /**
                 * Indicates whether the cardholder provided a postal code and if it matched the cardholder's billing address.
                 */
                address_postal_code_check: Card.AddressPostalCodeCheck;
                /**
                 * Result of the CVC check.
                 */
                cvc_check: Card.CvcCheck;
                /**
                 * Card issuer's reason for the network decline.
                 */
                reason: Card.Reason;
            }
            namespace Card {
                type AddressLine1Check = 'fail' | 'pass' | 'unavailable' | 'unchecked';
                type AddressPostalCodeCheck = 'fail' | 'pass' | 'unavailable' | 'unchecked';
                type CvcCheck = 'fail' | 'pass' | 'unavailable' | 'unchecked';
                type Reason = 'authentication_failed' | 'do_not_honor' | 'expired' | 'incorrect_cvc' | 'incorrect_number' | 'incorrect_postal_code' | 'insufficient_funds' | 'invalid_account' | 'lost_card' | 'other' | 'processing_error' | 'reported_stolen' | 'try_again_later';
            }
        }
        namespace Succeeded {
            interface Card {
                /**
                 * Result of the address line 1 check.
                 */
                address_line1_check: Card.AddressLine1Check;
                /**
                 * Indicates whether the cardholder provided a postal code and if it matched the cardholder's billing address.
                 */
                address_postal_code_check: Card.AddressPostalCodeCheck;
                /**
                 * Result of the CVC check.
                 */
                cvc_check: Card.CvcCheck;
            }
            namespace Card {
                type AddressLine1Check = 'fail' | 'pass' | 'unavailable' | 'unchecked';
                type AddressPostalCodeCheck = 'fail' | 'pass' | 'unavailable' | 'unchecked';
                type CvcCheck = 'fail' | 'pass' | 'unavailable' | 'unchecked';
            }
        }
    }
    namespace PaymentDetails {
        interface MoneyMovementDetails {
            /**
             * Describes card money movement details for the payment evaluation.
             */
            card: MoneyMovementDetails.Card | null;
            /**
             * Describes the type of money movement. Currently only `card` is supported.
             */
            money_movement_type: 'card';
        }
        interface PaymentMethodDetails {
            /**
             * Billing information associated with the payment evaluation.
             */
            billing_details: PaymentMethodDetails.BillingDetails | null;
            /**
             * The payment method used in this payment evaluation.
             */
            payment_method: string | PaymentMethod;
        }
        interface ShippingDetails {
            /**
             * Address data.
             */
            address: Address;
            /**
             * Shipping name.
             */
            name: string | null;
            /**
             * Shipping phone number.
             */
            phone: string | null;
        }
        namespace MoneyMovementDetails {
            interface Card {
                /**
                 * Describes the presence of the customer during the payment.
                 */
                customer_presence: Card.CustomerPresence | null;
                /**
                 * Describes the type of payment.
                 */
                payment_type: Card.PaymentType | null;
            }
            namespace Card {
                type CustomerPresence = 'off_session' | 'on_session';
                type PaymentType = 'one_off' | 'recurring' | 'setup_one_off' | 'setup_recurring';
            }
        }
        namespace PaymentMethodDetails {
            interface BillingDetails {
                /**
                 * Address data.
                 */
                address: Address;
                /**
                 * Email address.
                 */
                email: string | null;
                /**
                 * Full name.
                 */
                name: string | null;
                /**
                 * Billing phone number (including extension).
                 */
                phone: string | null;
            }
        }
    }
    namespace Signals {
        interface FraudulentPayment {
            /**
             * The time when this signal was evaluated.
             */
            evaluated_at: number;
            /**
             * Risk level of this signal, based on the score.
             */
            risk_level: FraudulentPayment.RiskLevel;
            /**
             * Score for this signal. Possible values for evaluated payments are between 0 and 100. The value is returned with two decimal places and higher scores indicate a higher likelihood of the signal being true. A score of -1 is returned when a model evaluation was not performed, such as requests from incomplete integrations.
             */
            score: number;
        }
        namespace FraudulentPayment {
            type RiskLevel = 'elevated' | 'highest' | 'low' | 'normal' | 'not_assessed' | 'unknown';
        }
    }
}
export declare namespace Radar {
    interface PaymentEvaluationCreateParams {
        /**
         * Details about the customer associated with the payment evaluation.
         */
        customer_details: PaymentEvaluationCreateParams.CustomerDetails;
        /**
         * Details about the payment.
         */
        payment_details: PaymentEvaluationCreateParams.PaymentDetails;
        /**
         * Details about the Client Device Metadata to associate with the payment evaluation.
         */
        client_device_metadata_details?: PaymentEvaluationCreateParams.ClientDeviceMetadataDetails;
        /**
         * Specifies which fields in the response should be expanded.
         */
        expand?: Array<string>;
        /**
         * Set of [key-value pairs](https://docs.stripe.com/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`.
         */
        metadata?: MetadataParam;
    }
    namespace PaymentEvaluationCreateParams {
        interface CustomerDetails {
            /**
             * The ID of the customer associated with the payment evaluation.
             */
            customer?: string;
            /**
             * The ID of the Account representing the customer associated with the payment evaluation.
             */
            customer_account?: string;
            /**
             * The customer's email address.
             */
            email?: string;
            /**
             * The customer's full name or business name.
             */
            name?: string;
            /**
             * The customer's phone number.
             */
            phone?: string;
        }
        interface PaymentDetails {
            /**
             * The intended amount to collect with this payment. A positive integer representing how much to charge in the [smallest currency unit](https://docs.stripe.com/currencies#zero-decimal) (for example, 100 cents to charge 1.00 USD or 100 to charge 100 Yen, a zero-decimal currency).
             */
            amount: number;
            /**
             * Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. Must be a [supported currency](https://stripe.com/docs/currencies).
             */
            currency: string;
            /**
             * An arbitrary string attached to the object. Often useful for displaying to users.
             */
            description?: string;
            /**
             * Details about the payment's customer presence and type.
             */
            money_movement_details?: PaymentDetails.MoneyMovementDetails;
            /**
             * Details about the payment method to use for the payment.
             */
            payment_method_details: PaymentDetails.PaymentMethodDetails;
            /**
             * Shipping details for the payment evaluation.
             */
            shipping_details?: PaymentDetails.ShippingDetails;
            /**
             * Payment statement descriptor.
             */
            statement_descriptor?: string;
        }
        interface ClientDeviceMetadataDetails {
            /**
             * ID for the Radar Session to associate with the payment evaluation. A [Radar Session](https://docs.stripe.com/radar/radar-session) is a snapshot of the browser metadata and device details that help Radar make more accurate predictions on your payments.
             */
            radar_session: string;
        }
        namespace PaymentDetails {
            interface MoneyMovementDetails {
                /**
                 * Describes card money movement details for the payment evaluation.
                 */
                card?: MoneyMovementDetails.Card;
                /**
                 * Describes the type of money movement. Currently only `card` is supported.
                 */
                money_movement_type: 'card';
            }
            interface PaymentMethodDetails {
                /**
                 * Billing information associated with the payment evaluation.
                 */
                billing_details?: PaymentMethodDetails.BillingDetails;
                /**
                 * ID of the payment method used in this payment evaluation.
                 */
                payment_method: string;
            }
            interface ShippingDetails {
                /**
                 * Shipping address.
                 */
                address?: AddressParam;
                /**
                 * Shipping name.
                 */
                name?: string;
                /**
                 * Shipping phone number.
                 */
                phone?: string;
            }
            namespace MoneyMovementDetails {
                interface Card {
                    /**
                     * Describes the presence of the customer during the payment.
                     */
                    customer_presence?: Card.CustomerPresence;
                    /**
                     * Describes the type of payment.
                     */
                    payment_type?: Card.PaymentType;
                }
                namespace Card {
                    type CustomerPresence = 'off_session' | 'on_session';
                    type PaymentType = 'one_off' | 'recurring' | 'setup_one_off' | 'setup_recurring';
                }
            }
            namespace PaymentMethodDetails {
                interface BillingDetails {
                    /**
                     * Billing address.
                     */
                    address?: AddressParam;
                    /**
                     * Email address.
                     */
                    email?: string;
                    /**
                     * Full name.
                     */
                    name?: string;
                    /**
                     * Billing phone number (including extension).
                     */
                    phone?: string;
                }
            }
        }
    }
}
