# Blocklist and DNC

> Two suppression lists on Edesy - the inbound blocklist that refuses calls from listed numbers, and the DNC list that stops campaigns calling listed numbers. Endpoints and fields.

Source: https://edesy.in/docs/voice-api/account/blocklist-and-dnc

Edesy keeps two separate lists. The **inbound blocklist** (`/v1/blocked-callers`) refuses calls *from* listed numbers to any number in your workspace, before any routing runs. The **DNC list** (`/v1/dnc`) stops your campaigns calling *to* listed numbers. Adding a number to one list does not affect the other.

| | Inbound blocklist | DNC list |
|---|---|---|
| Stops | Calls from the number to you | Your campaign calls to the number |
| Applies to | Every inbound call in the workspace | Campaign contacts and leads |
| Endpoint | `/v1/blocked-callers` | `/v1/dnc` |

## Inbound blocklist

| Method | Path | Description |
|---|---|---|
| `GET` | `/v1/blocked-callers` | List blocked callers |
| `POST` | `/v1/blocked-callers` | Block a caller |
| `DELETE` | `/v1/blocked-callers/{id}` | Unblock |

```bash
curl -X POST https://voice-api.edesy.in/v1/blocked-callers \
  -H "Authorization: Bearer $EDESY_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "phone_number": "+9198XXXXXXXX", "note": "Repeated spam calls" }'
```

| Field | Type | Required | Description |
|---|---|---|---|
| `phone_number` | string | yes | 4 to 20 characters. Numbers are normalised, so `+91 98...`, `098...` and `98...` match the same caller |
| `note` | string | no | Up to 200 characters |

Blocked calls are refused before they are answered, so there is no talk-time charge.

## DNC list

| Method | Path | Description |
|---|---|---|
| `GET` | `/v1/dnc` | List entries |
| `POST` | `/v1/dnc` | Add numbers |
| `DELETE` | `/v1/dnc/{id}` | Remove an entry |

```bash
curl -X POST https://voice-api.edesy.in/v1/dnc \
  -H "Authorization: Bearer $EDESY_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "phone_numbers": ["+9198XXXXXXXX", "+9197XXXXXXXX"], "reason": "opt_out", "source": "agent_disposition", "notes": "Asked not to be called" }'
```

| Field | Type | Description |
|---|---|---|
| `phone_numbers` | array | Numbers to add |
| `reason` | string | `opt_out`, `complaint`, `registry` or `manual` |
| `source`, `notes` | string | Your own context |

```json
{ "data": { "added": 2, "already_present": 0, "invalid": 0, "invalid_samples": [] } }
```

Entries marked `global: true` are platform-wide suppressions. You can see them but not remove them.

When contacts or leads are added to a campaign, DNC numbers are counted as `suppressed_dnc` and never dialed. See [AMD, Fallback Caller ID and DNC](https://edesy.in/docs/voice-api/campaigns/amd-fallback-caller-id-and-dnc).
