# Get signal by id

`GET 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.

Returns one signaller with its last 10 signals and, when the hopper is subscribed to it, the hopper's subscription config.

OAuth scope: `read`

Works for any active signaller, also one the hopper is not subscribed to; config is then null. In last_10_signals, name holds the exchange of the signal and signal_time is a Unix timestamp. rating and total_votes are always null on this endpoint.

## 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 "https://api.cryptohopper.com/v1/hopper/HOPPER_ID/signal/SIGNAL_ID" \
  -H "access-token: YOUR_ACCESS_TOKEN"
```

## Response

Example response (illustrative values):

```json
{
    "data": {
        "last_10_signals": [
            {
                "name": "binance",
                "collect_currency": "USDT",
                "signal_time": "1758794400",
                "signal_type": "buy",
                "coin": "BTC"
            }
        ],
        "signal_id": "1234",
        "plan_id": "0",
        "name": "Example Signals",
        "description": "Spot signals for the major USDT markets.",
        "logo": "https://cdn.example.com/signallers/logo_1234.png",
        "type": "signal",
        "feature_image": "https://cdn.example.com/signallers/feature_1234.png",
        "subscription_fee_currency": "USD",
        "subscription_fee": "19.99",
        "exchanges": "binance,kucoin",
        "performance_pct": "12.40",
        "rating": null,
        "total_votes": null,
        "link": "https://www.cryptohopper.com/signaller?signaller_id=1234",
        "config": null
    }
}
```

| Field | Type | Description |
|---|---|---|
| `search_opts` | array of object |  |
| &nbsp;&nbsp;`date_from` | string |  |
| &nbsp;&nbsp;`date_to` | string |  |
| &nbsp;&nbsp;`entry_type` | string | One of: error, info. |
| &nbsp;&nbsp;`sort_field` | string | One of: entry_date, entry_type. |
| &nbsp;&nbsp;`sort_order` | string | One of: asc, desc. |
| &nbsp;&nbsp;`page` | integer |  |
| &nbsp;&nbsp;`perPage` | integer |  |

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.
