# Record a Transfer Event

#### Intended uses

When you are dealing with a requirement that can only be completed by your system, and not ChainVine's, some examples can include, but is not limited to:&#x20;

* a user interacts with a chain that ChainVine does not support
* a user replies to a message on your app
* a user signs up for an off-chain feature on your app

To better understand how a reward is issued to a user when calling this method, please refer to the [completeRequirement](https://docs.chainvine.xyz/developers/sdk/classes-and-functions/chainvineuser/completerequirement-payload) method

{% tabs %}
{% tab title="Browser" %}
Before implementing this approach, be sure to have [whitelisted your domain](https://docs.chainvine.xyz/developers/use-cases/broken-reference).

{% code overflow="wrap" %}

```typescript
import { ChainvineClient } from '@chainvine/sdk';

const client = new ChainvineClient();

const wallet_address = '0x1234567890' //<-- supplied by your systems

const transaction_hash = '0x1234567890'; //optional
const token_address = '0x1234567890'; //optional
const amount = 100; // this is the amount of token you want us to convert
const usd_value = 100; //optional, the USD value of the token at the time of the conversion
const external_identifier = 'ABC123'; //optional (e.g. a user ID in your system)
const fee = 390;

const campaign = {
  id: 'aSlug123'
}

const userClient = await client.syncUser(wallet_address);

const res = await userClient.transferEvent({
    campaign,
    transaction_hash,
    token_address,
    amount,
    usd_value,
    external_identifier,
    fee,
});
```

{% endcode %}
{% endtab %}

{% tab title="Server" %}
Before implementing this approach, be sure to have gotten a copy of [your API Key](https://docs.chainvine.xyz/developers/sdk/classes-and-functions/authentication/getting-your-api-key).

{% code overflow="wrap" %}

```typescript
import { ChainvineClient } from '@chainvine/sdk';

const client = new ChainvineClient({
    apiKey: '9dj022didj', //your api key
});

const wallet_address = '0x1234567890' //<-- supplied by your systems

const transaction_hash = '0x1234567890'; //optional
const token_address = '0x1234567890'; //optional
const amount = 100; // this is the amount of token you want us to convert
const usd_value = 100; //optional, the USD value of the token at the time of the conversion
const external_identifier = 'ABC123'; //optional (e.g. a user ID in your system)

const campaign = {
  id: 'aSlug123'
}

const userClient = await client.syncUser(wallet_address);

const res = await userClient.completeRequirement({
    campaign,
    id: requirementId,
    referrer_id,
    transaction_hash,
    token_address,
    amount,
    usd_value,
    external_identifier,
});
```

{% endcode %}
{% endtab %}
{% endtabs %}
