Narmi enrollments API
The enrollments API from Narmi — 5 operation(s) for enrollments.
The enrollments API from Narmi — 5 operation(s) for enrollments.
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