---
title: "Update Account Preferences"
method: PATCH
path: "/accounts/{account_id}/preferences"
tags: ["Accounts"]
---

# Update Account Preferences

`PATCH /accounts/{account_id}/preferences`

Updates the account's preferences. Each top-level key present in the body is replaced as a whole; omitted keys are left untouched.

Required scopes depend on the preferences being updated:

| Preferences | Required scope |
| --- | --- |
| `ads_payment_methods`, `ads_reporting_currency`, `ads_scheduling_timezone`, `ads_triple_whale_integration`, `ads_certifications` | `ad_campaign:create` |
| `cards_auto_top_up`, `cards_notifications` | `payout:account:update` |
| `dispute_fighter_enabled` | `payment:dispute` |
| `economic_intelligence_duration_key` | `company:update` |

When updating preferences from multiple rows, all corresponding scopes are required for the account.

## Headers

- `Api-Version-Date` string

## Request body

- object
  - `ads_certifications` object — Opens an advertising certification application. Keyed by certification type (`prescription_drug_ads`); set the entry's `status` to `pending_information` to start, then answer the requested fields via `PATCH /verifications/{id}`. Only one application per type can be open at a time; every other status is set by Whop's review. Requires the `ad_campaign:create` scope on your API key.
  - `ads_payment_methods` object — How the account pays for Whop Ads spend. Requires `primary`; `backup` is optional and covers the charge when the primary fails. Requires the `ad_campaign:create` scope on your API key. Configuring a `card` requires a user token; account API keys can configure only `platform_balance` sources.
    - `backup` object — Optional second method charged if the primary fails. Any pairing is allowed (two cards, card+balance, balance+card); omit it to run on a single method. Must differ from the primary.
      - `id` string — The funding source ID: a Whop balance (`ldgr_`) for `platform_balance`, or a payment method (`payt_`) for `card`. Optional for `platform_balance` — defaults to the account's default Whop balance. Required for `card`.
      - `type` 'platform_balance' | 'card', required — The funding source kind.
    - `primary` object, required
      - `id` string — The funding source ID: a Whop balance (`ldgr_`) for `platform_balance`, or a payment method (`payt_`) for `card`. Optional for `platform_balance` — defaults to the account's default Whop balance. Required for `card`.
      - `type` 'platform_balance' | 'card', required — The funding source kind.
  - `ads_reporting_currency` string — Lowercase ISO currency code, such as `usd` or `eur`, used to display ad spend and stats. Defaults to `usd`. Requires the `ad_campaign:create` scope on your API key.
  - `ads_scheduling_timezone` string — IANA timezone (e.g. `America/New_York`) used to interpret campaign start/end times and to bucket reports. Cannot be cleared once set — pass a new value to change it. Requires the `ad_campaign:create` scope on your API key.
  - `ads_triple_whale_integration` object — Connects or disconnects the Triple Whale integration, or changes the shop it reports to. Requires the `ad_campaign:create` scope on your API key. Connecting requires a shop domain to report spend against — either an explicit `shop_domain` (required for any merchant without a connected Shopify store, e.g. WooCommerce, a custom checkout, or a white-label platform's merchant) or a Shopify store connected on the Fulfillment page.
    - `api_key` string, nullable — A Triple Whale Data-In API key with the `Ads: Write` scope, validated against Triple Whale before it is stored. Pass `null` to disconnect. Connecting for the first time backfills the account's existing ad spend. Required unless you are only changing `shop_domain` on an already connected integration, in which case the stored key is reused.
    - `shop_domain` string — The exact shop domain configured in Triple Whale's Settings → Store (for Shopify this is the `.myshopify.com` domain; for a custom sales platform it's whatever domain Triple Whale assigned when the shop was set up there). A leading `https://` and trailing `/` are stripped, and what remains must be a bare hostname with no path or spaces. Validated against Triple Whale — the API key must have access to it — before it is stored. Changing it on a connected integration backfills the account's ad spend onto the new shop. Omit to fall back to a connected Shopify store's domain; there is no way to clear a stored value, only to overwrite it with a new domain.
  - `cards_auto_top_up` boolean — Whether incoming funds are automatically moved to the account's cards balance. Requires a cards balance on the account and the `payout:account:update` scope on your API key.
  - `cards_notifications` boolean — Whether Whop Card notifications reach this account's team. Set it to `false` to stop every card email and push notification for the account — application status, verification and action-required alerts, card-ready alerts, declines, large charges, and cashback summaries. Cardholder onboarding invitations still send, because they carry the only link an invited cardholder can onboard with. Requesting a card is rejected while notifications are off, since the request reaches nobody. Cards on personal accounts are unaffected. Requires a cards balance on the account and the `payout:account:update` scope on your API key.
  - `dispute_fighter_enabled` boolean — Whether Whop assembles and files the evidence response when this account's payments are disputed. Off by default; enabling it also opts the account into the success fee charged only on disputes it wins. Requires the `payment:dispute` scope on your API key.
  - `economic_intelligence_duration_key` '7_days' | '1_day' | '1_hour' — Turns on Economic Intelligence for the duration with this `key` in `economic_intelligence_offers`, at that duration's fee. It can't be changed or turned off until `economic_intelligence_ends_at`, and it can only be turned on once the account is off the Economic Intelligence waitlist. Requires the `company:update` scope on your API key.
  - `subscription_failure_behavior` 'cancel' | 'none' — What happens to a subscription once every retry of a renewal payment has failed. `cancel` (the default) cancels it. `none` leaves it past due and keeps billing it each period; access follows the account's past-due access setting. Requires company:manage_checkout permission.

