Narmi enrollments API

The enrollments API from Narmi — 5 operation(s) for enrollments.

OpenAPI Specification

narmi-enrollments-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Narmi Public account balances enrollments API
  version: v1
  description: To read about Public API access and authentication, go to [API Overview](https://docs.narmi.com/docs/narmi-developer-docs/xl9dvbz84o11l-introduction).
  termsOfService: https://www.narmi.com/policies/developer-terms-conditions
  contact:
    name: Narmi Support
    email: support@narmi.com
servers:
- url: https://api.sandbox.narmi.dev/
  description: ''
tags:
- name: enrollments
paths:
  /v1/enroll/:
    post:
      operationId: enroll_create
      description: 'Verifies a user''s details against the core and creates a digital banking user.


        All monetary values are represented in minor units, or the smallest unit of the currency with no decimal (e.g., cents). For example, $10.00 is represented as 1000.




        <i>How can we improve these docs?             <a href="mailto:docs+feedback@narmi.com">Share your feedback.</a></i>'
      summary: Create a digital banking user
      tags:
      - enrollments
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EnrollmentDocRequest'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/EnrollmentDocRequest'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/EnrollmentDocRequest'
      security:
      - oauth2:
        - write
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Enrollment'
          description: ''
        '400':
          content:
            application/json:
              schema:
                type: object
                required:
                - id
                - message
                properties:
                  id:
                    type: string
                    example: invalid
                  message:
                    description: An error response detailing the field and the nature of the error.
                    oneOf:
                    - type: string
                    - type: object
                      additionalProperties: true
                    - type: array
                      items:
                        type: object
                        additionalProperties: true
              examples:
                StringMessage:
                  value:
                    id: invalid
                    message: We could not find an email address associated with this account, which is required for Digital Banking. Please contact Support.
                  summary: String message
                ObjectMessage:
                  value:
                    id: invalid
                    message:
                      field_name: Message describing nature of error.
                  summary: Object message
                ArrayMessage:
                  value:
                    id: invalid
                    message:
                    - field_name: Message describing nature of error.
                    - second_field_name: Second Message.
                  summary: Array message
          description: Invalid request response.
      x-stoplight:
        id: ogvkdcvw0pe79
  /v1/enroll_verify/:
    post:
      operationId: enroll_verify_create
      description: 'Verifies an enrolling user''s enrollment code.


        Enrollment codes can be generated via the regenerate enrollment code endpoint /v1/users/{user_uuid}/enrollment_code/.


        If verified, returns user information.


        All monetary values are represented in minor units, or the smallest unit of the currency with no decimal (e.g., cents). For example, $10.00 is represented as 1000.




        <i>How can we improve these docs?             <a href="mailto:docs+feedback@narmi.com">Share your feedback.</a></i>'
      summary: Verify enrollment code
      tags:
      - enrollments
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VerifyEnrollmentDocRequest'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/VerifyEnrollmentDocRequest'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/VerifyEnrollmentDocRequest'
        required: true
      security:
      - oauth2:
        - write
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VerifyEnrollment'
          description: ''
        '422':
          content:
            application/json:
              schema:
                type: object
                required:
                - id
                - message
                properties:
                  id:
                    type: string
                    example: invalid_request_error
                  message:
                    description: An error response detailing the field and the nature of the error.
                    oneOf:
                    - type: string
                    - type: object
                      additionalProperties: true
                    - type: array
                      items:
                        type: object
                        additionalProperties: true
              examples:
                ObjectMessage:
                  value:
                    id: invalid_request_error
                    message:
                      enrollment_code: Incorrect verification code entered, please try again.
                  summary: Object message
                StringMessage:
                  value:
                    id: invalid_request_error
                    message: Message describing nature of error.
                  summary: String message
                ArrayMessage:
                  value:
                    id: invalid_request_error
                    message:
                    - field_name: Message describing nature of error.
                    - second_field_name: Second Message.
                  summary: Array message
          description: Invalid request response.
      x-stoplight:
        id: vsj6m7rbc6a43
  /v1/enrollments:
    post:
      operationId: enrollments_create
      description: 'Returns a URL that enables a user to enroll without entering their details on the first step of enrollment. Verifies a user''s information on the core and generates a link that allows the user to automatically proceed past the initial step of enrollment. After clicking the link, and depending on configuration, the user is redirected to the enrollment code verification or username/password step of enrollment.


        All monetary values are represented in minor units, or the smallest unit of the currency with no decimal (e.g., cents). For example, $10.00 is represented as 1000.




        <i>How can we improve these docs?             <a href="mailto:docs+feedback@narmi.com">Share your feedback.</a></i>'
      summary: Create enrollment URL
      tags:
      - enrollments
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EnrollmentUrlCreateRequest'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/EnrollmentUrlCreateRequest'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/EnrollmentUrlCreateRequest'
      security:
      - oauth2:
        - write
      responses:
        '422':
          content:
            application/json:
              schema:
                type: object
                required:
                - id
                - message
                properties:
                  id:
                    type: string
                    example: invalid_request_error
                  message:
                    description: An error response detailing the field and the nature of the error.
                    oneOf:
                    - type: string
                    - type: object
                      additionalProperties: true
                    - type: array
                      items:
                        type: object
                        additionalProperties: true
              examples:
                ObjectMessage:
                  value:
                    id: invalid_request_error
                    message:
                      date_of_birth: 'Date has wrong format. Use one of these formats instead: YYYY-MM-DD.'
                  summary: Object message
                StringMessage:
                  value:
                    id: invalid_request_error
                    message: Message describing nature of error.
                  summary: String message
                ArrayMessage:
                  value:
                    id: invalid_request_error
                    message:
                    - field_name: Message describing nature of error.
                    - second_field_name: Second Message.
                  summary: Array message
          description: Invalid request response.
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateEnrollmentUrlsResponse'
          description: ''
      x-stoplight:
        id: azvhyijvoxzdy
  /v1/users/{user_uuid}/enrollment_code/:
    post:
      operationId: users_enrollment_code_create
      description: 'Regenerates an enrollment code for an enrolling user and resends the enrollment code email.


        All monetary values are represented in minor units, or the smallest unit of the currency with no decimal (e.g., cents). For example, $10.00 is represented as 1000.




        <i>How can we improve these docs?             <a href="mailto:docs+feedback@narmi.com">Share your feedback.</a></i>'
      summary: Create a new enrollment code
      parameters:
      - in: path
        name: user_uuid
        schema:
          type: string
          pattern: ^[0-9a-z-]+$
        required: true
      tags:
      - enrollments
      security:
      - oauth2:
        - write
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                example:
                  message: If we were able to locate your email in our system, you should receive an email with a verification code. If you don't receive this email, please contact support.
          description: ''
        '404':
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                  message:
                    type: string
              examples:
                NotFound:
                  value:
                    id: not_found
                    message: User not found
          description: ''
        '422':
          content:
            application/json:
              schema:
                type: object
                required:
                - id
                - message
                properties:
                  id:
                    type: string
                    example: invalid_request_error
                  message:
                    description: An error response detailing the field and the nature of the error.
                    oneOf:
                    - type: string
                    - type: object
                      additionalProperties: true
                    - type: array
                      items:
                        type: object
                        additionalProperties: true
              examples:
                StringMessage:
                  value:
                    id: invalid_request_error
                    message: Invalid user
                  summary: String message
                ObjectMessage:
                  value:
                    id: invalid_request_error
                    message:
                      field_name: Message describing nature of error.
                  summary: Object message
                ArrayMessage:
                  value:
                    id: invalid_request_error
                    message:
                    - field_name: Message describing nature of error.
                    - second_field_name: Second Message.
                  summary: Array message
          description: Invalid request response.
      x-stoplight:
        id: b731zexvmtfxl
  /v1/users/{user_uuid}/enrollment_complete:
    post:
      operationId: users_enrollment_complete_create
      description: 'Validates that the user meets the requirements to complete enrollment, which may include that they have a permitted MFA device and that they have correctly assented to their estatement preferences. If they meet these requirements, they''ll be registered in our system as having completed enrollment.


        All monetary values are represented in minor units, or the smallest unit of the currency with no decimal (e.g., cents). For example, $10.00 is represented as 1000.




        <i>How can we improve these docs?             <a href="mailto:docs+feedback@narmi.com">Share your feedback.</a></i>'
      summary: Set user as enrolled
      parameters:
      - in: path
        name: user_uuid
        schema:
          type: string
          pattern: ^[0-9a-z-]+$
        required: true
      tags:
      - enrollments
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EnrollmentCompleteDocRequest'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/EnrollmentCompleteDocRequest'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/EnrollmentCompleteDocRequest'
      security:
      - oauth2:
        - write
      responses:
        '204':
          description: No response body
        '404':
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                  message:
                    type: string
              examples:
                NotFound:
                  value:
                    id: complete_enrollment_user_not_found
                    message: User not found.
          description: ''
        '422':
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                  message:
                    type: string
              examples:
                EnrollmentAlreadyCompletedError:
                  value:
                    id: enrollment_already_completed
                    message: You have already completed enrollment. Please refresh the page.
          description: ''
      x-stoplight:
        id: 9kzq6labseruv
components:
  schemas:
    Address:
      type: object
      properties:
        street_address:
          type: string
        street_address_2:
          type: string
        city:
          type: string
        region_code:
          type: string
          description: A region, province, parish, or any kind of subdivision represented by up to 3 characters. Typically an ISO 2-character state code.
        postal_code:
          type: string
          description: Typically a five-digit numeric US ZIP Code.
        country_code:
          type: string
          description: An ISO 3166-1 alpha-2 country code.
        type:
          type: string
      required:
      - city
      - postal_code
      - region_code
      - street_address
      x-stoplight:
        id: xatva1xwqb0yk
    Profile:
      type: object
      description: ''
      properties:
        email:
          type: string
          readOnly: true
          description: Email address for the registered user.
          example: demo@narmitech.com
        core_provided_email:
          type: string
          nullable: true
          readOnly: true
          description: Email address the user has registered to the core.
          example: null
        username:
          type: string
          nullable: true
          readOnly: true
          description: Username for the registered user.
          example: testuser
        id:
          type: string
          format: uuid
          nullable: true
          readOnly: true
          description: UUID of the registered user. This value is used as the unique identifier for the user in the API.
          example: 07231f46-23f1-482e-bdc4-35f2267b60e6
        institution_user_identifier:
          type: string
          readOnly: true
          description: Core user ID, may be set to empty string if the requesting user does not have the `core_user_id` scope for the target user.
          example: ''
        updated_at:
          type: string
          format: date-time
          nullable: true
          readOnly: true
          description: The last date-time that the information for this user was altered or saved.
          example: '2018-11-02T03:29:18.317000+00:00'
        addresses:
          type: array
          items:
            $ref: '#/components/schemas/Address'
          readOnly: true
          description: A list of addresses for the registered user. This list contains the primary address and the mailing address of the user, if it exists. This may be set to empty list if the requesting user does not have the `address` scope for the target user.
          example: []
        phone_numbers:
          type: array
          items:
            $ref: '#/components/schemas/Phone'
          readOnly: true
          description: A list of phone numbers for the registered user. This list often includes only one phone number. This may be set to empty list if the requesting user does not have the `phone` scope for the target user.
          example: []
        notifications_enabled:
          type: boolean
          nullable: true
          readOnly: true
          description: Whether the user has registered a device for notifications. This field will also check to make sure that at least one of the devices is set to active.
        first_name:
          type: string
          readOnly: true
          description: First name of the registered user, can also include middle or second names. This may be set to empty string if the requesting user does not have the `name` scope for the target user.
          example: ''
        last_name:
          type: string
          readOnly: true
          description: Last name of the registered user, may include items such as hyphenated/multiple surnames and generational suffixes (ie. Jr, Sr, III). This may be set to empty string if the requesting user does not have the `name` scope for the target user.
          example: ''
        paper_statements:
          type: boolean
          nullable: true
          readOnly: true
          description: Whether the registered user has opted to receive eStatements. This may be set to `null` if the requesting user does not have the `preferences` scope for the target user.
          example: true
        user_category:
          description: Used to distinguish whether this is a `business` or `personal` user.
          nullable: true
          readOnly: true
          example: personal
          oneOf:
          - $ref: '#/components/schemas/UserCategory4f2Enum'
          - $ref: '#/components/schemas/NullEnum'
        features:
          type: object
          additionalProperties: {}
          nullable: true
          readOnly: true
          description: A set of user features which define what the user can and can not do.
          example:
            ach: true
            allow_olb_device_remembering: true
            check_order: true
            edit_scheduled_transfers: true
            stop_payment_by_range: true
            top_menu:
              Dashboard:
                url: /dashboard
              Accounts:
                accounts: true
              Documents:
                url: /statements
              Support:
                url: /support
              Tools:
                menu:
                  Transfer funds:
                    url: /transfer
                  Transactions:
                    url: /transactions
                  Cards:
                    url: /cards
                  Trends:
                    url: /trends
                  Automatic savings:
                    url: /automatic
                  Manage users:
                    url: /access_manager
                    feature_flag: indigo.OrganizationUser_permission
                  List all NAF options:
                    naf: true
            internal_transfers: true
            account_membership: true
            address_change: true
            alerts: true
            allpoint_locator_atm: true
            automatic_savings: OPT_IN
            bill_pay: ipay
            billshark: true
            business_account_opening: true
            personal_banking: true
            business_banking: true
            cards: true
            coop_locator_atm: true
            coop_locator_branch: true
            core_based_alerts: false
            existing_user_account_opening: true
            existing_user_dao: true
            instant_account_verification: mx
            insurance: lemonade
            login_and_enroll_blocked: false
            mobile_banking: true
            moneypass_locator_atm: true
            deposit_sso: true
            new_account_opening: true
            offers: true
            offline_verification: true
            online_banking: true
            p2p:
            - m2m
            paperless_statement_enrollment: true
            paperless_statement_unenrollment: false
            phone_change: true
            push_notifications: true
            rdc: true
            refer_a_member: true
            show_transaction_contact_support: true
            statements: true
            transfers: true
            trends: mx
            user_message_uploads: true
            username: true
            wires: true
            stop_payment: true
            beneficiaries: true
            naf_app_management: true
            profile_switcher: true
            mobile_login_switcher: true
            limits:
              immediate_rdc:
                '3': 7000
              immediate_ach_pull:
                '1': 1000
              ach_pull:
                '30': 5500
                '1': 500
              ach_push:
                '3': 5000
            indigo.Account_permission: '*'
            indigo.AchTransfer_permission: '*'
            integrations.base.Card_permission: '*'
            indigo.ExternalAccount_permission: '*'
            indigo.IntraInstitutionTransfer_permission: '*'
            indigo.MemberFriend_permission: '*'
            integrations.base.Payee_permission: '*'
            integrations.base.Payment_permission: '*'
            indigo.Transaction_permission: '*'
            indigo.WireTransaction_permission: '*'
            integrations.documents_permission: '*'
            integrations.rdc_permission: '*'
            can_change_username: false
            can_change_estatements: true
            zelle: false
            hold_days:
              rdc_hold_days: 4
              ach_hold_days: 2
        org_uuid:
          type: string
          format: uuid
          nullable: true
          readOnly: true
          description: The UUID of the organization which the user belongs to. This will be set to `null` if the user category is set to `personal`.
          example: null
        org_role:
          description: The role of the user for the organization it belongs to. This will be set to `null` if the user category is set to `personal`.
          nullable: true
          readOnly: true
          example: null
          oneOf:
          - $ref: '#/components/schemas/OrgRoleEnum'
          - $ref: '#/components/schemas/NullEnum'
        org_name:
          type: string
          readOnly: true
          description: Name of the organization the user belongs to. This will be the DBA (Doing Business As) name if it exists, otherwise it will be set to the organization's legal name.
          example: ''
        business_permissions:
          type: array
          items:
            $ref: '#/components/schemas/BusinessPermissionsField'
          readOnly: true
          description: Permissions that a user has to a business. The permissions which are granted are dictated by the users role in the organization. This will be set to an empty list for non-business users.
          example: []
        dual_approval_required:
          type: boolean
          nullable: true
          readOnly: true
          description: For business users, this field indicates whether wire transactions initiated by the user require approval from the organization. For non-business users this will always be set to `false`.
          example: false
        ach_dual_approval_required:
          type: boolean
          nullable: true
          readOnly: true
          description: For business users, this field indicates whether ACH transactions initiated by the user require approval from the organization. For non-business users this will always be set to `false`.
        income_sources:
          type: array
          items:
            $ref: '#/components/schemas/IncomeSource'
          readOnly: true
          description: A list of user reported income sources.
        international_wire_dual_approval_required:
          type: boolean
          nullable: true
          readOnly: true
          description: For business users, this field indicates whether international wire transactions initiated by the user require approval from the organization. For non-business users this will always be set to `false`.
        is_staff:
          type: boolean
          readOnly: true
          description: Indicates whether the registered user is an employee of the financial institution.
          example: false
        is_active:
          type: boolean
          readOnly: true
          description: Indicates whether the user has been disabled.
          example: true
        is_superuser:
          type: boolean
          readOnly: true
          description: Indicates whether the user is an admin.
          example: false
        is_narmi:
          type: boolean
          readOnly: true
          description: Indicates whether the user is a Narmi user.
          example: false
        date_joined:
          type: string
          format: date-time
          readOnly: true
          description: The date-time the user was enrolled in the Narmi system.
          example: '2018-03-26T14:43:59.004000+00:00'
        last_login:
          type: string
          format: date-time
          nullable: true
          readOnly: true
          description: The date-time the user last logged in.
          example: '2024-04-22T21:06:02.006532+00:00'
        segment:
          type: string
          readOnly: true
          description: The banking segment which the user is a member of. These values can be unique for different financial institutions.
          example: ''
        metadata:
          type: object
          additionalProperties: {}
          readOnly: true
          description: Metadata for the registered user, this is often set as an empty object `{}`.
          example: {}
        has_username:
          type: boolean
          readOnly: true
          description: Whether the username was defined by the user or was autogenerated by the system.
          example: true
        has_password:
          type: boolean
          readOnly: true
          description: Whether the password was set by the user.
          example: true
        has_accepted_latest_terms:
          type: boolean
          readOnly: true
          description: Whether the user has accepted the latest terms of service.
          example: false
        requires_enrollment_code_verification:
          type: boolean
          readOnly: true
          description: Whether the user has verified their account. This can prevent the user from logging in. Enrollment can be completed via `/v1/enroll_verify/`.
          example: false
        enabled_estatements_at:
          oneOf:
          - type: string
            format: date-time
          - type: string
          nullable: true
          readOnly: true
          description: Date-time the user opted into electronic statements.
          example: null
        is_converting:
          type: boolean
          readOnly: true
          description: Whether the user is in the process of enrolling into online banking.
          example: false
        has_permitted_device:
          type: boolean
          readOnly: true
          description: When 2FA is enabled for the FI, this field indicates whether the user has a device which they can use to authenticate to the system.
          example: true
        has_backup_codes:
          type: boolean
          readOnly: true
          description: Whether the registered user has a one-time password backup code for two-factor authentication.
          example: false
        support_teams:
          type: array
          items:
            type: string
            format: uuid
          nullable: true
          readOnly: true
          description: The UUIDs of the support teams which the user belongs to. This will be set to `null` if the user does not belong to a support team.
        session_oidc_provider:
          type: string
          nullable: true
          readOnly: true
          description: The OIDC provider associated with the user's current session, if any.
      x-stoplight:
        id: g4tqfglwr85hp
    UserCategory4f2Enum:
      enum:
      - personal
      - business
      type: string
      x-stoplight:
        id: vmvxka9zperhg
    UserCategory905Enum:
      enum:
      - business
      - personal
      type: string
      description: '* `business` - business

        * `personal` - personal'
      x-stoplight:
        id: qi34dkcfjktg6
    BusinessPermissionsField:
      type: object
      properties:
        model_str:
          type: string
        operation:
          type: string
        uuid:
          type: string
          format: uuid
      required:
      - model_str
      - operation
      - uuid
      x-stoplight:
        id: rhmxqgl8o5k8x
    NullEnum:
      enum:
      - null
      x-stoplight:
        id: 2493tmzk9db0y
    IncomeSource:
      type: object
      properties:
        uuid:
          type: string
          format: uuid
          readOnly: true
        income:
          type: integer
          maximum: 2147483647
          minimum: 0
        income_type:
          $ref: '#/components/schemas/IncomeTypeEnum'
        mortgage_rent:
          type: integer
          maximum: 2147483647
          minimum: 0
          nullable: true
        industry:
          type: string
          maxLength: 128
        occupation:
          type: string
          maxLength: 128
      required:
      - income
      - income_type
      x-stoplight:
        id: cf5t7cvffrpat
    CreateEnrollmentUrlsResponse:
      type: object
      properties:
        enrollment:
          $ref: '#/components/schemas/CreateEnrollmentUrlsURLField'
      required:
      - enrollment
      x-stoplight:
        id: 0u9buvhwp4tg2
    VerifyEnrollmentDocRequest:
      type: object
      properties:
        enrollment_code:
          type: string
          writeOnly: true
          minLength: 1
          example: ur3yheyw
      required:
      - enrollment_code
      x-stoplight:
        id: yqsn2yxyvvqqt
    EnrollmentDocRequest:
      type: object
      properties:
        user_category:
          allOf:
          - $ref: '#/components/schemas/UserCategory905Enum'
          writeOnly: true
        primary_account_number:
          type: string
          writeOnly: true
          minLength: 1
          example: abc123def3456
        dob:
          type: string
          format: date
          writeOnly: true
        ssn:
          type: string
          writeOnly: true
          minLength: 9
          example: '123121234'
          maxLength: 9
        ein:
          type: st

# --- truncated at 32 KB (36 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/narmi/refs/heads/main/openapi/narmi-enrollments-api-openapi.yml