Webhooks
Openfort uses webhooks to push real-time notifications to you about your transactions. All webhooks use HTTPS and deliver a JSON payload that can be used by your application. You can use webhook feeds to do things like:
- Granting users a game item when a transaction is confirmed.
- Store all transaction events in your own database for custom reporting/retention
Using Openfort Node SDK
Use the Openfort SDK's constructWebhookEvent
method to verify an incoming webhook. Pass in the request body and the signature header. As an example, you can verify a webhook using the code below:
app.post(
'/webhook',
express.raw({ type: 'application/json' }),
async (req: Request, _res: Response) => {
const openfort = new Openfort('OPENFORT_SECRET_KEY')
try {
const event = await openfort.constructWebhookEvent(
req.body.toString(),
req.headers['openfort-signature']
)
switch (event.type) {
case "transaction_intent.succeeded":
console.log(`TransactionIntent ID: ${event.data.id}`)
break
case "transaction_intent.failed":
console.log(`TransactionIntent ID: ${event.data.id}`)
break
default:
console.log(`Unhandled event type ${event.type}`);
}
} catch (e) {
console.error((e as Error).message)
}
}
)
Webhook object
The webhook object contains the following fields as shown in the JSON tab above.
Where the type
will be one of the following:
transaction_intent.succeeded
: The transaction intent has arrived on-chain and is confirmed.transaction_intent.failed
: The transaction intent has arrived on-chain and is reverted.transaction_intent.cancelled
: The transaction intent parameters were not met.transaction_intent.broadcast
: The transaction intent was broadcasted.balance. project
: The project balance.balance.contract
: The contract balance.balance.dev_account
: The balance of your backend wallet.
The data
will be a transaction intent object.
Register your development webhook endpoint
Register your publicly accessible HTTPS URL in the Openfort dashboard. Then decide the type of webhook you want to receive.

Test that your webhook endpoint is working properly
Send a few test transactions to check that your webhook endpoint is receiving the events.
You can specify the number of block confirmations you want to wait before getting notified of a transaction making it on chain. The default is 0 (i.e. as soon as the transaction arrives on chain).
To do so, you need to include the confirmationBlocks
body parameter when creating the transaction intent.
