---
title: "Swap Completed"
method: POST
path: "swap.completed"
tags: ["Swaps"]
---

# Swap Completed

`POST swap.completed` (webhook)

Sent when a swap is completed

Required permissions:
 - `webhook_receive:swaps`

## 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
  - `api_version_date` string, nullable, required — The dated API version (Api-Version-Date) the payload is serialized to
  - `company_id` string, nullable — The account ID that this webhook event is associated with
  - `data` LedgerActivity, required
    - `account` union — The viewer account that owns this row's ledger. Present only when the response aggregates owned accounts (include_owned_accounts=true); omitted otherwise.
      - object
        - `id` string, required — Account ID.
        - `logo_url` string, nullable, required — Account logo URL.
        - `object` 'account', required
        - `route` string, nullable, required — Account route.
        - `title` string, nullable, required — Account display name.
      - object
        - `id` string, required — User ID.
        - `name` string, nullable, required — User display name.
        - `object` 'user', required
        - `profile_picture_url` string, nullable, required — User profile image URL.
        - `username` string, nullable, required — User's username.
    - `amount` string, required — Signed amount in the currency's smallest precision units.
    - `available_at` string, date-time, nullable, required — ISO 8601 timestamp these funds became (or are scheduled to become) withdrawable: the posted time for already-settled funds, or 00:00:00 UTC on the scheduled release date for pending funds. Present only on inflows entering the balance (payments, top-ups, incoming transfers/affiliate); null on withdrawals, refunds, disputes and on-chain rows. The available_after/before filters window on its UTC settlement date.
    - `created_at` string, date-time, nullable, required — When the activity record was created.
    - `currency` object, required — Currency for this ledger activity.
      - `code` string, required — Currency code.
      - `precision` string, required — Precision factor for the currency, for example `100000000` for USD.
    - `id` string, required — Ledger activity ID.
    - `ledger_account_id` string, nullable — The ledger account (a ldgr_ identifier) this row belongs to. Present only when the response aggregates owned accounts (include_owned_accounts=true); omitted otherwise. Pair it with `account` to scope drawers and dashboard links to the owning business.
    - `line_type` 'ad_budget_release' | 'ad_campaign_budget' | 'ad_publisher_payout' | 'ad_publisher_payout_received' | 'ad_spend_charge' | 'affiliate_fee' | 'airdrop' | 'airdrop_link_created' | 'airdrop_link_redeemed' | 'airdrop_link_returned' | 'airdrop_reversal' | 'application_fee' | 'application_fee_payout' | 'bank_transfer' | 'billing_percentage_fee' | 'buyer_fee' | 'card_spend_authorization' | 'card_spend_authorization_void' | 'card_spend_refund' | 'company_referral' | 'cross_border_percentage_fee' | 'currency_conversion_incoming' | 'currency_conversion_outgoing' | 'dispute_alert_fee' | 'dispute_hold_adjustment' | 'fraud_prevention_fee' | 'fx_percentage_fee' | 'high_risk_merchant_fee' | 'installment_default' | 'internal_balance_transfer_incoming' | 'internal_balance_transfer_outgoing' | 'legacy_crypto_payment' | 'legacy_payment' | 'legacy_payment_refund' | 'license_sale' | 'license_sale_commission' | 'license_sale_revenue' | 'misc_purchase' | 'misc_refund' | 'misc_reversal' | 'onchain_deposit' | 'onchain_swap_target' | 'onchain_wallet_transfer_incoming' | 'onchain_wallet_transfer_outgoing' | 'orchestration_percentage_fee' | 'passthrough_gmv' | 'payment_dispute' | 'payment_dispute_adjustment' | 'payment_dispute_fee' | 'payment_dispute_reversal' | 'payment_gross' | 'payment_gross_reversal' | 'payment_processing_fixed_fee' | 'payment_processing_percentage_fee' | 'payment_referral' | 'payment_referral_reversal' | 'payment_refund' | 'payment_refund_reversal' | 'payment_revshare' | 'payment_revshare_payout' | 'payment_revshare_refund' | 'payment_revshare_reversal' | 'payout_fee' | 'platform_affiliate_payment' | 'platform_affiliate_payment_reversal' | 'platform_balance_payment' | 'platform_balance_payment_refund' | 'platform_balance_transfer_incoming' | 'platform_balance_transfer_outgoing' | 'platform_covered_dispute' | 'promo_reversal' | 'referral_bonus' | 'resolution_center_refund' | 'revshare_percentage_fee' | 'sales_tax_fee' | 'sales_tax_remittance' | 'sales_tax_remittance_reversal' | 'software_rental_revshare' | 'software_rental_transaction' | 'stripe_domestic_processing_fee' | 'stripe_international_processing_fee' | 'three_ds_fixed_fee' | 'topup' | 'topup_fee' | 'topup_reversal' | 'treasury_payin' | 'whop_processing_fee' | 'withdrawal' | 'withdrawal_clawback' | 'withdrawal_clawback_reversal' | 'withdrawal_reclassification' | 'withdrawal_reversal', required — The ledger line category this activity was posted under.
    - `object` 'ledger_activity', required
    - `posted_at` string, date-time, required — When the activity posted to the ledger.
    - `resource` union, required — Resource associated with this ledger activity.
      - object
        - `id` string, required — Account ID.
        - `logo_url` string, nullable, required — Account logo URL.
        - `object` 'account', required
        - `route` string, nullable, required — Account route.
        - `title` string, nullable, required — Account display name.
      - object
        - `id` string, required — User ID.
        - `name` string, nullable, required — User display name.
        - `object` 'user', required
        - `profile_picture_url` string, nullable, required — User profile image URL.
        - `username` string, nullable, required — User's username.
      - object
        - `id` string, required — Bounty ID.
        - `object` 'bounty', required
        - `status` string, required — Bounty lifecycle status.
        - `title` string, required — Bounty title.
      - object
        - `id` string, required — Ledger account ID.
        - `object` 'ledger_account', required
        - `owner` union, required
          - object
            - `id` string, required — Account ID.
            - `logo_url` string, nullable, required — Account logo URL.
            - `object` 'account', required
            - `route` string, nullable, required — Account route.
            - `title` string, nullable, required — Account display name.
          - object
            - `id` string, required — User ID.
            - `name` string, nullable, required — User display name.
            - `object` 'user', required
            - `profile_picture_url` string, nullable, required — User profile image URL.
            - `username` string, nullable, required — User's username.
      - object
        - `bank` object, nullable, required
          - `account_name` string, nullable, required — Bank account holder name.
          - `account_type` string, nullable, required — Bank account type.
          - `bank_name` string, nullable, required — Bank name.
          - `last4` string, nullable, required — Last four digits of the bank account.
        - `card` object, nullable, required
          - `brand` string, nullable, required — Card brand.
          - `exp_month` integer, nullable, required — Card expiration month.
          - `exp_year` integer, nullable, required — Card expiration year.
          - `last4` string, nullable, required — Last four digits of the card.
        - `email_identifier` string, nullable, required — Email identifier for email-based payment methods.
        - `gateway_type` string, nullable, required — Payment gateway type.
        - `id` string, required — Payment method ID.
        - `object` 'payment_method', required
        - `payment_method_type` string, nullable, required — Payment method type.
      - object
        - `account_reference` string, nullable, required — Masked account reference.
        - `destination_currency_code` string, nullable, required — Destination currency code.
        - `id` string, required — Payout method ID.
        - `institution_name` string, nullable, required — Payout institution name.
        - `nickname` string, nullable, required — Payout method nickname.
        - `object` 'payout_method', required
        - `provider` string, nullable, required — Payout provider.
      - object
        - `authorized_at` string, date-time, nullable, required — ISO 8601 timestamp the transaction was authorized.
        - `card_id` string, nullable, required — Identifier of the card that the transaction was charged to.
        - `cashback_usd` string, nullable, required — Cashback earned on this transaction as a USD decimal string. Zero for declined or ineligible transactions; null when cashback has not been computed yet.
        - `declined_reason` string, nullable, required — Reason the transaction was declined (when status is declined).
        - `id` string, required — Card transaction ID.
        - `local_amount` string, nullable, required — Amount the merchant charged in their local currency, as a decimal string. Pair with local_currency.
        - `local_currency` string, nullable, required — ISO 4217 currency code of the merchant-charged amount in local_amount.
        - `merchant_category` string, nullable, required — Merchant category.
        - `merchant_icon_url` string, nullable, required — Merchant icon URL.
        - `merchant_name` string, nullable, required — Merchant display name.
        - `object` 'card_transaction', required
        - `posted_at` string, date-time, nullable, required — ISO 8601 timestamp the transaction was settled by the card network.
        - `status` string, nullable, required — Current card transaction status.
        - `usd_amount` string, nullable, required — The processor-settled USD amount as a decimal string. The ledger's USDT leg is posted 1:1 from this value.
    - `source` object, nullable, required — Source of this ledger activity.
      - `amount_float` number, nullable — Withdrawal amount as a decimal number in the destination currency (withdrawal sources only; requires payout:withdrawal:read).
      - `chain` string, nullable — Chain the deposit landed on, for example plasma (onchain_transaction sources only).
      - `claim_url` string, nullable — Public claim URL for the airdrop link (airdrop_link sources only).
      - `created_at` string, date-time, nullable — Withdrawal creation time as an ISO 8601 timestamp (withdrawal sources only; requires payout:withdrawal:read).
      - `estimated_arrival` string, date-time, nullable — Estimated arrival as an ISO 8601 timestamp (withdrawal sources only; requires payout:withdrawal:read).
      - `from_amount` string, nullable — Amount converted out of from_currency as a decimal string (swap sources only).
      - `from_currency` string, nullable — Lowercase currency code converted from (swap sources only).
      - `id` string, required
      - `object` string, required
      - `payer_name` string, nullable — Name of the entity processing the payout (withdrawal sources only; requires payout:withdrawal:read).
      - `payout_destination` object, nullable — Payout destination display info (withdrawal sources only).
        - `icon_url` string, nullable
        - `payer_name` string, nullable
      - `payout_token_nickname` string, nullable — Saved payout destination nickname (withdrawal sources only).
      - `reason` string, nullable — Why the activity happened. On transfer sources this is the transfer reason, for example pool_top_up or bounty_return. On withdrawal sources it explains why the withdrawal was canceled, denied, or failed (requires payout:withdrawal:read); null while the withdrawal is progressing normally.
      - `sender_address` string, nullable — Sender wallet address or onramp provider identifier (onchain_transaction sources only).
      - `status` string, nullable — Lifecycle status. On withdrawal sources this is the withdrawal status (requires payout:withdrawal:read); on airdrop_link sources it is the claim-link status (ungated); on payment and top-up sources it is the friendly payment status such as succeeded/pending/failed (ungated).
      - `to_amount` string, nullable — Amount received in to_currency as a decimal string (swap sources only).
      - `to_currency` string, nullable — Lowercase currency code converted to (swap sources only).
      - `tx_hash` string, nullable — On-chain transaction hash (onchain_transaction and swap sources only).
  - `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` 'swap.completed', required — The webhook event type

## Acknowledgement `200`

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

---

[API](https://skmtc.net/whop/apis/whop-api.md) · [All operations](https://skmtc.net/whop/apis/whop-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/whop/whop-api/versions/866821546d67/schema)
