Transaction States
A transaction state describes the current stage of a payment as it moves through the SolydFlow revenue lifecycle.
Understanding transaction states helps your application distinguish between payments that are still being resolved and those that have reached a final outcome.
Payment Attempt
↓
Transaction
↓
Transaction State
↓
Pending
↓
Processing
↓
┌───────────────┐
│ Final Outcome │
└──────┬────────┘
│
┌─────┴─────┐
↓ ↓
Success Failure
Why Transaction States Matter
A payment is not always immediately successful or failed.
A transaction can be temporarily unresolved because of:
- Network interruptions
- Delayed provider responses
- Missing webhooks
- Payment provider processing
- Interrupted payment sessions
- Other conditions affecting the payment flow
Your application therefore needs to distinguish between a transaction that is still being resolved and one that has reached a final outcome.
Transaction Lifecycle
A simplified transaction lifecycle looks like this:
Initiated
↓
Pending
↓
Processing
↓
Succeeded / Failed
Some transactions may require additional processing:
Pending
↓
Unresolved
↓
Recovery
↓
Verification
↓
Final State
The purpose of the transaction lifecycle is to prevent your application from treating an uncertain transaction as a final result.
Pending
A transaction is pending while SolydFlow is waiting for a final payment outcome.
Depending on the payment method, this may include:
- Provider processing
- Customer interaction
- Awaiting confirmation
- Internal verification
Pending transactions should not be treated as either successful or failed.
Succeeded
A transaction is succeeded when the payment outcome has been established as successful.
Transaction
↓
Succeeded
↓
Enforce
↓
Entitlement
↓
Customer Access
A successful transaction can therefore result in the customer receiving the entitlement associated with the purchased package.
Failed
A transaction is failed when the payment outcome has been established as unsuccessful.
Transaction
↓
Failed
↓
No Successful Entitlement
A failed transaction should not grant access that depends on successful payment.
The customer may be allowed to initiate another payment attempt, depending on your application's flow.
Unresolved Transactions
An unresolved transaction is one where SolydFlow cannot yet determine the correct financial outcome.
Rather than assuming failure, SolydFlow investigates the transaction through its recovery process as these transactions cannot immediately be classified as successful or failed.
For example:
Payment
↓
Provider Processing
↓
Network Interruption
↓
Callback Missing
The transaction may remain unresolved until SolydFlow can determine its actual state.
Unresolved
↓
Recovery
↓
Verification
↓
Final State
This is one of the situations where SolydFlow's recovery infrastructure becomes important.
Why You Should Not Treat Missing Webhooks as Failure
A missing webhook does not necessarily mean that a payment failed.
Consider:
Customer
↓
Payment Provider
↓
Payment Successful
X
Webhook not received
Your application has no confirmation, but that does not prove the payment failed.
Instead:
No Webhook
↓
Transaction May Be Unresolved
↓
Recovery / Verification
↓
Final Transaction State
This distinction helps prevent legitimate payments from being incorrectly rejected.
Final vs Non-Final States
A useful way to think about transaction states is to separate them into non-final and final outcomes.
Non-final
The transaction has not yet reached an authoritative outcome.
Pending
Processing
Unresolved
Final
The transaction has reached an established outcome.
Successful
Failed
The exact states exposed by SolydFlow may depend on the implementation and payment provider.
State Transitions
A transaction can move from one state to another as more information becomes available.
For example:
Pending
↓
Processing
↓
Succeeded
Or:
Pending
↓
Processing
↓
Failed
Or when recovery is required:
Pending
↓
Unresolved
↓
Recovery
↓
Verification
↓
Successful
The important principle is that the final state should be based on the established transaction outcome rather than an early assumption.
Transaction States and Entitlements
Transaction state determines whether a payment can produce the corresponding revenue outcome.
For example:
Successful Transaction
↓
Enforce
↓
Entitlement
↓
Access
Whereas:
Pending Transaction
↓
Continue
Processing
and:
Failed Transaction
↓
No Successful Access
This keeps application access connected to the actual transaction outcome.
Transaction States and Recovery
Recovery is relevant when a transaction does not have a reliable final state.
Transaction
↓
Is the state final?
│
┌───┴────┐
│ │
Yes No
│ │
↓ ↓
Outcome Recovery
↓
Verification
↓
Final State
Recovery should resolve uncertainty rather than simply create another payment attempt.
Transaction States and Multiple Providers
Different payment providers may use different terminology for similar payment conditions.
SolydFlow provides a unified transaction model so your application does not have to build separate payment-state logic for every provider.
Conceptually:
Paystack ──────┐
Flutterwave ───┤
Stripe ────────┤
Other Providers┘
↓
SolydFlow
↓
Transaction State
↓
Your Application
This allows your application to work with the SolydFlow transaction lifecycle instead of coupling its business logic directly to each provider's terminology.
Example
Suppose a customer purchases a premium package.
1. Payment starts
Customer
↓
Premium Package
↓
Payment Started
2. Transaction is created
Transaction
↓
Pending
3. Provider processes the payment
Pending
↓
Processing
4. Payment succeeds
Processing
↓
Successful
5. Revenue outcome is enforced
Successful
↓
Enforce
↓
Premium Entitlement
↓
Premium Access
If the payment instead cannot be completed:
Processing
↓
Failed
The application does not grant the paid entitlement.
Designing Your Application Around Transaction States
Your application should avoid embedding provider-specific assumptions into its business logic.
Instead of:
"If Paystack returns X, unlock the product."
"If Flutterwave returns Y, unlock the product."
"If Stripe returns Z, unlock the product."
Use the SolydFlow transaction and entitlement model:
Payment Provider
↓
SolydFlow
↓
Transaction State
↓
Enforce
↓
Entitlement
↓
Application Access
This keeps your payment infrastructure separate from your product logic.
Key Principle
A transaction without a final outcome should never be treated as a failed payment.
Your application should wait for the transaction to reach an established outcome before making decisions that depend on successful payment.
The SolydFlow model is:
Payment
↓
Transaction
↓
State
↓
Recover when necessary
↓
Verify
↓
Final Outcome
↓
Enforce
↓
Entitlement
This is how SolydFlow helps keep payment state and customer access aligned.