---
title: "Update Reader Settings"
description: "Updates the menu lock settings for a Solo reader. The reader must be online.\nA successful response confirms that the reader applied the update.\n\nInclude at least one of `menu_lock.enabled` or `menu_lock.passcode`.\nOmitted settings keep their current values. The response contains only the\nsettings included in the request.\n\nWhen enabling menu lock for a reader without a PIN, include a four-digit PIN\nin `menu_lock.passcode` in the same request.\n\n\n**OAuth scopes:** Requires one of: `readers.write`.\n\n**Required permissions:**\n\n- `readers.checkouts.create`"
image: "https://developer.sumup.com/og/index.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://developer.sumup.com/llms.txt
> Use this file to discover all available pages before exploring further.

Path: SumUp REST API › Readers

`PATCH /v0.1/merchants/{merchant_code}/readers/{reader_id}/settings`

Updates the menu lock settings for a Solo reader. The reader must be online.
A successful response confirms that the reader applied the update.

Include at least one of `menu_lock.enabled` or `menu_lock.passcode`.
Omitted settings keep their current values. The response contains only the
settings included in the request.

When enabling menu lock for a reader without a PIN, include a four-digit PIN
in `menu_lock.passcode` in the same request.

**OAuth scopes:** Requires one of: `readers.write`.

**Required permissions:**

- `readers.checkouts.create`

## Authentication

Requires one of the following:

- `apiKey`, http, header `Authorization`
- `oauth2`, oauth2, scopes: `readers.write`

## Path parameters

- `merchant_code` (`UpdateReaderSettings.path.merchant_code`; string, required) — The merchant code of the account that owns the reader.
- `reader_id` (`UpdateReaderSettings.path.reader_id`; string, required) — The unique identifier of the reader.

## Request body

_Required._

Menu lock settings to update.

- `menu_lock` (`UpdateReaderSettings.menu_lock`; object, required) — Menu lock configuration. Provide at least one of `enabled` or `passcode`.
  - `enabled` (`UpdateReaderSettings.menu_lock.enabled`; boolean, optional) — Whether menu lock is enabled.
    - example `true`
  - `passcode` (`UpdateReaderSettings.menu_lock.passcode`; string, optional) — Four-digit PIN used to unlock the reader's menu.
    - format `password`; pattern `^[0-9]{4}$`; example `"1234"`

## Example request

```json
{
  "menu_lock": {
    "enabled": true,
    "passcode": "1234"
  }
}
```

## Code samples

### CLI

```bash
sumup readers settings update "rdr_3MSAFM23CK82VSTT4BN6RWSQ65" \
  --merchant-code "MC0X0ABC" \
  --menu-lock-enabled \
  --menu-lock-passcode "1234"

```

### JavaScript

```typescript
import SumUp from "@sumup/sdk";

async function main() {
  const client = new SumUp({ apiKey: "sup_sk_your_api_key" });

  const result = await client.readers.updateReaderSettings(
    "MC0X0ABC",
    "rdr_3MSAFM23CK82VSTT4BN6RWSQ65",
    {
      "menu_lock": {
        "enabled": true,
        "passcode": "1234"
      }
    }
  );
  console.log(result);
}

main().catch(console.error);

```

### .NET

```csharp
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using SumUp;

public static class Program
{
    public static async Task Main()
    {
        using var client = new SumUpClient();
        var response = await client.Readers.UpdateReaderSettingsAsync(
            "your-merchant-code",
            "your-reader-id",
            new UpdateReaderSettingsRequest
            {
                MenuLock = new UpdateReaderSettingsRequestMenuLock
                {
                    Enabled = true,
                    Passcode = "1234",
                },
            });

        Console.WriteLine(response.StatusCode);
    }
}

```

### Java

```java
import com.sumup.sdk.SumUpClient;

public final class UpdateReaderSettingsSample {
  public static void main(String[] args) throws Exception {
    var client = new SumUpClient();

    var result = client.readers().updateReaderSettings(
            "MC0X0ABC",
            "rdr_3MSAFM23CK82VSTT4BN6RWSQ65",
            com.sumup.sdk.models.UpdateReaderSettingsRequest.builder()
                .menuLock(com.sumup.sdk.models.UpdateReaderSettingsRequestMenuLock.builder()
                .enabled(true)
                .passcode("1234")
                .build())
                .build()
        );
    System.out.println(result);
  }
}

```

### Python

```python
import os

import sumup

client = sumup.Sumup(api_key=os.environ["SUMUP_API_KEY"])
result = client.readers.update_reader_settings(
    "MC0X0ABC",
    "rdr_3MSAFM23CK82VSTT4BN6RWSQ65",
    menu_lock={
        "enabled": True,
        "passcode": "1234",
    },
)
print(result)

```

### PHP

