Create and Track Transfers
Overview
This guide documents the published SYSTEM transfer path available in this repo: create the transfer against a Slash connection, then track it through provider or internal admin transfer-order APIs. Creation and tracking live under different endpoint families, so the client must persist identifiers carefully.
Prerequisites
Authorization: Bearer <accessToken>X-PORTAL-ACCESS-CODE: <system-portal-code>- Slash connection business ID
- workspace ID for history lookups
- storage for provider IDs and any internal transfer
bizId
Shared Headers
X-PORTAL-ACCESS-CODE: <system-portal-code>
Authorization: Bearer <accessToken>
Content-Type: application/jsonStep-by-Step Flow
1. Create the transfer
API endpoint: POST /web/v1/slash/connections/{connectionBizId}/transfers This forwards the payload to the provider and returns the initial provider-side status.
curl -X POST 'https://api.example.com/web/v1/slash/connections/conn_abc123/transfers' \
-H 'X-PORTAL-ACCESS-CODE: <system-portal-code>' \
-H 'Authorization: Bearer <accessToken>' \
-H 'Content-Type: application/json' \
-d '{"sourceAccountId":"acct_src_001","destinationAccountId":"acct_dst_002","amount":50000,"currency":"USD","reference":"Monthly settlement"}'{"code":"2000","message":"SUCCESS","data":{"id":"txfr_abc123","status":"pending","amount":50000,"currency":"USD"}}2. Persist the returned identifier
API endpoint: application-side persistence step Store the provider ID immediately. If your application also creates an internal transfer order, store its bizId too.
{"providerTransferId":"txfr_abc123","internalTransferBizId":"TRF20260321000001","workspaceId":"WS_001"}3. Query the internal transfer order by bizId
API endpoint: GET /web/v1/admin/transfer/query/orders/{bizId} Use this when the transfer has been mirrored into the internal ledger.
curl 'https://api.example.com/web/v1/admin/transfer/query/orders/TRF20260321000001' \
-H 'X-PORTAL-ACCESS-CODE: <system-portal-code>' \
-H 'Authorization: Bearer <accessToken>'{"code":"2000","message":"SUCCESS","data":{"bizId":"TRF20260321000001","fromWalletId":"WLT-SRC-001","toWalletId":"WLT-DST-002","amount":100.5,"status":2,"statusName":"COMPLETED","failureReason":null}}4. Poll the completion endpoint
API endpoint: GET /web/v1/admin/transfer/query/orders/{bizId}/completed This is the lightweight polling path for repeated status checks.
curl 'https://api.example.com/web/v1/admin/transfer/query/orders/TRF20260321000001/completed' \
-H 'X-PORTAL-ACCESS-CODE: <system-portal-code>' \
-H 'Authorization: Bearer <accessToken>'{"code":"2000","message":"SUCCESS","data":true}5. Inspect workspace transfer history
API endpoint: GET /web/v1/admin/transfer/query/orders/workspace/{workspaceId} Use this when a direct bizId is unavailable or operators need reconciliation context.
curl 'https://api.example.com/web/v1/admin/transfer/query/orders/workspace/WS_001?startTime=2026-03-01T00:00:00Z&endTime=2026-03-29T23:59:59Z&page=0&size=20&sort=createdAt,desc' \
-H 'X-PORTAL-ACCESS-CODE: <system-portal-code>' \
-H 'Authorization: Bearer <accessToken>'{"code":"2000","message":"SUCCESS","data":{"content":[{"bizId":"TRF20260321000001","statusName":"COMPLETED","amount":100.5,"createdAt":"2026-03-21T10:00:00Z"}],"totalElements":1}}Transfer Status Lifecycle
PENDINGright after creation or internal acceptancePROCESSINGwhile funds are movingCOMPLETEDwhen the transfer reaches terminal successFAILEDwhen the transfer stops with a non-recoverable error
Decision Points
- if only the provider ID is available, track the provider state until an internal
bizIdappears - if the create response is already terminal, skip aggressive polling
- use the full transfer-order fetch when the UI needs failure reason or wallet metadata
- use workspace history for reconciliation and support tooling
Error Handling
4000on create usually means the forwarded payload is invalid4040on internal lookup usually means thebizIdis wrong or not materialized yet- treat
FAILEDand non-nullfailureReasonas terminal states - do not assume the provider
idand internalbizIdare the same field