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

# Register user

> Triggers asynchronous registration for full prospects, enqueueing validation tasks.
You can check the status of the registration process by calling the `getUserTokenV2` endpoint.



## OpenAPI

````yaml /raas/swagger-partner.json post /auth/register-user-v2
openapi: 3.0.0
info:
  title: ''
  version: 0.0.1
servers:
  - url: https://raas-partner-cv.nomas.cash/v1
security: []
paths:
  /auth/register-user-v2:
    post:
      tags:
        - Users
      summary: Register user
      description: >-
        Triggers asynchronous registration for full prospects, enqueueing
        validation tasks.

        You can check the status of the registration process by calling the
        `getUserTokenV2` endpoint.
      operationId: registerUserV2
      parameters: []
      requestBody:
        description: DTO with extended PII (address, dates) for validators.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RegisterUserParams'
            example:
              phoneNumber: '+5215521206703'
              firstName: Maria del Carmen
              lastName: Arenas Mendoza
              dob: '1987-06-24T07:00:00.000Z'
              address1: >-
                Cancún International Airport, Carretera a Aeropuerto Cancún,
                Cancún, Quintana Roo, Mexico
              countryCode: MX
              city: Cancún
              state: Q.R.
      responses:
        '200':
          description: >-
            **200 — OK.** Async registration accepted.


            **Scenarios for this response**:


            | Scenario | How to reproduce | Typical `code` / body |

            |------------|------------------|------------------------|

            | Registration accepted | Valid `RegisterUserParams`, phone/email
            not already enrolled. | `userId` (+ optional `status`). |


            See also [Full scenario
            matrix](/raas/guides/testing-sandbox#register-user-v2-scenario-matrix).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserTokenResponse'
              example:
                userId: OSZwErXgt1MGPHwkYJVqz3LTN0R2
                status: OnProcess
        '400':
          description: >-
            **400 — Bad request.** Tenant, country, schema, DOB, already
            enrolled, or phone validation.


            **Scenarios for this response**:


            | Scenario | How to reproduce | Typical `code` / body |

            |------------|------------------|------------------------|

            | Invalid tenant | Missing or unknown `tenant` on request. |
            `ERROR_INVALID_TENANT` |

            | Country mismatch | `countryCode` ≠ tenant country. |
            `ERROR_INVALID_COUNTRY_CODE` |

            | Invalid schema | `validateRegistrationData` fails (names, address,
            etc.). | `ERROR_INVALID_SCHEMA` |

            | Invalid DOB | `dob` fails `registerUserV2DobIsValid`. |
            `ERROR_INVALID_DATE_OF_BIRTH` |

            | Already enrolled | Same phone/email already exists. |
            `ERROR_USER_ALREADY_ENROLLED` |

            | Phone validation | `normalizePhoneNumber` rejects input. |
            `INVALID_PHONE_NUMBER` / `ERROR_COUNTRY_NOT_SUPPORTED` |


            See also [Full scenario
            matrix](/raas/guides/testing-sandbox#register-user-v2-scenario-matrix).
          content:
            application/json:
              schema:
                properties:
                  reason:
                    type: string
                required:
                  - reason
                type: object
              example:
                reason: >-
                  Invalid tenant, country mismatch, invalid schema, or invalid
                  date of birth.
        '401':
          description: >-
            **401 — Unauthorized.**


            **Scenarios for this response**:


            | Scenario | How to reproduce | Typical `code` / body |

            |------------|------------------|------------------------|

            | Missing / bad API key | Omit `api_key` or send an invalid key. |
            `@Response<ErrorResponse>(401, "Missing or invalid API key")` in
            OpenAPI; actual body may be gateway-specific. |


            See also [Full scenario
            matrix](/raas/guides/testing-sandbox#register-user-v2-scenario-matrix).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                reason: Missing or invalid API key
        '500':
          description: >-
            **500 — Internal server error.** After validation; unexpected or
            `NumiError` from registration.


            **Scenarios for this response**:


            | Scenario | How to reproduce | Typical `code` / body |

            |------------|------------------|------------------------|

            | Registration / platform failure | Downstream `NumiError` or
            unknown exception. | `ERROR_INTERNAL_SERVER_ERROR` or `NumiError`
            `code` |


            See also [Full scenario
            matrix](/raas/guides/testing-sandbox#register-user-v2-scenario-matrix).
          content:
            application/json:
              schema:
                properties:
                  reason:
                    type: string
                required:
                  - reason
                type: object
              example:
                reason: An unhandled error has occurred
      security:
        - api_key:
            - partner
components:
  schemas:
    RegisterUserParams:
      description: >-
        Core body for partner user registration (`register-user-v2` and
        related). At least one of `phoneNumber` or `email` is typically required
        by the route.

        Reused as `requester` on POST `/request-money-full` (see
        `RequestMoneyFullParams` in `model/operation`).
      properties:
        phoneNumber:
          type: string
          description: >-
            <span style="color:red">required</span>


            Mobile phone number with country code. Must be a valid mobile phone
            number.

            Example: `+5215521206703` for MX.


            It doesn't allow duplicates.
        lastName:
          type: string
          description: |-
            Primary legal last name (e.g. paternal surname).
            Example: `Hernández`.
        lastName2:
          type: string
          description: |-
            Optional second last name when used (e.g. maternal surname).
            Example: `Gómez`.

            **Strongly recommended** to avoid OFAC matches.
        gender:
          type: string
          enum:
            - Male
            - Female
            - Other
            - None
          description: |-
            Self-reported gender when the product collects it.
            Example: `Female`.
        dob:
          type: string
          format: date-time
          description: >-
            Date of birth in ISO 8601 format (`YYYY-MM-DD` or full date-time).

            DOB must be a real calendar date and the person must be at least 18
            and under 100 years old.


            **Strongly recommended** to avoid OFAC matches.
        email:
          type: string
          description: |-
            Email address.
            It doesn't allow duplicates.

            **Strongly recommended**.
        firstName:
          type: string
          description: |-
            Legal first name(s).
            Example: `Ana`.
        middleName:
          type: string
          description: |-
            Middle name when collected. Example: `María`. 
            Strongly recommended to avoid OFAC matches.
        address1:
          type: string
          description: |-
            User legal address, Street and number.
            Example: `Blvd. Kukulcan Km. 4.5`.

            **Strongly recommended** to avoid OFAC matches.
        address2:
          type: string
        address3:
          type: string
        streetNumber:
          type: string
        countryCode:
          type: string
          description: |-
            Country code.
            ISO 3166-1 alpha-2.
        city:
          type: string
        zipCode:
          type: string
        state:
          type: string
          description: |-
            Address state/province/department.
            ISO 3166-2:CC (CC: country code).
            Or the state short name.
            Example: `DF` for Distrito Federal, `JA` for Jalisco.
        birthState:
          type: string
          description: |-
            Address state/province/department.
            ISO 3166-2:CC (CC: country code).
            Or the state short name.
            Example: `DF` for Distrito Federal, `JA` for Jalisco.
        lang:
          $ref: '#/components/schemas/Language'
          description: |-
            User Language.
            ISO 639-1.
            Example: `es` for Spanish, `en` for English.
        placeDetail:
          type: string
          description: |-
            Place detail from address if available.
            **Must be a valid place detail json from google maps**.
        latitude:
          type: number
          format: double
          description: Latitude from address if available.
        longitude:
          type: number
          format: double
          description: Longitude from address if available.
        callLocationLatitude:
          type: number
          format: double
          description: Latitude from user location if available.
        callLocationLongitude:
          type: number
          format: double
          description: Longitude from user location if available.
      required:
        - lastName
        - firstName
        - address1
        - countryCode
        - city
        - state
      type: object
      additionalProperties: false
    UserTokenResponse:
      description: >-
        Successful user resolution for partner token endpoints (id + optional
        CIP snapshot).
      properties:
        userId:
          type: string
          description: User ID
        status:
          type: string
          description: >-
            Status of the user's CIP process


            Available options: `Completed`, `UpgradePending`,
            `UpgradeInProgress`, `UpgradeFailed`, `UpgradeSoftFailed`,
            `AccountUpgradeInProgress`
        statusDetail:
          $ref: '#/components/schemas/PlatLevelStatusDetail'
          description: Status detail of the user's CIP process
      required:
        - userId
      type: object
      additionalProperties: false
    ErrorResponse:
      properties:
        detail:
          type: string
        code:
          type: string
        reason:
          type: string
      required:
        - code
        - reason
      type: object
    Language:
      enum:
        - en
        - es
      type: string
    PlatLevelStatusDetail:
      enum:
        - None
        - InvalidAddress
        - InvalidEMail
        - UnreadableDoc
        - ProvideAdditionalInfo
        - InvalidPersonalData
        - OtpPrivacyMissing
        - OtpContractMissing
        - Compliance
        - ComplianceBlocked
        - OfacFailed
      type: string
  securitySchemes:
    api_key:
      type: apiKey
      name: api_key
      in: header

````