---
updatedAt: 2025-11-05T21:53:21.000Z
agentTools:
  projectIndex: https://docs.venly.io/llms.txt
---

# Update User’s Signing Method

This endpoint is used to update a user's signing method. This can be done, in case the user forgets their PIN. In order to update a signing method, another valid signign method has to be passed in the header.

# OpenAPI definition

```json
{
  "openapi": "3.1.0",
  "info": {
    "title": "Wallet API",
    "description": "Wallet API Documentation.",
    "contact": {
      "name": "Venly",
      "url": "https://venly.io",
      "email": "contact@venly.io"
    },
    "version": "0.62.0"
  },
  "servers": [
    {
      "url": "https://api-wallet-sandbox.venly.io",
      "description": "Sandbox environment for testing and development"
    },
    {
      "url": "https://api-wallet.venly.io",
      "description": "Production environment for live applications"
    }
  ],
  "paths": {
    "/api/users/{userId}/signing-methods/{signingMethodId}": {
      "put": {
        "tags": [
          "User"
        ],
        "summary": "Update User’s Signing Method",
        "description": "This endpoint is used to update a user's signing method. This can be done, in case the user forgets their PIN. In order to update a signing method, another valid signign method has to be passed in the header.",
        "operationId": "updateSigningMethod",
        "parameters": [
          {
            "name": "Signing-Method",
            "in": "header",
            "description": "A valid signing method for the user. Format should be `id:value`. **NOTE**: You can choose between the `Signing-Method`  and the `Encrypted-Signing-Method`",
            "example": "756ae7a7-3713-43ee-9936-0dff50306488:123456",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Encrypted-Signing-Method",
            "in": "header",
            "description": "Use this for encrypted PIN transfers. The `Encrypted-Signing-Method` indicates that the signing method and the request body are encrypted. Click [here](https://docs.venly.io/docs/encrypted-pin-transfer) to read about encrypted PIN transfers.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "userId",
            "description": "This is the `UUID` of the user whos signing method you want to update.",
            "example": "9b5514c7-d093-4cba-9635-a535k31d7030",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "signingMethodId",
            "description": "This is the `UUID` of signing method you want to update.",
            "example": "1420c1c9-26bb-4844-ba4e-0a7914c2cfc2",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "description": "The request parameters for updating a user's signing method",
                "$ref": "#/components/schemas/UpdateSigningMethodRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Signing method of user updated successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "default": true
                    },
                    "result": {
                      "$ref": "#/components/schemas/SigningMethodDto"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "405": {
            "$ref": "#/components/responses/MethodNotAllowed"
          },
          "415": {
            "$ref": "#/components/responses/UnsupportedMediaType"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        },
        "security": [
          {
            "OAuth2": [
              "update:users",
              "whitelabel"
            ]
          }
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "SigningMethodDto": {
        "items": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "description": "The signing method `UUID`"
            },
            "type": {
              "type": "string",
              "description": "The type of signing method"
            },
            "incorrectAttempts": {
              "type": "integer",
              "format": "int32",
              "description": "Number of incorrect signing method attempts"
            },
            "remainingAttempts": {
              "type": "integer",
              "format": "int32",
              "description": "Number of remaining signing method attempts"
            },
            "lastUsedSuccess": {
              "type": "string",
              "description": "Date-time when signing method was last successfuly used"
            },
            "hasMasterSecret": {
              "type": "boolean"
            }
          }
        }
      },
      "UpdateSigningMethodRequest": {
        "type": "object",
        "required": [
          "value"
        ],
        "properties": {
          "value": {
            "type": "string",
            "description": "The new credential value for the signing method. Format requirements vary by type:\n- **PIN**: Must be exactly 6 digits\n- **PASSWORD**: Minimum 8 characters with complexity requirements\n- **EMERGENCY_CODE**: Exactly 25 characters long. Leave empty to auto-generate.\n- **BIOMETRIC**: A unique identifier or template hash (e.g., \"face_id_template_abc123\")\n",
            "minLength": 6,
            "maxLength": 128,
            "example": "123456"
          },
          "physicalDeviceId": {
            "type": "string",
            "description": "Unique identifier for the physical device used with biometric authentication.\nRequired only when updating biometric signing methods. This links the \nbiometric data to a specific device for enhanced security.\n"
          }
        }
      },
      "ErrorResponse": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean",
            "description": "Indicates whether the request was successful",
            "example": false
          },
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ErrorBody"
            },
            "description": "List of errors that occurred"
          },
          "result": {
            "type": "object",
            "description": "Present only if success == true. Contains the actual result. Set to null or omitted when success == false.\n"
          }
        }
      },
      "ErrorBody": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "description": "Machine-readable error code (e.g., VALIDATION_ERROR, UNAUTHORIZED)",
            "example": "VALIDATION_ERROR"
          },
          "message": {
            "type": "string",
            "description": "Human-readable explanation of the error",
            "example": "The wallet ID must be a valid UUID."
          },
          "traceCode": {
            "type": "string",
            "description": "Unique identifier for tracing the error in logs"
          }
        }
      }
    },
    "securitySchemes": {
      "OAuth2": {
        "type": "oauth2",
        "flows": {
          "clientCredentials": {
            "tokenUrl": "https://login-staging.venly.io/auth/realms/Arkane/protocol/openid-connect/token",
            "scopes": {
              "openid": "openid"
            }
          }
        }
      }
    },
    "responses": {
      "BadRequest": {
        "description": "Request validation failed (400)",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            },
            "example": {
              "invalidInput": {
                "value": {
                  "success": false,
                  "errors": [
                    {
                      "code": "VALIDATION_ERROR",
                      "message": "The 'walletId' is not a valid UUID.",
                      "field": "walletId"
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "Unauthorized": {
        "description": "Authentication required or failed (401)",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            },
            "example": {
              "auth": {
                "value": {
                  "success": false,
                  "errors": [
                    {
                      "code": "UNAUTHORIZED",
                      "message": "Missing or invalid OAuth2 token."
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "Forbidden": {
        "description": "User lacks required permissions (403)",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            },
            "example": {
              "forbidden": {
                "value": {
                  "success": false,
                  "errors": [
                    {
                      "code": "FORBIDDEN",
                      "message": "User does not have permission to access this wallet."
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "NotFound": {
        "description": "Resource not found (404)",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            },
            "example": {
              "notFound": {
                "value": {
                  "success": false,
                  "errors": [
                    {
                      "code": "NOT_FOUND",
                      "message": "Wallet with ID 'abc123' was not found."
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "MethodNotAllowed": {
        "description": "HTTP method not supported (405)",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            },
            "example": {
              "method": {
                "value": {
                  "success": false,
                  "errors": [
                    {
                      "code": "METHOD_NOT_SUPPORTED",
                      "message": "HttpMethod is not supported. Supported methods are [GET, POST]."
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "UnsupportedMediaType": {
        "description": "Request body is not valid JSON or wrong media type (415)",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            },
            "example": {
              "media": {
                "value": {
                  "success": false,
                  "errors": [
                    {
                      "code": "INVALID_MEDIA_TYPE",
                      "message": "Request must be application/json."
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "InternalServerError": {
        "description": "Unexpected server error (500)",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            },
            "example": {
              "server": {
                "value": {
                  "success": false,
                  "errors": [
                    {
                      "code": "INTERNAL_SERVER_ERROR",
                      "message": "An unexpected error occurred. Please try again later."
                    }
                  ]
                }
              }
            }
          }
        }
      }
    }
  },
  "x-readme": {
    "explorer-enabled": true,
    "proxy-enabled": true
  }
}
```