---
title: "Payment Failed"
method: POST
path: "payment.failed"
tags: ["Payments"]
---

# Payment Failed

`POST payment.failed` (webhook)

Sent when a payment is failed

Required permissions:
 - `payment:basic:read`
 - `plan:basic:read`
 - `access_pass:basic:read`
 - `member:email:read`
 - `member:basic:read`
 - `member:phone:read`
 - `promo_code:basic:read`
 - `payment:dispute:read`
 - `payment:resolution_center_case:read`
 - `webhook_receive:payments`

## Headers

- `webhook-id` string, required — A unique identifier for this webhook request
- `webhook-signature` string, required — The signature of the webhook request with the webhook version prepended
- `webhook-timestamp` string, required — The timestamp in seconds since the Unix epoch that the webhook was sent at on the server

## Payload

- object
  - `api_version` 'v1', required — The API version for this webhook
  - `company_id` string, nullable — The company ID that this webhook event is associated with
  - `data` Payment, required — A payment represents a completed or attempted charge. Payments track the amount, status, currency, and payment method used.
    - `amount_after_fees` number, required — How much the payment is for after fees
    - `application_fee` object, nullable, required — The application fee charged on this payment.
      - `amount` number, required — The application fee amount.
      - `amount_captured` number, required — The amount of the application fee that has been captured.
      - `amount_refunded` number, required — The amount of the application fee that has been refunded.
      - `created_at` string, date-time, required — The datetime the application fee was created.
      - `currency` 'usd' | 'sgd' | 'inr' | 'aud' | 'brl' | 'cad' | 'dkk' | 'eur' | 'nok' | 'gbp' | 'sek' | 'chf' | 'hkd' | 'huf' | 'jpy' | 'mxn' | 'myr' | 'pln' | 'czk' | 'nzd' | 'aed' | 'eth' | 'ape' | 'cop' | 'ron' | 'thb' | 'bgn' | 'idr' | 'dop' | 'php' | 'try' | 'krw' | 'twd' | 'vnd' | 'pkr' | 'clp' | 'uyu' | 'ars' | 'zar' | 'dzd' | 'tnd' | 'mad' | 'kes' | 'kwd' | 'jod' | 'all' | 'xcd' | 'amd' | 'bsd' | 'bhd' | 'bob' | 'bam' | 'khr' | 'crc' | 'xof' | 'egp' | 'etb' | 'gmd' | 'ghs' | 'gtq' | 'gyd' | 'ils' | 'jmd' | 'mop' | 'mga' | 'mur' | 'mdl' | 'mnt' | 'nad' | 'ngn' | 'mkd' | 'omr' | 'pyg' | 'pen' | 'qar' | 'rwf' | 'sar' | 'rsd' | 'lkr' | 'tzs' | 'ttd' | 'uzs' | 'rub' | 'btc' | 'cny' | 'usdt' | 'kzt' | 'awg' | 'whop_usd' | 'xau', required — The available currencies on the platform
      - `id` string, required — The unique identifier for the application fee.
    - `auto_refunded` boolean, required — Whether this payment was auto refunded or not
    - `billing_address` object, nullable, required — The address of the user who made the payment.
      - `city` string, nullable, required — The city of the address.
      - `country` string, nullable, required — The country of the address.
      - `line1` string, nullable, required — The line 1 of the address.
      - `line2` string, nullable, required — The line 2 of the address.
      - `name` string, nullable, required — The name of the customer.
      - `postal_code` string, nullable, required — The postal code of the address.
      - `state` string, nullable, required — The state of the address.
    - `billing_reason` 'subscription_create' | 'subscription_cycle' | 'subscription_update' | 'one_time' | 'manual' | 'subscription', required — The reason why a specific payment was billed
    - `card_brand` 'mastercard' | 'visa' | 'amex' | 'discover' | 'unionpay' | 'jcb' | 'diners' | 'link' | 'troy' | 'visadankort' | 'visabancontact' | 'china_union_pay' | 'rupay' | 'jcbrupay' | 'elo' | 'maestro' | 'tarjeta_naranja' | 'cirrus' | 'nspk_mir' | 'verve' | 'ebt' | 'private_label' | 'local_brand' | 'uatp' | 'wexcard' | 'uzcard' | 'meeza' | 'hrg_store_card' | 'girocard' | 'fuel_card' | 'dankort' | 'carnet' | 'atm_card' | 'china_union_payuzcard' | 'codensa' | 'cabal' | 'hipercard' | 'jcblankapay' | 'cmi' | 'aura' | 'unknown', required — Possible card brands that a payment token can have
    - `card_last4` string, nullable, required — The last four digits of the card used to make this payment. Null if the payment was not made with a card.
    - `checkout_configuration_id` string, nullable, required — The ID of the checkout session/configuration that produced this payment, if any. Use this to map payments back to the checkout configuration that created them.
    - `company` object, nullable, required — The company for the payment.
      - `id` string, required — The unique identifier for the company.
      - `route` string, required — The slug/route of the company on the Whop site.
      - `title` string, required — The written name of the company.
    - `created_at` string, date-time, required — The datetime the payment was created.
    - `currency` 'usd' | 'sgd' | 'inr' | 'aud' | 'brl' | 'cad' | 'dkk' | 'eur' | 'nok' | 'gbp' | 'sek' | 'chf' | 'hkd' | 'huf' | 'jpy' | 'mxn' | 'myr' | 'pln' | 'czk' | 'nzd' | 'aed' | 'eth' | 'ape' | 'cop' | 'ron' | 'thb' | 'bgn' | 'idr' | 'dop' | 'php' | 'try' | 'krw' | 'twd' | 'vnd' | 'pkr' | 'clp' | 'uyu' | 'ars' | 'zar' | 'dzd' | 'tnd' | 'mad' | 'kes' | 'kwd' | 'jod' | 'all' | 'xcd' | 'amd' | 'bsd' | 'bhd' | 'bob' | 'bam' | 'khr' | 'crc' | 'xof' | 'egp' | 'etb' | 'gmd' | 'ghs' | 'gtq' | 'gyd' | 'ils' | 'jmd' | 'mop' | 'mga' | 'mur' | 'mdl' | 'mnt' | 'nad' | 'ngn' | 'mkd' | 'omr' | 'pyg' | 'pen' | 'qar' | 'rwf' | 'sar' | 'rsd' | 'lkr' | 'tzs' | 'ttd' | 'uzs' | 'rub' | 'btc' | 'cny' | 'usdt' | 'kzt' | 'awg' | 'whop_usd' | 'xau', required — The available currencies on the platform
    - `customer_phone` string, nullable, required — Phone number the customer provided at checkout, or their verified phone number when your checkout requires phone verification. `null` when no phone number was collected.
    - `dispute_alerted_at` string, date-time, nullable, required — When an alert came in that this transaction will be disputed
    - `disputes` object[], nullable, required — The disputes attached to this payment. Null if the actor in context does not have the payment:dispute:read permission.
      - `amount` number, required — The disputed amount in the specified currency, formatted as a decimal.
      - `currency` 'usd' | 'sgd' | 'inr' | 'aud' | 'brl' | 'cad' | 'dkk' | 'eur' | 'nok' | 'gbp' | 'sek' | 'chf' | 'hkd' | 'huf' | 'jpy' | 'mxn' | 'myr' | 'pln' | 'czk' | 'nzd' | 'aed' | 'eth' | 'ape' | 'cop' | 'ron' | 'thb' | 'bgn' | 'idr' | 'dop' | 'php' | 'try' | 'krw' | 'twd' | 'vnd' | 'pkr' | 'clp' | 'uyu' | 'ars' | 'zar' | 'dzd' | 'tnd' | 'mad' | 'kes' | 'kwd' | 'jod' | 'all' | 'xcd' | 'amd' | 'bsd' | 'bhd' | 'bob' | 'bam' | 'khr' | 'crc' | 'xof' | 'egp' | 'etb' | 'gmd' | 'ghs' | 'gtq' | 'gyd' | 'ils' | 'jmd' | 'mop' | 'mga' | 'mur' | 'mdl' | 'mnt' | 'nad' | 'ngn' | 'mkd' | 'omr' | 'pyg' | 'pen' | 'qar' | 'rwf' | 'sar' | 'rsd' | 'lkr' | 'tzs' | 'ttd' | 'uzs' | 'rub' | 'btc' | 'cny' | 'usdt' | 'kzt' | 'awg' | 'whop_usd' | 'xau', required — The available currencies on the platform
      - `editable` boolean, nullable, required — Whether the dispute evidence can still be edited and submitted.
      - `id` string, required — The unique identifier for the dispute.
      - `needs_response_by` string, date-time, nullable, required — The deadline by which dispute evidence must be submitted. Null if no response deadline is set.
      - `notes` string, nullable, required — Additional freeform notes submitted by the company as part of the dispute evidence.
      - `reason` string, nullable, required — A human-readable reason for the dispute.
      - `status` 'warning_needs_response' | 'warning_under_review' | 'warning_closed' | 'needs_response' | 'under_review' | 'won' | 'lost' | 'closed' | 'other', required — The possible statuses of a dispute
    - `failure_message` string, nullable, required — If the payment failed, the reason for the failure.
    - `financing_installments_count` integer, nullable, required — The number of financing installments for the payment. Present if the payment is a financing payment (e.g. Splitit, Klarna, etc.).
    - `financing_transactions` object[], required — The financing transactions attached to this payment. Present if the payment is a financing payment (e.g. Splitit, Klarna, etc.).
      - `amount` number, required — The amount of the payment transaction.
      - `created_at` string, date-time, required — The date and time the payment transaction was created.
      - `id` string, required — The unique identifier for the payment transaction.
      - `status` 'succeeded' | 'declined' | 'error' | 'pending' | 'created' | 'expired' | 'won' | 'rejected' | 'lost' | 'prevented' | 'canceled', required — The different statuses a payment transaction can be in.
      - `transaction_type` 'purchase' | 'authorize' | 'capture' | 'refund' | 'canceled' | 'verify' | 'chargeback' | 'pre_chargeback' | 'three_d_secure' | 'fraud_screening' | 'authorization' | 'installment', required — The different types of payment transactions.
    - `id` string, required — The unique identifier for the payment.
    - `last_payment_attempt` string, date-time, nullable, required — The time of the last payment attempt.
    - `member` object, nullable, required — The member attached to this payment.
      - `id` string, required — The unique identifier for the company member.
      - `phone` string, nullable, required — The phone number for the member, if available.
    - `membership` object, nullable, required — The membership attached to this payment.
      - `id` string, required — The unique identifier for the membership.
      - `phone_number` string, nullable, required — The phone number associated with this membership.
      - `status` 'trialing' | 'active' | 'past_due' | 'completed' | 'canceled' | 'expired' | 'unresolved' | 'drafted' | 'canceling', required — The status of a membership
    - `metadata` object, nullable, required — The custom metadata stored on this payment. This will be copied over to the checkout configuration for which this payment was made
    - `next_payment_attempt` string, date-time, nullable, required — The time of the next schedule payment retry.
    - `paid_at` string, date-time, nullable, required — The time at which this payment was successfully collected. Null if the payment has not yet succeeded. As a Unix timestamp.
    - `payment_method` object, nullable, required — The tokenized payment method reference used for this payment. Null if no token was used.
      - `card` object, nullable, required — The card data associated with the payment method, if its a debit or credit card.
        - `brand` 'mastercard' | 'visa' | 'amex' | 'discover' | 'unionpay' | 'jcb' | 'diners' | 'link' | 'troy' | 'visadankort' | 'visabancontact' | 'china_union_pay' | 'rupay' | 'jcbrupay' | 'elo' | 'maestro' | 'tarjeta_naranja' | 'cirrus' | 'nspk_mir' | 'verve' | 'ebt' | 'private_label' | 'local_brand' | 'uatp' | 'wexcard' | 'uzcard' | 'meeza' | 'hrg_store_card' | 'girocard' | 'fuel_card' | 'dankort' | 'carnet' | 'atm_card' | 'china_union_payuzcard' | 'codensa' | 'cabal' | 'hipercard' | 'jcblankapay' | 'cmi' | 'aura' | 'unknown', required — Possible card brands that a payment token can have
        - `exp_month` integer, nullable, required — The two-digit expiration month of the card (1-12). Null if not available.
        - `exp_year` integer, nullable, required — The two-digit expiration year of the card (e.g., 27 for 2027). Null if not available.
        - `last4` string, nullable, required — The last four digits of the card number. Null if not available.
      - `created_at` string, date-time, required — The datetime the payment token was created.
      - `id` string, required — The unique identifier for the payment token.
      - `payment_method_type` 'acss_debit' | 'affirm' | 'afterpay_clearpay' | 'alipay' | 'alma' | 'amazon_pay' | 'apple' | 'apple_pay' | 'au_bank_transfer' | 'au_becs_debit' | 'bacs_debit' | 'bancolombia' | 'bancontact' | 'bank_wire' | 'billie' | 'bizum' | 'blik' | 'boleto' | 'bre_b' | 'ca_bank_transfer' | 'capchase_pay' | 'card' | 'card_installments_three' | 'card_installments_six' | 'card_installments_twelve' | 'cashapp' | 'claritypay' | 'coinbase' | 'crypto' | 'custom' | 'customer_balance' | 'demo_pay' | 'efecty' | 'eps' | 'eu_bank_transfer' | 'fpx' | 'gb_bank_transfer' | 'giropay' | 'google_pay' | 'gopay' | 'grabpay' | 'id_bank_transfer' | 'ideal' | 'interac' | 'kakao_pay' | 'klarna' | 'klarna_pay_now' | 'konbini' | 'kr_card' | 'kr_market' | 'kriya' | 'kueski' | 'link' | 'mb_way' | 'm_pesa' | 'mercado_pago' | 'mobilepay' | 'mondu' | 'multibanco' | 'naver_pay' | 'nequi' | 'netbanking' | 'ng_bank' | 'ng_bank_transfer' | 'ng_card' | 'ng_market' | 'ng_ussd' | 'ng_wallet' | 'nz_bank_account' | 'oxxo' | 'p24' | 'pago_efectivo' | 'pse' | 'pay_by_bank' | 'payco' | 'paynow' | 'paypal' | 'paypay' | 'payto' | 'pix' | 'platform_balance' | 'promptpay' | 'qris' | 'rechnung' | 'revolut_pay' | 'samsung_pay' | 'satispay' | 'scalapay' | 'sencillito' | 'sepa_debit' | 'sequra' | 'servipag' | 'sezzle' | 'shop_pay' | 'shopeepay' | 'sofort' | 'south_korea_market' | 'spei' | 'splitit' | 'sunbit' | 'swish' | 'tamara' | 'twint' | 'upi' | 'us_bank_account' | 'us_bank_transfer' | 'venmo' | 'vipps' | 'webpay' | 'wechat_pay' | 'yape' | 'zip' | 'coinflow' | 'unknown', required — The different types of payment methods that can be used.
    - `payment_method_type` 'acss_debit' | 'affirm' | 'afterpay_clearpay' | 'alipay' | 'alma' | 'amazon_pay' | 'apple' | 'apple_pay' | 'au_bank_transfer' | 'au_becs_debit' | 'bacs_debit' | 'bancolombia' | 'bancontact' | 'bank_wire' | 'billie' | 'bizum' | 'blik' | 'boleto' | 'bre_b' | 'ca_bank_transfer' | 'capchase_pay' | 'card' | 'card_installments_three' | 'card_installments_six' | 'card_installments_twelve' | 'cashapp' | 'claritypay' | 'coinbase' | 'crypto' | 'custom' | 'customer_balance' | 'demo_pay' | 'efecty' | 'eps' | 'eu_bank_transfer' | 'fpx' | 'gb_bank_transfer' | 'giropay' | 'google_pay' | 'gopay' | 'grabpay' | 'id_bank_transfer' | 'ideal' | 'interac' | 'kakao_pay' | 'klarna' | 'klarna_pay_now' | 'konbini' | 'kr_card' | 'kr_market' | 'kriya' | 'kueski' | 'link' | 'mb_way' | 'm_pesa' | 'mercado_pago' | 'mobilepay' | 'mondu' | 'multibanco' | 'naver_pay' | 'nequi' | 'netbanking' | 'ng_bank' | 'ng_bank_transfer' | 'ng_card' | 'ng_market' | 'ng_ussd' | 'ng_wallet' | 'nz_bank_account' | 'oxxo' | 'p24' | 'pago_efectivo' | 'pse' | 'pay_by_bank' | 'payco' | 'paynow' | 'paypal' | 'paypay' | 'payto' | 'pix' | 'platform_balance' | 'promptpay' | 'qris' | 'rechnung' | 'revolut_pay' | 'samsung_pay' | 'satispay' | 'scalapay' | 'sencillito' | 'sepa_debit' | 'sequra' | 'servipag' | 'sezzle' | 'shop_pay' | 'shopeepay' | 'sofort' | 'south_korea_market' | 'spei' | 'splitit' | 'sunbit' | 'swish' | 'tamara' | 'twint' | 'upi' | 'us_bank_account' | 'us_bank_transfer' | 'venmo' | 'vipps' | 'webpay' | 'wechat_pay' | 'yape' | 'zip' | 'coinflow' | 'unknown', required — The different types of payment methods that can be used.
    - `payments_failed` integer, nullable, required — The number of failed payment attempts for the payment.
    - `plan` object, nullable, required — The plan attached to this payment.
      - `id` string, required — The unique identifier for the plan.
      - `internal_notes` string, nullable, required — A personal description or notes section for the business.
      - `metadata` object, nullable, required — Custom key-value pairs stored on the plan. Included in webhook payloads for payment and membership events. Max 50 keys, 100 chars per key, 500 chars per string value.
    - `product` object, nullable, required — The product this payment was made for
      - `id` string, required — The unique identifier for the product.
      - `metadata` object, nullable, required — Custom key-value pairs stored on the product and included in payment and membership webhook payloads. Max 50 keys, 100 characters per key, 500 characters per string value.
      - `route` string, required — URL slug in the product's public link, e.g. `pickaxe-analytics` in whop.com/company/pickaxe-analytics.
      - `title` string, required — The display name of the product shown to customers on the product page and in search results.
    - `promo_code` object, nullable, required — The promo code used for this payment.
      - `amount_off` number, required — The discount amount. Interpretation depends on promo_type: if 'percentage', this is the percentage (e.g., 20 means 20% off); if 'flat_amount', this is dollars off (e.g., 10.00 means $10.00 off).
      - `base_currency` 'usd' | 'sgd' | 'inr' | 'aud' | 'brl' | 'cad' | 'dkk' | 'eur' | 'nok' | 'gbp' | 'sek' | 'chf' | 'hkd' | 'huf' | 'jpy' | 'mxn' | 'myr' | 'pln' | 'czk' | 'nzd' | 'aed' | 'eth' | 'ape' | 'cop' | 'ron' | 'thb' | 'bgn' | 'idr' | 'dop' | 'php' | 'try' | 'krw' | 'twd' | 'vnd' | 'pkr' | 'clp' | 'uyu' | 'ars' | 'zar' | 'dzd' | 'tnd' | 'mad' | 'kes' | 'kwd' | 'jod' | 'all' | 'xcd' | 'amd' | 'bsd' | 'bhd' | 'bob' | 'bam' | 'khr' | 'crc' | 'xof' | 'egp' | 'etb' | 'gmd' | 'ghs' | 'gtq' | 'gyd' | 'ils' | 'jmd' | 'mop' | 'mga' | 'mur' | 'mdl' | 'mnt' | 'nad' | 'ngn' | 'mkd' | 'omr' | 'pyg' | 'pen' | 'qar' | 'rwf' | 'sar' | 'rsd' | 'lkr' | 'tzs' | 'ttd' | 'uzs' | 'rub' | 'btc' | 'cny' | 'usdt' | 'kzt' | 'awg' | 'whop_usd' | 'xau', required — The available currencies on the platform
      - `code` string, nullable, required — The specific code used to apply the promo at checkout.
      - `id` string, required — The unique identifier for the promo code.
      - `number_of_intervals` integer, nullable, required — The number of months the promo is applied for.
      - `promo_type` 'percentage' | 'flat_amount', required — The type of promo code used to discount a plan
    - `refundable` boolean, required — True only for payments that are `paid`, have not been fully refunded, and were processed by a payment processor that allows refunds.
    - `refunded_amount` number, nullable, required — The payment refund amount(if applicable).
    - `refunded_at` string, date-time, nullable, required — When the payment was refunded (if applicable).
    - `refunds` object[], required — The refunds issued against this payment, newest first, including failed and canceled refund attempts. Limited to the 100 most recent.
      - `amount` number, required — The refunded amount as a decimal in the specified currency, such as 10.43 for $10.43 USD.
      - `created_at` string, date-time, required — The datetime the refund was created.
      - `currency` 'usd' | 'sgd' | 'inr' | 'aud' | 'brl' | 'cad' | 'dkk' | 'eur' | 'nok' | 'gbp' | 'sek' | 'chf' | 'hkd' | 'huf' | 'jpy' | 'mxn' | 'myr' | 'pln' | 'czk' | 'nzd' | 'aed' | 'eth' | 'ape' | 'cop' | 'ron' | 'thb' | 'bgn' | 'idr' | 'dop' | 'php' | 'try' | 'krw' | 'twd' | 'vnd' | 'pkr' | 'clp' | 'uyu' | 'ars' | 'zar' | 'dzd' | 'tnd' | 'mad' | 'kes' | 'kwd' | 'jod' | 'all' | 'xcd' | 'amd' | 'bsd' | 'bhd' | 'bob' | 'bam' | 'khr' | 'crc' | 'xof' | 'egp' | 'etb' | 'gmd' | 'ghs' | 'gtq' | 'gyd' | 'ils' | 'jmd' | 'mop' | 'mga' | 'mur' | 'mdl' | 'mnt' | 'nad' | 'ngn' | 'mkd' | 'omr' | 'pyg' | 'pen' | 'qar' | 'rwf' | 'sar' | 'rsd' | 'lkr' | 'tzs' | 'ttd' | 'uzs' | 'rub' | 'btc' | 'cny' | 'usdt' | 'kzt' | 'awg' | 'whop_usd' | 'xau', required — The available currencies on the platform
      - `id` string, required — The unique identifier for the refund.
      - `status` 'pending' | 'requires_action' | 'succeeded' | 'failed' | 'canceled', required — The different statuses for a Refund object
    - `resolutions` object[], nullable, required — The resolution center cases opened by the customer on this payment. Null if the actor in context does not have the payment:resolution_center_case:read permission.
      - `customer_appealed` boolean, required — Whether the customer has filed an appeal after the initial resolution decision.
      - `customer_response_actions` ResolutionCenterCaseCustomerResponses[], required — The list of actions currently available to the customer.
      - `due_date` string, date-time, nullable, required — The deadline by which the next response is required. Null if no deadline is currently active. As a Unix timestamp.
      - `id` string, required — The unique identifier for the resolution.
      - `issue` 'forgot_to_cancel' | 'item_not_received' | 'significantly_not_as_described' | 'unauthorized_transaction' | 'product_unacceptable', required — The different types of issues a resolution can be
      - `merchant_appealed` boolean, required — Whether the merchant has filed an appeal after the initial resolution decision.
      - `merchant_response_actions` ResolutionCenterCaseMerchantResponses[], required — The list of actions currently available to the merchant.
      - `platform_response_actions` ResolutionCenterCasePlatformResponses[], required — The list of actions currently available to the Whop platform for moderating this resolution.
      - `status` 'merchant_response_needed' | 'customer_response_needed' | 'merchant_info_needed' | 'customer_info_needed' | 'under_platform_review' | 'customer_won' | 'merchant_won' | 'customer_withdrew', required — The statuses a resolution object can have
    - `retryable` boolean, required — True when the payment status is `open` and its membership is in one of the retry-eligible states (`active`, `trialing`, `completed`, or `past_due`), or when it is a failed initial billing-engine payment on a `drafted` membership with an unlimited-stock plan; otherwise false. Used to decide if Whop can attempt the charge again.
    - `risk_score` integer, nullable, required — Whop's in-house fraud risk score for this payment, from 0 (lowest risk) to 100 (highest risk). Null when the payment has not been scored or scoring has not yet completed.
    - `risk_signals` object, nullable, required — A curated set of factors behind the risk score, grouped by category (business transaction history, buyer, device). Each entry has a key, human-readable label, category, and value. Null when there is no risk assessment for this payment.
    - `settlement_amount` number, required — The total amount charged to the customer for this payment, including taxes and after any discounts. In the currency specified by the currency field.
    - `settlement_currency` 'usd' | 'sgd' | 'inr' | 'aud' | 'brl' | 'cad' | 'dkk' | 'eur' | 'nok' | 'gbp' | 'sek' | 'chf' | 'hkd' | 'huf' | 'jpy' | 'mxn' | 'myr' | 'pln' | 'czk' | 'nzd' | 'aed' | 'eth' | 'ape' | 'cop' | 'ron' | 'thb' | 'bgn' | 'idr' | 'dop' | 'php' | 'try' | 'krw' | 'twd' | 'vnd' | 'pkr' | 'clp' | 'uyu' | 'ars' | 'zar' | 'dzd' | 'tnd' | 'mad' | 'kes' | 'kwd' | 'jod' | 'all' | 'xcd' | 'amd' | 'bsd' | 'bhd' | 'bob' | 'bam' | 'khr' | 'crc' | 'xof' | 'egp' | 'etb' | 'gmd' | 'ghs' | 'gtq' | 'gyd' | 'ils' | 'jmd' | 'mop' | 'mga' | 'mur' | 'mdl' | 'mnt' | 'nad' | 'ngn' | 'mkd' | 'omr' | 'pyg' | 'pen' | 'qar' | 'rwf' | 'sar' | 'rsd' | 'lkr' | 'tzs' | 'ttd' | 'uzs' | 'rub' | 'btc' | 'cny' | 'usdt' | 'kzt' | 'awg' | 'whop_usd' | 'xau', required — The available currencies on the platform
    - `settlement_exchange_rate` number, nullable, required — Deprecated. Always returns null.
    - `shipping_address` object, nullable, required — The shipping address provided by the customer for physical goods. Null if no shipping address was collected.
      - `city` string, nullable, required — The city of the address.
      - `country` string, nullable, required — The country of the address.
      - `line1` string, nullable, required — The line 1 of the address.
      - `line2` string, nullable, required — The line 2 of the address.
      - `name` string, nullable, required — The name of the customer.
      - `postal_code` string, nullable, required — The postal code of the address.
      - `state` string, nullable, required — The state of the address.
    - `status` 'draft' | 'open' | 'paid' | 'pending' | 'uncollectible' | 'unresolved' | 'void', required — The status of a receipt
    - `substatus` 'succeeded' | 'pending' | 'failed' | 'past_due' | 'canceled' | 'price_too_low' | 'uncollectible' | 'refunded' | 'auto_refunded' | 'partially_refunded' | 'dispute_warning' | 'dispute_needs_response' | 'dispute_warning_needs_response' | 'resolution_needs_response' | 'dispute_under_review' | 'dispute_warning_under_review' | 'resolution_under_review' | 'dispute_won' | 'dispute_warning_closed' | 'resolution_won' | 'dispute_lost' | 'dispute_closed' | 'resolution_lost' | 'drafted' | 'incomplete' | 'unresolved' | 'open_dispute' | 'open_resolution', required — The friendly status of a payment. This is a derived status that provides a human-readable summary of the payment state, combining the underlying status and substatus fields.
    - `subtotal` number, nullable, required — The subtotal to show to the creator (excluding buyer fees).
    - `tax_amount` number, nullable, required — The calculated amount of the sales/VAT tax (if applicable).
    - `tax_behavior` 'exclusive' | 'inclusive' | 'unspecified' | 'unable_to_collect', required — The type of tax inclusivity applied to the receipt, for determining whether the tax is included in the final price, or paid on top.
    - `tax_refunded_amount` number, nullable, required — The amount of tax that has been refunded (if applicable).
    - `three_ds_verified` boolean, required — Whether 3D Secure authentication was completed for this payment.
    - `total` number, nullable, required — The total to show to the creator (excluding buyer fees).
    - `updated_at` string, date-time, required — The datetime the payment was last updated.
    - `usd_total` number, nullable, required — The total in USD to show to the creator (excluding buyer fees).
    - `user` object, nullable, required — The user that made this payment.
      - `email` string, nullable, required — The user's email address. Requires the member:email:read permission to access. Null if not authorized.
      - `id` string, required — The unique identifier for the user.
      - `name` string, nullable, required — The user's display name shown on their public profile.
      - `username` string, required — The user's unique username shown on their public profile.
    - `voidable` boolean, required — True when the payment is tied to a membership in `past_due`, the payment status is `open`, and the processor allows voiding payments; otherwise false.
  - `id` string, required — A unique ID for every single webhook request
  - `timestamp` string, date-time, required — The timestamp in ISO 8601 format that the webhook was sent at on the server
  - `type` 'payment.failed', required — The webhook event type

## Acknowledgement `200`

Return a 200 status to indicate that the data was received successfully

---

[API](https://skmtc.dev/whop/apis/whop-api.md) · [All operations](https://skmtc.dev/whop/apis/whop-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/whop/whop-api/revisions/60bbb4a6ffbc/schema)
