# Subscribe to signal

`POST https://api.cryptohopper.com/v1/hopper/{id}/signal/{signal_id}`

Part of [Signals](https://www.cryptohopper.com/api-documentation/api-reference/signals.md) in the Cryptohopper API reference.

Subscribes the hopper to a signaller. For a paid signaller without an active subscription, an invoice is created and the signals start once it is paid.

OAuth scope: `read`, `manage`

The body is optional. With free_only set to true, a paid signaller you have no active subscription for is refused with status 402 instead of creating an invoice. A hopper with copy trading enabled can only subscribe to signallers linked to your own signaller account. Not available for arbitrage, market maker, copy trading, grid and AI bots.

## Headers

| Name | Type | Required | Description |
|---|---|---|---|
| `access-token` | string | yes | The OAuth access token of the user. |

## Path parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `signal_id` | string | yes | Signaller ID. |
| `id` | string | yes | Hopper ID. |

## Example request

```bash
curl -X POST "https://api.cryptohopper.com/v1/hopper/HOPPER_ID/signal/SIGNAL_ID" \
  -H "access-token: YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"free_only":true}'
```

## Response

Example response (illustrative values):

```json
{
    "data": "Hopper is now subscribed to the signals of Example Signals."
}
```

Status codes: 200. Errors return JSON with `status`, `error` and `message`, plus a numeric `code` when the error comes from the API itself rather than the gateway.
