---
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. `ads_triple_whale_integration` takes the Data-In API key to connect with, or `null` to disconnect, plus an optional `shop_domain`. `ads_payment_methods` always requires a `primary` entry. `backup` is optional and any pairing is allowed — two cards, `card`+`platform_balance`, or a single method — so a card-only advertiser can fund ads without a platform balance. The `primary` and `backup` must be different sources. A `platform_balance` entry may omit `id` to use the account's default Whop balance. Configuring a `card` requires a user token; account API keys can set up platform-balance billing only.

## 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.
  - `ads_payment_methods` object — How the account pays for Whop Ads spend. `primary` is charged first; `backup` covers the charge when the primary fails.
    - `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`.
  - `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.
  - `ads_triple_whale_integration` object — Connects or disconnects the Triple Whale integration. Requires the `ad_campaign:create` scope. 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, required — 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.
    - `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). Validated against Triple Whale — the API key must have access to it — before it is stored. 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.
  - `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.
  - `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.
  - `economic_intelligence` boolean — Whether economic intelligence is enabled for the account. Requires company:update permission and an existing ledger account.

## 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 enabled for the account.

## Other responses

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

## Changes

> 60 revisions in range; 1 not diffed.

- **2026-09-16** `ff3a76573563` — 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-15** `c19acf2e2548` — 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-14** `14e4732f295d` — 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-13** `2d59d2cf94cf` — 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-13** `f4295f1f74a6` — 5 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`
  - added the new optional request property `ads_certifications`
  - added the non-success response with the status `409`
  - …1 more

[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/ff3a76573563?raw)
