# Complete a Requirement

### 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 are 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

{% 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 userWalletAddress = '0x293kdo0ij0';
const campaignId = 'aSlug123';

const client = new ChainvineClient(); //Make sure to whitelist your domain
const requirementId = 'Hiodn2oD2dkmo2';
const userClient = await client.syncUser(userWalletAddress);

const completion = await userClient.completeRequirement({
    campaign: {
        id: campaignId
    },
    id: requirementId
});
```

{% 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 userWalletAddress = '0x293kdo0ij0';
const campaignId = '02jd020jkd-302jdi2d-02ij0dj';

// Generate your ChainvineClient instance
const client = new ChainvineClient({
    apiKey: '0dj03j000d'  // Your API Key
});

const requirementId = 'Hiodn2oD2dkmo2';
const userClient = await client.syncUser(userWalletAddress);

const completion = await userClient.completeRequirement({
    campaign: {
        id: campaignId
    },
    id: requirementId
});

```

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