<!-- source: https://secondlayer.tools/docs/api-reference#sbtc-event-object -->

## The sBTC event object

One decoded `sbtc-registry` print. Every topic shares this shape; `topic` decides which columns are set.

| Field | Type | Description |
| --- | --- | --- |
| `cursor` | string | `<block_height>:<event_index>`. Pass as `cursor`. |
| `block_height` | integer | Stacks block the print landed in. |
| `block_time` | string · date-time · nullable | That block's timestamp. |
| `tx_id` | string | Transaction that emitted the print. |
| `tx_index` | integer | Its position in the block. |
| `event_index` | integer | The event's position in the block. With `block_height`, the cursor. |
| `topic` | enum | The print topic. Values: `completed-deposit`, `withdrawal-create`, `withdrawal-accept`, `withdrawal-reject`, `key-rotation`, `update-protocol-contract`. |
| `request_id` | integer · nullable | Withdrawal request id, on withdrawal topics. |
| `amount` | string · nullable | Sats as a decimal string, on deposits and withdrawal requests. |
| `sender` | string · nullable | Stacks principal, e.g. the withdrawal requester. |
| `recipient_btc_version` | integer · nullable | Bitcoin address type of the recipient: 0 p2pkh, 1 p2sh, 2 p2sh-p2wpkh, 3 p2sh-p2wsh, 4 p2wpkh, 5 p2wsh, 6 p2tr. |
| `recipient_btc_hashbytes` | string · nullable | Recipient's hash bytes, `0x`-prefixed hex. |
| `bitcoin_txid` | string · nullable | Bitcoin txid, `0x`-prefixed hex: the deposit transaction, or the sweep on an accept. |
| `output_index` | integer · nullable | Output within that Bitcoin transaction. |
| `sweep_txid` | string · nullable | Signers' sweep transaction on Bitcoin. |
| `burn_hash` | string · nullable | Bitcoin block hash the signers anchored the event to. |
| `burn_height` | integer · nullable | That Bitcoin block's height. |
| `signer_bitmap` | string · nullable | Bitmap of the signers' votes, as a decimal string. |
| `max_fee` | string · nullable | Most the requester will pay in BTC fees, in sats. |
| `fee` | string · nullable | BTC fee charged on an accepted withdrawal, in sats. |
| `governance_contract_type` | integer · nullable | Which protocol contract changed, on `update-protocol-contract`. |
| `governance_new_contract` | string · nullable | The new contract, on `update-protocol-contract`. |
| `signer_aggregate_pubkey` | string · nullable | The registry's aggregate-key field, on `key-rotation` (33 bytes, hex). In v1 it is the signers' aggregate public key. Once DKG is disabled (no height set yet) it is the marker `0xFF || bitcoin block hash`, not a key, so do not derive addresses from it. |
| `signer_threshold` | integer · nullable | New signature threshold, on `key-rotation`. |
| `signer_address` | string · nullable | New signer principal, on `key-rotation`. |
| `signer_keys_count` | integer · nullable | Number of signer keys in the new set, on `key-rotation`. |

```json
{
  "cursor": "9048486:2",
  "block_height": 9048486,
  "block_time": "2026-09-23T13:10:19.000Z",
  "tx_id": "0x0e09fd3cf7628a2cc81083aa9dbb7eebc7bae5cbe277c370e0f8bfc3d1fe00a9",
  "tx_index": 2,
  "event_index": 2,
  "topic": "withdrawal-create",
  "request_id": 3406,
  "amount": "3127",
  "sender": "SP2ADCJ6606CFHERS3HKABWB6PF5XBANXBQ4GSE86",
  "recipient_btc_version": 4,
  "recipient_btc_hashbytes": "0x9c32e45a19cf9c028bccf12816e62bbfc8eb5fb8",
  "bitcoin_txid": null,
  "output_index": null,
  "sweep_txid": null,
  "burn_hash": null,
  "burn_height": null,
  "signer_bitmap": null,
  "max_fee": "1500",
  "fee": null,
  "governance_contract_type": null,
  "governance_new_contract": null,
  "signer_aggregate_pubkey": null,
  "signer_threshold": null,
  "signer_address": null,
  "signer_keys_count": null
}
```
