---
title: "Get Role Change Mandatory fields"
method: POST
path: "/v3/role-change/mandatory-fields"
tags: ["Role Change"]
---

# Get Role Change Mandatory fields

`POST /v3/role-change/mandatory-fields`

## Request

- Base URL: `https://sandbox-api.transfi.com`
- URL: `https://sandbox-api.transfi.com/v3/role-change/mandatory-fields`
- Auth: HTTP basic
- TypeScript: <https://skmtc.dev/transfi/apis/transfi-single-integrated-api/docs/v3/role-change/mandatory-fields/post.ts> (a function with typed inputs; its response is checked against the schema)

Step 1 of the role change flow. Returns the additional data TransFi needs before an existing user can also act in `targetRole` - a recipient promoted to a sender, or a sender promoted to a recipient. Send the fields it names to `POST /v3/role-change/individual` or `POST /v3/role-change/business`.

## Headers

- `MID` string, required

## Request body

- object
  - `targetRole` 'recipient' | 'sender', required: Role you want the existing user to additionally hold.
  - `userId` string, required: TransFi user id of the existing user. Must start with `UX-`.
  - `currencyType` 'crypto' | 'fiat': Currency rail the user will transact on in the new role. Defaults to `fiat`. Send the same value in step 2.

## Response `200`

OK

- object
  - `status` string, required
  - `data` object, required: The additional data required for this user and `targetRole`.
    - `additionalMandatoryFieldNames` string[]: Names of the fields to send in step 2. An empty array means no additional data is needed.
    - `additionalMandatoryFields` object: Validation specification for each required field, keyed by field name. Drive your step 2 request off this response rather than hardcoding a field list.
    - `rules` object[]: Cross-field requirements applied on top of `additionalMandatoryFields`. Absent or empty when there are none.
      - `type` 'either_required' | 'mutually_required': `either_required` - at least one of `fields` must be supplied. `mutually_required` - either all of `fields` are supplied or none of them.
      - `fields` string[]: Names of the fields the rule applies to.
      - `validationMessage` string: Message returned in step 2 if the rule is not satisfied.
  - `traceId` string

## Other responses

- `400`: Bad Request
- `404`: Not Found

## Changes

- **2026-11-03** `7b745621a79f`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/transfi/apis/transfi-single-integrated-api/changes/v3/role-change/mandatory-fields/post.md)

---

[API](https://skmtc.dev/transfi/apis/transfi-single-integrated-api.md) - [All operations](https://skmtc.dev/transfi/apis/transfi-single-integrated-api/llms.txt) - [OpenAPI document](https://skmtc.dev/transfi/apis/transfi-single-integrated-api/revisions/7b745621a79f?raw)
