> ## Documentation Index
> Fetch the complete documentation index at: https://apidocs.finrock.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Transaction Statuses — Finrock API Reference Guide

> Complete reference for every transaction status returned by the Finrock API — terminal vs. non-terminal, polling guidance, and AML handling.

Every transaction you submit through the Finrock API moves through a lifecycle tracked by a `status` field. Understanding each status value — and whether it represents a final outcome or a transitional state — lets you build reliable polling logic, surface accurate information to your end users, and react correctly when a transfer requires intervention.

## Status Values

The table below lists every status value the API can return, along with its meaning and whether it is a **terminal** (no further changes expected) or **non-terminal** (may still transition) state.

| Status          | Terminal? | Description                                                                                                            |
| --------------- | --------- | ---------------------------------------------------------------------------------------------------------------------- |
| `Pending`       | No        | The transfer is waiting to be picked up for processing.                                                                |
| `Processing`    | No        | The transfer is actively being processed by the platform.                                                              |
| `Signing`       | No        | The transfer is waiting for the signer service to cryptographically sign the transaction.                              |
| `SweepPending`  | No        | The transfer is queued and waiting for another in-progress transfer to complete first.                                 |
| `NeedsApproval` | No        | The transfer requires approval from one or more authorized users, as defined in your Spending Rules.                   |
| `AML_Pending`   | No        | An AML risk-score lookup is currently in progress for this transfer.                                                   |
| `Success`       | **Yes**   | The transfer completed successfully. No further action is pending.                                                     |
| `Failed`        | **Yes**   | The transfer failed. Review error details and, if appropriate, resubmit.                                               |
| `Rejected`      | **Yes**   | An admin or the wallet owner rejected the transfer.                                                                    |
| `Blocked`       | **Yes**   | The Spending Policy Engine denied the transfer.                                                                        |
| `UserCancelled` | **Yes**   | An admin or the wallet owner cancelled the transfer.                                                                   |
| `AML_Blocked`   | **Yes**   | The AML risk score exceeded the configured threshold. The transfer is flagged as suspicious and will not be processed. |

## Terminal vs. Non-Terminal Statuses

Statuses fall into two categories that determine how your application should respond.

**Non-terminal statuses** mean the transaction is still in flight. Continue polling the transaction detail endpoint until the status transitions to a terminal value. Implement exponential backoff on your polling loop to avoid hitting rate limits — for example, start at a 5-second interval and double it up to a maximum of 60 seconds.

**Terminal statuses** mean the transaction has reached its final state and will not change. Once you observe a terminal status, you can stop polling and take the appropriate action in your application:

<CardGroup cols={2}>
  <Card title="Success" icon="circle-check">
    The on-chain transaction is confirmed. Update your internal records, credit the recipient, and send any confirmation notifications.
  </Card>

  <Card title="Failed" icon="circle-xmark">
    The transaction did not complete. Log the failure, surface an error to the user, and allow them to resubmit if appropriate.
  </Card>

  <Card title="Rejected / Blocked / UserCancelled" icon="ban">
    A policy or human decision stopped the transfer. Notify the requester and log the reason for audit purposes.
  </Card>

  <Card title="AML_Blocked" icon="shield-halved">
    The transfer was flagged by AML screening. Follow your compliance escalation process before taking any further action.
  </Card>
</CardGroup>

## Handling Specific Statuses

<Accordion title="NeedsApproval">
  When a transaction enters `NeedsApproval`, it is awaiting a manual decision from an authorized approver as configured in your Spending Rules. Your application should notify the relevant approvers and avoid submitting a duplicate transfer. Once approved, the status will advance to `Processing`; if rejected, it will move to `Rejected`.
</Accordion>

<Accordion title="AML_Pending and AML_Blocked">
  `AML_Pending` is a transient state — the platform is running an automated risk-score lookup. Do not resubmit the transfer at this point. If the lookup completes with an acceptable score, the transfer proceeds automatically. If the score breaches your configured threshold, the status transitions to `AML_Blocked`. At that point, engage your compliance team before taking any further action. See the [AML reference](/guides/aml-compliance) for details on managing blocked transfers.
</Accordion>

<Accordion title="SweepPending">
  `SweepPending` occurs when a transfer is correctly formed and queued but must wait for a prior transfer (often a gas or fee prefund sweep) to settle first. No action is required — the platform will advance the transfer automatically once the dependency resolves.
</Accordion>

<Accordion title="Signing">
  `Signing` indicates the transaction payload has been constructed and is awaiting an MPC signing ceremony via the signer service. This state is typically very brief under normal operating conditions. If a transaction remains in `Signing` for an extended period, contact [support@finrock.io](mailto:support@finrock.io).
</Accordion>

<Note>
  Poll the `GET /dac/v1/transaction/{id}` endpoint to retrieve the current status of a specific transaction. Always rely on the API-returned status as the source of truth — do not infer status from on-chain lookups alone, as the platform applies additional policy checks beyond raw blockchain confirmation.
</Note>
