---
title: "Update settings"
description: "Change settings, as the settings pages do: send any subset of the sections GET /settings returns (general, email, download_page, download_limits, order_conditions, shopify_sync, watermark, customer_accounts, eu_withdrawa"
url: https://docs.filemonk.io/v2/api-reference/settings/update-settings/
api: "API v2 reference"
method: PATCH
path: "/settings"
---

# Update settings

`PATCH https://app.filemonk.io/api/v2/external/settings`

Change settings, as the settings pages do: send any subset of the sections [`GET /settings`](https://docs.filemonk.io/v2/api-reference/settings/get-settings/) returns (general, email, download_page, download_limits, order_conditions, shopify_sync, watermark, customer_accounts, eu_withdrawal) with only the fields to change. Answers with every setting after the save.

**Note:** Deep partial: untouched fields keep their value. email.domain.dkim_verified is read-only. The same checks as the dashboard run (email copy is spam-checked, the download button text cannot be blank).

## Request body

- `general` (object)
  - `app_enabled` (boolean, nullable)
  - `default_locale` (string)
  - `app_locale` (string)
  - `multi_language_enabled` (boolean)
  - `ignore_orders_before` (object)
    - `date` (string, nullable): ISO 8601 date or time.
    - `order_number` (integer, nullable)
  - `branding_hidden` (boolean, nullable)
- `email` (object)
  - `enabled` (boolean, nullable)
  - `from_name` (string, nullable)
  - `from_address` (string, nullable)
  - `reply_to` (string, nullable)
  - `report_address` (string, nullable)
  - `subject` (string, nullable): e.g. `Your downloads are ready`
  - `body` (string, nullable)
  - `button` (object)
    - `text` (string, nullable): e.g. `Download now`
    - `text_color` (string, nullable)
    - `background_color` (string, nullable)
    - `border_radius` (integer, nullable)
  - `footer_text` (string, nullable)
  - `font_family` (string, nullable)
  - `logo_size` (string)
  - `colors` (object)
    - `text` (string, nullable)
    - `background` (string, nullable)
  - `css` (string, nullable)
  - `product_update` (object)
    - `subject` (string, nullable)
    - `body` (string, nullable)
  - `merchant_notifications` (object)
    - `promotions` (boolean, nullable)
    - `usage` (boolean, nullable)
    - `licence_exhaustion` (boolean, nullable)
    - `licence_exhaustion_threshold` (integer, nullable)
  - `domain` (object)
    - `custom_address` (boolean, nullable)
    - `name` (string, nullable)
    - `dkim_verified` (boolean)
- `download_page` (object)
  - `host` (string, nullable) One of: `filemonk`, `storefront`, `customer_account`, `null`.
  - `path_prefix` (string, nullable)
  - `require_login` (boolean, nullable)
  - `texts` (object)
    - `thanks` (string, nullable)
    - `button` (string, nullable)
    - `store_link` (string, nullable)
    - `orders_link` (string, nullable)
    - `orders_index` (string, nullable)
    - `custom_downloads` (string, nullable)
    - `custom_downloads_ready` (string, nullable)
    - `licence_label` (string)
    - `licence_type_label` (string)
    - `licence_button` (string, nullable)
    - `licence_error` (string)
    - `login_title` (string, nullable)
    - `login_message` (string, nullable)
    - `login_button` (string, nullable)
    - `total_label` (string, nullable)
    - `files_label` (string, nullable)
    - `downloading` (string, nullable)
    - `processing` (string, nullable)
    - `processing_button` (string, nullable)
    - `preorder` (string, nullable)
    - `watermarking` (string, nullable)
    - `generic_error` (string, nullable)
    - `copy_button` (string, nullable)
    - `copied` (string, nullable)
    - `not_available` (string, nullable)
  - `colors` (object)
    - `text` (string, nullable)
    - `background` (string, nullable)
    - `section` (string, nullable)
    - `button_text` (string, nullable)
    - `button_background` (string, nullable)
  - `show_price` (boolean, nullable)
  - `show_image` (boolean, nullable)
  - `show_store_link` (boolean, nullable)
  - `show_orders_link` (boolean, nullable)
  - `pdf_viewer` (boolean)
  - `hide_file_extensions` (boolean, nullable)
  - `price_format` (string, nullable)
  - `logo_size` (integer, nullable)
  - `css` (string, nullable)
  - `store_url` (string, nullable)
  - `default_view` (string, nullable)
- `download_limits` (object)
  - `show` (boolean, nullable): Whether the download page shows the buyer the limits. Display only: the limits apply either way.
  - `per_file_count` (integer, nullable): How many times each file can be downloaded per order. null means unlimited.
  - `days` (integer, nullable): How many days after the order the files stay downloadable. null means unlimited.
  - `messages` (object)
    - `limit_reached` (string, nullable)
    - `count` (string, nullable)
    - `days` (string, nullable)
- `order_conditions` (object)
  - `check_status` (boolean, nullable)
  - `status_type` (string, nullable)
  - `financial_status` (string, nullable)
  - `fulfillment_status` (string, nullable)
  - `shipment_status` (string, nullable)
  - `revoke_on_mismatch` (boolean, nullable)
  - `refunded_order_protection` (boolean, nullable)
  - `fraud_protection` (boolean, nullable)
  - `process_orders_on_update` (boolean)
- `shopify_sync` (object)
  - `add_order_tags` (boolean, nullable)
  - `order_tags` (string, nullable)
  - `mark_line_items_fulfilled` (boolean)
  - `skip_fulfillment_for_tags` (string, nullable)
  - `add_tracking_info` (boolean, nullable)
- `watermark` (object)
  - `enabled` (boolean)
  - `all_files` (boolean, nullable)
  - `text` (string)
  - `style` (string)
  - `layer` (string)
  - `opacity` (integer)
  - `font` (object)
    - `size` (integer)
    - `color` (string)
    - `name` (string)
- `customer_accounts` (object)
  - `button_text` (string, nullable)
  - `product_downloads_subtitle` (string, nullable)
  - `order_status` (object)
    - `thanks_text` (string, nullable)
    - `button_text` (string, nullable)
    - `thank_you_page_button` (boolean, nullable)
    - `order_status_page_button` (boolean, nullable)
- `eu_withdrawal` (object)
  - `enabled` (boolean)
  - `scope` (string) One of: `eu_only`, `all_customers`.
  - `consent_text` (string, nullable)
  - `button_text` (string, nullable)

## Returns

- `general` (object, required)
  - `app_enabled` (boolean, nullable, required): e.g. `true`
  - `default_locale` (string, nullable, required): e.g. `en`
  - `app_locale` (string, nullable, required): e.g. `fr`
  - `multi_language_enabled` (boolean, nullable, required): e.g. `true`
  - `ignore_orders_before` (object, required)
    - `date` (any, required)
    - `order_number` (any, required)
  - `branding_hidden` (boolean, nullable, required): e.g. `false`
- `email` (object, required)
  - `enabled` (boolean, nullable, required): e.g. `true`
  - `from_name` (string, nullable, required): e.g. `Example Store`
  - `from_address` (string, nullable, required): e.g. `alerts@filemonk.io`
  - `reply_to` (string, nullable, required): e.g. `owner@example.com`
  - `report_address` (string, nullable, required): e.g. `owner@example.com`
  - `subject` (string, nullable, required): e.g. `Your {{shop.name}} {{order.name}} content`
  - `body` (string, nullable, required): e.g. `Thanks for purchasing from {{shop.name}}! Click the butto…`
  - `button` (object, required)
    - `text` (string, nullable, required): e.g. `Access downloads`
    - `text_color` (string, nullable, required): e.g. `#fff`
    - `background_color` (string, nullable, required): e.g. `#202223`
    - `border_radius` (integer, nullable, required): e.g. `5`
  - `footer_text` (string, nullable, required): e.g. `Facing trouble accessing your content? Contact us right a…`
  - `font_family` (string, nullable, required): e.g. `sans-serif`
  - `logo_size` (string, nullable, required): e.g. `200`
  - `colors` (object, required)
    - `text` (string, nullable, required): e.g. `#202223`
    - `background` (string, nullable, required): e.g. `#ffffff`
  - `css` (any, required)
  - `product_update` (object, required)
    - `subject` (string, nullable, required): e.g. `Update to {{product_variant.title}} in your order {{order…`
    - `body` (string, nullable, required): e.g. `Your most recent purchase for {{product_variant.title}} h…`
  - `merchant_notifications` (object, required)
    - `promotions` (boolean, nullable, required): e.g. `true`
    - `usage` (boolean, nullable, required): e.g. `true`
    - `licence_exhaustion` (boolean, nullable, required): e.g. `false`
    - `licence_exhaustion_threshold` (integer, nullable, required): e.g. `80`
  - `domain` (object, required)
    - `custom_address` (boolean, nullable, required): e.g. `false`
    - `name` (string, nullable, required): e.g. `example-store`
    - `dkim_verified` (boolean, nullable, required): e.g. `false`
- `download_page` (object, required)
  - `host` (string, nullable, required): e.g. `storefront`
  - `path_prefix` (string, nullable, required): e.g. `/apps/filemonk`
  - `require_login` (any, required)
  - `texts` (object, required)
    - `thanks` (string, nullable, required): e.g. `Thank you for purchasing from our store! Click on any of …`
    - `button` (string, nullable, required): e.g. `Download`
    - `store_link` (string, nullable, required): e.g. `Visit store`
    - `orders_link` (string, nullable, required): e.g. `My orders`
    - `orders_index` (string, nullable, required): e.g. `My orders`
    - `custom_downloads` (string, nullable, required): e.g. `Custom products`
    - `custom_downloads_ready` (string, nullable, required): e.g. `Your digital content will be available here when it's ready.`
    - `licence_label` (string, nullable, required): e.g. `Licence key`
    - `licence_type_label` (string, nullable, required): e.g. `Key`
    - `licence_button` (string, nullable, required): e.g. `View`
    - `licence_error` (string, nullable, required): e.g. `No licence key available. Contact store.`
    - `login_title` (string, nullable, required): e.g. `Customer Login Required`
    - `login_message` (string, nullable, required): e.g. `You need to be logged in with the correct account to acce…`
    - `login_button` (string, nullable, required): e.g. `Log In`
    - `total_label` (string, nullable, required): e.g. `Total`
    - `files_label` (string, nullable, required): e.g. `files`
    - `downloading` (string, nullable, required): e.g. `Downloading...`
    - `processing` (string, nullable, required): e.g. `Processing order. Please wait.`
    - `processing_button` (string, nullable, required): e.g. `Processing...`
    - `preorder` (string, nullable, required): e.g. `This product is currently in preorder and will be availab…`
    - `watermarking` (string, nullable, required): e.g. `Watermarking is not complete, please wait or reload the p…`
    - `generic_error` (string, nullable, required): e.g. `Something went wrong.`
    - `copy_button` (string, nullable, required): e.g. `Copy`
    - `copied` (string, nullable, required): e.g. `Copied to clipboard`
    - `not_available` (string, nullable, required): e.g. `Not Available`
  - `colors` (object, required)
    - `text` (string, nullable, required): e.g. `#202223`
    - `background` (string, nullable, required): e.g. `#f6f7f7`
    - `section` (string, nullable, required): e.g. `#ffffff`
    - `button_text` (string, nullable, required): e.g. `#FFF`
    - `button_background` (string, nullable, required): e.g. `#1B76FF`
  - `show_price` (boolean, nullable, required): e.g. `true`
  - `show_image` (boolean, nullable, required): e.g. `true`
  - `show_store_link` (boolean, nullable, required): e.g. `true`
  - `show_orders_link` (boolean, nullable, required): e.g. `true`
  - `pdf_viewer` (boolean, nullable, required): e.g. `false`
  - `hide_file_extensions` (boolean, nullable, required): e.g. `false`
  - `price_format` (string, nullable, required): e.g. `{{currency_symbol}}{{amount}}`
  - `logo_size` (integer, nullable, required): e.g. `100`
  - `css` (any, required)
  - `store_url` (string, nullable, required): e.g. `example-store.myshopify.com`
  - `default_view` (string, nullable, required): e.g. `files`
- `download_limits` (object, required)
  - `show` (boolean, nullable, required): e.g. `false`
  - `per_file_count` (any, required)
  - `days` (any, required)
  - `messages` (object, required)
    - `limit_reached` (string, nullable, required): e.g. `Sorry! This file is no longer available to download.`
    - `count` (string, nullable, required): e.g. `Maximum downloads per file: `
    - `days` (string, nullable, required): e.g. `Available to download until`
- `order_conditions` (object, required)
  - `check_status` (boolean, nullable, required): e.g. `true`
  - `status_type` (string, nullable, required): e.g. `fulfillment`
  - `financial_status` (string, nullable, required)
  - `fulfillment_status` (string, nullable, required): e.g. `fulfilled`
  - `shipment_status` (string, nullable, required)
  - `revoke_on_mismatch` (boolean, nullable, required): e.g. `false`
  - `refunded_order_protection` (boolean, nullable, required): e.g. `false`
  - `fraud_protection` (boolean, nullable, required): e.g. `false`
  - `process_orders_on_update` (boolean, nullable, required): e.g. `false`
- `shopify_sync` (object, required)
  - `add_order_tags` (boolean, nullable, required): e.g. `false`
  - `order_tags` (string, nullable, required): e.g. `filemonk_order`
  - `mark_line_items_fulfilled` (boolean, nullable, required): e.g. `false`
  - `skip_fulfillment_for_tags` (any, required)
  - `add_tracking_info` (boolean, nullable, required): e.g. `true`
- `watermark` (object, required)
  - `enabled` (boolean, nullable, required): e.g. `true`
  - `all_files` (boolean, nullable, required): e.g. `true`
  - `text` (string, nullable, required): e.g. `Licensed to {{order.customer_name}} ({{order.email_or_pho…`
  - `style` (string, nullable, required): e.g. `center`
  - `layer` (string, nullable, required): e.g. `above`
  - `opacity` (integer, nullable, required): e.g. `30`
  - `font` (object, required)
    - `size` (integer, nullable, required): e.g. `30`
    - `color` (string, nullable, required): e.g. `#ff0018`
    - `name` (string, nullable, required): e.g. `Courier New Bold`
- `customer_accounts` (object, required)
  - `button_text` (string, nullable, required): e.g. `Download files`
  - `product_downloads_subtitle` (string, nullable, required): e.g. `Downloads available`
  - `order_status` (object, required)
    - `thanks_text` (string, nullable, required): e.g. `Thanks for your purchase! Click the button below to acces…`
    - `button_text` (string, nullable, required): e.g. `Access downloads`
    - `thank_you_page_button` (boolean, nullable, required): e.g. `true`
    - `order_status_page_button` (boolean, nullable, required): e.g. `true`
- `eu_withdrawal` (object, required)
  - `enabled` (boolean, nullable, required): e.g. `false`
  - `scope` (string, nullable, required): e.g. `eu_only`
  - `consent_text` (string, nullable, required): e.g. `I request immediate access to this digital content and ac…`
  - `button_text` (string, nullable, required): e.g. `Confirm and download`

Rate limit: this call costs 2 points ([rate limits](https://docs.filemonk.io/v2/errors-and-rate-limits/)).

## Example request

```sh
curl -X PATCH "https://app.filemonk.io/api/v2/external/settings" \
  -H "X-Auth-Token: $FILEMONK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "email": {
      "subject": "Your downloads are ready",
      "button": {
        "text": "Download now"
      }
    },
    "download_limits": {
      "per_file_count": 5
    }
  }'
```

## 200

Success: the write completed; the body is the updated resource.

```json
{
  "general": {
    "app_enabled": true,
    "default_locale": "en",
    "app_locale": "fr",
    "multi_language_enabled": true,
    "ignore_orders_before": {
      "date": null,
      "order_number": null
    },
    "branding_hidden": false
  },
  "email": {
    "enabled": true,
    "from_name": "Example Store",
    "from_address": "alerts@filemonk.io",
    "reply_to": "owner@example.com",
    "report_address": "owner@example.com",
    "subject": "Your {{shop.name}} {{order.name}} content",
    "body": "Thanks for purchasing from {{shop.name}}! Click the button below to access the digital content for your order {{order.name}}.",
    "button": {
      "text": "Access downloads",
      "text_color": "#fff",
      "background_color": "#202223",
      "border_radius": 5
    },
    "footer_text": "Facing trouble accessing your content? Contact us right away.",
    "font_family": "sans-serif",
    "logo_size": "200",
    "colors": {
      "text": "#202223",
      "background": "#ffffff"
    },
    "css": null,
    "product_update": {
      "subject": "Update to {{product_variant.title}} in your order {{order.name}}",
      "body": "Your most recent purchase for {{product_variant.title}} has been updated. Click the link below to access your updated content."
    },
    "merchant_notifications": {
      "promotions": true,
      "usage": true,
      "licence_exhaustion": false,
      "licence_exhaustion_threshold": 80
    },
    "domain": {
      "custom_address": false,
      "name": "example-store",
      "dkim_verified": false
    }
  },
  "download_page": {
    "host": "storefront",
    "path_prefix": "/apps/filemonk",
    "require_login": null,
    "texts": {
      "thanks": "Thank you for purchasing from our store! Click on any of the products below to download your content.",
      "button": "Download",
      "store_link": "Visit store",
      "orders_link": "My orders",
      "orders_index": "My orders",
      "custom_downloads": "Custom products",
      "custom_downloads_ready": "Your digital content will be available here when it's ready.",
      "licence_label": "Licence key",
      "licence_type_label": "Key",
      "licence_button": "View",
      "licence_error": "No licence key available. Contact store.",
      "login_title": "Customer Login Required",
      "login_message": "You need to be logged in with the correct account to access your digital orders. Please click the button below to log in or switch to the appropriate account.",
      "login_button": "Log In",
      "total_label": "Total",
      "files_label": "files",
      "downloading": "Downloading...",
      "processing": "Processing order. Please wait.",
      "processing_button": "Processing...",
      "preorder": "This product is currently in preorder and will be available for download on {{date}}.",
      "watermarking": "Watermarking is not complete, please wait or reload the page to check again.",
      "generic_error": "Something went wrong.",
      "copy_button": "Copy",
      "copied": "Copied to clipboard",
      "not_available": "Not Available"
    },
    "colors": {
      "text": "#202223",
      "background": "#f6f7f7",
      "section": "#ffffff",
      "button_text": "#FFF",
      "button_background": "#1B76FF"
    },
    "show_price": true,
    "show_image": true,
    "show_store_link": true,
    "show_orders_link": true,
    "pdf_viewer": false,
    "hide_file_extensions": false,
    "price_format": "{{currency_symbol}}{{amount}}",
    "logo_size": 100,
    "css": null,
    "store_url": "example-store.myshopify.com",
    "default_view": "files"
  },
  "download_limits": {
    "show": false,
    "per_file_count": null,
    "days": null,
    "messages": {
      "limit_reached": "Sorry! This file is no longer available to download.",
      "count": "Maximum downloads per file: ",
      "days": "Available to download until"
    }
  },
  "order_conditions": {
    "check_status": true,
    "status_type": "fulfillment",
    "financial_status": "",
    "fulfillment_status": "fulfilled",
    "shipment_status": "",
    "revoke_on_mismatch": false,
    "refunded_order_protection": false,
    "fraud_protection": false,
    "process_orders_on_update": false
  },
  "shopify_sync": {
    "add_order_tags": false,
    "order_tags": "filemonk_order",
    "mark_line_items_fulfilled": false,
    "skip_fulfillment_for_tags": null,
    "add_tracking_info": true
  },
  "watermark": {
    "enabled": true,
    "all_files": true,
    "text": "Licensed to {{order.customer_name}} ({{order.email_or_phone}}), order {{order.name}}. Please don't share this file.",
    "style": "center",
    "layer": "above",
    "opacity": 30,
    "font": {
      "size": 30,
      "color": "#ff0018",
      "name": "Courier New Bold"
    }
  },
  "customer_accounts": {
    "button_text": "Download files",
    "product_downloads_subtitle": "Downloads available",
    "order_status": {
      "thanks_text": "Thanks for your purchase! Click the button below to access your files.",
      "button_text": "Access downloads",
      "thank_you_page_button": true,
      "order_status_page_button": true
    }
  },
  "eu_withdrawal": {
    "enabled": false,
    "scope": "eu_only",
    "consent_text": "I request immediate access to this digital content and acknowledge that I lose my right of withdrawal once the download begins.",
    "button_text": "Confirm and download"
  }
}
```

## 401

Missing or invalid API key.

```json
{
  "errors": [
    "Invalid API key"
  ]
}
```

## 422

The request failed validation, or sent a key the action does not take (`code: &quot;unknown_parameters&quot;` with `unknown` and `accepted`). Nothing was saved.

```json
{
  "errors": [
    "access.download_limit_count must be an integer of at least 0"
  ],
  "field_errors": {
    "access.download_limit_count": [
      "must be an integer of at least 0"
    ]
  }
}
```

## 429

Rate limited. Cost-weighted per API key, shared with API v1: a read costs 1 point, a write 2, 40 points per fixed 60-second window. Every response carries `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset` (Unix time the window ends); a 429 adds `Retry-After` (seconds), `retry_after`, `retryable: true` and a `next_step` in the body. A 429 did nothing: wait `retry_after` seconds, then send the same request again. The budget is per key, so every tool or script using the key shares it; prefer one list call with `per_page` over many single reads.

```json
{
  "errors": [
    "You have exceeded the rate limit of 40 points per 60 seconds. Read requests cost 1 point(s) and write requests cost 2 point(s). Please retry after 12 second(s)."
  ],
  "code": "rate_limited",
  "retry_after": 12,
  "error": "Rate limit exceeded",
  "message": "You have exceeded the rate limit of 40 points per 60 seconds. Read requests cost 1 point(s) and write requests cost 2 point(s). Please retry after 12 second(s)."
}
```

