# Submit transactions and review results

Detect all suspicious transaction activities with one solution.

You can submit transactions in any of the following ways:

* [Use our API](https://docs.sumsub.com/sumsub/docs/submit-transactions-and-review-results#submit-transactions-via-api)
* [Create transactions manually](https://docs.sumsub.com/sumsub/docs/submit-transactions-and-review-results#create-transactions-in-the-dashboard)
* [Upload transactions in bulk](https://docs.sumsub.com/sumsub/docs/submit-transactions-and-review-results#upload-transactions-in-bulk)

Once the transaction is submitted and processed, you can find it on the [Transactions](https://cockpit.sumsub.com/checkus#/kyt/txns) page.

Each transaction comprises monitoring results that may vary, depending on the transaction and applicant type. In the transaction body, you will also see the list of matched [rules](https://docs.sumsub.com/sumsub/docs/tm-rules).

To manage transactions, use [Case management](https://docs.sumsub.com/sumsub/docs/case-management).

# Submit transactions via API

To submit transactions via the [Sumsub API](https://docs.sumsub.com/sumsub/reference/about-sumsub-api), use the following methods:

* [Submit transactions individually](https://docs.sumsub.com/sumsub/reference/submit-transaction-for-existing-applicant)
* [Submit transactions for non-existing applicants](https://docs.sumsub.com/sumsub/reference/submit-transaction-for-non-existing-applicant)
* [Bulk transaction import](https://docs.sumsub.com/sumsub/reference/bulk-transaction-import)

## Default TM integration flow

<Image src="https://files.readme.io/97add598bab15dbdab7b3ae365e394c867f7d75f92df64260f1aa01ede1912a6-Updated_Scheme__Jun_25_2025.png" align="center" />

<style>
    p-image {
        margin: 0;
        display: flex;
        justify-content: center;
        align-items: center;
        font-size: 12px;
        color: #697386;
    }

    /* allow scrolling for lightbox image */
    .markdown-body .lightbox.open {
        background: rgba(255, 255, 255, 0.966);
        display: flex;
        flex-flow: nowrap column;
        height: 100vh;
        width: 100vw;
        margin-top: 0;
        overflow-y: scroll !important;
        position: fixed;
        top: 0;
        left: 0;
        padding: 0 15vw !important;
        flex-direction: row !important;
    }

    .markdown-body .lightbox.open img {
        height: auto !important;
        max-height: none !important;
        max-width: 100% !important;
        width: auto !important;
    }
</style>

# Create transactions in the Dashboard

To create transactions in the Dashboard:

1. Open the [Transactions](https://cockpit.sumsub.com/checkus#/kyt/txns) page and click **Create sample transaction**.

   <Image src="https://files.readme.io/db163c04e6d3666d14f470c880125f4508f0eb3f87ece847c270c653befaa505-Screenshot_2026-04-20_at_14.49.50.png" align="center" />

2. From the **Use case** drop-down list, select a transaction type:

   * **Fiat** — foreign currency transactions.
   * **Crypto transaction** — cryptocurrency transfers.

   <Image src="https://files.readme.io/f28e4586e7245b6c415ee05714a6d8cef6bb54ad166601b6db291389d9b266fb-Screenshot_2026-04-20_at_15.17.22.png" align="center" width="55% " />

3. From the **Applicant** drop-down list, select the applicant on behalf of whom you want to produce the transaction.

4. Select whether the transaction is inbound or outbound (for Fiat and Crypto transactions only).

5. Enter the transaction information based on the transaction type:
   * **Fiat** — amount, currency, payment details (the purpose of payment), beneficiary full name and external user ID, and the transaction date (custom or current).
   * **Crypto transaction** — amount, asset (cryptocurrency), payment details (the purpose of payment), blockchain TXID, sender full name, external user ID, applicant wallet address, and the transaction date (custom or current).

6. Set the custom transaction date by selecting the associated checkbox if necessary.

7. Click **Create transaction**.

> In addition to the UI wizard, you can submit transactions in JSON on the **JSON payload** tab.

<Image src="https://files.readme.io/2773bd6f3a427ef70639a31ef1cbbf7862c95ba37bd5edc96ab327fc77fa3241-Screenshot_2026-04-20_at_15.12.57.png" align="center" width="50% " />

## Device emulation

When creating a sample transaction in the Dashboard, you can emulate a device and apply different <Anchor target="_blank" href="doc:applicant-risk-labels">risk labels</Anchor> to test device-related outcomes. Device emulation is available for the following use cases: **Fiat**, **Crypto**, **Login**, and **Sign up**.

To emulate a device for a sample transaction:

1. In the Dashboard, go to **Transactions and Travel Rule** → **Transactions**.
2. Click **Create sample transaction**.
3. From the **Use case** drop-down list, select one of the supported use cases: **Fiat**, **Crypto**, **Login**, or **Sign up**.
4. Fill in the required transaction details.
5. Scroll down to the **Device emulation** section and select the **Generate new device** checkbox.
6. Select the required risk label to emulate the corresponding device-related risk outcome.
7. Click **Create transaction**.

<Image src="https://files.readme.io/d0439e4aa0eb070c49a819bc7de2cb3595ea158690057b58439a6ae2b8c4ced7-Screenshot_2026-07-02_at_12.06.32.png" align="center" width="55%" />

<br />

# Upload transactions in bulk

You can upload up to 1000 transactions in bulk using the Newline Delimited JSON format (ndjson).

> Bulk upload available upon request. To extend the default upload limit, reach out to your Customer Success Manager or Support team.

To upload transactions:

1. Go to the [Transactions](https://cockpit.sumsub.com/checkus#/kyt/txns) page.
2. From the menu, select **Upload transactions**.
3. Select the **Score saved transactions** checkbox if you want your transactions to be scored.
4. Upload a valid ndjson file.
5. Click **Upload**.

> You can use the following templates as a reference:
>
> * [Template for existing applicants](https://sumsub.com/files/testdata.ndjson)
> * [Template for non-existing applicants](https://sumsub.com/files/testdata-non-existing-applicant.ndjson)

# Explore transaction statuses

During the transaction processing, the system assigns various statuses depending on the stage and result of the verification. The following table outlines the possible transaction statuses and their descriptions.

<style>
    .table-text {
        margin: 24px 0;
        border: 1px solid #e5e5e5;
        border-radius: 8px;
        overflow: hidden;
    }

    .wide-column {
        min-width: 200px;
    }

    table {
        border-collapse: collapse;
        width: 100%;
    }

    th {
        background-color: #f6f7f9;
        border: 1px solid #e5e5e5;
        padding: 8px;
        font-weight: bold;
        text-align: left;
    }

    @media (prefers-color-scheme: dark) {
        [data-color-mode="auto"] th {
            background-color: #303b42;
            border: 1px solid #e5e5e5;
        }
    }

    [data-color-mode="dark"] th {
        background-color: #303b42;
        border: 1px solid #e5e5e5;
    }

    .tiers-table td:nth-child(1) {
        vertical-align: middle;
    }

    td {
        border: 1px solid #e5e5e5;
        padding: 8px;
        text-align: left;
        min-width: 200px;
    }

    tr:nth-child(odd) {
        background-color: #fff;
    }

    tr:nth-child(even) {
        background-color: #f8f8f8;
    }

    .table-text h2 {
        font-size: 14px;
        margin: 0px;
        color: #384248;
    }

    @media (prefers-color-scheme: dark) {
        [data-color-mode="auto"] .table-text h2 {
            color: #ffff;
        }
    }

    [data-color-mode="dark"] .table-text h2 {
        color: #ffff;
    }

    .table-text p {
        font-size: 14px;
        margin: 0;
        color: #414552;
    }

    @media (prefers-color-scheme: dark) {
        [data-color-mode="auto"] .table-text p {
            color: #ffff;
        }
    }

    [data-color-mode="dark"] .table-text p {
        color: #ffff;
    }

    .table-text a {
        color: #377cf7;
        text-decoration: underline;
    }

    @media (prefers-color-scheme: dark) {
        [data-color-mode="auto"] .table-text a {
            color: #ffff;
        }
    }

    [data-color-mode="dark"] .table-text a {
        color: #ffff;
    }

    .table-text tr:first-child {
        margin-bottom: 20px;
    }

    .tag-green {
        display: inline-block;
        flex-direction: row;
        align-items: center;
        padding: 1px 4px;
        gap: 0px;
        background: #d0f1e8;
        border-radius: 4px;
        font-weight: 500;
        font-size: 12px;
        line-height: 16px;
        color: #115242;
        margin-top: 4px;
    }
    .tag-red {
        display: inline-block;
        flex-direction: row;
        align-items: center;
        padding: 1px 4px;
        gap: 0px;
        background: #ffd2ce;
        border-radius: 4px;
        font-weight: 500;
        font-size: 12px;
        line-height: 16px;
        color: #5e0214;
        margin-top: 4px;
    }
    .tag-purple {
        display: inline-block;
        flex-direction: row;
        align-items: center;
        padding: 1px 4px;
        gap: 0px;
        background: #eedbff;
        border-radius: 4px;
        font-weight: 500;
        font-size: 12px;
        line-height: 16px;
        color: #250960;
        margin-top: 4px;
    }
    .tag-grey {
        display: inline-block;
        flex-direction: row;
        align-items: center;
        padding: 1px 4px;
        gap: 0px;
        background: #edeff2;
        border-radius: 4px;
        font-weight: 500;
        font-size: 12px;
        line-height: 16px;
        color: #393f4e;
        margin-top: 4px;
    }
    .tag-yellow {
        display: inline-block;
        flex-direction: row;
        align-items: center;
        padding: 1px 4px;
        gap: 0px;
        background: #fff4c6;
        border-radius: 4px;
        font-weight: 500;
        font-size: 12px;
        line-height: 16px;
        color: #613400;
        margin-top: 4px;
    }
</style>

<body>
    <div className="rdmd-table">
        <div className="rdmd-table-inner">
            <table className="tiers-table">
                <tr>
                    <th>
                        <p>Dashboard status</p>
                    </th>
                    <th>
                        <p>Description</p>
                    </th>
                </tr>
                <tbody>
                    <tr>
                        <td>
                            <div className="tag-green">Approved</div>
                        </td>
                        <td>
                            <p>Transaction successfully passed all checks and was approved.</p>
                        </td>
                    </tr>
                    <tr>
                        <td>
                            <div className="tag-red">Rejected</div>
                        </td>
                        <td>
                            <p>Transaction triggered one of the rules, which caused the transaction to be rejected, or it was rejected manually.</p>
                        </td>
                    </tr>
                    <tr>
                        <td>
                          <div className="tag-purple">Requires action</div>
                        </td>
                        <td>
                            <p>
                                Τransaction triggered a rule that requires manual review, and is now waiting for your approval or rejection.
                            </p>
                        </td>
                    </tr>
                    <tr>
                        <td>
                          <div className="tag-purple">Awaiting user</div> 
                        </td>
                        <td>
                            <p>
                                Transaction triggered a rule that requested additional documents from the applicant and is now waiting for them to be uploaded.
                            </p>
                        </td>
                    </tr>
                    <tr>
                        <td>
                            <div className="tag-yellow">Pending</div>
                        </td>
                        <td>
                            <p>Transaction has been stored and is waiting in the processing queue for pre-scoring steps, such as data retrieval from external services.</p>
                        </td>
                    </tr>
                    <tr>
                        <td>
                            <div className="tag-grey">Not scored</div>
                        </td>
                        <td>
                            <p>Transaction was either imported without scoring (for example, to include previous transactions in aggregate calculations without rescoring each one), or scoring failed to complete due to an issue. You can score it manually or leave it with this status.</p>
                        </td>
                    </tr>
                </tbody>
            </table>
        </div>
    </div>
</body>

# View transaction events

Events log any activities on transaction status change. Every time a transaction receives a new status, such an event is saved for future references.

To see the events, in the Dashboard, open the [Events](https://cockpit.sumsub.com/checkus#/kyt/events) page. Also, each transaction event belonging to the applicant is automatically logged in the applicant profile on the **Transactions** -> **Events** tab.

<style>
    p-image {
        margin: 0;
        display: flex;
        justify-content: center;
        align-items: center;
        font-size: 12px;
        color: #697386;
    }

    /* allow scrolling for lightbox image */
    .markdown-body .lightbox.open {
        background: rgba(255, 255, 255, 0.966);
        display: flex;
        flex-flow: nowrap column;
        height: 100vh;
        width: 100vw;
        margin-top: 0;
        overflow-y: scroll !important;
        position: fixed;
        top: 0;
        left: 0;
        padding: 0 15vw !important;
        flex-direction: row !important;
    }

    .markdown-body .lightbox.open img {
        height: auto !important;
        max-height: none !important;
        max-width: 100% !important;
        width: auto !important;
    }
</style>

<br />