# Отправка целевого события/достижение цели

Цель — это действие пользователя в боте, например продажа. Graspil имеет несколько уже созданных "целей", вы можете увидеть их в своем личном кабинете в разделе [конверсии](https://app.graspil.com/targets). Там же вы можете создавать свои цели.

Каждая цель имеет свой **триггер** — некую логику при наступлении которой будет создано целевое событие (достижение цели), его вы и уведите в статистике.

"Цели" можно активировать через API. Ниже представлен метод, который описывает как передать целевое событие.

## Отправка данных <a href="#aacdba4ac5" id="aacdba4ac5"></a>

За одну отправку запроса вы можете передать от 1 до 100 событий. Данные отправляются в `json` формате. Предпочтительней отправлять события в момент их появления.

{% hint style="info" %}
Не забудьте добавить заголовок для авторизации запроса. Подробней в [этом](https://docs.graspil.com/ru/api/auth) разделе
{% endhint %}

#### **HTTPS Request**

```
POST https://api.graspil.com/v1/send-target
```

#### Передаваемые параметры <a href="#a35acec451" id="a35acec451"></a>

<table><thead><tr><th width="131">Параметр</th><th width="113">Type</th><th width="149">Обязательный</th><th>Описание</th></tr></thead><tbody><tr><td>target_id</td><td>integer</td><td>да</td><td>ID цели, вы можете найти ID в <a href="https://app.graspil.com/targets">настройках</a></td></tr><tr><td>user_id</td><td>integer</td><td>да</td><td>Telegram ID пользователя, кому принадлежит событие. Перед сохранением данных будет проверенно соответствует ли id пользователю вашего бота.</td></tr><tr><td>date</td><td>RFC 3339 (<a href="https://en.wikipedia.org/wiki/ISO_8601">ISO 860</a>)</td><td>нет</td><td>Дата и время когда произошло событие, если оставить пустым будет установленно текущее время. Формат времени должен содержать миллисекунды и часовой пояс.<br>Пример: <code>2024-08-03T20:00:00.123+02:00</code></td></tr><tr><td>value</td><td>float</td><td>нет</td><td>Общая цена (число с плавающей запятой).</td></tr><tr><td>unit</td><td>string(3)</td><td>да, если есть value</td><td>Код валюты, максимальная длинна строки 3. <em>Аналогично</em> <a href="https://core.telegram.org/bots/payments#supported-currencies"><em>валютам в TG Api</em></a><em>.</em></td></tr></tbody></table>

**Передавать можно как один объект:**

```json
{
    "target_id": 1,
    "user_id": 5842703839,
    "date": "2023-12-31T20:00:00+01:00",
    "value": 10,
    "unit": "usd"
}
```

**Так и массив объектов:**

```json
[
    {
        "target_id": 1,
        "user_id": 5842703839,
        "date": "2023-12-31T20:00:00+01:00",
        "value": 10,
        "unit": "usd"
    },
    {
        "target_id": 1,
        "user_id": 5842703839,
        "date": "2023-12-31T20:00:00+01:00",
        "value": 10,
        "unit": "usd"
    }
]
```

#### Примеры кода <a href="#e9d7bdd838" id="e9d7bdd838"></a>

{% tabs %}
{% tab title="PHP" %}

```php
$url = "https://api.graspil.com/v1/send-target";
$api_key = ""; // your API key
$data = json_encode([
    "target_id": 1,
    "user_id": 5842703839,
    "date": "2023-12-31T20:00:00+01:00",
    "value": 10,
    "unit": "usd"
]);

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Api-Key: ' . $api_key,
    'Content-Type: application/json;'
)];
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

$response = curl_exec($ch);
curl_close($ch);
```

{% endtab %}

{% tab title="Python" %}

```python
import requests
import json

url = "https://api.graspil.com/v1/send-target"
api_key = ""  # your API key

payload = json.dumps({
  "target_id": 1,
  "user_id": 5842703839,
  "date": "2023-12-31T20:00:00+01:00",
  "value": 10,
  "unit": "usd"
})

headers = {
    "Api-Key": api_key,
    "Content-Type": "application/json"
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)
```

{% endtab %}
{% endtabs %}

## Ответ

Пример успешного ответа:

```json
{
  "ok": true
}
```

## **Ошибки**

{% hint style="info" %}
При полученнии данных API проверяет только базовые параметры, остальные проверки происходят позже при обработке данных. Все возникшие ошибки вы можете найти в разделе “[ошибки бота](https://app.graspil.com/bot_errors)”
{% endhint %}

В случае возникновения ошибок при валидировании данных, ответ будет содержать информацию об ошибке

```json
{
  "ok": false,
  "error": {
      "target_id": [
          "Unknown target_id"
      ],
      "user_id": [
          "The user with this id was not found"
      ]
  }
}
```
