Skip to main content
POST
Settles or rejects a transaction that is waiting on a decision, so you can run deposit and payout tests end-to-end without asking the Rolla team to clear each one by hand. In sandbox no provider ever confirms a transfer, so a simulated deposit or payout stays pending until somebody decides it. This endpoint is that decision, and it runs the same settlement path Rolla’s own operators run — the behaviour you test against is the behaviour you get in production.
Sandbox / testing only. This endpoint does not exist in production — calls to the production API return 404 Not Found.

Request Body

One endpoint covers both outcomes and every currency — USD, NGN, GHS and crypto all settle the same way.

Approving

Approving posts the ledger, credits (or debits) the wallet, sends the confirmation email and emits the transaction.completed webhook.

Rejecting

Rejecting discards the entries and moves the transaction to rejected. The reason is sent to the account’s notification recipients, exactly as a Rolla-side rejection would be.

Fees settle with the transaction

A deposit or payout usually carries fee transactions alongside it. They follow the decision automatically — you never decide them separately: So a rejected deposit costs you nothing, and a rejected deposit that would have carried a platform fee leaves no fee behind.

Which transactions you can decide

Any transaction in your own book, plus — if you are a platform partner — any belonging to an account in your tenancy. It is the same set List Transactions returns, so anything you can read, you can decide. A transaction outside that set reports the same 404 as one that does not exist, so an id cannot be used to probe another partner’s book.

When a decision is refused

Only transactions in pending, sent or processing can be decided. Deciding one twice is refused rather than repeated, so a retry after a timeout is safe.
Simulated deposits are credited by the provider’s webhook and can take a few minutes to appear. Poll Transactions until the transaction exists and is pending, then decide it.

Who decided it is recorded

Every decision is attributed, the same way a Rolla operator’s is. The transaction records the action, the time, the reason, and the API key that made the call — so when a business holds several keys you can still tell which integration settled what.

A full sandbox loop

1

Simulate the money arriving

2

Wait for the transaction

Poll Transactions until the deposit appears as pending.
3

Decide it

POST /wallet/transactions/{transactionId}/decision with approve or reject.
4

Check what you expected

Confirm the balance moved and your webhook endpoint received transaction.completed.

Authorizations

X-API-Key
string
header
required

Your Rolla API key

Path Parameters

transactionId
string<uuid>
required

Rolla's transaction ID (UUID), as returned by List Transactions.

Body

application/json
action
enum<string>
required

approve settles the transaction; reject discards it. Any other value is rejected with 400 Validation failed.

Available options:
approve,
reject
Example:

"approve"

reason
string

Why the transaction was rejected. Recorded on the transaction and included in the rejection email sent to the account's notification recipients. Ignored for approve.

Required string length: 1 - 500
Example:

"simulating a failed inbound wire"

Response

The transaction after the decision

status
integer
Example:

200

message
string
Example:

"Transaction approved successfully"

success
boolean
Example:

true

data
object