# Using Custom Entity Types

Custom types allow integrations to receive any data that can be defined with a regular expression. To use a custom type you must define the custom type in your configuration file.

## Define Custom Type in Config

In the example below we setup an integration configuration that identifies strings that match a special hostname naming convention.

{% code title="config/config.js" %}

```javascript
{
    name: "Hostname Lookup",
    acronym: "HOST",
    description: "A sample integration that uses a custom regex to lookup hostnames and IPs",
    entityTypes: ['IPv4'],
    customTypes:[
        {
            key: 'hostname',
            regex: /[a-z]+_host/
        }
    ]
}
```

{% endcode %}

## Test for Custom Type

Now in the main module's `doLookup` method we can test if the type is `custom` or `IPv4` and take the appropriate action.

{% code title="integration.js" %}

```javascript
function doLookup(entities, options, cb){
    let lookupResults = [];
    async.each(entities, function(entity, next){
        if(entity.type === 'IPv4'){
            // do IPv4 lookup logic here
            next(null);
        }else if(entity.type === 'custom'){
            // do hostname lookup logic here
            next(null);
        }
    }, function(err){
        cb(err, lookupResults);
    });    
}
```

{% endcode %}

{% hint style="info" %}
Note that since the only custom type we defined is `hostname` we know that if the `type` property is `custom` then the entity must be a hostname entity.
{% endhint %}

## Multiple Custom Types

If you have defined multiple custom types you can use javascript's `Array.indexOf` to test for specific types.

For example, if we have defined the custom types `hostnameLinux` and `hostnameWindows` we could test for the entity type in our `doLookup` method using the following:

{% code title="integration.js" %}

```javascript
function doLookup(entities, options, cb){
    let lookupResults = [];
    async.each(entities, function(entity, next){
        if(entity.types.indexOf('custom.hostnameLinux') >= 0){
            // do hostnameLinux lookup logic here
            next(null);
        }else {
            // do hostnameWindows lookup here 
            next(null);
        }
    }, function(err){
        cb(err, lookupResults);
    });    
}
```

{% endcode %}

{% hint style="info" %}
Note that custom types are prepended with `custom.`. This means if you want to check for the custom type `hostnameLinux` you must look for the type `custom.hostnameLinux`. Likewise, `hostnameWindows` would be stored in the `types` property as `custom.hostnameWindows`.
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.polarity.io/integrations/recipes/using_custom_types.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
