Application Lifecycle
Applications go through a defined lifecycle from creation to decision. Understanding these states helps you build proper status handling and user feedback.Application-Level States
completed is a legacy status retained for backward compatibility; new integrations should read approved / declined. The application_decision field below is also still populated.Application Decisions
Once an application reachescompleted status, the application_decision field contains the outcome:
Proof of Address State (Individuals)
For individual applications, the application-levelpoa_status field exposes the review state of the customer’s Proof of Address document. It is null for business applications.
The
customer.kyb_status.updated webhook event surfaces these transitions via its reason_code field — see Webhook events.
Applicant-Level States (Business & Individuals)
Within an application, each entity (business or individual) has its own status:Transaction Lifecycle
Transactions progress through multiple states from initiation to completion.Transaction States
Transaction Status Reference
A cancelled transaction has the status
cancelled (two Ls). Earlier versions of this page said canceled. The API has always sent cancelled, so check your handlers for cancelled.Wallet and auto-account transactions on
GET /transactions and GET /transactions/{transaction_id} (resource_type wallet, auto_account or fx_auto_account), and wallet.transaction.* webhooks, return two status fields. status is a display label, such as Broadcasted or Success. status_code is the code from this table; the label Success has the code completed. Branch on status_code, and treat a code you don’t recognise like unknown. One-off transactions (resource_type one_off) and transaction.* webhooks have no status_code: their status is already a code from this table. See Wallet Transaction Events.pending_return, returned, and pending_reversal appear on the transaction object, but they are not distinct webhook lifecycle stages. Read them from data.object.status on a *.updated event, or from GET /transactions/{transaction_id} (status_code where the transaction has one, otherwise status) — no separate event fires for them. See Webhooks.
Terminal vs Non-Terminal States
Terminal states indicate the transaction has reached an outcome:completed,invalid,failed,cancelled,reversed,returned,rejected
- Wallet transactions:
completed,failedandreversednever change. Only a repeat of the same status, such as a hash backfill, can follow. - Auto and one-off transactions:
completedcan still move topending_return,returned,pending_reversalorreversed, for example after an ACH or wire return.failedandreturnedcan move again when Dakota retries, resumes or re-sends the payment, so keep handling updates after them. - The other terminal states (
cancelled,invalidandrejected, andreversedoutside wallet transactions) don’t move in the normal flow, but Dakota can still correct a status that was reported out of order. Apply every update you receive, even after a terminal state.
not_started,pending,processing,in_progress,waiting_for_signature,awaiting_confirmation,broadcasted,needs_manual_input,pending_return,pending_reversal,timed_out,unknown
Auto Transaction Lifecycle
Auto transactions have their own lifecycle:Handling State Changes
Polling for Status Updates
For non-terminal states, poll periodically to check for updates:Using Webhooks for State Changes
Instead of polling, configure webhooks to receive real-time notifications:State Transition Rules
Valid Transitions
Not all state transitions are valid. The API enforces these rules: Applications:pending→submitted(via submit endpoint)submitted→completed(automatic after review)
- A wallet transaction never leaves
completed,failedorreversed - On auto and one-off transactions,
completedcan move topending_return,returned,pending_reversalorreversed, andfailedandreturnedcan move again when Dakota retries, resumes or re-sends the payment cancelledcan only be triggered while in non-terminal statereversedusually followscompleted(a return or an originator reversal). An auto or one-off transaction that Dakota stops or refunds before it completes can also endreversed, and a wallet transaction reachesreversedwithout completing when its execution reverts on the blockchain