## Response `200`

preferences updated

- object
  - `ads_agreement` object, required — The account's Whop Ads services and payment authorization agreement. While `pending_signature`, campaign launch is blocked; sign by answering `requested_information` via `PATCH /verifications/{id}`.
    - `accepted_at` string, nullable, required — When the agreement was signed, as an ISO 8601 timestamp. `null` until signed.
    - `agreement_version` string, nullable, required — The agreement version signed or awaiting signature, as an ISO date. `null` when no signature is required.
    - `printed_name` string, nullable, required — The signer's printed full name. `null` until signed.
    - `status` 'not_required' | 'pending_signature' | 'signed', required — Where the account's ads services agreement stands.
  - `ads_certifications` object[], required — The account's advertising certifications, one entry per certification type Whop offers. Start an application by setting a type's `status` to `pending_information` via `PATCH`, then answer the fields it requests via `GET`/`PATCH /verifications/{id}`.
    - `approved_countries` string[], required — Countries every approved application of this type covers, as ISO 3166-1 alpha-2 codes. Ads targeting only these countries are exempt from the category's restrictions.
    - `business_name` string, nullable, required — The business name on the latest application.
    - `business_type` 'online_pharmacy' | 'pharmaceutical_manufacturer' | 'telehealth_provider' | 'null', nullable, required — The kind of business on the latest application. `null` until the account applies.
    - `certification_type` 'prescription_drug_ads', required — The certification this entry describes.
    - `countries` string[], required — Countries the latest application covers, as ISO 3166-1 alpha-2 codes.
    - `denial_reason` string, nullable, required — Why the latest application was denied. `null` unless `status` is `denied`.
    - `request_id` string, nullable, required — The latest application's request ID, prefixed `inrq_`. `null` until the account applies.
    - `status` 'not_started' | 'pending_information' | 'in_review' | 'approved' | 'denied', required — `not_started` until the account applies; `pending_information` while an application waits for answers; `in_review` once submitted; then `approved` or `denied`.
    - `url` string, nullable, required — The website on the latest application.
  - `ads_payment_methods` object, nullable, required — How the account pays for Whop Ads spend. `primary` is charged first; `backup` covers the charge when the primary fails. `null` until ads billing has been configured.
    - `backup` object, nullable, required
      - `card_brand` string, nullable — Card brand, present for `card` entries.
      - `exp_month` integer, nullable — Expiration month, present for `card` entries.
      - `exp_year` integer, nullable — Expiration year, present for `card` entries.
      - `icon_url` string, nullable — Balance owner icon URL, present for `platform_balance` entries.
      - `id` string, required — The funding source ID: a Whop balance (`ldgr_`) for `platform_balance`, or a payment method (`payt_`) for `card`.
      - `last4` string, nullable — Last four digits, present for `card` entries.
      - `title` string, nullable — Balance name, present for account `platform_balance` entries (null for a personal balance).
      - `type` 'platform_balance' | 'card', required — The funding source kind: a Whop balance or a saved card.
    - `primary` object, nullable, required
      - `card_brand` string, nullable — Card brand, present for `card` entries.
      - `exp_month` integer, nullable — Expiration month, present for `card` entries.
      - `exp_year` integer, nullable — Expiration year, present for `card` entries.
      - `icon_url` string, nullable — Balance owner icon URL, present for `platform_balance` entries.
      - `id` string, required — The funding source ID: a Whop balance (`ldgr_`) for `platform_balance`, or a payment method (`payt_`) for `card`.
      - `last4` string, nullable — Last four digits, present for `card` entries.
      - `title` string, nullable — Balance name, present for account `platform_balance` entries (null for a personal balance).
      - `type` 'platform_balance' | 'card', required — The funding source kind: a Whop balance or a saved card.
  - `ads_reporting_currency` string, required — Lowercase ISO currency code, such as `usd` or `eur`, used to display ad spend and stats. Defaults to `usd`.
  - `ads_scheduling_timezone` string, required — IANA timezone (e.g. `America/New_York`) used to interpret campaign start/end times and to bucket reports. Defaults to `America/New_York` until explicitly overridden.
  - `ads_triple_whale_integration` object, required — The account's Triple Whale integration, which pushes Whop ad spend to Triple Whale's Data-In API so it reports as a `whop` channel. Available to any Triple Whale customer — Shopify, WooCommerce, a custom checkout, or no connected store — by setting `shop_domain` explicitly; Shopify merchants may instead rely on a connected store's domain. Requires the `ad_campaign:create` scope. Once connected, ad click-through URLs Whop serves carry `tw_source=whop` and `tw_adid=<ad id>` query parameters so Triple Whale's pixel attributes conversions back to the originating ad — no destination URL changes are needed.
    - `masked_api_key` string, nullable, required — The leading characters of the stored Data-In API key, followed by asterisks. The full key is never returned. `null` when no key is stored.
    - `shop_domain` string, nullable, required — The shop domain spend is reported for, such as `acme.myshopify.com` or a custom domain for a non-Shopify store. This is the explicit `shop_domain` if one was set, otherwise a connected Shopify store's domain. `null` when neither is present.
    - `status` 'connected' | 'not_connected' | 'requires_shop_domain', required — Where the integration stands. `requires_shop_domain` means no shop domain is configured — set `shop_domain` explicitly, or connect a Shopify store, before spend can be reported.
  - `cards_auto_top_up` boolean, required — Whether incoming funds are automatically moved to the account's cards balance. `false` when the account has no cards balance.
  - `cards_notifications` boolean, required — Whether Whop Card notifications reach this account's team. `true` by default, including when the account has no cards balance. Set it to `false` to stop every card email and push notification for the account — application status, verification and action-required alerts, card-ready alerts, declines, large charges, and cashback summaries. Cardholder onboarding invitations still send, because they carry the only link an invited cardholder can onboard with. Requesting a card is rejected while notifications are off, since the request reaches nobody. Cards on personal accounts are unaffected.
  - `dispute_fighter_enabled` boolean, required — Whether Whop assembles and files the evidence response when this account's payments are disputed. Off by default; enabling it also opts the account into the success fee charged only on disputes it wins.
  - `economic_intelligence` boolean, required — Whether Economic Intelligence is on for the account. It turns off automatically at `economic_intelligence_ends_at`.
  - `economic_intelligence_ends_at` string, nullable, required — When the account's committed Economic Intelligence period ends, as an ISO 8601 timestamp. Economic Intelligence can't be turned off before then. `null` when Economic Intelligence is off or has no end date.
  - `economic_intelligence_fee_percentage` number, nullable, required — Percentage of volume charged while Economic Intelligence is on, such as `1.5` for 1.5%. `null` when Economic Intelligence is off.
  - `economic_intelligence_offers` object[], nullable, required — Durations the account can choose from to turn on Economic Intelligence, each with its fee. `null` while Economic Intelligence is on or the account is still on the Economic Intelligence waitlist.
    - `duration` integer, required — What period of time Economic Intelligence stays on.
    - `duration_unit` 'hours' | 'days', required — The unit of time the duration is in (hours or days)
    - `fee_percentage` number, required — Percentage of volume charged while Economic Intelligence is on, such as `1.5` for 1.5%.
    - `key` '7_days' | '1_day' | '1_hour', required — The unique identifier for this duration. Pass this value as `economic_intelligence_duration_key` to turn it on.
    - `recommended` boolean, required — Whether Whop recommends this duration. Exactly one offer is recommended.
  - `subscription_failure_behavior` 'cancel' | 'none', required — What happens to a subscription once every retry of a renewal payment has failed. `cancel` (the default) cancels it. `none` leaves it past due and keeps billing it each period; access follows the account's past-due access setting.

