Skip to content

Events ​

Subscribe to Cash App order lifecycle signals.

When to use ​

Navigate to success, show failed or expired UI. For the current order you can also read getActiveOrder().

Methods ​

MethodEventWhen
onOrderCompletedcashApp:orderCompletedPayment succeeded ({ sessionId, order })
onOrderFailedcashApp:orderFailedPayment failed ({ sessionId, order, payload })
onOrderExpiredcashApp:orderExpiredLocal timer hit expiresAt ({ sessionId, order })
onOrderResetcashApp:orderResetLocal order cleared via reset() ({ sessionId, order })
onDepositStatuscashApp:depositStatusOptional raw status (pending / success / failure)

Each returns an unsubscribe function. You can also use client.on('cashApp:…') - see Events (Core).

Order events include sessionId and are delivered only for the live session. A createOrder still in flight when restartSession() completes is discarded (SESSION_REPLACED) and does not emit on the new session.

Prefer onOrderCompleted / onOrderFailed / onOrderExpired / onOrderReset for UI. Use onDepositStatus only when you need the raw status payload.

Example ​

ts
const offs = [
  client.cashApp.onOrderCompleted(({ order }) => {
    // success screen - then getCompletedTransactionSummary()
    console.log('paid', order.id)
  }),
  client.cashApp.onOrderFailed(({ order }) => {
    // failed UI - create a new order or go back
    console.log('failed', order.id)
  }),
  client.cashApp.onOrderExpired(({ order }) => {
    // expired UI - create a new order or go back
    console.log('expired', order.id)
  }),
  client.cashApp.onOrderReset(({ order }) => {
    // local clear - `order` is the previous active order, or `null`
    console.log('reset', order?.id)
  }),
]

// later
offs.forEach(off => off())