```php
<?php

declare(strict_types=1);

require __DIR__ . '/vendor/autoload.php';

$sumup = new \SumUp\SumUp('sup_sk_your_api_key');

$body = [
    'menu_lock' => [
        'enabled' => true,
        'passcode' => '1234',
    ],
];

$result = $sumup->readers()->updateReaderSettings(
    'MC0X0ABC',
    'rdr_3MSAFM23CK82VSTT4BN6RWSQ65',
    $body,
);

var_dump($result);

```

### Go

```go
package main

import (
	"context"
	"fmt"

	"github.com/sumup/sumup-go"
	"github.com/sumup/sumup-go/secret"
)

func main() {
	client := sumup.NewClient()
	result, err := client.Readers.UpdateReaderSettings(context.TODO(), "MC0X0ABC", "rdr_3MSAFM23CK82VSTT4BN6RWSQ65", sumup.ReadersUpdateReaderSettingsParams{
		MenuLock: sumup.UpdateReaderSettingsRequestMenuLock{
			Enabled:  new(true),
			Passcode: new(secret.New("1234")),
		},
	})
	if err != nil {
		panic(err.Error())
	}

	fmt.Printf("%+v\n", result)
}

```

### Rust

```rust
use sumup::{Authorization, Client};
#[tokio::main]
async fn main() {
    let client = Client::default()
        .with_authorization(Authorization::api_key("sup_sk_test_..."));
    let body = sumup::resources::readers::UpdateReaderSettingsRequest::builder()
        .menu_lock(
            sumup::resources::readers::UpdateReaderSettingsRequestMenuLock::builder()
                .enabled(true)
                .passcode(sumup::secret::Secret::new("1234"))
                .build(),
        )
        .build();
    let response = client
        .readers()
        .update_reader_settings("MERCHANT_CODE", "READER_ID", body)
        .await
        .expect("update_reader_settings request failed");
    println!("{response:#?}");
}

```

### cURL

```bash
curl --request PATCH \
  --url https://api.sumup.com/v0.1/merchants/MC0X0ABC/readers/rdr_3MSAFM23CK82VSTT4BN6RWSQ65/settings \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "menu_lock": {
    "enabled": true,
    "passcode": "1234"
  }
}
'
```

## Responses

### 200

Reader settings updated successfully.

#### Example

```json
{
  "data": {
    "menu_lock": {
      "enabled": true,
      "passcode": "1234"
    },
    "status": "applied"
  }
}
```

- `data` (`UpdateReaderSettings.response.200.data`; object, required)
  - `menu_lock` (`UpdateReaderSettings.response.200.data.menu_lock`; object, required) — Settings included in the update. Omitted fields are not returned.
    - `enabled` (`UpdateReaderSettings.response.200.data.menu_lock.enabled`; boolean, optional) — Whether menu lock is enabled.
      - example `true`
    - `passcode` (`UpdateReaderSettings.response.200.data.menu_lock.passcode`; string, optional) — Four-digit PIN used to unlock the reader's menu.
      - format `password`; pattern `^[0-9]{4}$`; example `"1234"`
  - `status` (`UpdateReaderSettings.response.200.data.status`; string, required) — Indicates that the reader applied the settings update.
    - one of `"applied"`; example `"applied"`

### 400

The request body is malformed.

#### Body (application/json)

- `errors` (`UpdateReaderSettings.response.400.errors`; object, required)
  - `detail` (`UpdateReaderSettings.response.400.errors.detail`; string, required) — Error message
  - `type` (`UpdateReaderSettings.response.400.errors.type`; string, optional) — Error code

##### Example

```json
{
  "errors": {
    "detail": "string",
    "type": "string"
  }
}
```

#### Body (application/problem+json)

- `type` (`UpdateReaderSettings.response.400.application-problem-json.type`; string, required) — A URI reference that identifies the problem type.
  - format `uri`; example `"https://developer.sumup.com/problem/not-found"`
- `title` (`UpdateReaderSettings.response.400.application-problem-json.title`; string, optional) — A short, human-readable summary of the problem type.
  - example `"Requested resource couldn't be found."`
- `status` (`UpdateReaderSettings.response.400.application-problem-json.status`; integer, optional) — The HTTP status code generated by the origin server for this occurrence of the problem.
  - example `404`
- `detail` (`UpdateReaderSettings.response.400.application-problem-json.detail`; string, optional) — A human-readable explanation specific to this occurrence of the problem.
  - example `"The requested resource doesn't exist or does not belong to you."`
- `instance` (`UpdateReaderSettings.response.400.application-problem-json.instance`; string, optional) — A URI reference that identifies the specific occurrence of the problem.
  - format `uri`; example `"https://api.sumup.com/v0.1/checkouts/4e425463-3e1b-431d-83fa-1e51c2925e99"`

##### Example

```json
{
  "detail": "Bad Request",
  "status": 400,
  "title": "Bad Request",
  "type": "https://developer.sumup.com/problem/bad-request"
}
```

### 401

Unauthorized

#### Body (application/json)

