Edit chainhooks

Modify existing chainhooks including filters, actions, and options

The Platform UI does not currently support editing chainhooks. You must use the SDK or API to make updates.

updateChainhook

Mutable vs Immutable fields

MutableImmutable
namechain
filtersnetwork
action
options

Basic Update Example

1
import { ChainhooksClient, CHAINHOOKS_BASE_URL } from '@hirosystems/chainhooks-client';
2
3
const client = new ChainhooksClient({
4
baseUrl: CHAINHOOKS_BASE_URL.testnet,
5
apiKey: process.env.HIRO_API_KEY!,
6
});
7
8
await client.updateChainhook('chainhook-uuid', {
9
name: 'Updated chainhook name',
10
filters: {
11
events: [{ type: 'ft_transfer', asset_identifier: 'SP...ABC.token::usdc' }],
12
},
13
});

Add event filter (while preserving existing events)

In order to add a new event filter to an existing chainhook, you can fetch the current definition, modify it, and then update it.

1
// ✅ Good: Fetch first
2
const current = await client.getChainhook(uuid);
3
await client.updateChainhook('chainhook-uuid', {
4
filters: {
5
events: [
6
...(current.definition.filters.events ?? []),
7
{ type: 'contract_call', contract_identifier: 'SP...XYZ.counter' },
8
],
9
},
10
});
11
12
// ❌ Bad: Will overwrite any existing events
13
await client.updateChainhook(uuid, {
14
filters: { events: { type: 'contract_call', contract_identifier: 'SP...XYZ.counter' } },
15
});

Update Multiple Fields

1
await client.updateChainhook('chainhook-uuid', {
2
name: 'Updated name',
3
filters: { events: [{ type: 'stx_transfer', sender: 'SP...SENDER' }] },
4
action: { type: 'http_post', url: 'https://new-url.com/webhooks' },
5
options: { decode_clarity_values: true },
6
});
7
8
const updated = await client.getChainhook('chainhook-uuid');
9
console.log('Updated:', updated.definition.name);

Next steps

How is this guide?