Payment states

The state field of the payment object defines the payment status. Each subsequent state overrides previous states.

Ripple Payments Direct payment states

Refer to the following table for all possible states.

State
Description
ACCEPTED The first state of the payment object. The sender has made a successful Accept quote request to its RippleNet instance, generating a payment_id, which is applied to the quote and persisted as a payment object.
PROCESSING_COMPLIANCE Ripple's compliance service ensures that the transaction(s) is compliant with local, national, and international regulations.
PREPARED The payment has settled automatically, which created the crypto-transaction and put the payment within the "crypto-transaction boundary". In this state, funds have been transferred to the hold account on the sender's RippleNet ledger. A payment cannot expire in the PREPARED state.
EXECUTED The receiver has signed the execution_condition creating a "payload" and sent an "execute payment transfer" message, which travels to all participants in the payment. When the payment is fully executed, funds have been transferred from the hold account to the receiver account on all RippleNet ledgers.
COMPLETED After verifying that the funds have reached the end beneficiary, the payment state gets updated to COMPLETED. Depending on your use case, this verification happens either outside the RippleNet payment flow by the receiver or within.
FAILED The payment has been actively stopped by a participating institution, or the payment has failed automatically because the payment has expired. An institution can only fail a payment in turn.

Payment state transitions

Once all the payment quote was successfully accepted and the payment state is PROCESSING_COMPLIANCE, RippleNet uses a two-phase commit to execute the payment.

On all RippleNet ledgers in the payment chain (sender, intermediaries, receiver):

  1. Funds transfer to a hold account and the payment state moves from PROCESSING_COMPLIANCE to PREPARED .
  2. Funds transfer to a transactional account and the payment state moves from PREPARED to EXECUTED .

Once a payment is PREPARED it moves into a logical area called the crypto-transaction boundary. Within the boundary, payment state changes are determined by the state of the crypto-transaction, which can be PENDING, EXECUTED, EXPIRED or CANCELED. Outside of the boundary, the payment succeeds or fails based on the payment expiration time.

Most payments are executed as expected and payment state transitions are near simultaneous on all RippleNet instances. There may be times, however, when each RippleNet instance temporarily reflects a different payment state. Whether the payment is successful or not, background processes ensure that the payment state is eventually consistent across all RippleNet instances.