# Blocked Handles

## List blocked handles

`client.blockedHandles.list(RequestOptionsoptions?): BlockedHandleListResponse`

**get** `/v3/blocked_handles`

Returns all handles you have blocked. Inbound messages from a blocked
handle are dropped and produce no webhooks, and direct sends to a
blocked handle are rejected with `403` (error code `2026`). Group
sends that include unblocked members are not restricted.

### Returns

- `BlockedHandleListResponse`

  - `blocked_handles: Array<BlockedHandleEntry>`

    All handles blocked by the partner, newest first

    - `blocked_at: string`

      When the handle was blocked

    - `handle: string`

      The blocked handle, normalized (E.164 phone, lowercased email, short code, or sender ID)

    - `reason?: string`

      Optional note recorded when the handle was blocked

### Example

```typescript
import LinqAPIV3 from '@linqapp/sdk';

const client = new LinqAPIV3({
  apiKey: process.env['LINQ_API_V3_API_KEY'], // This is the default and can be omitted
});

const blockedHandles = await client.blockedHandles.list();

console.log(blockedHandles.blocked_handles);
```

#### Response

```json
{
  "blocked_handles": [
    {
      "handle": "+12025551234",
      "reason": "spam",
      "blocked_at": "2026-07-30T16:42:00Z"
    }
  ]
}
```

## Block a handle

`client.blockedHandles.block(BlockedHandleBlockParamsbody, RequestOptionsoptions?): BlockedHandleBlockResponse`

**post** `/v3/blocked_handles`

Blocks a handle — an E.164 phone number, an email address (iMessage
sender), an SMS short code (e.g. `262966`), or an alphanumeric sender
ID. Inbound messages from it are dropped and produce no webhooks, and
direct sends to it are rejected with `403` (error code `2026`); group
sends that include unblocked members are not restricted. Blocking is
idempotent — re-blocking an already blocked handle returns the
existing entry.

### Parameters

- `body: BlockedHandleBlockParams`

  - `handle: string`

    The handle to block: an E.164 phone number, an email address, an
    SMS short code (3-8 digits), or an alphanumeric sender ID.

  - `reason?: string`

    Optional free-text note on why the handle was blocked

### Returns

- `BlockedHandleBlockResponse`

  - `blocked_handle: BlockedHandleEntry`

    - `blocked_at: string`

      When the handle was blocked

    - `handle: string`

      The blocked handle, normalized (E.164 phone, lowercased email, short code, or sender ID)

    - `reason?: string`

      Optional note recorded when the handle was blocked

### Example

```typescript
import LinqAPIV3 from '@linqapp/sdk';

const client = new LinqAPIV3({
  apiKey: process.env['LINQ_API_V3_API_KEY'], // This is the default and can be omitted
});

const response = await client.blockedHandles.block({ handle: '+12025551234', reason: 'spam' });

console.log(response.blocked_handle);
```

#### Response

```json
{
  "blocked_handle": {
    "handle": "+12025551234",
    "reason": "spam",
    "blocked_at": "2026-07-30T16:42:00Z"
  }
}
```

## Unblock a handle

`client.blockedHandles.unblock(BlockedHandleUnblockParamsbody, RequestOptionsoptions?): void`

**delete** `/v3/blocked_handles`

Removes a handle from your blocklist. Inbound messages from it will be
delivered again and sends to it are allowed again. The handle goes in
the request body, mirroring block — no URL encoding needed.

### Parameters

- `body: BlockedHandleUnblockParams`

  - `handle: string`

    The handle to unblock

### Example

```typescript
import LinqAPIV3 from '@linqapp/sdk';

const client = new LinqAPIV3({
  apiKey: process.env['LINQ_API_V3_API_KEY'], // This is the default and can be omitted
});

await client.blockedHandles.unblock({ handle: '+12025551234' });
```

#### Response

```json
{
  "error": {
    "status": 400,
    "code": 1002,
    "message": "Phone number must be in E.164 format",
    "doc_url": "https://docs.linqapp.com/error/codes/1xxx/1002/"
  },
  "success": false
}
```

## Domain Types

### Blocked Handle Entry

- `BlockedHandleEntry`

  - `blocked_at: string`

    When the handle was blocked

  - `handle: string`

    The blocked handle, normalized (E.164 phone, lowercased email, short code, or sender ID)

  - `reason?: string`

    Optional note recorded when the handle was blocked

### Blocked Handle List Response

- `BlockedHandleListResponse`

  - `blocked_handles: Array<BlockedHandleEntry>`

    All handles blocked by the partner, newest first

    - `blocked_at: string`

      When the handle was blocked

    - `handle: string`

      The blocked handle, normalized (E.164 phone, lowercased email, short code, or sender ID)

    - `reason?: string`

      Optional note recorded when the handle was blocked

### Blocked Handle Block Response

- `BlockedHandleBlockResponse`

  - `blocked_handle: BlockedHandleEntry`

    - `blocked_at: string`

      When the handle was blocked

    - `handle: string`

      The blocked handle, normalized (E.164 phone, lowercased email, short code, or sender ID)

    - `reason?: string`

      Optional note recorded when the handle was blocked
