---
url: https://docs.seen.io/api/create-data.md
description: >-
  Documents the POST endpoint for sending a data item into a Seen project,
  including the request body, image URLs, and possible responses.
---

# Create Data

Create a data item in your Project.

If your Project has a published video, sending in data will generate a version of the video.

## Endpoint

```
https://next.seen.io/v1/projects/{Project_ID}/data
```

::: info
You can find your endpoint in the [Run page](../platform/projects/run) of your project.
:::

## Request Method

`POST`

## Request Headers

**`Authorization`**

This header is common to all requests to our API. Please see the [Authorization](./authorization) section for more details.

**`Content-Type`**

Content-Type should be configured as `application/json`.

::: info
You can copy the headers from the [Run page](../platform/projects/run) of your project.
:::

## Request Body

Here is an example of a payload. Fields can differ depending on setup.

The expected request body follows the below structure:

```json
{
  "id": "12345",
  "first_name": "John",
  "last_name": "Rowley",
  "country": "Norway"
}
```

::: warning
If you don't include an `id` field in your payload, one will be assigned automatically.

To **prevent duplicate records**, include the default `id` field in your payload. Requests with the same `id` will be treated as the same entity, and won't generate a duplicate video.

To **allow multiple videos for the same person** (for example, generating a birthday video for the same person 2 years in a row), don't rely on `id` for matching. Instead, store your own identifier in a separate custom property (e.g. `crm_id`), which allows duplicates.
:::

If Webhook is enabled, it's recommended to supply a unique ID for each data item, that can be used to match each data item between our respective systems.

Additional fields should match the Project properties.

Seen API accepts single JSON objects only. Arrays are not supported at the moment.

::: info
You can copy an example payload structure including Project specific personalisation fields from the Run page of your project.
:::

## Images via URL

To be able to send images via URL in an API call, these are the requirements:

* Image size limit is 2 MB.
* Only use images with file extension `.jpg`, `.jpeg` or `.png` (only lowercase extensions are allowed).
* The image should provide a content type: `image/jpg`, `image/jpeg` or `image/png`.
* Only use direct links that do not require authentication to the images. Do not use redirect links.

Example of an image via URL:

```
https://storage.googleapis.com/landing-page-static-assets-prod/images/logo_black.png
```

## Rate Limit

Seen API accepts up to 100 requests per 10 seconds.

## Responses

Upon posting the request, you will receive one of the following responses from our API:

### 201

Upon a successful request, you will receive a `201 Created` response.

Example response body (based on the example request above):

```json
{
  "id": "12345",
  "values": {
    "first_name": "John",
    "last_name": "Rowley",
    "country": "Norway"
  }
}
```

### 400

Upon a bad request, you will receive a `400 Bad Request` response.

```json
{
  "code": "ErrRequestBody",
  "message": "a JSON object is expected"
}
```

### 401

Upon an unauthorized request, you will receive a `401 Unauthorized` response.

```json
{
  "code": "ErrUnauthenticated",
  "message": "api key invalid"
}
```

### 429

Upon exceeding the rate limit, you will receive a `429 Too Many Requests` response.

```
429 Too Many Requests
```

### 500

Upon a client error, you will receive a `500 Internal Server Error` response.

```json
{
  "code": "ErrClient",
  "message": "service unavailable"
}
```