## Other responses

- `400` — Invalid Parameters
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Resource not found
- `409` — Conflict

## Changes

> 74 revisions in range; 1 not diffed.

- **2026-09-27** `78e1ed7366cd` — 2 info
  - the security scope `ad_campaign:create` was added to the endpoint's security scheme `bearerAuth`
  - the security scope `company:update` was removed from the endpoint's security scheme `bearerAuth`
- **2026-09-26** `73dd0533cd81` — 2 info
  - the security scope `ad_campaign:create` was added to the endpoint's security scheme `bearerAuth`
  - the security scope `company:update` was removed from the endpoint's security scheme `bearerAuth`
- **2026-09-25** `86b97292852d` — 1 breaking, 1 warning, 7 info
  - removed the required property `economic_intelligence_offers/items/duration_days` from the response with the `200` status
  - removed the request property `economic_intelligence_duration_days`
  - the security scope `ad_campaign:create` was added to the endpoint's security scheme `bearerAuth`
  - the security scope `company:update` was removed from the endpoint's security scheme `bearerAuth`
  - …5 more
- **2026-09-25** `c1dceb26e505` — 1 warning, 8 info
  - removed the request property `economic_intelligence`
  - the security scope `ad_campaign:create` was added to the endpoint's security scheme `bearerAuth`
  - the security scope `company:update` was removed from the endpoint's security scheme `bearerAuth`
  - added the new optional request property `economic_intelligence_duration_days`
  - …5 more
- …earlier changes not shown

[Full history](https://skmtc.dev/whop/apis/whop-api/changes/accounts/:account_id/preferences/patch.md)

---

[API](https://skmtc.dev/whop/apis/whop-api.md) · [All operations](https://skmtc.dev/whop/apis/whop-api/llms.txt) · [OpenAPI document](https://skmtc.dev/whop/apis/whop-api/revisions/78e1ed7366cd?raw)
