Ask for an invitation
Menu

Webhook event

refund.signed

A key-holding member approved with a passkey and the co-signer added its signature. From here it cannot be cancelled.

Type
refund.signed
The object it carries
the refund object
Subscribe with
refund.signed, refund.* or *

Example payload

The body of the request your endpoint receives, shown here over several lines. On the wire it is compact JSON; check its signature over the bytes exactly as they arrive.

Example payload

{
  "id": "evt_54p9vvhc9cfhhvjfchh8navs",
  "object": "event",
  "livemode": true,
  "created": "2026-10-12T10:12:00.000Z",
  "type": "refund.signed",
  "api_version": "2026-10-11",
  "data": {
    "object": {
      "id": "rf_z20ve49yz5hve8f0xsdchj2v",
      "object": "refund",
      "livemode": true,
      "created": "2026-10-12T10:00:00.000Z",
      "updated": "2026-10-12T10:12:00.000Z",
      "status": "signed",
      "pending_reason": null,
      "order": "ord_0zymngngvf12b8b2cra7tb8e",
      "payment": "pay_2pe50hae6w2jk4sp1rcq5pae",
      "amount": "5.00",
      "currency": "USD",
      "reason": "requested_by_customer",
      "note": "One bag arrived damaged",
      "rate_basis": "order_rate",
      "deduct_network_fee": false,
      "source": {
        "wallet": "wal_bsfw07hymawmda7gg8jsyy3g",
        "asset": "base:usdc",
        "amount": "5.000000"
      },
      "destination": {
        "address": "0xdbF03B407c01E7cD3CBea99509d93f8DDDC8C6FB",
        "asset": "ethereum:usdc",
        "network": "ethereum",
        "supplied_by": "payer_claim",
        "saved_address": null
      },
      "address_claim": {
        "sent_to": "jane@example.com",
        "sent_at": "2026-10-12T09:40:00.000Z",
        "claimed_at": "2026-10-12T10:00:00.000Z",
        "expires_at": "2026-10-26T09:40:00.000Z"
      },
      "approvable_at": null,
      "delivery": {
        "rail": "relay",
        "amount_estimated": "4.930000",
        "route_fee": {
          "amount": "0.07",
          "currency": "USD"
        },
        "fee_bearer": "recipient"
      },
      "network_fee": null,
      "requested_by": {
        "type": "api_key",
        "id": "key_6e3gg2c6ea176xxdek2nar6v"
      },
      "approved_by": "mem_ceh1wpzdrpk13cnpcjy9w0fa",
      "approval_url": null,
      "approval_expires_at": "2026-10-19T10:00:00.000Z",
      "transaction_hash": null,
      "failure_code": null,
      "cancellation_reason": null,
      "approved_at": "2026-10-12T10:12:00.000Z",
      "sent_at": null,
      "confirmed_at": null,
      "metadata": {}
    },
    "previous_attributes": {
      "status": "awaiting_approval",
      "approved_by": null,
      "approved_at": null
    }
  },
  "request": {
    "id": null,
    "idempotency_key": null
  },
  "pending_webhooks": 1
}

Fields of data.object

Fields of data.object in refund.signed
FieldIn this example
id"rf_z20ve49yz5hve8f0xsdchj2v"
object"refund"
livemodetrue
created"2026-10-12T10:00:00.000Z"
updated"2026-10-12T10:12:00.000Z"
status"signed"
pending_reasonnull
order"ord_0zymngngvf12b8b2cra7tb8e"
payment"pay_2pe50hae6w2jk4sp1rcq5pae"
amount"5.00"
currency"USD"
reason"requested_by_customer"
note"One bag arrived damaged"
rate_basis"order_rate"
deduct_network_feefalse
sourceAn object with wallet, asset, amount
destinationAn object with address, asset, network, supplied_by, saved_address
address_claimAn object with sent_to, sent_at, claimed_at, expires_at
approvable_atnull
deliveryAn object with rail, amount_estimated, route_fee, fee_bearer
network_feenull
requested_byAn object with type, id
approved_by"mem_ceh1wpzdrpk13cnpcjy9w0fa"
approval_urlnull
approval_expires_at"2026-10-19T10:00:00.000Z"
transaction_hashnull
failure_codenull
cancellation_reasonnull
approved_at"2026-10-12T10:12:00.000Z"
sent_atnull
confirmed_atnull
metadataAn object with no fields

What each field means is on the page of the refund object. data.previous_attributes holds the old values of exactly the fields that changed: here status, approved_by, approved_at.

Endpoints behind it

Calls that change refunds. An event is also sent when a payer, the network, a timer or a person in the dashboard causes the change; the sentence above says which.