> For the complete documentation index, see [llms.txt](https://docs.spindl.xyz/spindl/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.spindl.xyz/spindl/techncial/javascript-sdk-html-script-guide/custom-events.md).

# Custom Events

You can track custom events across your application to gain a more detailed understanding of how users interact with it.

### Track

After you initial the Spindl SDK, you can call `track` on any interactions you want to track:

{% tabs %}
{% tab title="NPM SDK" %}

```javascript
import spindl from "@spindl-xyz/attribution";
// import spindl from "@spindl-xyz/attribution-lite" // only for lite version customers

// Track a basic event
spindl.track('form_submitted');

// Track events with optional properties
const additionalProperties = {
  value: 55,
  filterSelected: true,
  color: "red"
};

// optionally add user identity properties 
const identityProperties = {
  address: "0x1234...",
  customerUserId: "will@smith.com"
};

spindl.track('button_clicked', additionalProperties, identityProperties);
```

{% endtab %}

{% tab title="HTML Script SDK" %}

```html
<script>
// Track a basic event
window.spindl.track('form_submitted');

// Track events with optional properties
const additionalProperties = {
  value: 55,
  filterSelected: true,
  color: "red"
};

// optionally add user identity properties 
const identityProperties = {
  address: "0x1234...",
  customerUserId: "will@smith.com"
};

window.spindl.track('button_clicked', additionalProperties, identityProperties);

</script>
```

{% endtab %}
{% endtabs %}

**SDK Method**

To make data easily queryable, we have put the following restrictions on properties:

```typescript
spindl.track(
    event_name: string,
    event_properties?: Record<string, any>,
    identity_props?: {
        address?: string;
        customerUserId?: string;
    }
): void
```

**Arguments**

* **event\_name&#x20;*****(required)***: Min 3 & max 100 characters. Must be lower/uppercase alphanumeric. `_:-` symbols are allowed
* **event\_properties&#x20;*****(optional)*****:** Must be a valid JSON object. Max size 16KB & object keys & values cannot exceed 1,000 characters
* **identity\_props&#x20;*****(optional)*****:** You can pass in user props `address` and `customerUserId` to improve identity matching
