---
title: "Update an existing app by ID"
method: PUT
path: "/api/v1/apps/{id}"
tags: ["Apps"]
---

# Update an existing app by ID

`PUT /api/v1/apps/{id}`

Required scope - write_app. Assigning the root scope additionally requires the caller to hold the root scope.

## Path parameters

- `id` number, required

## Request body

- PutAppReq
  - `redirectUris` string[]
  - `name` string
  - `isActive` boolean
  - `scopes` string[]
  - `useSystemMfaConfig` boolean
  - `requireEmailMfa` boolean
  - `requireOtpMfa` boolean
  - `requireSmsMfa` boolean
  - `allowEmailMfaAsBackup` boolean

## Response `200`

- object
  - `app` AppDetail
    - `id` number, required
    - `clientId` string, required
    - `name` string, required
    - `isActive` boolean, required
    - `type` 'spa' | 's2s', required
    - `redirectUris` string[], required
    - `useSystemMfaConfig` boolean, required
    - `requireEmailMfa` boolean, required
    - `requireOtpMfa` boolean, required
    - `requireSmsMfa` boolean, required
    - `allowEmailMfaAsBackup` boolean, required
    - `createdAt` string, required
    - `updatedAt` string, required
    - `deletedAt` string, nullable, required
    - `scopes` string[], required

## Changes

- **2025-08-13** `5ad1a47c235e` — 1 breaking
  - removed the required property `app/allOf[#/components/schemas/App]/secret` from the response with the `200` status
- **2025-05-07** `426c1916f602` — 10 info
  - added the new optional request property `allowEmailMfaAsBackup`
  - added the new optional request property `requireEmailMfa`
  - added the new optional request property `requireOtpMfa`
  - added the new optional request property `requireSmsMfa`
  - …6 more
- **2024-10-03** `795cad873b47` — 11 info
  - the response property `app/allOf[#/components/schemas/App]/clientId` became required for the status `200`
  - the response property `app/allOf[#/components/schemas/App]/createdAt` became required for the status `200`
  - the response property `app/allOf[#/components/schemas/App]/deletedAt` became required for the status `200`
  - the response property `app/allOf[#/components/schemas/App]/id` became required for the status `200`
  - …7 more
- **2024-08-11** `11e2773b3a1e` — 15 breaking, 5 warning, 1 info
  - the response property `app/allOf[#/components/schemas/App]/clientId` became optional for the status `200`
  - the response property `app/allOf[#/components/schemas/App]/createdAt` became optional for the status `200`
  - the response property `app/allOf[#/components/schemas/App]/deletedAt` became optional for the status `200`
  - the response property `app/allOf[#/components/schemas/App]/id` became optional for the status `200`
  - …17 more

[Change history](https://skmtc.dev/valuemelody/apis/melody-auth-s2s-api/changes/api/v1/apps/:id/put.md)

---

[API](https://skmtc.dev/valuemelody/apis/melody-auth-s2s-api.md) · [All operations](https://skmtc.dev/valuemelody/apis/melody-auth-s2s-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/valuemelody/melody-auth-s2s-api/revisions/2e1471620fd7/schema)
