TagwiseTagwiseDevnet
Integration Guides

Managing Profiles & Wallets

Updating off-chain identity profile metadata and on-chain payment destination wallets.

TIP handles two types of identity updates: Off-Chain Profile Metadata (instant, free) and On-Chain Payment Wallet (requires a Solana transaction).


1. Updating Off-Chain Profile Metadata

Off-chain profile fields (displayName, avatar, bio, preferredToken) are stored in the TIP database mirror. Updating these fields is instant, requires no gas/SOL, and takes effect immediately.

Code Example

import { TipClient } from "@tagwise/tip-sdk";

async function updateProfileInfo(client: TipClient, tag: string) {
  // Requires connected SIWS session matching tag owner
  const updatedIdentity = await client.updateProfile(tag, {
    displayName: "Alice Smith",
    avatar: "https://example.com/avatar.png",
    bio: "Building decentralized apps on Solana 🚀",
    preferredToken: "USDC",
  });

  console.log("Updated Display Name:", updatedIdentity.displayName);
  console.log("Updated Avatar:", updatedIdentity.avatar);
}

Clearing Fields

To leave a field unchanged, omit it from the object. To explicitly clear a field (e.g. remove a bio), pass null: \{ bio: null \}.


2. Updating On-Chain Payment Wallet

Changing the destination wallet where payments are sent when someone resolves @tag is an on-chain operation.

async function changeDestinationWallet(
  client: TipClient,
  walletAdapter: any,
  tag: string,
  newWalletAddress: string
) {
  // Step 1: Request unsigned update_wallet transaction from API
  const unsignedRes = await client.updateWallet(tag, newWalletAddress);

  // Step 2: Sign and submit transaction
  const txSignature = await client.signAndSendTransaction(
    unsignedRes.transaction,
    walletAdapter
  );

  console.log("Payment wallet updated on-chain! Tx:", txSignature);
}

Owner Authorization Required

The session pubkey submitting updateWallet() must match the tag's on-chain Owner address. If a non-owner attempts to update the wallet, the API returns 403 Forbidden.

On this page