# Set a take-profit / stop-loss alert on a position

`POST https://api.getchord.xyz/v1/lp/watch/mark`

Source: https://getchord.xyz/docs/api-reference/operations/lpwatchmark/

A mark on one open position: when its PnL (percent of the dollars that went in, live value and fees included) crosses the take-profit or the stop-loss, one alert goes to the wallet's inbox and linked Telegram chats with a link to the position, and the mark is removed. It is an alert, not an order: nothing is signed or closed for the wallet. Both values null removes the mark. The wallet is watched from then on; positions are checked every two minutes. A mark with `unit: "native"` waits (it never falls back to dollars) while the chain has no figures in its coin.

## Request body (JSON)

| Field | Required | Type | Description |
| --- | --- | --- | --- |
| `chain` | yes | `5042` · `4663` · `143` |  |
| `wallet` | yes | string | EVM address, hex, case-insensitive. |
| `manager` | yes | string | EVM address, hex, case-insensitive. |
| `tokenId` | yes | string | The position's id on its manager, decimal. |
| `tpPct` | no | number,null | Above 0, at most 10000. |
| `slPct` | no | number,null | Between -100 and 0. |
| `unit` | no | `usd` · `native` | `native` = count the percent in the chain's own coin: what went in and what the position is worth now, both in ETH / MON (`native` of `GET /lp/position`). The coin moving against the dollar then crosses nothing. Default `usd`. |

```json
{
  "chain": 4663,
  "wallet": "0xb145400da27a2497d9fc2cd5621f2bfd37617af4",
  "manager": "0x58daec3116aae6d93017baaea7749052e8a04fa7",
  "tokenId": "2990642",
  "tpPct": 20,
  "slPct": -15
}
```

## Response 200

- **400**: Invalid parameters — `error` names the check that failed (`INVALID_PARAMS`, `BAD_ADDRESS`, `BAD_LIMIT`, `BAD_HOURS`, …).