- `errors` (`UpdateReaderSettings.response.401.errors`; object, required)
  - `detail` (`UpdateReaderSettings.response.401.errors.detail`; string, required) — Error message
  - `type` (`UpdateReaderSettings.response.401.errors.type`; string, optional) — Error code

##### Example

```json
{
  "errors": {
    "detail": "string",
    "type": "string"
  }
}
```

#### Body (application/problem+json)

- `type` (`UpdateReaderSettings.response.401.application-problem-json.type`; string, required) — A URI reference that identifies the problem type.
  - format `uri`; example `"https://developer.sumup.com/problem/not-found"`
- `title` (`UpdateReaderSettings.response.401.application-problem-json.title`; string, optional) — A short, human-readable summary of the problem type.
  - example `"Requested resource couldn't be found."`
- `status` (`UpdateReaderSettings.response.401.application-problem-json.status`; integer, optional) — The HTTP status code generated by the origin server for this occurrence of the problem.
  - example `404`
- `detail` (`UpdateReaderSettings.response.401.application-problem-json.detail`; string, optional) — A human-readable explanation specific to this occurrence of the problem.
  - example `"The requested resource doesn't exist or does not belong to you."`
- `instance` (`UpdateReaderSettings.response.401.application-problem-json.instance`; string, optional) — A URI reference that identifies the specific occurrence of the problem.
  - format `uri`; example `"https://api.sumup.com/v0.1/checkouts/4e425463-3e1b-431d-83fa-1e51c2925e99"`

##### Example

```json
{
  "detail": "Unauthorized",
  "status": 401,
  "title": "Unauthorized",
  "type": "https://developer.sumup.com/problem/unauthorized"
}
```

### 404

The reader was not found.

#### Body (application/json)

- `errors` (`UpdateReaderSettings.response.404.errors`; object, required)
  - `detail` (`UpdateReaderSettings.response.404.errors.detail`; string, required) — Fuller message giving context to error

##### Example

```json
{
  "errors": {
    "detail": "Not Found"
  }
}
```

#### Body (application/problem+json)

- `type` (`UpdateReaderSettings.response.404.application-problem-json.type`; string, required) — A URI reference that identifies the problem type.
  - format `uri`; example `"https://developer.sumup.com/problem/not-found"`
- `title` (`UpdateReaderSettings.response.404.application-problem-json.title`; string, optional) — A short, human-readable summary of the problem type.
  - example `"Requested resource couldn't be found."`
- `status` (`UpdateReaderSettings.response.404.application-problem-json.status`; integer, optional) — The HTTP status code generated by the origin server for this occurrence of the problem.
  - example `404`
- `detail` (`UpdateReaderSettings.response.404.application-problem-json.detail`; string, optional) — A human-readable explanation specific to this occurrence of the problem.
  - example `"The requested resource doesn't exist or does not belong to you."`
- `instance` (`UpdateReaderSettings.response.404.application-problem-json.instance`; string, optional) — A URI reference that identifies the specific occurrence of the problem.
  - format `uri`; example `"https://api.sumup.com/v0.1/checkouts/4e425463-3e1b-431d-83fa-1e51c2925e99"`

##### Example

```json
{
  "detail": "The requested resource doesn't exist or does not belong to you.",
  "status": 404,
  "title": "Requested resource couldn't be found.",
  "type": "https://developer.sumup.com/problem/not-found"
}
```

### 422

The settings are invalid, the reader is offline, the reader model is not supported, or the reader could not apply the update.

#### Body (application/json)

- `errors` (`UpdateReaderSettings.response.422.errors`; object, required)

##### Example

```json
{
  "errors": {
    "detail": "The device is offline.",
    "type": "READER_OFFLINE"
  }
}
```

#### Body (application/problem+json)

- `type` (`UpdateReaderSettings.response.422.application-problem-json.type`; string, required) — A URI reference that identifies the problem type.
  - format `uri`; example `"https://developer.sumup.com/problem/not-found"`
- `title` (`UpdateReaderSettings.response.422.application-problem-json.title`; string, optional) — A short, human-readable summary of the problem type.
  - example `"Requested resource couldn't be found."`
- `status` (`UpdateReaderSettings.response.422.application-problem-json.status`; integer, optional) — The HTTP status code generated by the origin server for this occurrence of the problem.
  - example `404`
- `detail` (`UpdateReaderSettings.response.422.application-problem-json.detail`; string, optional) — A human-readable explanation specific to this occurrence of the problem.
  - example `"The requested resource doesn't exist or does not belong to you."`
- `instance` (`UpdateReaderSettings.response.422.application-problem-json.instance`; string, optional) — A URI reference that identifies the specific occurrence of the problem.
  - format `uri`; example `"https://api.sumup.com/v0.1/checkouts/4e425463-3e1b-431d-83fa-1e51c2925e99"`

##### Example

```json
{
  "detail": "The device is offline.",
  "status": 422,
  "title": "Reader Offline",
  "type": "https://developer.sumup.com/problem/reader-offline"
}
```


Source: https://developer.sumup.com/api/readers/update-reader-settings/index.md
