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

# Update crypto risk assessment

> Update the crypto risk assessment process for a user.

export const RestEndpointSubjects = ({subjects = []}) => {
  const subjectToIconMap = {
    'client': 'browser',
    'user:individual': 'user',
    'user:business': 'briefcase'
  };
  if (subjects.length === 0) {
    return null;
  }
  return <>
      {subjects.map(subject => <a key={subject} href="/rest-apis/authentication#subjects" className="border-0 opacity-85 hover:opacity-100 transition-opacity">
          <Badge stroke size="lg" icon={subjectToIconMap[subject]} color="gray" className="mr-1">
            {subject}
          </Badge>
        </a>)}
    </>;
};

<RestEndpointSubjects subjects={["user:individual"]} />

**Update crypto risk assessment** is the endpoint used to submit the form assessing a user's knowledge of cryptocurrencies and associated risks.

<Tip>This process is **exempt** for all users residing outside of Great Britain (GB).</Tip>

When calling [`GET /core/kyc?detailed=cryptoRiskAssessment`](./get-overview), you will get a `hint` property which includes a [dynamic form](/developer-guides/resources/dynamic-forms/introduction) schema and UI schema.
The `hint` property will also be available in responses of this endpoint, in case there are still questions to be answered.

For more information about forms, refer to the [form-based processes](./introduction#form-based-processes) section.


## OpenAPI

````yaml _media/specs/core-openapi.mintlify.json patch /core/kyc/processes/crypto-risk-assessment
openapi: 3.1.0
info:
  version: 0.1.0
  title: Core API
  description: >-
    The Core API provides essential building blocks that empower businesses to
    embed financial services into their applications.
  contact:
    name: Uphold API Team
    email: developers@uphold.com
    url: https://developer.uphold.com
servers:
  - url: https://api.enterprise.sandbox.uphold.com
    description: Sandbox
  - url: https://api.enterprise.uphold.com
    description: Production
security:
  - OAuth2: []
tags:
  - name: Authentication
    description: Authentication.
  - name: Countries
    description: Countries.
  - name: Users
    description: Users.
  - name: KYC
    description: Individual User's KYC.
  - name: KYB
    description: Business User's KYB.
  - name: Capabilities
    description: User capabilities.
  - name: Terms of service
    description: User terms of service.
  - name: Files
    description: Files.
  - name: Assets
    description: Assets, networks and rails.
  - name: Accounts
    description: Accounts.
  - name: External accounts
    description: External accounts.
  - name: Transactions
    description: Transactions.
  - name: Portfolio
    description: Portfolio.
  - name: Statements
    description: Statements.
  - name: Metadata
    description: Metadata.
  - name: Webhooks
    description: Webhooks.
paths:
  /core/kyc/processes/crypto-risk-assessment:
    patch:
      tags:
        - KYC
      summary: Update crypto risk assessment
      description: Update the crypto risk assessment process for a user.
      operationId: core.update-kyc-crypto-risk-assessment
      parameters:
        - $ref: '#/components/parameters/accept-language'
      requestBody:
        $ref: >-
          #/components/requestBodies/update-kyc-crypto-risk-assessment-request-body
      responses:
        '200':
          $ref: '#/components/responses/update-kyc-crypto-risk-assessment-response'
        '404':
          $ref: >-
            #/components/responses/update-kyc-crypto-risk-assessment-not-found-response
        '409':
          $ref: >-
            #/components/responses/update-kyc-crypto-risk-assessment-conflict-response
      security:
        - OAuth2:
            - core.kyc.crypto-risk-assessment:update
components:
  parameters:
    accept-language:
      name: Accept-Language
      description: The natural language and locale that the client prefers.
      in: header
      schema:
        type: string
      examples:
        English (UK):
          value: en-GB
  requestBodies:
    update-kyc-crypto-risk-assessment-request-body:
      content:
        application/json:
          schema:
            type: object
            properties:
              input:
                $ref: '#/components/schemas/kyc-process-input-form-for-request'
              output:
                description: Output of the KYC process.
                type: object
                properties:
                  result:
                    description: The result of the verification.
                    type: string
                    enum:
                      - approved
                      - rejected
                  attempts:
                    description: The attempts state of the verification.
                    type: object
                    properties:
                      used:
                        description: The number of attempts used. Default is 1.
                        type: integer
                        minimum: 1
                      maximum:
                        description: The maximum number of attempts allowed. Default is 5.
                        type: integer
                        minimum: 1
                    default:
                      used: 1
                      maximum: 5
                    required:
                      - used
                      - maximum
                  verifiedAt:
                    description: The date and time of the verification.
                    type: string
                    format: date-time
                required:
                  - result
                  - attempts
                  - verifiedAt
            required:
              - input
          examples:
            Update Process - Uphold-verified:
              value:
                input:
                  formId: 7a0f4229-e3de-4dfd-8f91-9b1308b2dc33
                  answers:
                    decision-making:
                      who-makes-investment-decisions: i_decide
            Update Process - Partner-verified:
              value:
                input:
                  answers:
                    crypto-quiz:
                      decision-making: i_decide
                      loss-tolerance: full_loss_possible
                      volatility-understanding: highly_volatile
                      liquidity-awareness: may_be_delayed
                      regulatory-protection: no_coverage
                      portfolio-allocation: small_share
                      complexity-acknowledgement: complex_and_risky
                output:
                  result: approved
                  attempts:
                    used: 1
                    maximum: 5
                  verifiedAt: '2023-01-01T00:00:00.000Z'
  responses:
    update-kyc-crypto-risk-assessment-response:
      description: KYC crypto risk assessment process updated.
      content:
        application/json:
          schema:
            type: object
            properties:
              cryptoRiskAssessment:
                $ref: '#/components/schemas/kyc-crypto-risk-assessment'
            required:
              - cryptoRiskAssessment
          examples:
            Process Updated - Uphold-verified:
              value:
                cryptoRiskAssessment:
                  code: crypto-risk-assessment
                  status: pending
                  verification:
                    model: uphold-verified
                    method: manual
                    dependencies: []
                  input:
                    formId: 7a0f4229-e3de-4dfd-8f91-9b1308b2dc33
                    answers:
                      decision-making:
                        who-makes-investment-decisions: i_decide
                  hint:
                    type: form
                    formId: 7a0f4229-e3de-4dfd-8f91-9b1308b2dc33
                    schema:
                      type: object
                      properties:
                        decision-making:
                          type: object
                          title: Decision making
                          description: Who decides what cryptoassets are bought and sold?
                          properties:
                            who-makes-investment-decisions:
                              type: string
                              oneOf:
                                - const: i_decide
                                  title: I decide
                                - const: platform_decides
                                  title: Platform decides
                                - const: joint_decision
                                  title: Joint decision
                          required:
                            - who-makes-investment-decisions
                        loss-tolerance:
                          type: object
                          title: Loss tolerance
                          description: What is the most you could lose on a cryptoasset?
                          properties:
                            acceptable-loss:
                              type: string
                              oneOf:
                                - const: full_loss_possible
                                  title: Full loss possible
                                - const: profit_only
                                  title: Profit only at risk
                                - const: capital_protected
                                  title: Capital protected
                          required:
                            - acceptable-loss
                    uiSchema:
                      type: Categorization
                      elements:
                        - type: Category
                          label: Decision making
                          elements:
                            - type: Control
                              scope: >-
                                #/properties/decision-making/properties/who-makes-investment-decisions
                        - type: Category
                          label: Loss tolerance
                          elements:
                            - type: Control
                              scope: >-
                                #/properties/loss-tolerance/properties/acceptable-loss
            Process Updated - Partner-verified:
              value:
                cryptoRiskAssessment:
                  code: crypto-risk-assessment
                  status: ok
                  verification:
                    model: partner-verified
                    method: manual
                    dependencies: []
                  input:
                    formId: 7a0f4229-e3de-4dfd-8f91-9b1308b2dc33
                    answers:
                      crypto-quiz:
                        decision-making: i_decide
                        loss-tolerance: full_loss_possible
                        volatility-understanding: highly_volatile
                        liquidity-awareness: may_be_delayed
                        regulatory-protection: no_coverage
                        portfolio-allocation: small_share
                        complexity-acknowledgement: complex_and_risky
                  output:
                    result: approved
                    attempts:
                      used: 1
                      maximum: 5
                    verifiedAt: '2023-01-01T00:00:00.000Z'
            Process Rejected:
              value:
                cryptoRiskAssessment:
                  code: crypto-risk-assessment
                  status: pending
                  verification:
                    model: uphold-verified
                    method: manual
                    dependencies: []
                  output:
                    result: rejected
                    attempts:
                      used: 1
                      maximum: 5
      headers:
        x-uphold-request-id:
          description: >-
            A unique identifier for the request that can be shared with Uphold
            for troubleshooting purposes.
          required: true
          schema:
            type: string
            format: uuid
          examples:
            Request ID:
              value: 9092ee4d-f0fb-42e9-8787-b668dbcec531
    update-kyc-crypto-risk-assessment-not-found-response:
      description: Resource not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          examples:
            Form Not Found:
              value:
                code: entity_not_found
                message: The form cannot be found or has already been completed
                details:
                  entity: form
      headers:
        x-uphold-request-id:
          description: >-
            A unique identifier for the request that can be shared with Uphold
            for troubleshooting purposes.
          required: true
          schema:
            type: string
            format: uuid
          examples:
            Request ID:
              value: 9092ee4d-f0fb-42e9-8787-b668dbcec531
    update-kyc-crypto-risk-assessment-conflict-response:
      description: Business logic error.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
          examples:
            Form Already Completed:
              value:
                code: operation_not_allowed
                message: The form has already been completed
                details:
                  reasons:
                    - form-already-completed
            Invalid Locale:
              value:
                code: locale_invalid
                message: The locale is invalid
                details:
                  context: headers
                  property: accept-language
            Verified Date Invalid:
              value:
                code: date_invalid
                message: The date must be in the past
                details:
                  rule: difference-greater-than-threshold
                  threshold:
                    limit: 0
                    unit: milliseconds
                  context: body
                  property: output.verifiedAt
            Process Updates Not Allowed:
              value:
                code: operation_not_allowed
                message: The current status of the process does not allow updates
                details:
                  reasons:
                    - kyc-process-update-not-allowed
      headers:
        x-uphold-request-id:
          description: >-
            A unique identifier for the request that can be shared with Uphold
            for troubleshooting purposes.
          required: true
          schema:
            type: string
            format: uuid
          examples:
            Request ID:
              value: 9092ee4d-f0fb-42e9-8787-b668dbcec531
  schemas:
    kyc-process-input-form-for-request:
      description: Input of the KYC process.
      type: object
      properties:
        formId:
          description: >
            The form identifier returned in the `formId` property of the KYC
            process hint. Include this value when you need to persist or resume
            the current form state over an extended period (for example, across
            user sessions or long-running saves).
          type: string
          format: uuid
        answers:
          description: >
            The `answers` property follows the [JSON
            Forms](https://jsonforms.io/) specification for data objects and has
            two key behaviors:

            1. **Partial or Complete Answers Submission**:
              - It accepts the answers to the questions of the current step (identified by UI Schema 'Category'). This allows the submission of the responses incrementally, either answering all questions in the current step or just a subset of them.

            2. **Form Reset by Answering Previous Questions**:
              - It also allows for a form reset by accepting one or more answers from a previous step (identified by UI Schema 'Category'). This enables the modification of previous answers, ensuring that the form is flexible and can handle dynamic user interactions.

            The KYC process starts its evaluation once the last question has
            been answered, ensuring that all necessary information has been
            provided before proceeding with the assessment.
          type: object
          additionalProperties: true
          minProperties: 1
          maxProperties: 1
      required:
        - answers
    kyc-crypto-risk-assessment:
      type: object
      properties:
        code:
          description: The code of the KYC process.
          type: string
        status:
          $ref: '#/components/schemas/kyc-process-status'
        verification:
          $ref: '#/components/schemas/kyc-process-verification'
        input:
          $ref: '#/components/schemas/kyc-process-input-form'
        output:
          description: Output of the KYC process.
          type: object
          properties:
            result:
              description: The result of the verification.
              type: string
              enum:
                - approved
                - rejected
            attempts:
              description: The attempts state of the verification.
              type: object
              properties:
                used:
                  description: The number of attempts used.
                  type: integer
                maximum:
                  description: The maximum number of attempts.
                  type: integer
                retryAt:
                  description: The date and time when the next attempt is allowed.
                  type: string
                  format: date-time
              required:
                - used
                - maximum
            offboard:
              description: The offboarding state of the verification.
              type: object
              properties:
                completedAt:
                  description: The date and time when the offboarding was completed.
                  type: string
                  format: date-time
                endsAt:
                  description: The date and time when the offboard ends.
                  type: string
                  format: date-time
              required:
                - endsAt
            verifiedAt:
              description: The date and time of the verification.
              type: string
              format: date-time
          required:
            - result
            - attempts
        hint:
          $ref: '#/components/schemas/kyc-process-hint-form'
      required:
        - code
        - status
    error:
      description: The error information.
      allOf:
        - $ref: '#/components/schemas/feedback'
    kyc-process-status:
      description: Status of the KYC process.
      type: string
      enum:
        - ok
        - failed
        - running
        - pending
        - exempt
    kyc-process-verification:
      description: Configuration of this process.
      type: object
      properties:
        model:
          description: The verification model to complete this process.
          type: string
          enum:
            - none
            - partner-verified
            - uphold-verified
        method:
          description: >-
            Whether this process is verified automatically in the background or
            requires user action.
          type: string
          enum:
            - automatic
            - manual
        triggers:
          description: >-
            Other processes that, once updated, trigger this process to run
            automatically. Only present when `method` is `automatic`.
          type: array
          items:
            type: string
            enum:
              - profile
              - identity
        dependencies:
          $ref: '#/components/schemas/kyc-process-dependencies'
      required:
        - model
        - method
        - dependencies
    kyc-process-input-form:
      description: Input of the KYC process.
      type: object
      properties:
        formId:
          description: The id of the form.
          type: string
        answers:
          description: The answers of the form.
          type: object
          additionalProperties: true
      required:
        - answers
    kyc-process-hint-form:
      description: Hints for the KYC process.
      type: object
      properties:
        type:
          description: The type of the hint.
          type: string
          enum:
            - form
        formId:
          description: The id of the form.
          type: string
          format: uuid
        schema:
          description: >-
            The definition of the structure and validation rules for this KYC
            process form.


            It follows the [JSON Schema](https://json-schema.org/) specification
            with the power of [JSON Forms](https://jsonforms.io/).


            The schema is iterative, meaning that new questions and properties
            can be added dynamically as the KYC process evolves. This allows for
            a flexible and adaptive form structure that can accommodate changes
            and new requirements over time.
          type: object
          additionalProperties: true
        uiSchema:
          description: >-
            The `uiSchema` property defines the general layout and presentation
            of the form by means of different UI schema elements.


            It follows the [JSON Forms](https://jsonforms.io/) specification and
            is used to customize the appearance and behavior of the form fields.


            The `uiSchema` includes the following elements:


            - `Layouts`: Used to structure the form layout. It includes
            properties like `type` to define the layout type (e.g.,
            `Categorization`) and `elements` to define the child elements.

            - `Controls`: Used to define the form controls. It includes
            properties like `scope` to point to the corresponding schema
            property and `label` to define the control's label.

            - `Rules`: Used to define conditional visibility rules for form
            controls. It includes properties like `effect` to define the rule
            effect (e.g., `SHOW`) and `condition` to define the rule condition.


            The `uiSchema` is iterative, meaning that new controls and layout
            elements can be added dynamically as the KYC process evolves. This
            allows for a flexible and dynamic form layout, enhancing the user
            experience by providing a structured and intuitive form design that
            can adapt to new requirements and changes over time.
          type: object
          additionalProperties: true
      required:
        - type
        - schema
        - uiSchema
    feedback:
      description: A feedback message with a code and human-readable description.
      type: object
      properties:
        code:
          description: A short string with a brief explanation about the code reported.
          type: string
        message:
          description: A human-readable message providing more details.
          type: string
        details:
          description: Additional information about the feedback reported.
          type: object
          additionalProperties: true
      required:
        - code
        - message
    kyc-process-dependencies:
      description: The processes that must be updated before you can update this one.
      type: array
      items:
        type: string
        enum:
          - profile
          - email
          - phone
          - identity
          - proof-of-address
          - customer-due-diligence
          - enhanced-due-diligence
          - crypto-risk-assessment
          - self-categorization-statement
          - tax-details
  securitySchemes:
    OAuth2:
      type: oauth2
      description: OAuth 2.0 authentication.
      flows:
        clientCredentials:
          tokenUrl: /core/oauth2/token
          scopes:
            core.users:act-on-behalf-of: Grants access to act on behalf of a user
            core.users:create: Grants access to create users
            core.users:read: Grants access to view users
            core.users:delete: Grants access to delete users
            core.users.metadata:read: Grants access to view user metadata
            core.users.metadata:write: Grants access to modify user metadata
            core.kyc:read: Grants access to view KYC processes
            core.kyc.profile:update: Grants access to update profile KYC process
            core.kyc.address:update: Grants access to update address KYC process
            core.kyc.email:update: Grants access to update email KYC process
            core.kyc.phone:update: Grants access to update phone KYC process
            core.kyc.identity:update: Grants access to update identity KYC process
            core.kyc.proof-of-address:update: Grants access to update proof-of-address KYC process
            core.kyc.customer-due-diligence:update: Grants access to update customer due diligence KYC process
            core.kyc.enhanced-due-diligence:update: Grants access to update enhanced due diligence KYC process
            core.kyc.crypto-risk-assessment:update: Grants access to update crypto risk assessment KYC process
            core.kyc.self-categorization-statement:update: Grants access to update self-categorization statement KYC process
            core.kyc.tax-details:update: Grants access to update tax details KYC process
            core.capabilities:read: Grants access to view user capabilities
            core.terms-of-service:read: Grants access to view terms of service
            core.terms-of-service:accept: Grants access to accept terms of service
            core.files:create: Grants access to create files
            core.files:read: Grants access to view files
            core.files.metadata:read: Grants access to view files metadata
            core.files.metadata:write: Grants access to modify files metadata
            core.accounts:create: Grants access to create accounts
            core.accounts:read: Grants access to view accounts
            core.accounts:update: Grants access to update accounts
            core.accounts:archive: Grants access to archive accounts
            core.accounts:deposit-method: >-
              Grants access to deposit method needed for depositing into
              accounts
            core.accounts:use-test-helpers: Grants access to test helpers of accounts
            core.accounts.metadata:read: Grants access to view accounts metadata
            core.accounts.metadata:write: Grants access to modify accounts metadata
            core.assets:use-test-helpers: Grants access to test helpers of assets
            core.external-accounts:create: Grants access to create external accounts
            core.external-accounts:read: Grants access to view external accounts
            core.external-accounts:update: Grants access to update external accounts
            core.external-accounts:delete: Grants access to delete external accounts
            core.external-accounts.metadata:read: Grants access to view external accounts metadata
            core.external-accounts.metadata:write: Grants access to modify external accounts metadata
            core.transactions:create: Grants access to commit quotes
            core.transactions:read: Grants access to view transactions
            core.transactions.metadata:read: Grants access to view transactions metadata
            core.transactions.metadata:write: Grants access to modify transactions metadata
            core.transactions.requests-for-information:read: Grants access to view transactions requests for information
            core.transactions.requests-for-information:update: Grants access to update transactions requests for information
            core.portfolio:read: >-
              Grants access to view portfolio overview, performance, and
              historical balance
            core.statements:read: Grants access to read statements
            core.webhooks:management-link: Grants access to create webhook management links

````