import { StripeResource } from '../StripeResource.js';
import { CreditNoteLineItem } from './CreditNoteLineItems.js';
import { Refund as _Refund } from './Refunds.js';
import { Customer, DeletedCustomer } from './Customers.js';
import { CustomerBalanceTransaction } from './CustomerBalanceTransactions.js';
import { Invoice } from './Invoices.js';
import { Discount, DeletedDiscount } from './Discounts.js';
import { ShippingRate } from './ShippingRates.js';
import { TaxRate } from './TaxRates.js';
import * as Billing from './Billing/index.js';
import { MetadataParam, OtherString, Emptyable, Decimal, PaginationParams, RangeQueryParam, Metadata } from '../shared.js';
import { RequestOptions, ApiListPromise, Response, ApiList } from '../lib.js';
export declare class CreditNoteResource extends StripeResource {
    /**
     * Returns a list of credit notes.
     */
    list(params?: CreditNoteListParams, options?: RequestOptions): ApiListPromise<CreditNote>;
    /**
     * Issue a credit note to adjust the amount of a finalized invoice. A credit note will first reduce the invoice's amount_remaining (and amount_due), but not below zero.
     * This amount is indicated by the credit note's pre_payment_amount. The excess amount is indicated by post_payment_amount, and it can result in any combination of the following:
     *
     *
     * Refunds: create a new refund (using refund_amount) or link existing refunds (using refunds).
     * Customer balance credit: credit the customer's balance (using credit_amount) which will be automatically applied to their next invoice when it's finalized.
     * Outside of Stripe credit: record the amount that is or will be credited outside of Stripe (using out_of_band_amount).
     *
     *
     * The sum of refunds, customer balance credits, and outside of Stripe credits must equal the post_payment_amount.
     *
     * You may issue multiple credit notes for an invoice. Each credit note may increment the invoice's pre_payment_credit_notes_amount,
     * post_payment_credit_notes_amount, or both, depending on the invoice's amount_remaining at the time of credit note creation.
     *
     * For invoices that also have refunds created through the [Refund API](https://docs.stripe.com/docs/api/refunds), the credit note API subtracts those refund amounts from the maximum creditable amount. This prevents the combined credit notes and refunds from exceeding the invoice amount. If you use both, ensure the combined total does not exceed the invoice's paid amount.
     */
    create(params: CreditNoteCreateParams, options?: RequestOptions): Promise<Response<CreditNote>>;
    /**
     * Retrieves the credit note object with the given identifier.
     */
    retrieve(id: string, params?: CreditNoteRetrieveParams, options?: RequestOptions): Promise<Response<CreditNote>>;
    /**
     * Updates an existing credit note.
     */
    update(id: string, params?: CreditNoteUpdateParams, options?: RequestOptions): Promise<Response<CreditNote>>;
    /**
     * Get a preview of a credit note without creating it.
     */
    preview(params: CreditNotePreviewParams, options?: RequestOptions): Promise<Response<CreditNote>>;
    /**
     * Marks a credit note as void. Learn more about [voiding credit notes](https://docs.stripe.com/docs/billing/invoices/credit-notes#voiding).
     */
    voidCreditNote(id: string, params?: CreditNoteVoidCreditNoteParams, options?: RequestOptions): Promise<Response<CreditNote>>;
    /**
     * When retrieving a credit note preview, you'll get a lines property containing the first handful of those items. This URL you can retrieve the full (paginated) list of line items.
     */
    listPreviewLineItems(params: CreditNoteListPreviewLineItemsParams, options?: RequestOptions): ApiListPromise<CreditNoteLineItem>;
    /**
     * When retrieving a credit note, you'll get a lines property containing the first handful of those items. There is also a URL where you can retrieve the full (paginated) list of line items.
     */
    listLineItems(id: string, params?: CreditNoteListLineItemsParams, options?: RequestOptions): ApiListPromise<CreditNoteLineItem>;
}
export interface CreditNote {
    /**
     * Unique identifier for the object.
     */
    id: string;
    /**
     * String representing the object's type. Objects of the same type share the same value.
     */
    object: 'credit_note';
    /**
     * The integer amount in cents (or local equivalent) representing the total amount of the credit note, including tax.
     */
    amount: number;
    /**
     * This is the sum of all the shipping amounts.
     */
    amount_shipping: number;
    /**
     * Time at which the object was created. Measured in seconds since the Unix epoch.
     */
    created: 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;
    /**
     * ID of the customer.
     */
    customer: string | Customer | DeletedCustomer;
    /**
     * ID of the account representing the customer.
     */
    customer_account: string | null;
    /**
     * Customer balance transaction related to this credit note.
     */
    customer_balance_transaction: string | CustomerBalanceTransaction | null;
    /**
     * The integer amount in cents (or local equivalent) representing the total amount of discount that was credited.
     */
    discount_amount: number;
    /**
     * The aggregate amounts calculated per discount for all line items.
     */
    discount_amounts: Array<CreditNote.DiscountAmount>;
    /**
     * The date when this credit note is in effect. Same as `created` unless overwritten. When defined, this value replaces the system-generated 'Date of issue' printed on the credit note PDF.
     */
    effective_at: number | null;
    /**
     * ID of the invoice.
     */
    invoice: string | Invoice;
    /**
     * Line items that make up the credit note
     */
    lines: ApiList<CreditNoteLineItem>;
    /**
     * If the object exists in live mode, the value is `true`. If the object exists in test mode, the value is `false`.
     */
    livemode: boolean;
    /**
     * Customer-facing text that appears on the credit note PDF.
     */
    memo: string | null;
    /**
     * 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;
    /**
     * A unique number that identifies this particular credit note and appears on the PDF of the credit note and its associated invoice.
     */
    number: string;
    /**
     * Amount that was credited outside of Stripe.
     */
    out_of_band_amount: number | null;
    /**
     * The link to download the PDF of the credit note.
     */
    pdf: string;
    /**
     * The amount of the credit note that was refunded to the customer, credited to the customer's balance, credited outside of Stripe, or any combination thereof.
     */
    post_payment_amount: number;
    /**
     * The amount of the credit note by which the invoice's `amount_remaining` and `amount_due` were reduced.
     */
    pre_payment_amount: number;
    /**
     * The pretax credit amounts (ex: discount, credit grants, etc) for all line items.
     */
    pretax_credit_amounts: Array<CreditNote.PretaxCreditAmount>;
    /**
     * Reason for issuing this credit note, one of `duplicate`, `fraudulent`, `order_change`, or `product_unsatisfactory`
     */
    reason: CreditNote.Reason | null;
    /**
     * Refunds related to this credit note.
     */
    refunds: Array<CreditNote.Refund>;
    /**
     * The details of the cost of shipping, including the ShippingRate applied to the invoice.
     */
    shipping_cost: CreditNote.ShippingCost | null;
    /**
     * Status of this credit note, one of `issued` or `void`. Learn more about [voiding credit notes](https://docs.stripe.com/billing/invoices/credit-notes#voiding).
     */
    status: CreditNote.Status;
    /**
     * The integer amount in cents (or local equivalent) representing the amount of the credit note, excluding exclusive tax and invoice level discounts.
     */
    subtotal: number;
    /**
     * The integer amount in cents (or local equivalent) representing the amount of the credit note, excluding all tax and invoice level discounts.
     */
    subtotal_excluding_tax: number | null;
    /**
     * The integer amount in cents (or local equivalent) representing the total amount of the credit note, including tax and all discount.
     */
    total: number;
    /**
     * The integer amount in cents (or local equivalent) representing the total amount of the credit note, excluding tax, but including discounts.
     */
    total_excluding_tax: number | null;
    /**
     * The aggregate tax information for all line items.
     */
    total_taxes: Array<CreditNote.TotalTax> | null;
    /**
     * Type of this credit note, one of `pre_payment` or `post_payment`. A `pre_payment` credit note means it was issued when the invoice was open. A `post_payment` credit note means it was issued when the invoice was paid.
     */
    type: CreditNote.Type;
    /**
     * The time that the credit note was voided.
     */
    voided_at: number | null;
}
export declare namespace CreditNote {
    interface DiscountAmount {
        /**
         * The amount, in cents (or local equivalent), of the discount.
         */
        amount: number;
        /**
         * The discount that was applied to get this discount amount.
         */
        discount: string | Discount | DeletedDiscount;
    }
    interface PretaxCreditAmount {
        /**
         * The amount, in cents (or local equivalent), of the pretax credit amount.
         */
        amount: number;
        /**
         * The credit balance transaction that was applied to get this pretax credit amount.
         */
        credit_balance_transaction?: string | Billing.CreditBalanceTransaction;
        /**
         * The discount that was applied to get this pretax credit amount.
         */
        discount?: string | Discount | DeletedDiscount;
        /**
         * Type of the pretax credit amount referenced.
         */
        type: PretaxCreditAmount.Type;
    }
    type Reason = 'duplicate' | 'fraudulent' | 'order_change' | 'product_unsatisfactory' | OtherString;
    interface Refund {
        /**
         * Amount of the refund that applies to this credit note, in cents (or local equivalent).
         */
        amount_refunded: number;
        /**
         * The PaymentRecord refund details associated with this credit note refund.
         */
        payment_record_refund: Refund.PaymentRecordRefund | null;
        /**
         * ID of the refund.
         */
        refund: string | _Refund;
        /**
         * Type of the refund, one of `refund` or `payment_record_refund`.
         */
        type: Refund.Type | null;
    }
    interface ShippingCost {
        /**
         * Total shipping cost before any taxes are applied.
         */
        amount_subtotal: number;
        /**
         * Total tax amount applied due to shipping costs. If no tax was applied, defaults to 0.
         */
        amount_tax: number;
        /**
         * Total shipping cost after taxes are applied.
         */
        amount_total: number;
        /**
         * The ID of the ShippingRate for this invoice.
         */
        shipping_rate: string | ShippingRate | null;
        /**
         * The taxes applied to the shipping rate.
         */
        taxes?: Array<ShippingCost.Tax>;
    }
    type Status = 'issued' | 'void' | OtherString;
    interface TotalTax {
        /**
         * The amount of the tax, in cents (or local equivalent).
         */
        amount: number;
        /**
         * Whether this tax is inclusive or exclusive.
         */
        tax_behavior: TotalTax.TaxBehavior;
        /**
         * Additional details about the tax rate. Only present when `type` is `tax_rate_details`.
         */
        tax_rate_details: TotalTax.TaxRateDetails | null;
        /**
         * The reasoning behind this tax, for example, if the product is tax exempt. The possible values for this field may be extended as new tax rules are supported.
         */
        taxability_reason: TotalTax.TaxabilityReason;
        /**
         * The amount on which tax is calculated, in cents (or local equivalent).
         */
        taxable_amount: number | null;
        /**
         * The type of tax information.
         */
        type: 'tax_rate_details';
    }
    type Type = 'mixed' | 'post_payment' | 'pre_payment';
    namespace PretaxCreditAmount {
        type Type = 'credit_balance_transaction' | 'discount' | OtherString;
    }
    namespace Refund {
        interface PaymentRecordRefund {
            /**
             * ID of the payment record.
             */
            payment_record: string;
            /**
             * ID of the refund group.
             */
            refund_group: string;
        }
        type Type = 'payment_record_refund' | 'refund' | OtherString;
    }
    namespace ShippingCost {
        interface Tax {
            /**
             * Amount of tax applied for this rate.
             */
            amount: number;
            /**
             * Tax rates can be applied to [invoices](https://docs.stripe.com/invoicing/taxes/tax-rates), [subscriptions](https://docs.stripe.com/billing/taxes/tax-rates) and [Checkout Sessions](https://docs.stripe.com/payments/checkout/use-manual-tax-rates) to collect tax.
             *
             * Related guide: [Tax rates](https://docs.stripe.com/billing/taxes/tax-rates)
             */
            rate: TaxRate;
            /**
             * The reasoning behind this tax, for example, if the product is tax exempt. The possible values for this field may be extended as new tax rules are supported.
             */
            taxability_reason: Tax.TaxabilityReason | null;
            /**
             * The amount on which tax is calculated, in cents (or local equivalent).
             */
            taxable_amount: number | null;
        }
        namespace Tax {
            type TaxabilityReason = 'customer_exempt' | 'not_collecting' | 'not_subject_to_tax' | 'not_supported' | 'portion_product_exempt' | 'portion_reduced_rated' | 'portion_standard_rated' | 'product_exempt' | 'product_exempt_holiday' | 'proportionally_rated' | 'reduced_rated' | 'reverse_charge' | 'standard_rated' | 'taxable_basis_reduced' | 'zero_rated' | OtherString;
        }
    }
    namespace TotalTax {
        type TaxBehavior = 'exclusive' | 'inclusive';
        interface TaxRateDetails {
            /**
             * ID of the tax rate
             */
            tax_rate: string;
        }
        type TaxabilityReason = 'customer_exempt' | 'not_available' | 'not_collecting' | 'not_subject_to_tax' | 'not_supported' | 'portion_product_exempt' | 'portion_reduced_rated' | 'portion_standard_rated' | 'product_exempt' | 'product_exempt_holiday' | 'proportionally_rated' | 'reduced_rated' | 'reverse_charge' | 'standard_rated' | 'taxable_basis_reduced' | 'zero_rated' | OtherString;
    }
}
export interface CreditNoteCreateParams {
    /**
     * ID of the invoice.
     */
    invoice: string;
    /**
     * The integer amount in cents (or local equivalent) representing the total amount of the credit note. One of `amount`, `lines`, or `shipping_cost` must be provided.
     */
    amount?: number;
    /**
     * The integer amount in cents (or local equivalent) representing the amount to credit the customer's balance, which will be automatically applied to their next invoice.
     */
    credit_amount?: number;
    /**
     * The date when this credit note is in effect. Same as `created` unless overwritten. When defined, this value replaces the system-generated 'Date of issue' printed on the credit note PDF.
     */
    effective_at?: number;
    /**
     * Type of email to send to the customer, one of `credit_note` or `none` and the default is `credit_note`.
     */
    email_type?: CreditNoteCreateParams.EmailType;
    /**
     * Specifies which fields in the response should be expanded.
     */
    expand?: Array<string>;
    /**
     * Line items that make up the credit note. One of `amount`, `lines`, or `shipping_cost` must be provided.
     */
    lines?: Array<CreditNoteCreateParams.Line>;
    /**
     * The credit note's memo appears on the credit note PDF.
     */
    memo?: 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;
    /**
     * The integer amount in cents (or local equivalent) representing the amount that is credited outside of Stripe.
     */
    out_of_band_amount?: number;
    /**
     * Reason for issuing this credit note, one of `duplicate`, `fraudulent`, `order_change`, or `product_unsatisfactory`
     */
    reason?: CreditNoteCreateParams.Reason;
    /**
     * The integer amount in cents (or local equivalent) representing the amount to refund. If set, a refund will be created for the charge associated with the invoice.
     */
    refund_amount?: number;
    /**
     * Refunds to link to this credit note.
     */
    refunds?: Array<CreditNoteCreateParams.Refund>;
    /**
     * When shipping_cost contains the shipping_rate from the invoice, the shipping_cost is included in the credit note. One of `amount`, `lines`, or `shipping_cost` must be provided.
     */
    shipping_cost?: CreditNoteCreateParams.ShippingCost;
}
export declare namespace CreditNoteCreateParams {
    type EmailType = 'credit_note' | 'none' | OtherString;
    interface Line {
        /**
         * The line item amount to credit. Only valid when `type` is `invoice_line_item`. If invoice is set up with `automatic_tax[enabled]=true`, this amount is tax exclusive
         */
        amount?: number;
        /**
         * The description of the credit note line item. Only valid when the `type` is `custom_line_item`.
         */
        description?: string;
        /**
         * The invoice line item to credit. Only valid when the `type` is `invoice_line_item`.
         */
        invoice_line_item?: 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;
        /**
         * The line item quantity to credit.
         */
        quantity?: number;
        /**
         * A list of up to 20 tax amounts for the credit note line item. Not valid when `tax_rates` is used or if invoice is set up with `automatic_tax[enabled]=true`.
         */
        tax_amounts?: Emptyable<Array<Line.TaxAmount>>;
        /**
         * The tax rates which apply to the credit note line item. Only valid when the `type` is `custom_line_item` and `tax_amounts` is not used.
         */
        tax_rates?: Emptyable<Array<string>>;
        /**
         * Type of the credit note line item, one of `invoice_line_item` or `custom_line_item`. `custom_line_item` is not valid when the invoice is set up with `automatic_tax[enabled]=true`.
         */
        type: Line.Type;
        /**
         * The integer unit amount in cents (or local equivalent) of the credit note line item. This `unit_amount` will be multiplied by the quantity to get the full amount to credit for this line item. Only valid when `type` is `custom_line_item`.
         */
        unit_amount?: number;
        /**
         * Same as `unit_amount`, but accepts a decimal value in cents (or local equivalent) with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set.
         */
        unit_amount_decimal?: Decimal;
    }
    type Reason = 'duplicate' | 'fraudulent' | 'order_change' | 'product_unsatisfactory' | OtherString;
    interface Refund {
        /**
         * Amount of the refund that applies to this credit note, in cents (or local equivalent). Defaults to the entire refund amount.
         */
        amount_refunded?: number;
        /**
         * The PaymentRecord refund details to link to this credit note. Required when `type` is `payment_record_refund`.
         */
        payment_record_refund?: Refund.PaymentRecordRefund;
        /**
         * ID of an existing refund to link this credit note to. Required when `type` is `refund`.
         */
        refund?: string;
        /**
         * Type of the refund, one of `refund` or `payment_record_refund`. Defaults to `refund`.
         */
        type?: Refund.Type;
    }
    interface ShippingCost {
        /**
         * The ID of the shipping rate to use for this order.
         */
        shipping_rate?: string;
    }
    namespace Line {
        interface TaxAmount {
            /**
             * The amount, in cents (or local equivalent), of the tax.
             */
            amount: number;
            /**
             * The id of the tax rate for this tax amount. The tax rate must have been automatically created by Stripe.
             */
            tax_rate: string;
            /**
             * The amount on which tax is calculated, in cents (or local equivalent).
             */
            taxable_amount: number;
        }
        type Type = 'custom_line_item' | 'invoice_line_item';
    }
    namespace Refund {
        interface PaymentRecordRefund {
            /**
             * The ID of the PaymentRecord with the refund to link to this credit note.
             */
            payment_record: string;
            /**
             * The PaymentRecord refund group to link to this credit note. For refunds processed off-Stripe, this will correspond to the `processor_details.custom.refund_reference` field provided when reporting the refund on the PaymentRecord.
             */
            refund_group: string;
        }
        type Type = 'payment_record_refund' | 'refund' | OtherString;
    }
}
export interface CreditNoteRetrieveParams {
    /**
     * Specifies which fields in the response should be expanded.
     */
    expand?: Array<string>;
}
export interface CreditNoteUpdateParams {
    /**
     * Specifies which fields in the response should be expanded.
     */
    expand?: Array<string>;
    /**
     * Credit note memo.
     */
    memo?: 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;
}
export interface CreditNoteListParams extends PaginationParams {
    /**
     * Only return credit notes that were created during the given date interval.
     */
    created?: RangeQueryParam | number;
    /**
     * Only return credit notes for the customer specified by this customer ID.
     */
    customer?: string;
    /**
     * Only return credit notes for the account representing the customer specified by this account ID.
     */
    customer_account?: string;
    /**
     * Specifies which fields in the response should be expanded.
     */
    expand?: Array<string>;
    /**
     * Only return credit notes for the invoice specified by this invoice ID.
     */
    invoice?: string;
}
export interface CreditNoteListLineItemsParams extends PaginationParams {
    /**
     * Specifies which fields in the response should be expanded.
     */
    expand?: Array<string>;
}
export interface CreditNoteListPreviewLineItemsParams extends PaginationParams {
    /**
     * ID of the invoice.
     */
    invoice: string;
    /**
     * The integer amount in cents (or local equivalent) representing the total amount of the credit note. One of `amount`, `lines`, or `shipping_cost` must be provided.
     */
    amount?: number;
    /**
     * The integer amount in cents (or local equivalent) representing the amount to credit the customer's balance, which will be automatically applied to their next invoice.
     */
    credit_amount?: number;
    /**
     * The date when this credit note is in effect. Same as `created` unless overwritten. When defined, this value replaces the system-generated 'Date of issue' printed on the credit note PDF.
     */
    effective_at?: number;
    /**
     * Type of email to send to the customer, one of `credit_note` or `none` and the default is `credit_note`.
     */
    email_type?: CreditNoteListPreviewLineItemsParams.EmailType;
    /**
     * Specifies which fields in the response should be expanded.
     */
    expand?: Array<string>;
    /**
     * Line items that make up the credit note. One of `amount`, `lines`, or `shipping_cost` must be provided.
     */
    lines?: Array<CreditNoteListPreviewLineItemsParams.Line>;
    /**
     * The credit note's memo appears on the credit note PDF.
     */
    memo?: 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;
    /**
     * The integer amount in cents (or local equivalent) representing the amount that is credited outside of Stripe.
     */
    out_of_band_amount?: number;
    /**
     * Reason for issuing this credit note, one of `duplicate`, `fraudulent`, `order_change`, or `product_unsatisfactory`
     */
    reason?: CreditNoteListPreviewLineItemsParams.Reason;
    /**
     * The integer amount in cents (or local equivalent) representing the amount to refund. If set, a refund will be created for the charge associated with the invoice.
     */
    refund_amount?: number;
    /**
     * Refunds to link to this credit note.
     */
    refunds?: Array<CreditNoteListPreviewLineItemsParams.Refund>;
    /**
     * When shipping_cost contains the shipping_rate from the invoice, the shipping_cost is included in the credit note. One of `amount`, `lines`, or `shipping_cost` must be provided.
     */
    shipping_cost?: CreditNoteListPreviewLineItemsParams.ShippingCost;
}
export declare namespace CreditNoteListPreviewLineItemsParams {
    type EmailType = 'credit_note' | 'none' | OtherString;
    interface Line {
        /**
         * The line item amount to credit. Only valid when `type` is `invoice_line_item`. If invoice is set up with `automatic_tax[enabled]=true`, this amount is tax exclusive
         */
        amount?: number;
        /**
         * The description of the credit note line item. Only valid when the `type` is `custom_line_item`.
         */
        description?: string;
        /**
         * The invoice line item to credit. Only valid when the `type` is `invoice_line_item`.
         */
        invoice_line_item?: 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;
        /**
         * The line item quantity to credit.
         */
        quantity?: number;
        /**
         * A list of up to 20 tax amounts for the credit note line item. Not valid when `tax_rates` is used or if invoice is set up with `automatic_tax[enabled]=true`.
         */
        tax_amounts?: Emptyable<Array<Line.TaxAmount>>;
        /**
         * The tax rates which apply to the credit note line item. Only valid when the `type` is `custom_line_item` and `tax_amounts` is not used.
         */
        tax_rates?: Emptyable<Array<string>>;
        /**
         * Type of the credit note line item, one of `invoice_line_item` or `custom_line_item`. `custom_line_item` is not valid when the invoice is set up with `automatic_tax[enabled]=true`.
         */
        type: Line.Type;
        /**
         * The integer unit amount in cents (or local equivalent) of the credit note line item. This `unit_amount` will be multiplied by the quantity to get the full amount to credit for this line item. Only valid when `type` is `custom_line_item`.
         */
        unit_amount?: number;
        /**
         * Same as `unit_amount`, but accepts a decimal value in cents (or local equivalent) with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set.
         */
        unit_amount_decimal?: Decimal;
    }
    type Reason = 'duplicate' | 'fraudulent' | 'order_change' | 'product_unsatisfactory' | OtherString;
    interface Refund {
        /**
         * Amount of the refund that applies to this credit note, in cents (or local equivalent). Defaults to the entire refund amount.
         */
        amount_refunded?: number;
        /**
         * The PaymentRecord refund details to link to this credit note. Required when `type` is `payment_record_refund`.
         */
        payment_record_refund?: Refund.PaymentRecordRefund;
        /**
         * ID of an existing refund to link this credit note to. Required when `type` is `refund`.
         */
        refund?: string;
        /**
         * Type of the refund, one of `refund` or `payment_record_refund`. Defaults to `refund`.
         */
        type?: Refund.Type;
    }
    interface ShippingCost {
        /**
         * The ID of the shipping rate to use for this order.
         */
        shipping_rate?: string;
    }
    namespace Line {
        interface TaxAmount {
            /**
             * The amount, in cents (or local equivalent), of the tax.
             */
            amount: number;
            /**
             * The id of the tax rate for this tax amount. The tax rate must have been automatically created by Stripe.
             */
            tax_rate: string;
            /**
             * The amount on which tax is calculated, in cents (or local equivalent).
             */
            taxable_amount: number;
        }
        type Type = 'custom_line_item' | 'invoice_line_item';
    }
    namespace Refund {
        interface PaymentRecordRefund {
            /**
             * The ID of the PaymentRecord with the refund to link to this credit note.
             */
            payment_record: string;
            /**
             * The PaymentRecord refund group to link to this credit note. For refunds processed off-Stripe, this will correspond to the `processor_details.custom.refund_reference` field provided when reporting the refund on the PaymentRecord.
             */
            refund_group: string;
        }
        type Type = 'payment_record_refund' | 'refund' | OtherString;
    }
}
export interface CreditNotePreviewParams {
    /**
     * ID of the invoice.
     */
    invoice: string;
    /**
     * The integer amount in cents (or local equivalent) representing the total amount of the credit note. One of `amount`, `lines`, or `shipping_cost` must be provided.
     */
    amount?: number;
    /**
     * The integer amount in cents (or local equivalent) representing the amount to credit the customer's balance, which will be automatically applied to their next invoice.
     */
    credit_amount?: number;
    /**
     * The date when this credit note is in effect. Same as `created` unless overwritten. When defined, this value replaces the system-generated 'Date of issue' printed on the credit note PDF.
     */
    effective_at?: number;
    /**
     * Type of email to send to the customer, one of `credit_note` or `none` and the default is `credit_note`.
     */
    email_type?: CreditNotePreviewParams.EmailType;
    /**
     * Specifies which fields in the response should be expanded.
     */
    expand?: Array<string>;
    /**
     * Line items that make up the credit note. One of `amount`, `lines`, or `shipping_cost` must be provided.
     */
    lines?: Array<CreditNotePreviewParams.Line>;
    /**
     * The credit note's memo appears on the credit note PDF.
     */
    memo?: 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;
    /**
     * The integer amount in cents (or local equivalent) representing the amount that is credited outside of Stripe.
     */
    out_of_band_amount?: number;
    /**
     * Reason for issuing this credit note, one of `duplicate`, `fraudulent`, `order_change`, or `product_unsatisfactory`
     */
    reason?: CreditNotePreviewParams.Reason;
    /**
     * The integer amount in cents (or local equivalent) representing the amount to refund. If set, a refund will be created for the charge associated with the invoice.
     */
    refund_amount?: number;
    /**
     * Refunds to link to this credit note.
     */
    refunds?: Array<CreditNotePreviewParams.Refund>;
    /**
     * When shipping_cost contains the shipping_rate from the invoice, the shipping_cost is included in the credit note. One of `amount`, `lines`, or `shipping_cost` must be provided.
     */
    shipping_cost?: CreditNotePreviewParams.ShippingCost;
}
export declare namespace CreditNotePreviewParams {
    type EmailType = 'credit_note' | 'none' | OtherString;
    interface Line {
        /**
         * The line item amount to credit. Only valid when `type` is `invoice_line_item`. If invoice is set up with `automatic_tax[enabled]=true`, this amount is tax exclusive
         */
        amount?: number;
        /**
         * The description of the credit note line item. Only valid when the `type` is `custom_line_item`.
         */
        description?: string;
        /**
         * The invoice line item to credit. Only valid when the `type` is `invoice_line_item`.
         */
        invoice_line_item?: 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;
        /**
         * The line item quantity to credit.
         */
        quantity?: number;
        /**
         * A list of up to 20 tax amounts for the credit note line item. Not valid when `tax_rates` is used or if invoice is set up with `automatic_tax[enabled]=true`.
         */
        tax_amounts?: Emptyable<Array<Line.TaxAmount>>;
        /**
         * The tax rates which apply to the credit note line item. Only valid when the `type` is `custom_line_item` and `tax_amounts` is not used.
         */
        tax_rates?: Emptyable<Array<string>>;
        /**
         * Type of the credit note line item, one of `invoice_line_item` or `custom_line_item`. `custom_line_item` is not valid when the invoice is set up with `automatic_tax[enabled]=true`.
         */
        type: Line.Type;
        /**
         * The integer unit amount in cents (or local equivalent) of the credit note line item. This `unit_amount` will be multiplied by the quantity to get the full amount to credit for this line item. Only valid when `type` is `custom_line_item`.
         */
        unit_amount?: number;
        /**
         * Same as `unit_amount`, but accepts a decimal value in cents (or local equivalent) with at most 12 decimal places. Only one of `unit_amount` and `unit_amount_decimal` can be set.
         */
        unit_amount_decimal?: Decimal;
    }
    type Reason = 'duplicate' | 'fraudulent' | 'order_change' | 'product_unsatisfactory' | OtherString;
    interface Refund {
        /**
         * Amount of the refund that applies to this credit note, in cents (or local equivalent). Defaults to the entire refund amount.
         */
        amount_refunded?: number;
        /**
         * The PaymentRecord refund details to link to this credit note. Required when `type` is `payment_record_refund`.
         */
        payment_record_refund?: Refund.PaymentRecordRefund;
        /**
         * ID of an existing refund to link this credit note to. Required when `type` is `refund`.
         */
        refund?: string;
        /**
         * Type of the refund, one of `refund` or `payment_record_refund`. Defaults to `refund`.
         */
        type?: Refund.Type;
    }
    interface ShippingCost {
        /**
         * The ID of the shipping rate to use for this order.
         */
        shipping_rate?: string;
    }
    namespace Line {
        interface TaxAmount {
            /**
             * The amount, in cents (or local equivalent), of the tax.
             */
            amount: number;
            /**
             * The id of the tax rate for this tax amount. The tax rate must have been automatically created by Stripe.
             */
            tax_rate: string;
            /**
             * The amount on which tax is calculated, in cents (or local equivalent).
             */
            taxable_amount: number;
        }
        type Type = 'custom_line_item' | 'invoice_line_item';
    }
    namespace Refund {
        interface PaymentRecordRefund {
            /**
             * The ID of the PaymentRecord with the refund to link to this credit note.
             */
            payment_record: string;
            /**
             * The PaymentRecord refund group to link to this credit note. For refunds processed off-Stripe, this will correspond to the `processor_details.custom.refund_reference` field provided when reporting the refund on the PaymentRecord.
             */
            refund_group: string;
        }
        type Type = 'payment_record_refund' | 'refund' | OtherString;
    }
}
export interface CreditNoteVoidCreditNoteParams {
    /**
     * Specifies which fields in the response should be expanded.
     */
    expand?: Array<string>;
}
