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

# Verify Transaction

> Verify that a transaction contains valid Turtle tracking data

<Note>
  All requests require an API key via the `X-API-Key` header.
  See [Authentication](/sdk/authentication/api-keys) for details.
</Note>

## Verify Tracking

Check whether a transaction contains valid Turtle tracking data. Useful for debugging or confirming attribution independently.

<CodeGroup>
  ```bash curl theme={null}
  curl -X GET "https://earn.turtle.xyz/v1/actions/verify?chainId=1&txHash=0xedfdf71e..." \
    -H "X-API-Key: pk_live_xxxxx"
  ```

  ```typescript TypeScript theme={null}
  const params = new URLSearchParams({
    chainId: '1',
    txHash: '0xedfdf71e0e4daec5afcb87988821a8bccd5c282647c8e81a65a71181a44a8e51',
  });

  const response = await fetch(
    `https://earn.turtle.xyz/v1/actions/verify?${params}`,
    { headers: { 'X-API-Key': 'pk_live_xxxxx' } }
  );
  const data = await response.json();
  ```
</CodeGroup>

**Query Parameters**

<ParamField query="chainId" type="integer" required>
  The chain ID where the transaction was executed (e.g., `1` for Ethereum, `42161` for Arbitrum).
</ParamField>

<ParamField query="txHash" type="string" required>
  The transaction hash to verify (`0x` followed by 64 hex characters).
</ParamField>

**Response**

```json theme={null}
{
  "tag": "turtle:v1:dist123:ref456",
  "metadata": {
    "distributorId": "dist123",
    "referralCode": "ref456"
  },
  "signatureValid": true
}
```

<ResponseField name="tag" type="string">
  The raw tracking tag found in the transaction data.
</ResponseField>

<ResponseField name="metadata" type="object">
  Parsed tracking metadata containing `distributorId` and optionally `referralCode`.
</ResponseField>

<ResponseField name="signatureValid" type="boolean" required>
  Whether the tracking signature is from Turtle's attribution wallet.
</ResponseField>

<ResponseField name="error" type="string">
  Error message if verification failed (e.g., no tracking data found).
</ResponseField>

## Related

* [Deposit](/sdk/earn-api/actions/deposit) — Generate deposit transactions
* [Distributor Model](/sdk/earn-api/distributor-model) — How attribution and revenue tracking work
