openapi: 3.1.0 info: title: HEVN 2FA Transactions API description: Backend API for HEVN mobile neobank version: 0.1.2 servers: - url: https://api.hevn.finance description: Production tags: - name: Transactions paths: /api/v1/transactions/export: get: tags: - Transactions summary: Export transactions description: Export transactions as CSV or XLSX file. operationId: export_transactions_api_v1_transactions_export_get security: - HTTPBearer: [] parameters: - name: format in: query required: false schema: $ref: '#/components/schemas/TransactionExportFormat' default: csv - name: type in: query required: false schema: anyOf: - type: string - type: 'null' description: Comma-separated transaction types title: Type description: Comma-separated transaction types - name: incomeOnly in: query required: false schema: anyOf: - type: boolean - type: 'null' title: Incomeonly - name: tag in: query required: false schema: anyOf: - type: string - type: 'null' description: Comma-separated tags title: Tag description: Comma-separated tags - name: status in: query required: false schema: anyOf: - type: string - type: 'null' description: Comma-separated unified statuses title: Status description: Comma-separated unified statuses - name: contactId in: query required: false schema: anyOf: - type: string - type: 'null' description: Comma-separated contact UUIDs title: Contactid description: Comma-separated contact UUIDs - name: bank_account_id in: query required: false schema: anyOf: - type: string - type: 'null' description: Comma-separated bank account UUIDs title: Bank Account Id description: Comma-separated bank account UUIDs - name: bankAccountId in: query required: false schema: anyOf: - type: string - type: 'null' description: Comma-separated bank account UUIDs title: Bankaccountid description: Comma-separated bank account UUIDs - name: cardId in: query required: false schema: anyOf: - type: string - type: 'null' description: Comma-separated Card UUIDs title: Cardid description: Comma-separated Card UUIDs - name: fromDate in: query required: false schema: anyOf: - type: string format: date-time - type: 'null' title: Fromdate - name: toDate in: query required: false schema: anyOf: - type: string format: date-time - type: 'null' title: Todate - name: q in: query required: false schema: anyOf: - type: string - type: 'null' description: Free-text search across description, merchant, tag, hash/wallet, contact name, counterparty user, invoice contractor, IBAN, and exact amount. Min 2 chars; values shorter are ignored. title: Q description: Free-text search across description, merchant, tag, hash/wallet, contact name, counterparty user, invoice contractor, IBAN, and exact amount. Min 2 chars; values shorter are ignored. - 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: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/transactions: get: tags: - Transactions summary: Get user transactions description: Get latest user transactions sorted by time. operationId: get_transactions_api_v1_transactions_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: sortBy in: query required: false schema: $ref: '#/components/schemas/TransactionSortBy' default: date - name: sortOrder in: query required: false schema: $ref: '#/components/schemas/SortOrder' default: desc - name: type in: query required: false schema: anyOf: - type: string - type: 'null' description: Comma-separated transaction types title: Type description: Comma-separated transaction types - name: incomeOnly in: query required: false schema: anyOf: - type: boolean - type: 'null' title: Incomeonly - name: tag in: query required: false schema: anyOf: - type: string - type: 'null' description: Comma-separated tags title: Tag description: Comma-separated tags - name: status in: query required: false schema: anyOf: - type: string - type: 'null' description: Comma-separated unified statuses title: Status description: Comma-separated unified statuses - name: contactId in: query required: false schema: anyOf: - type: string - type: 'null' description: Comma-separated contact UUIDs title: Contactid description: Comma-separated contact UUIDs - name: bank_account_id in: query required: false schema: anyOf: - type: string - type: 'null' description: Comma-separated bank account UUIDs title: Bank Account Id description: Comma-separated bank account UUIDs - name: bankAccountId in: query required: false schema: anyOf: - type: string - type: 'null' description: Comma-separated bank account UUIDs title: Bankaccountid description: Comma-separated bank account UUIDs - name: cardId in: query required: false schema: anyOf: - type: string - type: 'null' description: Comma-separated Card UUIDs title: Cardid description: Comma-separated Card UUIDs - name: fromDate in: query required: false schema: anyOf: - type: string format: date-time - type: 'null' title: Fromdate - name: toDate in: query required: false schema: anyOf: - type: string format: date-time - type: 'null' title: Todate - name: q in: query required: false schema: anyOf: - type: string - type: 'null' description: Free-text search across description, merchant, tag, hash/wallet, contact name, counterparty user, invoice contractor, IBAN, and exact amount. Min 2 chars; values shorter are ignored. title: Q description: Free-text search across description, merchant, tag, hash/wallet, contact name, counterparty user, invoice contractor, IBAN, and exact amount. Min 2 chars; values shorter are ignored. - 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/UnifiedTransactionListResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/transactions/breakdown: get: tags: - Transactions summary: Transaction volume breakdown description: Volume + count grouped by tag or type, with the same filters as the list. operationId: get_transactions_breakdown_api_v1_transactions_breakdown_get security: - HTTPBearer: [] parameters: - name: groupBy in: query required: true schema: $ref: '#/components/schemas/TransactionGroupBy' description: Group by tag or type description: Group by tag or type - name: type in: query required: false schema: anyOf: - type: string - type: 'null' description: Comma-separated transaction types title: Type description: Comma-separated transaction types - name: incomeOnly in: query required: false schema: anyOf: - type: boolean - type: 'null' title: Incomeonly - name: tag in: query required: false schema: anyOf: - type: string - type: 'null' description: Comma-separated tags title: Tag description: Comma-separated tags - name: status in: query required: false schema: anyOf: - type: string - type: 'null' description: Comma-separated unified statuses title: Status description: Comma-separated unified statuses - name: contactId in: query required: false schema: anyOf: - type: string - type: 'null' description: Comma-separated contact UUIDs title: Contactid description: Comma-separated contact UUIDs - name: bank_account_id in: query required: false schema: anyOf: - type: string - type: 'null' description: Comma-separated bank account UUIDs title: Bank Account Id description: Comma-separated bank account UUIDs - name: bankAccountId in: query required: false schema: anyOf: - type: string - type: 'null' description: Comma-separated bank account UUIDs title: Bankaccountid description: Comma-separated bank account UUIDs - name: cardId in: query required: false schema: anyOf: - type: string - type: 'null' description: Comma-separated Card UUIDs title: Cardid description: Comma-separated Card UUIDs - name: fromDate in: query required: false schema: anyOf: - type: string format: date-time - type: 'null' title: Fromdate - name: toDate in: query required: false schema: anyOf: - type: string format: date-time - type: 'null' title: Todate - name: q in: query required: false schema: anyOf: - type: string - type: 'null' description: Free-text search across description, merchant, tag, hash/wallet, contact name, counterparty user, invoice contractor, IBAN, and exact amount. Min 2 chars; values shorter are ignored. title: Q description: Free-text search across description, merchant, tag, hash/wallet, contact name, counterparty user, invoice contractor, IBAN, and exact amount. Min 2 chars; values shorter are ignored. - 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/TransactionBreakdownResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/transactions/breakdown/series: get: tags: - Transactions summary: Transaction volume breakdown over time description: 'Volume + count grouped by tag or type, split into time buckets across the fromDate..toDate range. Granularity is auto-picked: >6 months → month, >30 days → week, otherwise day. Empty periods are returned as zero-filled buckets so the frontend gets a complete x-axis. Same filter set as /transactions and /transactions/breakdown. `fromDate` and `toDate` are required.' operationId: get_transactions_breakdown_series_api_v1_transactions_breakdown_series_get security: - HTTPBearer: [] parameters: - name: groupBy in: query required: true schema: $ref: '#/components/schemas/TransactionGroupBy' description: Group by tag or type description: Group by tag or type - name: type in: query required: false schema: anyOf: - type: string - type: 'null' description: Comma-separated transaction types title: Type description: Comma-separated transaction types - name: incomeOnly in: query required: false schema: anyOf: - type: boolean - type: 'null' title: Incomeonly - name: tag in: query required: false schema: anyOf: - type: string - type: 'null' description: Comma-separated tags title: Tag description: Comma-separated tags - name: status in: query required: false schema: anyOf: - type: string - type: 'null' description: Comma-separated unified statuses title: Status description: Comma-separated unified statuses - name: contactId in: query required: false schema: anyOf: - type: string - type: 'null' description: Comma-separated contact UUIDs title: Contactid description: Comma-separated contact UUIDs - name: bank_account_id in: query required: false schema: anyOf: - type: string - type: 'null' description: Comma-separated bank account UUIDs title: Bank Account Id description: Comma-separated bank account UUIDs - name: bankAccountId in: query required: false schema: anyOf: - type: string - type: 'null' description: Comma-separated bank account UUIDs title: Bankaccountid description: Comma-separated bank account UUIDs - name: cardId in: query required: false schema: anyOf: - type: string - type: 'null' description: Comma-separated Card UUIDs title: Cardid description: Comma-separated Card UUIDs - name: fromDate in: query required: false schema: anyOf: - type: string format: date-time - type: 'null' title: Fromdate - name: toDate in: query required: false schema: anyOf: - type: string format: date-time - type: 'null' title: Todate - name: q in: query required: false schema: anyOf: - type: string - type: 'null' description: Free-text search across description, merchant, tag, hash/wallet, contact name, counterparty user, invoice contractor, IBAN, and exact amount. Min 2 chars; values shorter are ignored. title: Q description: Free-text search across description, merchant, tag, hash/wallet, contact name, counterparty user, invoice contractor, IBAN, and exact amount. Min 2 chars; values shorter are ignored. - 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/TransactionBreakdownSeriesResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/transactions/{transaction_id}/details: get: tags: - Transactions summary: Get transaction details description: Authenticated owners get the full UX (status auto-sync, document download links, crypto→internal repair). Unauthenticated callers must pass `?key=` with a share key issued by `POST /transactions/{id}/share`. Without auth and without a valid key the endpoint returns 401. operationId: get_transaction_details_endpoint_api_v1_transactions__transaction_id__details_get security: - HTTPBearer: [] parameters: - name: transaction_id in: path required: true schema: type: string title: Transaction Id - name: key in: query required: false schema: anyOf: - type: string - type: 'null' title: Key - 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/TransactionDetailResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/transactions/{transaction_id}/share: post: tags: - Transactions summary: Create a share link for a transaction description: Owner-only. Creates a temp access key scoped to this transaction_id. Pass the raw key back to `GET /transactions/{id}/details?key=` to fetch the receipt without auth. operationId: create_transaction_share_link_api_v1_transactions__transaction_id__share_post security: - HTTPBearer: [] parameters: - name: transaction_id in: path required: true schema: type: string title: Transaction Id - 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/TransactionShareLinkResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/transactions/{transaction_id}/tag: post: tags: - Transactions summary: Set transaction tag description: Set or clear a tag on a transaction. operationId: set_transaction_tag_api_v1_transactions__transaction_id__tag_post security: - HTTPBearer: [] parameters: - name: transaction_id in: path required: true schema: type: string title: Transaction 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/TagUpdateRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/TagUpdateResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/transactions/{transaction_id}/memo: put: tags: - Transactions summary: Set transaction memo description: Set or clear a memo (description) on a transaction. operationId: set_transaction_memo_api_v1_transactions__transaction_id__memo_put security: - HTTPBearer: [] parameters: - name: transaction_id in: path required: true schema: type: string title: Transaction 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/MemoUpdateRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/MemoUpdateResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/transactions/{transaction_id}/attachments: post: tags: - Transactions summary: Attach a document to a transaction description: Append an already-uploaded document (by id) to the transaction's attachments. The document must belong to the same user. Idempotent — re-attaching an existing id is a no-op. Returns the full updated list with signed download links. operationId: attach_document_to_transaction_api_v1_transactions__transaction_id__attachments_post security: - HTTPBearer: [] parameters: - name: transaction_id in: path required: true schema: type: string title: Transaction 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/app__schemas__routers__transactions__transaction__AttachDocumentRequest' responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/TransactionAttachment' title: Response Attach Document To Transaction Api V1 Transactions Transaction Id Attachments Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' components: schemas: TransactionBreakdownItem: properties: key: type: string title: Key volumeUsd: type: number title: Volumeusd count: type: integer title: Count type: object required: - key - volumeUsd - count title: TransactionBreakdownItem description: One bucket in a breakdown — volume + count for a tag/type value. 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``.' 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 TransactionStatus: type: string enum: - pending - success - failed - refunded title: TransactionStatus description: Unified transaction status. TransactionAmountDetail: properties: currency: type: string title: Currency amount: type: number title: Amount usdRate: anyOf: - type: number - type: 'null' title: Usdrate source: anyOf: - type: string - type: 'null' title: Source type: object required: - currency - amount title: TransactionAmountDetail description: Currency / amount / rate leg of a transaction. TransactionSortBy: type: string enum: - date - amount title: TransactionSortBy description: Field to sort the transaction list by. HTTPValidationError: properties: detail: items: $ref: '#/components/schemas/ValidationError' type: array title: Detail type: object title: HTTPValidationError TransactionSummary: properties: inflowUsd: type: number title: Inflowusd inflowCount: type: integer title: Inflowcount outflowUsd: type: number title: Outflowusd outflowCount: type: integer title: Outflowcount pendingInflowUsd: type: number title: Pendinginflowusd pendingInflowCount: type: integer title: Pendinginflowcount pendingOutflowUsd: type: number title: Pendingoutflowusd pendingOutflowCount: type: integer title: Pendingoutflowcount type: object required: - inflowUsd - inflowCount - outflowUsd - outflowCount - pendingInflowUsd - pendingInflowCount - pendingOutflowUsd - pendingOutflowCount title: TransactionSummary description: 'Aggregate volumes and counts over the filtered transaction set. Computed without LIMIT/OFFSET — represents the entire filtered scope, not just the current page. Returned only on the first page (offset=0); subsequent pages omit it since it doesn''t change with pagination.' TransactionGroupBy: type: string enum: - tag - type title: TransactionGroupBy description: Field to group breakdown analytics by. MemoUpdateResponse: properties: onchainTransactionId: type: string title: Onchaintransactionid memo: anyOf: - type: string - type: 'null' title: Memo type: object required: - onchainTransactionId title: MemoUpdateResponse description: Response for memo update. MemoUpdateRequest: properties: memo: anyOf: - type: string - type: 'null' title: Memo type: object title: MemoUpdateRequest description: Request to update a transaction memo (description). TransactionDetailResponse: properties: onchainTransactionId: type: string title: Onchaintransactionid type: type: string title: Type status: $ref: '#/components/schemas/TransactionStatus' time: type: string format: date-time title: Time isIncome: type: boolean title: Isincome from: $ref: '#/components/schemas/TransactionAmountDetail' to: anyOf: - $ref: '#/components/schemas/TransactionAmountDetail' - type: 'null' fee: anyOf: - $ref: '#/components/schemas/TransactionAmountDetail' - type: 'null' walletFrom: anyOf: - $ref: '#/components/schemas/TransactionWalletDetail' - type: 'null' walletTo: anyOf: - $ref: '#/components/schemas/TransactionWalletDetail' - type: 'null' ibanFrom: anyOf: - $ref: '#/components/schemas/IBANAccountDetails-Output' - $ref: '#/components/schemas/USExternalAccountDetails-Output' - $ref: '#/components/schemas/SwiftAccountDetails-Output' - type: 'null' title: Ibanfrom ibanTo: anyOf: - $ref: '#/components/schemas/IBANAccountDetails-Output' - $ref: '#/components/schemas/USExternalAccountDetails-Output' - $ref: '#/components/schemas/SwiftAccountDetails-Output' - type: 'null' title: Ibanto txHash: anyOf: - type: string - type: 'null' title: Txhash originChainId: anyOf: - type: string - type: 'null' title: Originchainid destinationChainId: anyOf: - type: string - type: 'null' title: Destinationchainid explorerUrl: anyOf: - type: string - type: 'null' title: Explorerurl description: anyOf: - type: string - type: 'null' title: Description card: anyOf: - $ref: '#/components/schemas/TransactionCardDetail' - type: 'null' contact: anyOf: - $ref: '#/components/schemas/TransactionContactDetail' - type: 'null' userFrom: anyOf: - $ref: '#/components/schemas/UserPreview' - type: 'null' userTo: anyOf: - $ref: '#/components/schemas/UserPreview' - type: 'null' approvedBy: anyOf: - $ref: '#/components/schemas/UserPreview' - $ref: '#/components/schemas/ApiKeyListResponse' - type: 'null' title: Approvedby providerTrId: anyOf: - type: string - type: 'null' title: Providertrid invoice: anyOf: - $ref: '#/components/schemas/TransactionInvoiceDetail' - type: 'null' attachments: items: $ref: '#/components/schemas/TransactionAttachment' type: array title: Attachments type: object required: - onchainTransactionId - type - status - time - isIncome - from title: TransactionDetailResponse description: Detailed transaction response with wallet/IBAN info. UnifiedTransactionItem: properties: onchainTransactionId: type: string title: Onchaintransactionid txHash: anyOf: - type: string - type: 'null' title: Txhash type: type: string title: Type name: type: string title: Name time: type: string format: date-time title: Time status: $ref: '#/components/schemas/TransactionStatus' isIncome: type: boolean title: Isincome tag: anyOf: - type: string - type: 'null' title: Tag from: $ref: '#/components/schemas/TransactionAmountDetail' to: anyOf: - $ref: '#/components/schemas/TransactionAmountDetail' - type: 'null' fee: anyOf: - $ref: '#/components/schemas/TransactionAmountDetail' - type: 'null' destinationChainId: anyOf: - type: string - type: 'null' title: Destinationchainid usdBalanceAfter: anyOf: - type: number - type: 'null' title: Usdbalanceafter card: anyOf: - $ref: '#/components/schemas/TransactionCardDetail' - type: 'null' userFrom: anyOf: - $ref: '#/components/schemas/UserPreview' - type: 'null' userTo: anyOf: - $ref: '#/components/schemas/UserPreview' - type: 'null' walletFrom: anyOf: - $ref: '#/components/schemas/TransactionWalletDetail' - type: 'null' walletTo: anyOf: - $ref: '#/components/schemas/TransactionWalletDetail' - type: 'null' ibanFrom: anyOf: - $ref: '#/components/schemas/IBANAccountDetails-Output' - $ref: '#/components/schemas/USExternalAccountDetails-Output' - $ref: '#/components/schemas/SwiftAccountDetails-Output' - type: 'null' title: Ibanfrom ibanTo: anyOf: - $ref: '#/components/schemas/IBANAccountDetails-Output' - $ref: '#/components/schemas/USExternalAccountDetails-Output' - $ref: '#/components/schemas/SwiftAccountDetails-Output' - type: 'null' title: Ibanto approved: anyOf: - type: string - type: 'null' title: Approved hasAttachments: type: boolean title: Hasattachments default: false type: object required: - onchainTransactionId - type - name - time - status - isIncome - from title: UnifiedTransactionItem description: 'Unified transaction item for the transaction list. Legacy directional fields are still included for compatibility.' ApiKeyListResponse: properties: id: type: string format: uuid title: Id name: type: string title: Name keyPreview: type: string title: Keypreview walletAddress: anyOf: - type: string - type: 'null' title: Walletaddress ipRestriction: anyOf: - type: string - type: 'null' title: Iprestriction maxSpend: anyOf: - type: number - type: 'null' title: Maxspend totalSpend: type: number title: Totalspend remaining: type: integer title: Remaining default: 0 lastUse: anyOf: - type: string format: date-time - type: 'null' title: Lastuse createdAt: type: string format: date-time title: Createdat type: object required: - id - name - keyPreview - totalSpend - createdAt title: ApiKeyListResponse 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. app__schemas__routers__transactions__transaction__AttachDocumentRequest: properties: documentId: type: string format: uuid title: Documentid type: object required: - documentId title: AttachDocumentRequest description: Body for POST /transactions/{id}/attachments. TransactionExportFormat: type: string enum: - csv - xlsx title: TransactionExportFormat UserPreview: properties: id: type: string format: uuid title: Id email: type: string title: Email name: anyOf: - type: string - type: 'null' title: Name avatarUrl: anyOf: - type: string - type: 'null' title: Avatarurl address: anyOf: - type: string - type: 'null' title: Address type: object required: - id - email title: UserPreview description: Lightweight user preview (for transaction participants, etc.). TransactionCardDetail: properties: name: anyOf: - type: string - type: 'null' title: Name label: anyOf: - type: string - type: 'null' title: Label merchant: anyOf: - type: string - type: 'null' title: Merchant merchantIcon: anyOf: - type: string - type: 'null' title: Merchanticon category: anyOf: - type: string - type: 'null' title: Category type: object title: TransactionCardDetail description: Card and merchant info for card transactions. TransactionBreakdownResponse: properties: groupBy: $ref: '#/components/schemas/TransactionGroupBy' items: items: $ref: '#/components/schemas/TransactionBreakdownItem' type: array title: Items type: object required: - groupBy - items title: TransactionBreakdownResponse description: Volume + count grouped by tag or type, with the same filters as the list. 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). TransactionBreakdownGranularity: type: string enum: - day - week - month title: TransactionBreakdownGranularity description: Time bucket size for the breakdown series. 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. 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.' TransactionWalletDetail: properties: address: anyOf: - type: string - type: 'null' title: Address chainId: anyOf: - type: string - type: 'null' title: Chainid type: object title: TransactionWalletDetail description: Wallet details for transaction list/detail views. TransactionBreakdownSeriesBucket: properties: bucketStart: type: string format: date-time title: Bucketstart bucketEnd: type: string format: date-time title: Bucketend items: items: $ref: '#/components/schemas/TransactionBreakdownItem' type: array title: Items type: object required: - bucketStart - bucketEnd - items title: TransactionBreakdownSeriesBucket description: One time-bucket in a breakdown series, with the per-key items inside it. TransactionInvoiceDetail: properties: id: type: string format: uuid title: Id name: anyOf: - type: string - type: 'null' title: Name documentName: anyOf: - type: string - type: 'null' title: Documentname documentLink: anyOf: - type: string - type: 'null' title: Documentlink dueDate: anyOf: - type: string format: date - type: 'null' title: Duedate items: items: additionalProperties: true type: object type: array title: Items invoiceLink: anyOf: - type: string - type: 'null' title: Invoicelink issueDate: anyOf: - type: string format: date - type: 'null' title: Issuedate currency: anyOf: - type: string - type: 'null' title: Currency discount: anyOf: - type: string pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$ - type: 'null' title: Discount type: object required: - id title: TransactionInvoiceDetail description: Invoice info embedded in transaction details. 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. TransactionAttachment: properties: id: type: string format: uuid title: Id name: anyOf: - type: string - type: 'null' title: Name downloadLink: anyOf: - type: string - type: 'null' title: Downloadlink createdAt: type: string format: date-time title: Createdat type: object required: - id - createdAt title: TransactionAttachment description: A user-attached document on a transaction. SortOrder: type: string enum: - asc - desc title: SortOrder description: Sort direction. TagUpdateResponse: properties: onchainTransactionId: type: string title: Onchaintransactionid tag: anyOf: - type: string - type: 'null' title: Tag type: object required: - onchainTransactionId title: TagUpdateResponse description: Response for tag update. TransactionShareLinkResponse: properties: key: type: string title: Key url: type: string title: Url type: object required: - key - url title: TransactionShareLinkResponse description: Share link for a transaction receipt. 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. TransactionBreakdownSeriesResponse: properties: groupBy: $ref: '#/components/schemas/TransactionGroupBy' granularity: $ref: '#/components/schemas/TransactionBreakdownGranularity' buckets: items: $ref: '#/components/schemas/TransactionBreakdownSeriesBucket' type: array title: Buckets type: object required: - groupBy - granularity - buckets title: TransactionBreakdownSeriesResponse description: 'Time-bucketed volume + count grouped by tag or type. Granularity is auto-picked from the fromDate/toDate range: months for ranges longer than 6 months, weeks for >30 days, days otherwise. The response always includes every bucket in the range (zero-filled when empty) so the frontend gets a complete x-axis.' TransactionContactDetail: properties: id: type: string format: uuid title: Id name: type: string title: Name email: anyOf: - type: string - type: 'null' title: Email address: anyOf: - type: string - type: 'null' title: Address type: object required: - id - name title: TransactionContactDetail description: Contact details for transaction detail view. TagUpdateRequest: properties: tag: anyOf: - type: string - type: 'null' title: Tag type: object title: TagUpdateRequest description: Request to update a transaction tag. UnifiedTransactionListResponse: properties: transactions: items: $ref: '#/components/schemas/UnifiedTransactionItem' type: array title: Transactions summary: anyOf: - $ref: '#/components/schemas/TransactionSummary' - type: 'null' type: object required: - transactions title: UnifiedTransactionListResponse description: Unified transaction list response. 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.