Skip to main content

MonitorTransfer

Monitors a transfer for real-time updates. Supports lookup by either resource name. Returns a stream of transfer states as they change.

Server-Side Streaming Method

This method uses server-side streaming, meaning it returns multiple responses over time rather than a single response. The server sends a stream of responses to the client, and the client processes each response as it arrives.

Stream Lifecycle:

  • Initiation: Call the method to create a stream
  • Data Reception: Receive multiple responses over the stream
  • Completion: Stream ends normally (EOF/end event) or with an error
  • Resource Management: Streams should be fully consumed or explicitly closed

See the code examples below for language-specific streaming consumption patterns.

Method Options​

Authorisation specification of the MonitorTransfer method.

TypeMETHOD_TYPE_READ
Access LevelMETHOD_ACCESS_LEVEL_AUTHORISED
Roles
  • ROLE_WALLET_ADMIN
  • ROLE_WALLET_VIEWER
  • ROLE_WALLET_TRANSFER_ADMIN
  • ROLE_WALLET_TRANSFER_VIEWER

Parameters​

Request and response parameter message overview:

Input: MonitorTransferRequest Message​

FieldTypeRequiredDescription
Name

string

False

The resource name of the transfer to monitor. Format: wallet/transfers/{ULIDv2}.

Returns: Transfer Message​

Code Examples​

Select supported SDK in the language of your choice for a full example of how to invoke the this method:

package main

import (
"context"
"io"
"log"

transferv1 "github.com/meshtrade/api/go/wallet/transfer/v1"
)

func main() {
ctx := context.Background()

// Default configuration is used and credentials come from MESH_API_CREDENTIALS
// environment variable or default discovery methods. Zero config required
// unless you want custom configuration.
service, err := transferv1.NewTransferService()
if err != nil {
log.Fatalf("Failed to create service: %v", err)
}
defer service.Close()

// Monitor a specific transfer for real-time state updates
request := &transferv1.MonitorTransferRequest{
Name: "wallet/transfers/01HQ3K5M8XYZ2NFVJT9BKR7P4C", // Transfer resource name
}

// Call the MonitorTransfer streaming method
stream, err := service.MonitorTransfer(ctx, request)
if err != nil {
log.Fatalf("Failed to initiate stream: %v", err)
}

// Consume stream responses as the transfer state changes
for {
transfer, err := stream.Recv()
if err == io.EOF {
break // Stream completed normally
}
if err != nil {
log.Fatalf("Stream error: %v", err)
}

// React to state changes
log.Printf("Transfer %s state: %s", transfer.Number, transfer.State)

if transfer.State == transferv1.TransferState_TRANSFER_STATE_SUCCESSFUL {
log.Printf("Transfer completed successfully")
log.Printf(" Fee: %s", transfer.Fee.Amount.Value)
break
}
if transfer.State == transferv1.TransferState_TRANSFER_STATE_FAILED {
log.Printf("Transfer failed")
break
}
}
}

Advanced Configuration​

For advanced client configuration options (custom endpoints, TLS settings, timeouts), see the SDK Configuration Guide.

Other Methods​