openapi: 3.1.0 info: title: HEVN 2FA User API description: Backend API for HEVN mobile neobank version: 0.1.2 servers: - url: https://api.hevn.finance description: Production tags: - name: User paths: /api/v1/user/kyc: put: tags: - User summary: Create or get current user description: Create or update user profile data for KYC. operationId: update_user_kyc_data_api_v1_user_kyc_put requestBody: content: application/json: schema: $ref: '#/components/schemas/UserCreateRequest' required: true responses: '201': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/UserResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' security: - HTTPBearer: [] /api/v1/user: get: tags: - User summary: Get current user description: Get the profile of the currently authenticated user. operationId: get_current_user_api_v1_user_get security: - HTTPBearer: [] parameters: - name: device-id in: header required: false schema: anyOf: - type: string - type: 'null' title: Device-Id - name: device-type in: header required: false schema: type: string default: ios title: Device-Type - name: device-name in: header required: false schema: type: string default: ios title: Device-Name - name: x-api-key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/UserResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/user/kyc_link: post: tags: - User summary: Submit KYC data description: Get Swipelux KYC verification link. operationId: submit_kyc_api_v1_user_kyc_link_post security: - HTTPBearer: [] parameters: - name: x-api-key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/KycStatusResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/user/kyc/status: get: tags: - User summary: Get KYC status description: Check the current KYC verification status. Use provider=align for Align. operationId: get_kyc_status_api_v1_user_kyc_status_get security: - HTTPBearer: [] parameters: - name: provider in: query required: false schema: $ref: '#/components/schemas/FiatProvider' default: swipelux - name: x-api-key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/KycStatusResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/user/geo: get: tags: - User summary: Geocode address description: Search address via Google Maps Geocoding API and return structured address components. operationId: geocode_address_api_v1_user_geo_get security: - HTTPBearer: [] parameters: - name: query in: query required: true schema: type: string title: Query responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/UserAddress' title: Response Geocode Address Api V1 User Geo Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/user/event: post: tags: - User summary: Track user event description: Proxy user events to Customer.io for analytics tracking. operationId: track_user_event_api_v1_user_event_post security: - HTTPBearer: [] parameters: - name: x-api-key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UserEventRequest' responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Track User Event Api V1 User Event Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/user/settings: get: tags: - User summary: Get user settings operationId: get_user_settings_api_v1_user_settings_get security: - HTTPBearer: [] parameters: - name: x-api-key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/UserSettings-Output' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' put: tags: - User summary: Update user settings operationId: update_settings_api_v1_user_settings_put security: - HTTPBearer: [] parameters: - name: x-api-key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UserSettings-Input' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/UserSettings-Output' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/user/bank_requested: put: tags: - User summary: Update requested bank rails operationId: update_bank_requested_api_v1_user_bank_requested_put security: - HTTPBearer: [] parameters: - name: x-api-key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/BankRequestedSettings-Input' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/BankRequestedSettings-Output' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/user/notifications: get: tags: - User summary: Get recent notifications description: Return recent notifications (email/push) for the current user. operationId: get_notifications_api_v1_user_notifications_get security: - HTTPBearer: [] parameters: - name: limit in: query required: false schema: type: integer maximum: 200 minimum: 1 default: 50 title: Limit - name: offset in: query required: false schema: type: integer minimum: 0 default: 0 title: Offset - name: x-api-key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/NotificationListResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/user/avatar: post: tags: - User summary: Upload user avatar description: Upload avatar image to public storage and save URL to user profile. operationId: upload_avatar_api_v1_user_avatar_post security: - HTTPBearer: [] parameters: - name: x-api-key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AvatarUploadRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AvatarUploadResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/user/share_kyb_link: post: tags: - User summary: Share KYB link description: Send a KYB verification link to the specified email. operationId: share_kyb_link_api_v1_user_share_kyb_link_post security: - HTTPBearer: [] parameters: - name: x-api-key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ShareKybLinkRequest' responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Share Kyb Link Api V1 User Share Kyb Link Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/user/invite: post: tags: - User summary: Send invite description: Legacy mapping for team invites. Prefer POST /team/invite. operationId: send_legacy_user_invite_api_v1_user_invite_post security: - HTTPBearer: [] parameters: - name: x-api-key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/InviteRequest' responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Send Legacy User Invite Api V1 User Invite Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/user/contact/bank/validate: post: tags: - User summary: Prevalidate bank contact details description: Validate bank identifiers before creating a contact. operationId: validate_bank_contact_api_v1_user_contact_bank_validate_post requestBody: content: application/json: schema: $ref: '#/components/schemas/BankValidationRequest' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/BankValidationResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/user/contacts: get: tags: - User summary: Get user contacts description: Get all contacts for the current user. operationId: get_contacts_api_v1_user_contacts_get security: - HTTPBearer: [] parameters: - name: limit in: query required: false schema: type: integer maximum: 500 minimum: 1 default: 100 title: Limit - name: offset in: query required: false schema: type: integer minimum: 0 default: 0 title: Offset - name: x-api-key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ContactListResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/user/contact/preview: get: tags: - User summary: Preview contact by wallet or email description: Look up a HEVN user by wallet address or email and return a preview. operationId: preview_contact_api_v1_user_contact_preview_get security: - HTTPBearer: [] parameters: - name: wallet in: query required: false schema: anyOf: - type: string - type: 'null' description: EVM wallet address title: Wallet description: EVM wallet address - name: email in: query required: false schema: anyOf: - type: string - type: 'null' description: Email address title: Email description: Email address - name: x-api-key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ContactPreviewResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/user/contact: post: tags: - User summary: Create contact description: Create a new contact for the current user. operationId: create_contact_api_v1_user_contact_post security: - HTTPBearer: [] parameters: - name: x-api-key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ContactCreateRequest' responses: '201': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/user/contacts/{contact_id}: patch: tags: - User summary: Update contact name description: Update safe contact metadata. operationId: update_contact_api_v1_user_contacts__contact_id__patch security: - HTTPBearer: [] parameters: - name: contact_id in: path required: true schema: type: string format: uuid title: Contact Id - name: x-api-key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ContactUpdateRequest' responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' delete: tags: - User summary: Delete contact description: Delete a contact. operationId: delete_contact_api_v1_user_contacts__contact_id__delete security: - HTTPBearer: [] parameters: - name: contact_id in: path required: true schema: type: string format: uuid title: Contact Id - name: x-api-key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key responses: '204': description: Successful Response '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/user/invite_code: get: tags: - User summary: Get invite code for current user description: Get the current user's invite code, creating one if needed. operationId: get_invite_code_api_v1_user_invite_code_get security: - HTTPBearer: [] parameters: - name: x-api-key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/InviteCodeResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/user/invited: get: tags: - User summary: Get users invited by current user description: Return all users who joined via the current user's invite code. operationId: get_invited_users_api_v1_user_invited_get security: - HTTPBearer: [] parameters: - name: x-api-key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/InvitedListResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/user/rewards: get: tags: - User summary: Get referral rewards earned by current user description: Return list of referral rewards (KYB and volume bonuses) for the current user. operationId: get_rewards_api_v1_user_rewards_get security: - HTTPBearer: [] parameters: - name: limit in: query required: false schema: type: integer maximum: 500 minimum: 1 default: 100 title: Limit - name: cursor in: query required: false schema: anyOf: - type: string - type: 'null' description: Reserved for future pagination title: Cursor description: Reserved for future pagination - name: x-api-key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/RewardsListResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/kyb/user/share_kyb_link: post: tags: - User summary: Share KYB link description: Send a KYB verification link to the specified email. operationId: share_kyb_link_package_alias_api_v1_kyb_user_share_kyb_link_post security: - HTTPBearer: [] parameters: - name: x-api-key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ShareKybLinkRequest' responses: '200': description: Successful Response content: application/json: schema: type: object additionalProperties: true title: Response Share Kyb Link Package Alias Api V1 Kyb User Share Kyb Link Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' components: schemas: SwiftAccountInput: properties: accountHolderType: $ref: '#/components/schemas/AlignAccountHolderType' accountHolderFirstName: anyOf: - type: string - type: 'null' title: Accountholderfirstname accountHolderLastName: anyOf: - type: string - type: 'null' title: Accountholderlastname accountHolderBusinessName: anyOf: - type: string - type: 'null' title: Accountholderbusinessname accountType: type: string const: swift title: Accounttype default: swift bic: type: string title: Bic bankName: type: string title: Bankname accountNumber: type: string title: Accountnumber country: type: string title: Country currency: type: string title: Currency default: USD bankAddress: anyOf: - type: string - type: 'null' title: Bankaddress routingNumber: anyOf: - type: string - type: 'null' title: Routingnumber relationship: anyOf: - $ref: '#/components/schemas/app__schemas__base__ContactRelationship' - type: 'null' type: object required: - accountHolderType - bic - bankName - accountNumber - country title: SwiftAccountInput description: SWIFT bank contact input. InviteVolumeBonus: properties: amount: type: string title: Amount currency: type: string title: Currency default: USD threshold: type: string title: Threshold type: object required: - amount - threshold title: InviteVolumeBonus description: Volume-based bonus tier with a threshold. UserSettings-Output: properties: appearance: $ref: '#/components/schemas/AppearancePreference' default: system devMode: type: boolean title: Devmode default: false emailsTs: additionalProperties: type: string type: object title: Emailsts notifications: $ref: '#/components/schemas/NotificationsSettings' bankRequested: $ref: '#/components/schemas/BankRequestedSettings-Output' type: object title: UserSettings description: User settings. app__schemas__base__ContactRelationship: type: string enum: - charity - commercial_investment - corporate_card - credit_card - dividend - family - financial_services - good_sold - goods_bought - government - insurance - intergroup_transfer - intra_group_dividends - information_technology - leasing - loan_charges - merchant_settlement - mobile_wallet - none - non_resident_transfer_between_accounts - pension - personal_expenses - prepaid_cards - professional - rental - resident_transfer_between_accounts - salaries - telecommunications - travel - utility_bill title: ContactRelationship description: 'Unified contact relationship / transfer purpose. Values match Align AlignTransferPurpose (the more granular set). Mapped to Swipelux AccountHolderRelationship via ``swipelux_relationship``.' UaeAccountInput: properties: accountHolderType: $ref: '#/components/schemas/AlignAccountHolderType' accountHolderFirstName: anyOf: - type: string - type: 'null' title: Accountholderfirstname accountHolderLastName: anyOf: - type: string - type: 'null' title: Accountholderlastname accountHolderBusinessName: anyOf: - type: string - type: 'null' title: Accountholderbusinessname accountType: type: string const: uaefts title: Accounttype default: uaefts bankName: type: string title: Bankname currency: type: string title: Currency default: AED accountHolderAddress: anyOf: - $ref: '#/components/schemas/UserAddress' - type: 'null' ibanNumber: type: string title: Ibannumber bic: anyOf: - type: string - type: 'null' title: Bic relationship: anyOf: - $ref: '#/components/schemas/app__schemas__base__ContactRelationship' - type: 'null' type: object required: - accountHolderType - bankName - ibanNumber title: UaeAccountInput description: UAE FTS bank contact input. InvitedStatus: type: string enum: - invited - kyb_pending - verified title: InvitedStatus description: Status of an invited user along the KYB funnel. InviteBonuses: properties: kyb: $ref: '#/components/schemas/InviteBonus' volume: $ref: '#/components/schemas/InviteVolumeBonus' type: object required: - kyb - volume title: InviteBonuses description: Bonus configuration for the referral program. BankRequestedSettings-Input: properties: rails: $ref: '#/components/schemas/BankRequestedRails' type: object title: BankRequestedSettings description: User bank-rail interest settings. ValidationError: properties: loc: items: anyOf: - type: string - type: integer type: array title: Location msg: type: string title: Message type: type: string title: Error Type type: object required: - loc - msg - type title: ValidationError BankRequestedRails: properties: us: $ref: '#/components/schemas/BankRequestedRailSettings' swift: $ref: '#/components/schemas/BankRequestedRailSettings' eu: $ref: '#/components/schemas/BankRequestedRailSettings' uae: $ref: '#/components/schemas/BankRequestedRailSettings' type: object title: BankRequestedRails description: Rails the user is interested in opening. ContactCreateRequest: properties: name: type: string maxLength: 200 minLength: 1 title: Name default: '' currency: anyOf: - type: string maxLength: 4 minLength: 3 - type: 'null' title: Currency description: Currency override email: anyOf: - type: string - type: 'null' title: Email crypto: anyOf: - $ref: '#/components/schemas/ContactCryptoInput' - type: 'null' account: anyOf: - oneOf: - $ref: '#/components/schemas/OnchainAccountInput' - $ref: '#/components/schemas/EmailAccountInput' - $ref: '#/components/schemas/SepaAccountInput' - $ref: '#/components/schemas/SwiftAccountInput' - $ref: '#/components/schemas/AchAccountInput' - $ref: '#/components/schemas/UaeAccountInput' - type: 'null' title: Account description: Account details iban: anyOf: - $ref: '#/components/schemas/IBANAccountDetails-Input' - $ref: '#/components/schemas/USExternalAccountDetails-Input' - $ref: '#/components/schemas/SwiftAccountDetails-Input' - type: 'null' title: Iban description: Bank account details in the same format as /banks ibanData address: anyOf: - $ref: '#/components/schemas/UserAddress' - type: 'null' relationship: $ref: '#/components/schemas/app__schemas__routers__user__contact__ContactRelationship' default: external type: object title: ContactCreateRequest description: Request to create a contact. AppearancePreference: type: string enum: - system - light - dark title: AppearancePreference description: Appearance theme preference. BankRequestedRailSettings: properties: pooled: type: boolean title: Pooled default: false named: type: boolean title: Named default: false type: object title: BankRequestedRailSettings description: User interest in a bank rail group. InvitedListResponse: properties: invited: items: $ref: '#/components/schemas/InvitedUserResponse' type: array title: Invited total: type: integer title: Total type: object required: - invited - total title: InvitedListResponse description: List of invited users. ReferrerInfo: properties: name: type: string title: Name email: type: string title: Email avatarUrl: anyOf: - type: string - type: 'null' title: Avatarurl type: object required: - name - email title: ReferrerInfo description: Lightweight info about the user who referred this user. AvatarUploadRequest: properties: base64: type: string title: Base64 description: Base64 encoded image file (with or without data URL prefix) type: object required: - base64 title: AvatarUploadRequest description: Request schema for uploading user avatar. HTTPValidationError: properties: detail: items: $ref: '#/components/schemas/ValidationError' type: array title: Detail type: object title: HTTPValidationError UserCreateRequest: properties: firstName: anyOf: - type: string maxLength: 100 minLength: 1 - type: 'null' title: Firstname lastName: anyOf: - type: string maxLength: 100 minLength: 1 - type: 'null' title: Lastname country: anyOf: - $ref: '#/components/schemas/CountryCode' - type: 'null' jurisdiction: anyOf: - $ref: '#/components/schemas/CountryCode' - type: 'null' birthDate: anyOf: - type: string format: date - type: 'null' title: Birthdate description: Birth date in ISO format isBusiness: anyOf: - type: boolean - type: 'null' title: Isbusiness entityName: anyOf: - type: string - type: 'null' title: Entityname phone: anyOf: - type: string - type: 'null' title: Phone website: anyOf: - type: string - type: 'null' title: Website address: anyOf: - $ref: '#/components/schemas/UserAddress' - type: 'null' avatarUrl: anyOf: - type: string - type: 'null' title: Avatarurl contactInfo: anyOf: - type: string - type: 'null' title: Contactinfo inviteCode: anyOf: - type: string - type: 'null' title: Invitecode description: Invite code from referrer type: object title: UserCreateRequest description: Request schema for creating a user. ContactCryptoResponse: properties: chain: anyOf: - type: string - type: 'null' title: Chain token: anyOf: - type: string - type: 'null' title: Token address: type: string title: Address type: object required: - address title: ContactCryptoResponse description: Crypto payment details for contact. OneClickChain: type: string enum: - eth - bsc - avax - op - arb - pol - sol - base - gnosis - tron - xrp - zec - doge - ltc - btc - cardano - bera - sui - near - near_intents - xlayer - plasma - ton - stellar - monad - starknet - aptos - adi - bch title: OneClickChain description: 1click chain codes. NotificationListResponse: properties: notifications: items: $ref: '#/components/schemas/NotificationResponse' type: array title: Notifications total: type: integer title: Total type: object required: - notifications - total title: NotificationListResponse description: List of notifications response. RewardItem: properties: id: type: string title: Id date: type: string format: date-time title: Date refereeName: type: string title: Refereename refereeId: type: string format: uuid title: Refereeid amount: type: string title: Amount currency: type: string title: Currency default: USD type: $ref: '#/components/schemas/RewardType' type: object required: - id - date - refereeName - refereeId - amount - type title: RewardItem description: A single referral reward earned by the current user. UserEventRequest: properties: event: type: string maxLength: 200 minLength: 1 title: Event description: Event name properties: additionalProperties: true type: object title: Properties description: Event properties type: object required: - event title: UserEventRequest description: Request schema for tracking user events. USExternalAccountDetails-Input: properties: bankName: type: string title: Bankname bankAddress: anyOf: - type: string - type: 'null' title: Bankaddress currency: anyOf: - type: string - type: 'null' title: Currency accountHolderType: $ref: '#/components/schemas/AlignAccountHolderType' accountHolderFirstName: anyOf: - type: string - type: 'null' title: Accountholderfirstname accountHolderLastName: anyOf: - type: string - type: 'null' title: Accountholderlastname accountHolderBusinessName: anyOf: - type: string - type: 'null' title: Accountholderbusinessname accountHolderAddress: anyOf: - $ref: '#/components/schemas/UserAddress' - type: 'null' relationship: anyOf: - $ref: '#/components/schemas/app__schemas__base__ContactRelationship' - type: 'null' paymentReference: anyOf: - type: string - type: 'null' title: Paymentreference accountType: type: string enum: - ach - fedwire title: Accounttype default: ach us: $ref: '#/components/schemas/USAccountDetails' type: object required: - bankName - accountHolderType - us title: USExternalAccountDetails description: US domestic (ACH) external account. NotificationChannelPrefs: properties: email: type: boolean title: Email default: true push: type: boolean title: Push default: true type: object title: NotificationChannelPrefs description: Per-channel toggles for a single notification category. UserSettings-Input: properties: appearance: $ref: '#/components/schemas/AppearancePreference' default: system devMode: type: boolean title: Devmode default: false emailsTs: additionalProperties: type: string type: object title: Emailsts notifications: $ref: '#/components/schemas/NotificationsSettings' bankRequested: $ref: '#/components/schemas/BankRequestedSettings-Input' type: object title: UserSettings description: User settings. TransactionType: type: string enum: - sepa - swift - ach - uaefts - fedwire - swift-usd - swift-eur - wire - pix - crypto - card - internal - refund title: TransactionType description: 'Transaction type - payment rail. Includes all ``FiatPaymentType`` values (sepa/swift/ach/uaefts) plus extended fiat variants (wire/swift-usd/swift-eur/fedwire/pix) and non-fiat rails (crypto/card/internal/refund).' InvitedUserResponse: properties: id: type: string format: uuid title: Id email: type: string title: Email firstName: anyOf: - type: string - type: 'null' title: Firstname lastName: anyOf: - type: string - type: 'null' title: Lastname avatarUrl: anyOf: - type: string - type: 'null' title: Avatarurl isBusiness: anyOf: - type: boolean - type: 'null' title: Isbusiness status: $ref: '#/components/schemas/InvitedStatus' createdAt: type: string format: date-time title: Createdat type: object required: - id - email - status - createdAt title: InvitedUserResponse description: A single invited user. InviteBonus: properties: amount: type: string title: Amount currency: type: string title: Currency default: USD type: object required: - amount title: InviteBonus description: A single referral bonus tier. IBANAccountDetails-Input: properties: bankName: type: string title: Bankname bankAddress: anyOf: - type: string - type: 'null' title: Bankaddress currency: anyOf: - type: string - type: 'null' title: Currency accountHolderType: $ref: '#/components/schemas/AlignAccountHolderType' accountHolderFirstName: anyOf: - type: string - type: 'null' title: Accountholderfirstname accountHolderLastName: anyOf: - type: string - type: 'null' title: Accountholderlastname accountHolderBusinessName: anyOf: - type: string - type: 'null' title: Accountholderbusinessname accountHolderAddress: anyOf: - $ref: '#/components/schemas/UserAddress' - type: 'null' relationship: anyOf: - $ref: '#/components/schemas/app__schemas__base__ContactRelationship' - type: 'null' paymentReference: anyOf: - type: string - type: 'null' title: Paymentreference accountType: type: string enum: - sepa - uaefts title: Accounttype default: sepa ibanNumber: type: string title: Ibannumber bic: anyOf: - type: string - type: 'null' title: Bic type: object required: - bankName - accountHolderType - ibanNumber title: IBANAccountDetails description: IBAN (SEPA) external account. USExternalAccountDetails-Output: properties: bankName: type: string title: Bankname bankAddress: anyOf: - type: string - type: 'null' title: Bankaddress currency: anyOf: - type: string - type: 'null' title: Currency accountHolderType: $ref: '#/components/schemas/AlignAccountHolderType' accountHolderFirstName: anyOf: - type: string - type: 'null' title: Accountholderfirstname accountHolderLastName: anyOf: - type: string - type: 'null' title: Accountholderlastname accountHolderBusinessName: anyOf: - type: string - type: 'null' title: Accountholderbusinessname accountHolderAddress: anyOf: - $ref: '#/components/schemas/UserAddress' - type: 'null' relationship: anyOf: - $ref: '#/components/schemas/app__schemas__base__ContactRelationship' - type: 'null' paymentReference: anyOf: - type: string - type: 'null' title: Paymentreference accountType: type: string enum: - ach - fedwire title: Accounttype default: ach us: $ref: '#/components/schemas/USAccountDetails' beneficiaryName: anyOf: - type: string - type: 'null' title: Beneficiaryname description: Frontend-only alias derived from account holder fields. readOnly: true type: object required: - bankName - accountHolderType - us - beneficiaryName title: USExternalAccountDetails description: US domestic (ACH) external account. ContactLinkedUserResponse: properties: avatar: anyOf: - type: string - type: 'null' title: Avatar name: anyOf: - type: string - type: 'null' title: Name type: object title: ContactLinkedUserResponse description: Linked HEVN user preview for contact. RewardsListResponse: properties: rewards: items: $ref: '#/components/schemas/RewardItem' type: array title: Rewards totalAmount: type: string title: Totalamount currency: type: string title: Currency default: USD type: object required: - rewards - totalAmount title: RewardsListResponse description: List of referral rewards earned by the current user. USAccountDetails: properties: accountNumber: type: string title: Accountnumber routingNumber: type: string title: Routingnumber type: object required: - accountNumber - routingNumber title: USAccountDetails description: US domestic account details (ACH). InviteFlow: type: string enum: - kyb_manager - employer - team_member title: InviteFlow description: Invite flow types. SwiftDetails: properties: accountNumber: type: string title: Accountnumber routingNumber: anyOf: - type: string - type: 'null' title: Routingnumber bic: type: string title: Bic type: object required: - accountNumber - bic title: SwiftDetails description: SWIFT (international wire) account details. AlignAccountHolderType: type: string enum: - individual - business title: AlignAccountHolderType description: Account holder type. ContactUpdateRequest: properties: name: anyOf: - type: string maxLength: 200 minLength: 1 - type: 'null' title: Name userId: anyOf: - type: string format: uuid - type: 'null' title: Userid walletAddress: anyOf: - type: string - type: 'null' title: Walletaddress chainId: anyOf: - type: string - type: 'null' title: Chainid currency: anyOf: - type: string maxLength: 3 minLength: 3 - type: 'null' title: Currency priorityMethod: anyOf: - $ref: '#/components/schemas/TransactionType' - type: 'null' address: anyOf: - $ref: '#/components/schemas/UserAddress' - type: 'null' relationship: anyOf: - $ref: '#/components/schemas/app__schemas__routers__user__contact__ContactRelationship' - type: 'null' type: object title: ContactUpdateRequest description: Request to update a contact. AchAccountInput: properties: accountHolderType: $ref: '#/components/schemas/AlignAccountHolderType' accountHolderFirstName: anyOf: - type: string - type: 'null' title: Accountholderfirstname accountHolderLastName: anyOf: - type: string - type: 'null' title: Accountholderlastname accountHolderBusinessName: anyOf: - type: string - type: 'null' title: Accountholderbusinessname accountType: type: string enum: - ach - fedwire title: Accounttype default: ach bankName: type: string title: Bankname default: '' accountNumber: type: string title: Accountnumber routingNumber: type: string title: Routingnumber country: type: string title: Country currency: type: string title: Currency default: USD relationship: anyOf: - $ref: '#/components/schemas/app__schemas__base__ContactRelationship' - type: 'null' default: resident_transfer_between_accounts type: object required: - accountHolderType - accountNumber - routingNumber - country title: AchAccountInput description: ACH bank contact input. UserAddress: properties: streetAddress: anyOf: - type: string - type: 'null' title: Streetaddress addressLine2: anyOf: - type: string - type: 'null' title: Addressline2 city: anyOf: - type: string - type: 'null' title: City state: anyOf: - type: string - type: 'null' title: State country: anyOf: - $ref: '#/components/schemas/CountryCode' - type: 'null' zip: anyOf: - type: string - type: 'null' title: Zip type: object title: UserAddress description: 'Address schema for user. Canonical field names: street_address, address_line_2, city, state, country, zip. Accepts legacy Align/IBAN field names (street_line_1, street_line_2, postal_code) for backward compatibility with existing JSONB data.' InviteRequest: properties: email: type: string format: email title: Email flow: $ref: '#/components/schemas/InviteFlow' type: object required: - email - flow title: InviteRequest description: Request schema for sending an invite. SwiftAccountDetails-Input: properties: bankName: type: string title: Bankname bankAddress: anyOf: - type: string - type: 'null' title: Bankaddress currency: anyOf: - type: string - type: 'null' title: Currency accountHolderType: $ref: '#/components/schemas/AlignAccountHolderType' accountHolderFirstName: anyOf: - type: string - type: 'null' title: Accountholderfirstname accountHolderLastName: anyOf: - type: string - type: 'null' title: Accountholderlastname accountHolderBusinessName: anyOf: - type: string - type: 'null' title: Accountholderbusinessname accountHolderAddress: anyOf: - $ref: '#/components/schemas/UserAddress' - type: 'null' relationship: anyOf: - $ref: '#/components/schemas/app__schemas__base__ContactRelationship' - type: 'null' paymentReference: anyOf: - type: string - type: 'null' title: Paymentreference accountType: type: string const: swift title: Accounttype default: swift swift: $ref: '#/components/schemas/SwiftDetails' type: object required: - bankName - accountHolderType - swift title: SwiftAccountDetails description: SWIFT (international wire) external account. ContactListResponse: properties: contacts: items: $ref: '#/components/schemas/ContactResponse' type: array title: Contacts total: type: integer title: Total type: object required: - contacts - total title: ContactListResponse description: List of contacts response. app__schemas__routers__user__contact__ContactRelationship: type: string enum: - self - external title: ContactRelationship description: Relationship between the current user and the contact. AvatarUploadResponse: properties: avatarUrl: type: string title: Avatarurl type: object required: - avatarUrl title: AvatarUploadResponse description: Response schema for avatar upload. RewardType: type: string enum: - kyb - volume title: RewardType description: Referral reward type. BankRequestedSettings-Output: properties: rails: $ref: '#/components/schemas/BankRequestedRails' type: object title: BankRequestedSettings description: User bank-rail interest settings. NotificationChannel: type: string enum: - email - push - internal title: NotificationChannel description: Notification delivery channel. ContactCryptoInput: properties: chain: $ref: '#/components/schemas/OneClickChain' token: type: string title: Token address: type: string title: Address type: object required: - chain - token - address title: ContactCryptoInput description: Crypto contact input. BankValidationRequest: properties: bankType: type: string title: Banktype country: anyOf: - type: string - type: 'null' title: Country bankName: anyOf: - type: string - type: 'null' title: Bankname iban: anyOf: - type: string - type: 'null' title: Iban bic: anyOf: - type: string - type: 'null' title: Bic routingNumber: anyOf: - type: string - type: 'null' title: Routingnumber type: object required: - bankType title: BankValidationRequest description: Request to prevalidate bank details before creating a contact. ShareKybLinkRequest: properties: email: type: string format: email title: Email type: object required: - email title: ShareKybLinkRequest description: Request schema for sharing a KYB link via email. IBANAccountDetails-Output: properties: bankName: type: string title: Bankname bankAddress: anyOf: - type: string - type: 'null' title: Bankaddress currency: anyOf: - type: string - type: 'null' title: Currency accountHolderType: $ref: '#/components/schemas/AlignAccountHolderType' accountHolderFirstName: anyOf: - type: string - type: 'null' title: Accountholderfirstname accountHolderLastName: anyOf: - type: string - type: 'null' title: Accountholderlastname accountHolderBusinessName: anyOf: - type: string - type: 'null' title: Accountholderbusinessname accountHolderAddress: anyOf: - $ref: '#/components/schemas/UserAddress' - type: 'null' relationship: anyOf: - $ref: '#/components/schemas/app__schemas__base__ContactRelationship' - type: 'null' paymentReference: anyOf: - type: string - type: 'null' title: Paymentreference accountType: type: string enum: - sepa - uaefts title: Accounttype default: sepa ibanNumber: type: string title: Ibannumber bic: anyOf: - type: string - type: 'null' title: Bic beneficiaryName: anyOf: - type: string - type: 'null' title: Beneficiaryname description: Frontend-only alias derived from account holder fields. readOnly: true type: object required: - bankName - accountHolderType - ibanNumber - beneficiaryName title: IBANAccountDetails description: IBAN (SEPA) external account. EmailAccountInput: properties: accountType: type: string const: email title: Accounttype default: email email: type: string title: Email type: object required: - email title: EmailAccountInput description: Email contact input. ContactResponse: properties: id: type: string format: uuid title: Id name: type: string title: Name userId: anyOf: - type: string format: uuid - type: 'null' title: Userid email: anyOf: - type: string - type: 'null' title: Email relationship: $ref: '#/components/schemas/app__schemas__routers__user__contact__ContactRelationship' createdAt: type: string format: date-time title: Createdat address: anyOf: - $ref: '#/components/schemas/UserAddress' - type: 'null' iban: anyOf: - $ref: '#/components/schemas/IBANAccountDetails-Output' - $ref: '#/components/schemas/USExternalAccountDetails-Output' - $ref: '#/components/schemas/SwiftAccountDetails-Output' - type: 'null' title: Iban crypto: anyOf: - $ref: '#/components/schemas/ContactCryptoResponse' - type: 'null' user: anyOf: - $ref: '#/components/schemas/ContactLinkedUserResponse' - type: 'null' type: object required: - id - name - relationship - createdAt title: ContactResponse description: Contact response with full structure for transfer. KycStatusResponse: properties: provider: $ref: '#/components/schemas/FiatProvider' externalUserId: anyOf: - type: string - type: 'null' title: Externaluserid email: type: string title: Email status: anyOf: - $ref: '#/components/schemas/KycStatus' - type: 'null' kycStatus: $ref: '#/components/schemas/KycStatus' firstName: anyOf: - type: string - type: 'null' title: Firstname lastName: anyOf: - type: string - type: 'null' title: Lastname entityName: anyOf: - type: string - type: 'null' title: Entityname kycLink: anyOf: - type: string - type: 'null' title: Kyclink kycUrl: anyOf: - type: string - type: 'null' title: Kycurl contactSupportLink: type: string title: Contactsupportlink default: https://app.gethevn.com/chat type: object required: - provider - email - kycStatus title: KycStatusResponse description: Response schema for KYC status check. OnchainAccountInput: properties: accountType: type: string const: onchain title: Accounttype default: onchain email: anyOf: - type: string - type: 'null' title: Email walletAddress: type: string title: Walletaddress chainId: $ref: '#/components/schemas/OneClickChain' currency: type: string title: Currency type: object required: - walletAddress - chainId - currency title: OnchainAccountInput description: Onchain wallet contact input. SepaAccountInput: properties: accountHolderType: $ref: '#/components/schemas/AlignAccountHolderType' accountHolderFirstName: anyOf: - type: string - type: 'null' title: Accountholderfirstname accountHolderLastName: anyOf: - type: string - type: 'null' title: Accountholderlastname accountHolderBusinessName: anyOf: - type: string - type: 'null' title: Accountholderbusinessname accountType: type: string const: sepa title: Accounttype default: sepa iban: type: string title: Iban bic: anyOf: - type: string - type: 'null' title: Bic country: type: string title: Country currency: type: string title: Currency default: EUR bankName: type: string title: Bankname relationship: anyOf: - $ref: '#/components/schemas/app__schemas__base__ContactRelationship' - type: 'null' type: object required: - accountHolderType - iban - country - bankName title: SepaAccountInput description: SEPA bank contact input. NotificationsSettings: properties: cashFlow: $ref: '#/components/schemas/NotificationChannelPrefs' suspiciousActivity: $ref: '#/components/schemas/NotificationChannelPrefs' tasksAndApprovals: $ref: '#/components/schemas/NotificationChannelPrefs' yourSpending: $ref: '#/components/schemas/NotificationChannelPrefs' accountBalances: $ref: '#/components/schemas/NotificationChannelPrefs' accounting: $ref: '#/components/schemas/NotificationChannelPrefs' billPay: $ref: '#/components/schemas/NotificationChannelPrefs' invoicing: $ref: '#/components/schemas/NotificationChannelPrefs' collaboration: $ref: '#/components/schemas/NotificationChannelPrefs' type: object title: NotificationsSettings description: 'User notification preferences grouped by category. Categories are UI groupings over `NotificationType`. Mapping lives in `NOTIFICATION_TYPE_CATEGORY`. Defaults to all channels enabled.' CountryCode: type: string enum: - AF - AX - AL - DZ - AS - AD - AO - AI - AQ - AG - AR - AM - AW - AU - AT - AZ - BS - BH - BD - BB - BY - BE - BZ - BJ - BM - BT - BO - BQ - BA - BW - BV - BR - IO - BN - BG - BF - BI - CV - KH - CM - CA - KY - CF - TD - CL - CN - CX - CC - CO - KM - CG - CD - CK - CR - CI - HR - CU - CW - CY - CZ - DK - DJ - DM - DO - EC - EG - SV - GQ - ER - EE - SZ - ET - FK - FO - FJ - FI - FR - GF - PF - TF - GA - GM - GE - DE - GH - GI - GR - GL - GD - GP - GU - GT - GG - GN - GW - GY - HT - HM - VA - HN - HK - HU - IS - IN - ID - IR - IQ - IE - IM - IL - IT - JM - JP - JE - JO - KZ - KE - KI - KP - KR - KW - KG - LA - LV - LB - LS - LR - LY - LI - LT - LU - MO - MG - MW - MY - MV - ML - MT - MH - MQ - MR - MU - YT - MX - FM - MD - MC - MN - ME - MS - MA - MZ - MM - NA - NR - NP - NL - NC - NZ - NI - NE - NG - NU - NF - MK - MP - 'NO' - OM - PK - PW - PS - PA - PG - PY - PE - PH - PN - PL - PT - PR - QA - RE - RO - RU - RW - BL - SH - KN - LC - MF - PM - VC - WS - SM - ST - SA - SN - RS - SC - SL - SG - SX - SK - SI - SB - SO - ZA - GS - SS - ES - LK - SD - SR - SJ - SE - CH - SY - TW - TJ - TZ - TH - TL - TG - TK - TO - TT - TN - TR - TM - TC - TV - UG - UA - AE - GB - US - UM - UY - UZ - VU - VE - VN - VG - VI - WF - EH - YE - ZM - ZW title: CountryCode description: ISO 3166-1 alpha-2 country codes. ContactPreviewResponse: properties: name: anyOf: - type: string - type: 'null' title: Name icon: anyOf: - type: string - type: 'null' title: Icon activated: type: boolean title: Activated default: false createdAt: type: string format: date-time title: Createdat type: object required: - createdAt title: ContactPreviewResponse description: Lightweight user preview for contact lookup. FiatRailResponse: properties: provider: $ref: '#/components/schemas/FiatProvider' externalUserId: anyOf: - type: string - type: 'null' title: Externaluserid kycStatus: type: string title: Kycstatus default: not_started comment: anyOf: - type: string - type: 'null' title: Comment type: object required: - provider title: FiatRailResponse description: Response schema for a user's fiat rail registration. InviteCodeResponse: properties: code: anyOf: - type: string - type: 'null' title: Code totalInvited: type: integer title: Totalinvited default: 0 bonuses: $ref: '#/components/schemas/InviteBonuses' type: object required: - bonuses title: InviteCodeResponse description: Response for invite code. NotificationResponse: properties: id: type: string format: uuid title: Id type: $ref: '#/components/schemas/NotificationType' channel: $ref: '#/components/schemas/NotificationChannel' isOpened: type: boolean title: Isopened content: anyOf: - additionalProperties: true type: object - type: 'null' title: Content createdAt: type: string format: date-time title: Createdat deviceName: anyOf: - type: string - type: 'null' title: Devicename ipAddress: anyOf: - type: string - type: 'null' title: Ipaddress type: object required: - id - type - channel - isOpened - createdAt title: NotificationResponse description: Single notification response. KycStatus: type: string enum: - not_started - requested - incorporating - pending - under_review - in_review - approved - rejected title: KycStatus description: KYC verification status. NotificationType: type: string enum: - login - user_created - welcome - payment_received - payment_sent - withdrawal - invoice - invite - account_approved - sign_request - sign_completed - team_access - bank_account_ready - share_kyb - payment_claim - contact_invite - new_device_login - new_passkey - new_api_key - new_team_member - privy_key_exported - privy_wallet_recovered - privy_mfa_disabled - contract_payment_methods_updated - contract_created - contact_added - bank_requested - card_created - card_details_viewed - spending_alert - low_balance - accounting_sync_failed - bill_status - tx_comment - support_reply - compliance_reply title: NotificationType description: Notification type — matches the kind of event being notified. UserResponse: properties: id: type: string format: uuid title: Id email: type: string title: Email phone: anyOf: - type: string - type: 'null' title: Phone avatarUrl: anyOf: - type: string - type: 'null' title: Avatarurl contactInfo: anyOf: - type: string - type: 'null' title: Contactinfo firstName: anyOf: - type: string - type: 'null' title: Firstname middleName: anyOf: - type: string - type: 'null' title: Middlename lastName: anyOf: - type: string - type: 'null' title: Lastname entityName: anyOf: - type: string - type: 'null' title: Entityname birthDate: anyOf: - type: string format: date - type: 'null' title: Birthdate country: anyOf: - type: string - type: 'null' title: Country jurisdiction: anyOf: - type: string - type: 'null' title: Jurisdiction address: anyOf: - $ref: '#/components/schemas/UserAddress' - type: 'null' fiatRails: items: $ref: '#/components/schemas/FiatRailResponse' type: array title: Fiatrails default: [] isBusiness: anyOf: - type: boolean - type: 'null' title: Isbusiness plan: type: string title: Plan default: free referrer: anyOf: - $ref: '#/components/schemas/ReferrerInfo' - type: 'null' createdAt: type: string format: date-time title: Createdat updatedAt: type: string format: date-time title: Updatedat pushNotificationAllowed: anyOf: - type: boolean - type: 'null' title: Pushnotificationallowed myIp: anyOf: - type: string - type: 'null' title: Myip bankRequested: $ref: '#/components/schemas/BankRequestedSettings-Output' type: object required: - id - email - phone - avatarUrl - createdAt - updatedAt title: UserResponse description: Schema for user response. BankValidationResponse: properties: ok: type: boolean title: Ok errors: items: type: string type: array title: Errors warnings: items: type: string type: array title: Warnings lookups: additionalProperties: true type: object title: Lookups type: object required: - ok title: BankValidationResponse description: Result of bank detail validation. FiatProvider: type: string enum: - swipelux - align - mcp - wirex title: FiatProvider description: Supported fiat payment providers. SwiftAccountDetails-Output: properties: bankName: type: string title: Bankname bankAddress: anyOf: - type: string - type: 'null' title: Bankaddress currency: anyOf: - type: string - type: 'null' title: Currency accountHolderType: $ref: '#/components/schemas/AlignAccountHolderType' accountHolderFirstName: anyOf: - type: string - type: 'null' title: Accountholderfirstname accountHolderLastName: anyOf: - type: string - type: 'null' title: Accountholderlastname accountHolderBusinessName: anyOf: - type: string - type: 'null' title: Accountholderbusinessname accountHolderAddress: anyOf: - $ref: '#/components/schemas/UserAddress' - type: 'null' relationship: anyOf: - $ref: '#/components/schemas/app__schemas__base__ContactRelationship' - type: 'null' paymentReference: anyOf: - type: string - type: 'null' title: Paymentreference accountType: type: string const: swift title: Accounttype default: swift swift: $ref: '#/components/schemas/SwiftDetails' beneficiaryName: anyOf: - type: string - type: 'null' title: Beneficiaryname description: Frontend-only alias derived from account holder fields. readOnly: true type: object required: - bankName - accountHolderType - swift - beneficiaryName title: SwiftAccountDetails description: SWIFT (international wire) external account. securitySchemes: HTTPBearer: type: http scheme: bearer x-default: Bearer ApiKeyAuth: type: apiKey in: header name: x-api-key description: Alternative HEVN API key header. The CLI defaults to Authorization Bearer unless configured with HEVN_API_KEY_HEADER=X-Api-Key.