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

# POST /v2/check-transfer

> Transaction Check (KYT) — decode a tx, run Tier 4 BFS per sender, apply the Aegis Standard policy. The V2 counterpart of x402 GET /check-transfer.

<Note>
  **Auth:** `Authorization: Bearer aeg_…` · **Billing:** charge-on-success, per your plan (commercial agreement)
</Note>

Screen an **inbound transaction** the way [`/v2/check-address`](/api-reference/v2-check-address)
screens an address.  Aegis decodes the tx, runs AML exposure analysis on
each sender via Tier 4 BFS, applies the Aegis Standard policy to the
USD-weighted composite, and returns PolicyAlerts.

Mirrors the x402 [`GET /check-transfer/{chain}/{tx_hash}`](/endpoints/check-transfer)
endpoint 1:1, at the same price.

## Request

```bash theme={null}
curl -X POST https://api.aegis-kyt.com/v2/check-transfer \
  -H "Authorization: Bearer aeg_YOUR_KEY_HERE" \
  -H "Content-Type: application/json" \
  -d '{ "chain": "TRON", "tx_hash": "abc…64hex" }'
```

| Field     | Type   | Notes                                               |
| --------- | ------ | --------------------------------------------------- |
| `chain`   | string | `ETH \| BSC \| POLYGON \| BASE \| ARBITRUM \| TRON` |
| `tx_hash` | string | 0x-prefixed 32-byte hex, or TRON 64-hex             |

Send `Idempotency-Key: <token>` to make retries safe.

## Synchronous, with a 202 fallback

The check waits up to \~25s for completion:

* **200** — completed; body carries `composite_result`, `policy_result`,
  and a `billing` envelope.  Charged once.
* **202** — still running; body is `{ check_id, retry_url }`.  Fetch the
  result from the free [`GET /v2/transfer/{check_id}/result`](#poll) — you
  are billed **once** between the two calls.
* **402** — `insufficient_funds` / `monthly_cap_exceeded`.
* **409** — `kyt_requires_subgroup`: the key's user has no organization /
  subgroup (KYT alerts + idempotency are tenant-scoped).

**Charge-on-success:** a parse or RPC failure returns `502` and is **not**
charged.

<h2 id="poll">
  Poll
</h2>

```bash theme={null}
curl https://api.aegis-kyt.com/v2/transfer/<check_id>/result \
  -H "Authorization: Bearer aeg_YOUR_KEY_HERE"
```

Returns `200` (verdict, charged once on first successful delivery), `202`
(still running), `502` (failed — no charge), or `404` (unknown / not owned
by the caller).

## See also

* [POST /v2/check-address](/api-reference/v2-check-address) — single-address verdict
* [GET /check-transfer/{chain}/{tx_hash}](/endpoints/check-transfer) — the x402 counterpart


## OpenAPI

````yaml POST /check-transfer
openapi: 3.1.0
info:
  description: >-
    Public, subscription-billed AML API. Send `Authorization: Bearer aeg_<key>`
    on every call.  See the user kabinet at
    https://app.aegis-kyt.com/account?tab=api to generate a key.
  title: Aegis Public API
  version: 2.0.0
servers:
  - description: Production
    url: https://api.aegis-kyt.com/v2
security: []
paths:
  /check-transfer:
    post:
      tags:
        - v2-public
      summary: 'Transaction Check (KYT): decode + Tier 4 BFS + policy — submit'
      description: >-
        Decodes an inbound transaction, runs AML exposure analysis on each
        sender via Tier 4 BFS, applies the Aegis Standard policy to the
        USD-weighted composite, and returns PolicyAlerts.  Billing is per your
        plan / commercial agreement.


        Always returns **202** immediately with `{check_id, retry_url}` — this
        endpoint never blocks.  Fetch the verdict from `GET
        /v2/transfer/{check_id}/result` (poll every few seconds). 
        Charge-on-success, billed once regardless of how many times you poll: no
        charge on a parse/RPC failure.


        Requires the key's user to belong to an organization/subgroup (KYT
        alerts + idempotency are tenant-scoped).
      operationId: check_transfer_check_transfer_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CheckTransferRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                additionalProperties: true
                title: Response Check Transfer Check Transfer Post
                type: object
          description: Successful Response
        '202':
          description: Check queued — poll GET /v2/transfer/{check_id}/result
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
          description: Validation Error
        '502':
          description: Idempotent replay landed on a failed check (no charge)
      security:
        - ApiKeyBearer: []
components:
  schemas:
    CheckTransferRequest:
      properties:
        chain:
          description: ETH | BSC | POLYGON | BASE | ARBITRUM | TRON.
          examples:
            - TRON
            - ETH
          maxLength: 20
          minLength: 1
          title: Chain
          type: string
        tx_hash:
          description: Transaction hash (0x-prefixed 32-byte hex, or TRON 64-hex).
          examples:
            - '0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
          maxLength: 80
          minLength: 1
          title: Tx Hash
          type: string
      required:
        - chain
        - tx_hash
      title: CheckTransferRequest
      type: object
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          title: Detail
          type: array
      title: HTTPValidationError
      type: object
    ValidationError:
      properties:
        ctx:
          title: Context
          type: object
        input:
          title: Input
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          title: Location
          type: array
        msg:
          title: Message
          type: string
        type:
          title: Error Type
          type: string
      required:
        - loc
        - msg
        - type
      title: ValidationError
      type: object
  securitySchemes:
    ApiKeyBearer:
      description: Your `aeg_…` API key from the dashboard (Account → API tab).
      scheme: bearer
      type: http

````