# Failure conversion Occasionally, RippleNet payments fail, for example due to an exchange outage. When this happens, RippleNet Server marks the payment as `FAILED` and your funds may not reach the destination currency. RippleNet's failure conversion ensures that the funds from failed payments are made available in a fiat currency quickly. Depending on your [use case](#use-cases), failure conversion identifies the fund's location on the liquidity path and continues a failed payment's process until it either arrives in the [Sender Segregated Account](/products/payments-odl/api-docs/ripplenet/system-components/failure-conversion-and-ssa/sender-segregated-account) or until you manually recapture the funds from the failed payment. Note: The process for manually recapturing funds depends on the exchange you're using.Contact your RippleNet liaison for more information. Failure conversion ensures that during liquidation, your payment's value is converted to fiat currency and that any [slippage](/products/payments-odl/glossary#slippage) is accounted for. ## Use cases We recommend that you use the following combination of On-Demand Liquidity (ODL) features, depending on your use case: * Two wallets and **two exchanges** - The wallet at the source exchange is used for the XRP withdrawal and the wallet at the destination exchange for the XRP deposit and subsequently the liquidation trade. | | [Wallet Send](/products/payments-odl/glossary#wallet-send) | [Wallet Receive](/products/payments-odl/glossary#wallet-receive) | [SLS](/products/payments-odl/api-docs/ripplenet/system-components/liquidation/smart-liquidation) | [Failure conversion](/products/payments-odl/api-docs/ripplenet/system-components/failure-conversion-and-ssa/failure-conversion) | [SSA](/products/payments-odl/api-docs/ripplenet/system-components/failure-conversion-and-ssa/sender-segregated-account) | | --- | --- | --- | --- | --- | --- | | **[Individual payments](/products/payments-odl/introduction/use-cases#individual-payments)** | yes | yes | yes | yes | yes | | **[Bulk funding](/products/payments-odl/introduction/use-cases#bulk-funding)** | yes | yes | yes | yes | **no** | | **[Internal treasury](/products/payments-odl/introduction/use-cases#internal-treasury)** | yes | yes | yes | **no** | **no** | br * Two wallets and **one exchange** - One wallet at the destination exchange is used for the XRP withdrawal and the other wallet at the destination exchange for the XRP deposit and subsequently the liquidation trade. | | [Wallet Send](/products/payments-odl/glossary#wallet-send) | [Wallet Receive](/products/payments-odl/glossary#wallet-receive) | [SLS](/products/payments-odl/api-docs/ripplenet/system-components/liquidation/smart-liquidation) | [Failure conversion](/products/payments-odl/api-docs/ripplenet/system-components/failure-conversion-and-ssa/failure-conversion) | [SSA](/products/payments-odl/api-docs/ripplenet/system-components/failure-conversion-and-ssa/sender-segregated-account) | | --- | --- | --- | --- | --- | --- | | **[Individual payments](/products/payments-odl/introduction/use-cases#individual-payments)** | yes | yes | yes | yes | yes | | **[Bulk funding](/products/payments-odl/introduction/use-cases#bulk-funding)** | yes | yes | yes | yes | **no** | br * One wallet and one exchange - The wallet at the destination exchange is used for the liquidation trade. | | [Wallet Send](/products/payments-odl/glossary#wallet-send) | [Wallet Receive](/products/payments-odl/glossary#wallet-receive) | [SLS](/products/payments-odl/api-docs/ripplenet/system-components/liquidation/smart-liquidation) | [Failure conversion](/products/payments-odl/api-docs/ripplenet/system-components/failure-conversion-and-ssa/failure-conversion) | [SSA](/products/payments-odl/api-docs/ripplenet/system-components/failure-conversion-and-ssa/sender-segregated-account) | | --- | --- | --- | --- | --- | --- | | **[Internal treasury](/products/payments-odl/introduction/use-cases#internal-treasury)** | yes | yes | yes | **no** | **no** | br For more information about your failure conversion use case, contact your RippleNet liaison. ## Prerequisites If you want to use failure conversion with the Sender Segregated Account, consider the following: Note: By default, failure conversion is disabled (set to `false`) in ODL-RippleNet. ## Check failure conversion status When your payment's status is `FAILED` with a sub-state of `PUSH_FORWARD`, it indicates that the failure conversion process has started. ```json { "json": { }, "created_at": "2022-12-13T18:37:11.138Z", "subState": "PUSH_FORWARD" } ``` Failure conversion behaves differently depending on where in the payment process the failure occurs. - If the failure occurs after XRP withdrawal and before deposit confirmation at the receiving exchange, failure conversion will retry the payment once per 30 minutes for up to 12 hours. - If the failure occurs during the destination liquidation at the receiving exchange, failure conversion will retry the payment once per hour for up to 24 hours. Note: Original payments that are subject to failure conversion continue to be marked as `FAILED` even after failure conversion is successful. To check a payment's failure conversion status: 1. To retrieve your payment, use the [`Get payments`](/products/payments-odl/api-docs/ripplenet/reference/openapi/non-orchestration-payments/getpayments) operation with `"status": "FAILED"` and with `"with_labels" = "PUSH_FORWARD,SSA_FUNDING_COMPLETED"`. 2. In the response, check the `content.push_forward_execution_result` array of objects. You should see values like in this example: ```json "push_forward_execution_results": [ { "execution_result_id": "cc004b30-2e4e-4ede-9ef2-8f6c9dddcd17", "execution_timestamp": "2022-12-13T18:36:05.363Z", "execution_result_type": "CRYPTO_TRANSFER", "execution_result_order": "3", "sender_address": "sender_address@example", "receiver_address": "receiver_address@example", "sending_amount": "77.045351000", "receiving_amount": "77.045351000", "sending_fee": "0.000000000", "receiving_fee": "0.000000000", "sending_currency_code": null, "receiving_currency_code": null, "fx_rate": null, "transfer_currency_code": "XRP", "intermediary_delta": null, "incentive_type": null, "incentive_value": null, "transaction_hash": null, "venue_id": "0f397fd5-825c-40c6-b4f1-2595c8e7521f", "fiat_adjusted_value": null, "odl_payment_id": "726970706C6578766961-01670956230-489-001-244E41524B968BB8C9A0534175A87163A30EEB95CC91B752B4582801E61F1499" } ] ``` The `content.execution_results` array of objects doesn't get populated for failed payments, only `push_forward_execution_results`. 3. Check the `content.user_info.settlement_declined` array of objects. The `subState` field should show `PUSH_FORWARD` and there should be an object with fields pertaining to the SSA transfer, like in this example: ```json "settlement_declined": [ . . . { "json": { }, "created_at": "2022-12-13T18:37:11.138Z", "subState": "PUSH_FORWARD" }, { "json": { "ssa_remote_transfer_id": "2558c823-6737-4955-9ad9-aeec4f94c2f4", "transfer_amount": "1669.50", "transfer_currency": "PHP", "funding_account": "funding_account@example", "ssa_account": "ssa_account@example", "transfer_state": "EXECUTED" }, "created_at": "2022-12-13T18:41:14.599Z", "subState": "SSA_FUNDING_COMPLETED" }, . . . ] ```