> ## Documentation Index
> Fetch the complete documentation index at: https://dev.enterprise.moonpay.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Transaction status

> This document outlines how to interpret transaction statuses returned by MoonPay Enterprise.

## Transaction Status Mapping

| **State Type** | **API Status** | **Dashboard Status** | **Description** |
| - | - | - | - |
| Progress | `FundsReviewInProgress` | **Reviewing Funds** | The deposit has been received and is undergoing a brief compliance and eligibility check (e.g., AML screening). This status is rare and typically resolves quickly. |
| Progress | `ConversionInProgress` | **Exchanging Funds** | The deposit has cleared review and is being converted to the configured destination asset. |
| Progress | `PayoutInProgress` | **Processing Payout** | MoonPay Enterprise has sent the funds to the connected banking provider or blockchain. This step can take time depending on external networks. |
| Terminal | `Completed` | **Transaction Complete** | The funds have been fully processed and handed off to the destination. No further actions will occur. |
| Terminal | `Failed` | **Deposit Failed** | The deposit or transfer failed due to a general processing error. |
| Terminal | `RejectedAml` | **Rejected by Compliance** | The deposit failed AML or compliance checks and has been rejected. |
| Terminal | `RejectedFraud` | **Rejected by Fraud** | The deposit failed anti-fraud review and has been rejected. |
| Terminal | `RejectedMinAmount` | **Deposit Below Minimum** | The amount was too low to process and has been rejected. |

## Settlement Times by Payment Method

The time it takes for a transaction to complete depends on the payment rail used. Below are typical settlement times from initiation to completion:

| **Payment Method** | **Typical Settlement Time** | **Notes** |
| - | - | - |
| **SEPA (Instant)** | Near-instant to 10 seconds | For transactions under €100k within the EEA |
| **SEPA (Credit)** | 1-2 business days | Standard for transactions over €100k; usually settles within 24 hours |
| **ACH** | Same day to 1 business day | Same-Day ACH settles the same business day when submitted before cutoff; Standard ACH settles the next business day. See [Currencies and Rails](/currencies-and-rails) for cutoff windows |
| **Wire** | Same day to 1 business day | Faster option for US domestic transfers; often completes within hours if initiated early in the business day |
| **CHAPS** | Same business day | UK domestic transfers; must be initiated before the daily cutoff time |
| **FPS** | Near-instant to 2 hours | UK Faster Payments; typically completes within minutes |
| **SWIFT** | 1-3 business days | International USD transfers; timing depends on correspondent banks and the destination country |

<Note>
  Settlement times are estimates based on typical payment rail processing. Actual times vary depending on:

  * Banking partner processing schedules
  * Compliance and AML review requirements (see `FundsReviewInProgress` status)
  * Time of day and business day cutoffs
  * External network delays

  For real-time status updates, monitor the transaction status via the API or webhook notifications.
</Note>

## When No Transaction Appears

A transaction is created once a deposit lands on a Virtual Account or deposit address with a matching autoramp. If a payment was sent and no transaction shows up, the most likely explanation is that the funds have not reached MoonPay Enterprise at all. The sending bank is often still holding the payment: cutoffs, batch windows, and the sender's own compliance checks add hours, and SWIFT adds days. Check the settlement window for the rail above, then confirm with the payer that the payment left their account.

The less common case is a deposit that arrives but matches no autoramp. That happens when a payment-by-reference Virtual Account receives a payment without the expected reference, when a crypto deposit matches no active quote, or when crypto arrives on a chain you did not declare in `source_currencies`. MoonPay Enterprise returns those funds to the sender. No transaction is created, so there is no status to poll and no webhook to receive.

<Warning>
  Returned deposits are not exposed through the API. If the payment left the sender's account and never produced a transaction, contact [support](/support) with the amount, currency, date, and reference used.
</Warning>

Crypto deposits worth less than `1 EUR` are treated as dust. They are neither processed nor returned. See [Limits and minimums](/limits-and-minimum).

## API Endpoint

**GET** `/api/autoramp-transactions/ids`

Use this endpoint to retrieve the latest status of specific transactions (up to 100 at a time). Useful for syncing or polling real-time transaction states. At least one transaction ID is required.

<CodeGroup>
  ```bash theme={null}
  curl -X GET "$BASE_URL/api/autoramp-transactions/ids?ids=9a7b6c5d-e3f1-4a2b-8c7d-6e5f4a3b2c1d" \
    -H "X-API-Key: $API_KEY"
  ```
</CodeGroup>

### Response

<CodeGroup>
  ```json theme={null}
  {
    "items": [
      {
        "id": "9a7b6c5d-e3f1-4a2b-8c7d-6e5f4a3b2c1d",
        "customer_id": "123e4567-e89b-12d3-a456-426614174000",
        "autoramp_id": "7c1e2f3a-4b5c-6d7e-8f9a-0b1c2d3e4f5a",
        "status": "PayoutInProgress",
        "source_amount": { "amount": "100.50", "currency": { "type": "Crypto", "token": "USDC", "blockchain": "Ethereum" } },
        "destination_amount": { "amount": "92.10", "currency": { "type": "Fiat", "code": "EUR" } },
        "created_at": "2025-01-20T13:45:23Z"
      }
    ],
    "cursor": null,
    "prev_cursor": null
  }
  ```
</CodeGroup>

<Note>
  The example above is trimmed to the fields most integrations need. The full `AutorampTransaction` object also returns `kind`, `recipient`, `fee`, `fee_breakdown`, `fee_settlement`, `exchange_rate`, `is_third_party`, `inbound_payment_reference`, `batch_id`, `payment_tracking`, and `payout_crypto_transaction`. The legacy `state` field is deprecated in favor of `status`.
</Note>

### Error response

Requesting this endpoint with no `ids` query parameter returns `400` as a plain string body:

<CodeGroup>
  ```json 400 Bad Request theme={null}
  "At least one id must be provided"
  ```
</CodeGroup>

## Webhook Notifications

Refer to the [MoonPay Enterprise Webhooks Guide](/webhooks) for status-based notifications.
