Transaction Status Types

Every Neutron transaction moves through a series of states from creation to completion. This page documents all possible states, their meaning, and how they flow together.

State Flow Diagram

Typical Happy Path

quoted → userconfirmed → srccreated → srcconfirmfilled → destsent → completed

Full State Diagram

                    ┌─────────────┐
                    │   quoted    │  Transaction created
                    └──────┬──────┘
                           │
                ┌──────────┼──────────┐
                │          │          │
                ▼          ▼          ▼
          ┌──────────┐ ┌────────┐ ┌───────────────┐
          │ expired  │ │canceled│ │ userconfirmed  │
          │ (final)  │ │(final) │ │                │
          └──────────┘ └────────┘ └───────┬────────┘
                                          │
                                          ▼
                                   ┌─────────────┐
                                   │  srccreated  │  Source side created
                                   └──────┬───────┘
                                          │
                                   ┌──────┴───────┐
                                   │              │
                                   ▼              ▼
                           ┌────────────┐  ┌───────────────────┐
                           │  srcsent   │  │ srcpendconfirmfill │
                           └─────┬──────┘  └────────┬──────────┘
                                 │                  │
                                 ▼                  ▼
                         ┌───────────────┐  ┌─────────────────┐
                         │  srcintent    │  │ srcconfirmfilled │
                         └───────────────┘  └────────┬────────┘
                                                     │
                                              ┌──────┴──────┐
                                              │             │
                                              ▼             ▼
                                      ┌─────────────┐ ┌──────────┐
                                      │ destpendsent│ │  failed   │
                                      └──────┬──────┘ │ (final)   │
                                             │        └──────────┘
                                             ▼
                                      ┌─────────────┐
                                      │   destsent   │  Payout sent
                                      └──────┬───────┘
                                             │
                                      ┌──────┴──────┐
                                      │             │
                                      ▼             ▼
                              ┌───────────┐  ┌──────────┐
                              │ completed │  │ rejected │
                              │  (final)  │  │ (final)  │
                              └───────────┘  └──────────┘

                              ┌──────────┐
                              │  error   │  Can occur at any non-final state
                              │ (final)  │
                              └──────────┘

All States

Creation & Confirmation

StateDescriptionFinal?
quotedTransaction created. Awaiting user confirmation, or will expire after a timeout.No
userconfirmedUser confirmed via Confirm endpoint. Processing begins.No
expiredTransaction expired — not confirmed or funded in time.✅ Yes

Source (Pay-In) States

These track the incoming side of the transaction — the funds coming in.

StateDescriptionFinal?
srccreatedSource request created (e.g., Lightning invoice generated, on-chain address watching).No
srcsentDeposit or invoice request has been sent to the network.No
srcintentSource payment intent detected (e.g., on-chain transaction seen but unconfirmed).No
srcpendconfirmfillPayment received, pending final confirmation (e.g., waiting for on-chain confirmations).No
srcconfirmfilledSource payment fully confirmed. Funds received.No

Destination (Pay-Out) States

These track the outgoing side — the funds being delivered.

StateDescriptionFinal?
destpendsentPayout queued, pending send.No
destsentPayout sent to the destination (e.g., Lightning payment in flight, on-chain TX broadcast).No

Final States

StateDescription
completedTransaction fully settled — both sides done. ✅
expiredTimed out before confirmation or funding.
rejectedRejected by the system (e.g., compliance, invalid destination).
errorNon-recoverable error — contact support.
usercanceledCancelled by the user via Cancel endpoint.

Typical Flows by Method

Lightning (instant)

quoted → userconfirmed → srccreated → srcconfirmfilled → completed

Lightning payments skip the destsent state — settlement is atomic.

On-Chain Bitcoin

quoted → userconfirmed → srccreated → srcintent → srcpendconfirmfill → srcconfirmfilled → destsent → completed

On-chain requires multiple confirmation steps.

Internal Swap

quoted → userconfirmed → completed

Wallet-to-wallet swaps settle immediately.

Fiat Payout

quoted → userconfirmed → srccreated → srcconfirmfilled → destpendsent → destsent → completed

Fiat payouts include a destpendsent queuing step.

Handling States in Your Integration

Which states to watch for

GoalWatch for
Payment receivedsrcconfirmfilled or completed
Payment sentdestsent or completed
Something went wrongfailed, rejected, error
User didn't act in timeexpired

Webhooks vs Polling

Webhooks (recommended): Register a webhook and receive state change notifications automatically.

Polling: Call Get Transaction periodically. Check txnState in the response.

# Poll transaction status
curl https://api.neutron.me/api/v2/transaction/YOUR_TXN_ID \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Idempotency

Your system may receive the same state notification multiple times (via webhook retries). Always check if you've already processed a state change before taking action.

Related