Skip to main content

Get Events

Query events emitted by Move modules on the Aptos blockchain.

Available Endpoints​

  • GET /accounts/{address}/events/{creation_number} - Get events by creation number
  • GET /accounts/{address}/events/{event_handle}/{field_name} - Get events by event handle

When to Use These Methods​

Event queries are essential for:

  • DApp Monitoring - Track smart contract activity
  • User Notifications - Alert users of on-chain events
  • Analytics - Analyze protocol usage patterns
  • State Synchronization - Keep off-chain state in sync

Implementation Examples​

// Get events by creation number
async function getEventsByCreationNumber(
address: string,
creationNumber: number,
start?: number,
limit: number = 25
) {
const url = new URL(
`https://api-aptos-mainnet.n.dwellir.com/v1/YOUR_API_KEY/accounts/${address}/events/${creationNumber}`
);

if (start !== undefined) url.searchParams.append('start', start.toString());
url.searchParams.append('limit', limit.toString());

const response = await fetch(url.toString(), {
headers: { 'Accept': 'application/json' }
});

if (!response.ok) {
throw new Error(`Failed to get events: ${response.statusText}`);
}

return response.json();
}

// Monitor specific event stream
async function monitorEvents(
address: string,
creationNumber: number,
onEvent: (event: any) => void
) {
let lastSequence = "0";

setInterval(async () => {
try {
const events = await getEventsByCreationNumber(
address,
creationNumber,
parseInt(lastSequence)
);

for (const event of events) {
if (BigInt(event.sequence_number) > BigInt(lastSequence)) {
onEvent(event);
lastSequence = event.sequence_number;
}
}
} catch (error) {
console.error("Event monitoring error:", error);
}
}, 2000); // Poll every 2 seconds
}

// Parse common event types
function parseTransferEvent(event: any) {
if (event.type.includes("CoinTransferEvent")) {
return {
from: event.data.from,
to: event.data.to,
amount: event.data.amount,
timestamp: event.timestamp,
};
}
return null;
}

Common Use Cases​

1. Transfer Event Tracking​

async function trackTransfers(
coinType: string,
address: string
): Promise<any[]> {
// Get account resources to find event handles
const resources = await aptos.getAccountResources({
accountAddress: address
});

const coinStore = resources.find(
r => r.type === `0x1::coin::CoinStore<${coinType}>`
);

if (!coinStore) {
return [];
}

// Get deposit events
const depositEvents = await getEventsByCreationNumber(
address,
coinStore.data.deposit_events.guid.id.creation_num
);

// Get withdraw events
const withdrawEvents = await getEventsByCreationNumber(
address,
coinStore.data.withdraw_events.guid.id.creation_num
);

return {
deposits: depositEvents,
withdrawals: withdrawEvents,
};
}

2. DeFi Protocol Events​

async function monitorDeFiEvents(protocolAddress: string) {
// Common DeFi events to monitor
const eventTypes = [
{ name: "swap", creationNumber: 1 },
{ name: "liquidity_added", creationNumber: 2 },
{ name: "liquidity_removed", creationNumber: 3 },
{ name: "rewards_claimed", creationNumber: 4 },
];

for (const eventType of eventTypes) {
monitorEvents(
protocolAddress,
eventType.creationNumber,
(event) => {
console.log(`${eventType.name} event:`, event);
// Process event based on type
}
);
}
}

3. NFT Activity​

async function trackNFTEvents(
collectionAddress: string,
tokenId: string
) {
const events = [];

// Monitor mint events
const mintEvents = await getEventsByCreationNumber(
collectionAddress,
0 // Mint event creation number
);

// Monitor transfer events
const transferEvents = await getEventsByCreationNumber(
collectionAddress,
1 // Transfer event creation number
);

// Filter for specific token
return {
mints: mintEvents.filter(e => e.data.token_id === tokenId),
transfers: transferEvents.filter(e => e.data.token_id === tokenId),
};
}

Need help? Contact our support team or check the Aptos documentation.