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

# Track the deposit

> POST /deposit/status - track a submitted deposit through to delivery.

Reports where a submitted deposit is, from the source-chain transaction receipt.
Poll it until the status is terminal, and credit the user only on `done`.

## Request

<ParamField body="provider" type="string" required>
  The `provider` from the original `/deposit/quote` response.
</ParamField>

<ParamField body="receipt" type="object" required>
  The receipt of the deposit transaction submitted on the source chain.

  <Expandable title="receipt">
    <ParamField body="txHash" type="string" required>
      The hash of the submitted deposit transaction.
    </ParamField>

    <ParamField body="logs" type="array" required>
      The transaction logs from the receipt.

      <Expandable title="logs[]">
        <ParamField body="address" type="string" required>The log source address.</ParamField>
        <ParamField body="topics" type="string[]" required>The log topics.</ParamField>
      </Expandable>
    </ParamField>
  </Expandable>
</ParamField>

## Response

<ResponseField name="status" type="string">
  One of `pending`, `done`, `failed`, `expired`. See
  [Transaction statuses](/transactions/statuses) for what each means and when to
  credit the user.
</ResponseField>

<ResponseField name="txHashes" type="object">
  Transaction hashes for the two legs, as they become known.

  <Expandable title="txHashes">
    <ResponseField name="origin" type="string">
      Optional. The transaction that started the transfer on the source chain.
    </ResponseField>

    <ResponseField name="delivered" type="string">
      Optional. The transaction that delivered funds on the destination chain -
      present when `status` is `done`.
    </ResponseField>
  </Expandable>
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST "$RHEON_API/deposit/status" \
    -H "Content-Type: application/json" \
    -d '{
      "provider": "rheon-router",
      "receipt": {
        "txHash": "0xabc123...",
        "logs": [
          {
            "address": "0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE",
            "topics": ["0xddf252ad..."]
          }
        ]
      }
    }'
  ```
</RequestExample>

<ResponseExample>
  ```json 200 done theme={null}
  {
    "status": "done",
    "txHashes": {
      "origin": "0xabc123...",
      "delivered": "0xdef456..."
    }
  }
  ```

  ```json 200 pending theme={null}
  {
    "status": "pending",
    "txHashes": {
      "origin": "0xabc123..."
    }
  }
  ```
</ResponseExample>

## Polling

Poll every few seconds until `status` is terminal (`done`, `failed`, or `expired`).
Keep intervals above the rate limit (5 requests / 10s / IP). An `expired` transfer
is auto-refunded by the routing layer - there is no refund call to make.

## Errors

| HTTP | `code`            | When                                             |
| ---- | ----------------- | ------------------------------------------------ |
| 400  | `invalid_request` | `provider` or `receipt` is missing or malformed. |
| 429  | `rate_limited`    | Over the rate limit (5 requests / 10s / IP).     |
| 500  | `internal`        | Unexpected server error.                         |
