Docs
Supported ChainsAsset HubSubstrate APIAuthor Methods

author_submitAndWatchExtrinsic - Asset Hub RPC Method

Submit extrinsic and watch for status updates on Asset Hub. Track transaction lifecycle from submission to finalization.

Submit a signed extrinsic to and subscribe to status updates. This WebSocket method provides real-time feedback on transaction progress from submission through finalization.

Use Cases

  • Transaction tracking - Monitor extrinsic lifecycle for native stablecoin transfers (USDC, USDT), DOT staking and governance, and cross-chain asset management via XCM
  • UI feedback - Show users real-time transaction status
  • Confirmation workflows - Wait for specific finality level before proceeding

Request Parameters

Request
extrinsicBytes

SCALE-encoded signed extrinsic

Response Body

Response
resultUnknown

In future queue (nonce too high)

field_2Unknown

In ready queue, waiting for block

field_3Unknown

Broadcast to peers

field_4Unknown

Included in block (hash provided)

field_5Unknown

Block retracted (reorg)

field_6Unknown

Finality timeout

field_7Unknown

Finalized in block (hash provided)

field_8Unknown

Replaced by another extrinsic

field_9Unknown

Dropped from pool

field_10Unknown

Invalid extrinsic

Code Examples

JavaScript
import { ApiPromise, WsProvider, Keyring } from '@polkadot/api';

const provider = new WsProvider('wss://api-asset-hub-polkadot.n.dwellir.com/YOUR_API_KEY');
const api = await ApiPromise.create({ provider });
const keyring = new Keyring({ type: 'sr25519' });

// Create and sign a transfer
const sender = keyring.addFromUri('//Alice');
const transfer = api.tx.balances.transferKeepAlive(
  '5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty',
  1000000000000n
);

// Submit and watch
const unsub = await transfer.signAndSend(sender, ({ status, events }) => {
  console.log(`Status: ${status.type}`);

  if (status.isInBlock) {
    console.log(`Included in block: ${status.asInBlock.toHex()}`);
  }

  if (status.isFinalized) {
    console.log(`Finalized in block: ${status.asFinalized.toHex()}`);
    unsub();
  }
});
Python
import asyncio
import websockets
import json

async def submit_and_watch(signed_extrinsic_hex):
    uri = 'wss://api-asset-hub-polkadot.n.dwellir.com/YOUR_API_KEY'

    async with websockets.connect(uri) as ws:
        # Submit and subscribe
        await ws.send(json.dumps({
            'jsonrpc': '2.0',
            'method': 'author_submitAndWatchExtrinsic',
            'params': [signed_extrinsic_hex],
            'id': 1
        }))

        # Get subscription ID
        response = json.loads(await ws.recv())
        if 'error' in response:
            print(f"Error: {response['error']}")
            return

        sub_id = response['result']
        print(f'Watching with subscription: {sub_id}')

        # Listen for status updates
        while True:
            message = json.loads(await ws.recv())
            if 'params' in message:
                status = message['params']['result']
                print(f"Status: {status}")

                # Check for finalization
                if isinstance(status, dict) and 'finalized' in status:
                    print(f"Finalized in: {status['finalized']}")
                    break

# asyncio.run(submit_and_watch('0x...'))

Status Flow

Text
ready → broadcast → inBlock → finalized
                  ↘ retracted (if reorg)