Skip to main content

Webhook Events

This is the complete reference for all webhook events fired by Stable Genius.

Event Envelope

Every webhook event shares this envelope structure:
{
  "id": "evt_*",
  "object": "event",
  "type": "event.type",
  "api_version": "2026-04-01",
  "created_at": "ISO 8601 timestamp",
  "data": { /* event-specific payload */ }
}

Payment Intent Events

payment_intent.confirmed

Fired when USDC is received and confirmed on-chain for a payment intent.
{
  "id": "evt_pi_conf_001",
  "object": "event",
  "type": "payment_intent.confirmed",
  "api_version": "2026-04-01",
  "created_at": "2026-04-01T20:00:12Z",
  "data": {
    "id": "pi_xyz789",
    "object": "payment_intent",
    "status": "confirmed",
    "amount": 4.50,
    "currency": "usd",
    "net_amount": 4.455,
    "fee": 0.045,
    "fee_rate": 0.01,
    "merchant_id": "mer_abc123",
    "payment_address": "0x1a2b...cdef",
    "tx_hash": "0xabc1...f456",
    "chain": "base",
    "token": "USDC",
    "sender_address": "0x9876...5432",
    "block_number": 12345678,
    "confirmed_at": "2026-04-01T20:00:12Z",
    "metadata": {
      "order_id": "order_456",
      "terminal_id": "pos_01"
    }
  }
}

payment_intent.expired

Fired when a payment intent expires without receiving payment.
{
  "id": "evt_pi_exp_001",
  "object": "event",
  "type": "payment_intent.expired",
  "api_version": "2026-04-01",
  "created_at": "2026-04-01T20:05:00Z",
  "data": {
    "id": "pi_xyz789",
    "object": "payment_intent",
    "status": "expired",
    "amount": 4.50,
    "currency": "usd",
    "merchant_id": "mer_abc123",
    "expired_at": "2026-04-01T20:05:00Z",
    "metadata": {
      "order_id": "order_456"
    }
  }
}

payment_intent.cancelled

Fired when an integrator cancels a payment intent.
{
  "id": "evt_pi_can_001",
  "object": "event",
  "type": "payment_intent.cancelled",
  "api_version": "2026-04-01",
  "created_at": "2026-04-01T20:02:30Z",
  "data": {
    "id": "pi_xyz789",
    "object": "payment_intent",
    "status": "cancelled",
    "amount": 4.50,
    "currency": "usd",
    "merchant_id": "mer_abc123",
    "cancelled_at": "2026-04-01T20:02:30Z",
    "metadata": {
      "order_id": "order_456"
    }
  }
}

Transaction Events

transaction.created

Fired when any USDC transfer is detected at a merchant’s payment address, even if not tied to an active payment intent. Use this as a catch-all for incoming payments.
{
  "id": "evt_txn_crt_001",
  "object": "event",
  "type": "transaction.created",
  "api_version": "2026-04-01",
  "created_at": "2026-04-01T20:00:12Z",
  "data": {
    "id": "txn_def456",
    "object": "transaction",
    "payment_intent_id": "pi_xyz789",
    "merchant_id": "mer_abc123",
    "status": "confirmed",
    "amount": 4.50,
    "currency": "usd",
    "net_amount": 4.455,
    "fee": 0.045,
    "chain": "base",
    "token": "USDC",
    "tx_hash": "0xabc1...f456",
    "sender_address": "0x9876...5432",
    "confirmed_at": "2026-04-01T20:00:12Z"
  }
}
payment_intent_id may be null if the transaction wasn’t associated with a specific payment intent (e.g., a direct transfer to the merchant’s address).

Settlement Events

settlement.completed

Fired when a merchant’s funds are successfully sent to their bank account.
{
  "id": "evt_stl_cmp_001",
  "object": "event",
  "type": "settlement.completed",
  "api_version": "2026-04-01",
  "created_at": "2026-04-01T08:00:00Z",
  "data": {
    "id": "stl_ghi789",
    "object": "settlement",
    "merchant_id": "mer_abc123",
    "amount": 142.55,
    "currency": "usd",
    "status": "completed",
    "bank_name": "Wells Fargo",
    "bank_last_4": "0468",
    "estimated_arrival": "2026-04-03",
    "initiated_at": "2026-04-01T08:00:00Z"
  }
}

settlement.failed

Fired when an ACH transfer to a merchant’s bank fails (e.g., invalid account, NSF return).
{
  "id": "evt_stl_fld_001",
  "object": "event",
  "type": "settlement.failed",
  "api_version": "2026-04-01",
  "created_at": "2026-04-03T14:30:00Z",
  "data": {
    "id": "stl_ghi789",
    "object": "settlement",
    "merchant_id": "mer_abc123",
    "amount": 142.55,
    "currency": "usd",
    "status": "failed",
    "failure_reason": "account_closed",
    "failure_message": "The bank account has been closed. Please update bank details.",
    "initiated_at": "2026-04-01T08:00:00Z",
    "failed_at": "2026-04-03T14:30:00Z"
  }
}