---
title: Creating integrations - APIs
description: Creating integrations with the Enrichment API
lastUpdated: 23 February 2026
source_url:
  html: https://docs.contentsquare.com/en/api/enrichment/creating-integrations/
  md: https://docs.contentsquare.com/en/api/enrichment/creating-integrations/index.md
---

Get in touch with your Contentsquare contact to provide the required information:

* A data schema, in the form of a JSON object
* A name, logo and description of what the integration does and related use cases to be listed in the Contentsquare integrations catalog.

## Schema format

```json
{
  "fields": [
    // the list of fields
    {
      "name": "FIELD_NAME_1", // max 50 bytes
      "type": "STRING", // either "DATETIME", "INT", "FLOAT", "STRING" or "BOOL"
      "optional": true, // either true or false to make this field optional or not
      "label": "Field 1", // a business name that can be used in user interfaces
      "description": "A first field" // a business description that can be displayed in documentation pages and user interfaces
    },
    {
      "name": "FIELD_NAME_2",
      "type": "INT",
      "optional": false,
      "label": "Field 2",
      "description": "Another field"
    }
  ]
}
```

Note

When registering a new schema, Contentsquare will provide you with a corresponding `integrationVersion` (will be 1 by default for the first schema that is created and will be incremented by 1 for each new version). Then [when pushing enrichments](https://docs.contentsquare.com/en/api/enrichment/sending-enrichment-data-batches-cs/#sending-data-to-the-enrichment-endpoint), you will need to specify for which `integrationVersion`.

Tip

Using different integration versions, you can safely update and version an integration while avoiding to break enrichments flows relying on a previous schema. See [the dedicated section](https://docs.contentsquare.com/en/api/enrichment/update-an-integration-schema/) to see how to manage an integration schema update.

### Data types

An enrichment field can be of one of the following types:

* `"STRING"`:

  * Min length: `0`
  * Max length: `50` bytes

* `"INT"`:

  * Min integer: `-2147483648`
  * Max integer: `2147483647`

* `"FLOAT"`:

  * Min float: `-1.79769e+308`
  * Min float: `1.79769eE+308`

* `"BOOL"`:
  * Boolean values: `true` / `false`

* `"DATETIME"`:
  * Format: `YYYY-MM-DDThh:mm:ssZ` (example: "2022-07-26T14:47").

## Limitations

* A schema cannot include more than 10 fields of each type (so there can be up to 10 strings, 10 integers, 10 booleans etc.)
* Key names length is limited to 30 bytes
* Strings are limited to 50 bytes

Tip

Try to keep your key names as short as possible to optimize performance.

## Example

An example schema for a provider sending phone call data could look like this:

```json
{
  "fields": [
    {
      "name": "answered",
      "type": "BOOL",
      "optional": true,
      "label": "Call answered",
      "description": "Whether the call was answered (true) or not (false)"
    },
    {
      "name": "call_duration",
      "type": "INT",
      "optional": false,
      "label": "Call duration",
      "description": "The call duration in milliseconds"
    },
    {
      "name": "call_client_rating",
      "type": "FLOAT",
      "optional": true,
      "label": "Client rating",
      "description": "The call rating left by the client after the call if any"
    },
    {
      "name": "call_center_name",
      "type": "STRING",
      "optional": false,
      "label": "Call center name",
      "description": "The name of the call center that made the call"
    },
    {
      "name": "call_datetime",
      "type": "DATETIME",
      "optional": false,
      "label": "Call date and time",
      "description": "The date and time at which the call started"
    }
  ]
}
```
