> ## Documentation Index
> Fetch the complete documentation index at: https://doc.playsmart.api.dolly.gg/llms.txt
> Use this file to discover all available pages before exploring further.

# GET /v1/app-settings — Retrieve global app configuration

> Retrieve the global PlaySmart application settings including maintenance mode, version requirements, ad frequency, and withdrawal configuration.

Fetch this endpoint once on app launch to configure your game client before the player sees any UI. The settings control whether the app is in maintenance mode, which app versions are supported, how frequently ads are shown, and the rules governing withdrawal requests.

## Endpoint

```text theme={null}
GET /v1/app-settings
```

No authentication is required.

## Example request

```bash theme={null}
curl https://playsmart-gateway-1w8ko864.uc.gateway.dev/v1/app-settings
```

## Response

### 200 OK

The response `data` field is an array containing a single settings object.

<ResponseField name="version" type="string">
  The current app version string (e.g. `"2.1.0"`).
</ResponseField>

<ResponseField name="maintenance" type="boolean">
  If `true`, the app is in maintenance mode. Show a maintenance screen and prevent the player from proceeding.
</ResponseField>

<ResponseField name="ios_store_id" type="string">
  The iOS App Store identifier for the application.
</ResponseField>

<ResponseField name="min_version_code" type="number">
  The minimum required version code. Force-update any client running a version code below this value before allowing access.
</ResponseField>

<ResponseField name="ads_enabled" type="boolean">
  Whether ads are globally enabled across the platform. When `false`, suppress all ad requests regardless of per-game settings.
</ResponseField>

<ResponseField name="post_game_interstitial_every_n_games" type="number">
  Show a post-game interstitial ad after every N games completed. A value of `1` means after every game. Per-game overrides take precedence when available.
</ResponseField>

<ResponseField name="minimum_withdrawal_amount" type="number">
  The minimum USD amount a player must request in a single withdrawal. Reject withdrawal attempts below this threshold on the client before submitting.
</ResponseField>

<ResponseField name="withdraw_cooldown_hours" type="number">
  The number of hours a player must wait between consecutive withdrawal requests. Enforce this on the client to avoid unnecessary `422` errors.
</ResponseField>

<ResponseField name="conversion_interval_minutes" type="number">
  How often (in minutes) the server-side coin-to-USD conversion job runs. Use this to set a polling interval if you display a live balance.
</ResponseField>

<ResponseField name="initial_conversion_time" type="string">
  The time of day when the first daily conversion runs (e.g. `"12:00"`). Use together with `conversion_interval_minutes` to predict upcoming conversion windows.
</ResponseField>

<ResponseField name="on_app_resume_get_user_after_x_seconds" type="number">
  Number of seconds to wait after the app resumes from the background before refreshing the player's profile data. Use this to throttle unnecessary refetch calls.
</ResponseField>

<ResponseField name="on_conversion_get_user_after_x_seconds" type="number">
  Number of seconds to wait after a coin conversion event before refreshing the player's profile. Allows the server time to settle the new balance before your client reads it.
</ResponseField>

```json theme={null}
{
  "data": [
    {
      "version": "2.1.0",
      "maintenance": false,
      "ios_store_id": "com.playsmart.app",
      "min_version_code": 210,
      "ads_enabled": true,
      "post_game_interstitial_every_n_games": 3,
      "minimum_withdrawal_amount": 5,
      "withdraw_cooldown_hours": 24,
      "conversion_interval_minutes": 120,
      "initial_conversion_time": "12:00",
      "on_app_resume_get_user_after_x_seconds": 10,
      "on_conversion_get_user_after_x_seconds": 0
    }
  ]
}
```
