Skip to main content

Transfer Lifecycle

Understanding the complete lifecycle of a transfer helps you build robust integrations and handle all possible scenarios correctly.

Overview​

Every transfer goes through a series of states from creation to completion. Understanding these statuses helps you handle all scenarios correctly and build robust integrations.

Transfer Statuses​

StatusFinal?Revocable?Description
new❌ Noβœ… YesTransfer created, not yet confirmed by user
waiting❌ Noβœ… YesAwaiting user confirmation
waiting_funds❌ Noβœ… YesInsufficient balance, waiting for funds
waiting_registration❌ Noβœ… YesBeneficiaries not registered in system
waiting_password❌ Noβœ… YesPassword required for authentication
reserved❌ Noβœ… YesFunds reserved, ready to process
doneβœ… Yes❌ NoTransfer completed successfully
failedβœ… Yes❌ NoTransfer failed due to error
rejectedβœ… Yes❌ NoBank rejected the transfer
revokedβœ… Yes❌ NoClient cancelled the transfer
Final Statuses

Transfers in final statuses (done, failed, rejected, revoked) cannot transition to other states.

Complete Status Flow Diagram​

                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Create Transferβ”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ new β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ User Action β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ β”‚ β”‚ β”‚
β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”
β”‚ rejected β”‚ β”‚ waiting β”‚ β”‚reserved β”‚ β”‚ revoked β”‚
β”‚ (final) β”‚ β”‚ (various) β”‚ β”‚ β”‚ β”‚ (final) β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚ β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β” β”‚
β”‚waiting_fundsβ”‚ β”‚waiting_reg β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚waiting_password β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ reserved β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”
β”‚ done β”‚ β”‚ failed β”‚
β”‚ (final) β”‚ β”‚ (final) β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Status Details​

When: Immediately after transfer creation via API

What it means: Transfer created successfully, awaiting next action (reserve, provide password, or user confirmation)

Next statuses: reserved, waiting_password, waiting, revoked

Callback: ❌ No

Status Transition Rules​

From StatusCan Transition To
newreserved, waiting, waiting_password, revoked
waitingwaiting_funds, waiting_registration, waiting_password, reserved, rejected, revoked
waiting_fundsreserved, failed, revoked
waiting_registrationwaiting_password, reserved, revoked
waiting_passwordreserved, failed, revoked
reserveddone, failed, revoked
done, failed, rejected, revoked❌ None (final statuses)

Handling Status Changes​

Use Callbacks (Recommended):

  • Set callback URL when creating transfer
  • Handle all possible statuses in your webhook endpoint
  • Return HTTP 200 to acknowledge receipt

Status Polling (Alternative):

  • Use only if callbacks not feasible
  • Check final statuses: done, failed, rejected, revoked
  • Implement exponential backoff to avoid rate limits

Common Scenarios​

Simple Paysera-to-Paysera Transfer:

Create β†’ new β†’ reserved β†’ done

Transfer Requiring User Confirmation:

Create β†’ new β†’ waiting β†’ reserved β†’ done

Transfer with Insufficient Funds:

Create β†’ new β†’ waiting_funds β†’ reserved (when funds added) β†’ done

Transfer with Unregistered Beneficiary:

Create β†’ new β†’ waiting_registration β†’ reserved (when registered) β†’ done

Client Cancels Transfer:

Create β†’ new β†’ reserved β†’ revoked (via DELETE API)