Get Internal Transfers Report
This endpoint retrieves a list of internal transfers between accounts within the Netevia platform for reporting and analysis purposes, particularly for generating the Daily Spending Report. It supports pagination via cursor-based navigation, date range filtering, and custom JSON-based filter criteria. Access to the Daily Spending Report feature is required to use this endpoint.
Endpoint
POST /Report/internalTransfers
Authentication
Bearer token required. Obtain via:
POST https://api.banking.netevia.dev/api/auth/v2
Include in header: Authorization: Bearer {token}
Token lifetime: 10 minutes. Refresh via POST /api/auth/refresh.
When to use
Use this endpoint when generating daily spending reports that require a breakdown of internal transfers between accounts. It is appropriate for partner dashboards, reconciliation workflows, and financial audit tools that need to pull transfer activity for a specific date range. Pagination support via cursors makes it suitable for processing large volumes of transfer records in batches.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| take | integer (int32) | null | No | Number of internal transfers to retrieve per request. Set to null to retrieve all results at once. |
| afterCursor | string | null | No | Cursor string for fetching the next batch of results. Use the endCursor from the previous response's transferPageInfo to paginate forward. |
| fromDate | string (date-time) | null | No | Start of the date range filter. Only transfers on or after this date are returned. Format: ISO 8601 (e.g., 2024-10-09T14:40:03.974Z). |
| toDate | string (date-time) | null | No | End of the date range filter. Only transfers on or before this date are returned. Format: ISO 8601 (e.g., 2024-10-09T14:40:03.974Z). |
| jsonFilter | string | null | No | A JSON-formatted string for applying custom filters to the query, such as transfer type, involved accounts, or transaction statuses. |
| cardProductId | string | null | No | Optional card product identifier to scope the report to a specific card product. |
{
"take": 50,
"afterCursor": null,
"fromDate": "2024-10-01T00:00:00.000Z",
"toDate": "2024-10-09T23:59:59.999Z",
"jsonFilter": null,
"cardProductId": null
}Response
200 OK
The response contains merged account activity data along with pagination info and filter metadata.
Top-level fields:
| Field | Type | Description |
|---|---|---|
| data | object | Contains the merged activity data and pagination details. |
| data.transferPageInfo | array | Array of pagination info objects for the transfer result set. |
| data.transferPageInfo[].startCursor | string | null | Cursor pointing to the start of the current page. |
| data.transferPageInfo[].endCursor | string | null | Cursor pointing to the end of the current page. Use this as afterCursor for the next request. |
| data.transferPageInfo[].hasNextPage | boolean | Indicates whether more records exist after the current page. |
| data.transferPageInfo[].hasPreviousPage | boolean | Indicates whether records exist before the current page. |
| data.transactionPageInfo | object | Pagination info for any transaction results included in the response. |
| data.activity | array | List of account activity records representing internal transfers. |
| filter | object | Applied filter metadata broken down by activity category. |
Activity record fields (data.activity[]):
| Field | Type | Description |
|---|---|---|
| id | string | null | Unique identifier of the transfer or transaction. |
| typename | string | null | Type name of the activity record (e.g., transfer type). |
| name | string | null | Display name of the activity. |
| typeModel | string | null | Model type classification for the activity. |
| pendingAmount.value | integer (int64) | Pending amount in the smallest currency unit (e.g., cents). |
| pendingAmount.currencyCode | string | null | Currency code for the pending amount (e.g., USD). |
| amount.value | integer (int64) | Settled amount in the smallest currency unit (e.g., cents). |
| amount.currencyCode | string | null | Currency code for the settled amount. |
| lastEventBalanceSnapshot.value | integer (int64) | Account balance snapshot after the last event, in the smallest currency unit. |
| lastEventBalanceSnapshot.currencyCode | string | null | Currency code for the balance snapshot. |
| createdAt | string (date-time) | Timestamp when the transfer was created. |
| isComplete | boolean | Whether the transfer has completed processing. |
| transactionSource.typename | string | null | Source type name of the transaction. |
| transactionSource.id | string | null | Source identifier. |
| transactionSource.transactionEvents | array | List of events associated with the transaction source. |
| transferStatus.status | string | null | Current status of the transfer (e.g., COMPLETED, PENDING). |
| transferStatus.statusReasonCode | string | null | Reason code for the current transfer status. |
| companyName | string | null | Company name associated with the transfer. |
| descriptor.companyEntryDescription | string | null | ACH company entry description. |
| descriptor.individualName | string | null | Name of the individual associated with the transfer descriptor. |
| descriptor.individualIdentificationNumber | string | null | Identification number for the individual in the transfer descriptor. |
| toFinancialAccount.id | string | null | ID of the destination financial account. |
| toFinancialAccount.name | string | null | Name of the destination financial account. |
| toFinancialAccount.last4 | string | null | Last 4 digits of the destination account number. |
| toFinancialAccount.provider | string | null | Provider of the destination financial account. |
| fromFinancialAccount.id | string | null | ID of the source financial account. |
| fromFinancialAccount.name | string | null | Name of the source financial account. |
| fromFinancialAccount.last4 | string | null | Last 4 digits of the source account number. |
| fromFinancialAccount.provider | string | null | Provider of the source financial account. |
| isBetweenOwnAccounts | boolean | Whether the transfer occurred between the same customer's own accounts. |
| activityInfo.fromProfile.id | integer | ID of the sender's profile. |
| activityInfo.fromProfile.name | string | null | Name of the sender's profile. |
| activityInfo.fromProfile.agentId | integer | Agent ID associated with the sender's profile. |
| activityInfo.toProfile.id | integer | ID of the recipient's profile. |
| activityInfo.toProfile.name | string | null | Name of the recipient's profile. |
| activityInfo.toProfile.agentId | integer | Agent ID associated with the recipient's profile. |
| activityInfo.historyRecords | array | List of status history entries for the transfer. |
| activityInfo.historyRecords[].date | string (date-time) | null | Timestamp of the status change. |
| activityInfo.historyRecords[].status | string | null | Status value at the time of the history record. |
| purpose | string | null | Stated purpose or memo for the transfer. |
| memo | string | null | Memo text attached to the transfer. |
| fromDBA | string | null | Doing-business-as name of the sending party. |
| toDBA | string | null | Doing-business-as name of the receiving party. |
| giftCardOrderId | string | null | Associated gift card order ID, if applicable. |
Filter metadata fields (filter):
| Field | Type | Description |
|---|---|---|
| filter.all | object | Filter item representing the "All" category toggle. |
| filter.deposit | object | Filter item for deposit activity. |
| filter.withdraw | object | Filter item for withdrawal activity. |
| filter.transfers | object | Filter item for transfer activity. |
| filter.pos | object | Filter item for point-of-sale activity. |
| filter.transactionStatus | object | Filter item for transaction status groupings. |
| filter.others | object | Filter item for other uncategorized activity types. |
{
"data": {
"transferPageInfo": [
{
"startCursor": "cursor_start_abc123",
"endCursor": "cursor_end_xyz789",
"hasNextPage": true,
"hasPreviousPage": false
}
],
"transactionPageInfo": {
"startCursor": null,
"endCursor": null,
"hasNextPage": false,
"hasPreviousPage": false
},
"activity": [
{
"id": "txfr_01J9XK4P2MNQ3RSTUVWXYZ0001",
"typename": "InternalTransfer",
"name": "Internal Transfer",
"typeModel": "Transfer",
"pendingAmount": {
"value": 0,
"currencyCode": "USD"
},
"amount": {
"value": 25000,
"currencyCode": "USD"
},
"lastEventBalanceSnapshot": {
"value": 150000,
"currencyCode": "USD"
},
"createdAt": "2024-10-07T10:22:00.000Z",
"isComplete": true,
"transactionSource": {
"typename": "InternalTransfer",
"id": "src_01J9XK4P2MNQ3RSTUVWXYZ0001",
"transactionEvents": []
},
"transferStatus": {
"status": "COMPLETED",
"statusReasonCode": null
},
"companyName": "Acme Corp",
"descriptor": {
"companyEntryDescription": "PAYROLL",
"individualName": "Jane Doe",
"individualIdentificationNumber": "REF20241007"
},
"toFinancialAccount": {
"id": "fa_01J9XK4P2MNQ3RSTUVWXYZ0002",
"name": "Business Checking",
"last4": "4321",
"provider": "Netevia"
},
"fromFinancialAccount": {
"id": "fa_01J9XK4P2MNQ3RSTUVWXYZ0003",
"name": "Operating Account",
"last4": "8765",
"provider": "Netevia"
},
"isBetweenOwnAccounts": true,
"activityInfo": {
"fromProfile": {
"id": 1001,
"name": "Acme Corp - Main",
"agentId": 501
},
"toProfile": {
"id": 1001,
"name": "Acme Corp - Main",
"agentId": 501
},
"historyRecords": [
{
"date": "2024-10-07T10:22:01.000Z",
"status": "PENDING"
},
{
"date": "2024-10-07T10:23:15.000Z",
"status": "COMPLETED"
}
]
},
"purpose": "Payroll funding",
"memo": "October week 1 payroll",
"fromDBA": "Acme Corp",
"toDBA": "Acme Corp",
"giftCardOrderId": null
}
]
},
"filter": {
"all": {
"displayName": "All",
"value": true,
"items": []
},
"deposit": {
"displayName": "Deposits",
"value": false,
"items": []
},
"withdraw": {
"displayName": "Withdrawals",
"value": false,
"items": []
},
"transfers": {
"displayName": "Transfers",
"value": true,
"items": []
},
"pos": {
"displayName": "POS",
"value": false,
"items": []
},
"transactionStatus": {
"displayName": "Transaction Status",
"value": false,
"items": []
},
"others": {
"displayName": "Others",
"value": false,
"items": []
}
}
}Error Codes
| Code | When it happens |
|---|---|
| 400 | Missing required fields or validation error in the request body |
| 401 | Token missing, expired, or invalid |
| 403 | Insufficient permissions — Daily Spending Report access is required |
| 404 | Resource not found |
| 500 | Internal server error |
Common Mistakes
- Providing
fromDateaftertoDate, which results in an empty activity list rather than an error — always verify the date range order before submitting. - Ignoring the
hasNextPageflag and assuming the first response contains all records — always checktransferPageInfo[].hasNextPageand useendCursorasafterCursorto fetch subsequent pages. - Passing a malformed ISO 8601 string in
fromDateortoDate(e.g., omitting theZtimezone suffix), which can cause a 400 validation error. - Attempting to use this endpoint without the Daily Spending Report feature enabled on the partner account, which returns a 403 error.
- Interpreting
amount.valueas a decimal dollar amount — amounts are expressed in the smallest currency unit (cents), so25000equals $250.00 USD.
Related Endpoints
POST /Report/transactions— Retrieves card transaction records for the Daily Spending ReportPOST /Report/achTransfers— Retrieves ACH transfer records for reporting purposesGET /FinancialAccount/{financialAccountId}/activity— Retrieves activity for a specific financial accountPOST /Transfer/internal— Initiates an internal transfer between accounts
Example
curl -X POST https://api.banking.netevia.dev/Report/internalTransfers \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"take": 50,
"afterCursor": null,
"fromDate": "2024-10-01T00:00:00.000Z",
"toDate": "2024-10-09T23:59:59.999Z",
"jsonFilter": null,
"cardProductId": null
}'