---
title: "Retrieve a suppression"
method: GET
path: "/email_blocks/{id}"
tags: ["Email Suppressions"]
---

# Retrieve a suppression

`GET /email_blocks/{id}`

## Request

- Base URL: `https://api.telnyx.com/v2`
- URL: `https://api.telnyx.com/v2/email_blocks/{id}`
- Auth: HTTP bearer

Returns the account-owned suppression identified by ID. Cross-account lookups and malformed IDs return `404` without exposing another account’s data.

## Response `200`

The suppression.

- EmailBlockResponse
  - `data` EmailBlock, required: Suppression record. Schema fields hidden by the view: `account_id`, `bounce_category`, `dsn_code`, `meta`.
    - `id` string, uuid, required
    - `record_type` 'email_block', required: View-only discriminator.
    - `domain_id` string, uuid, nullable: `null` ⇒ account scope. Stored on the row; exposed here.
    - `group_id` string, uuid, nullable: `null` ⇒ global; set ⇒ group-scoped opt-out.
    - `from` string, nullable: `null` ⇒ not address-scope. (schema: from_address)
    - `to` string, required: Normalized recipient. (schema: to_address)
    - `reason` 'hard_bounce' | 'spam_complaint' | 'unsubscribe' | 'invalid' | 'manual_block', required
    - `source` 'feedback' | 'manual' | 'import' | 'system', required
    - `scope` 'account' | 'domain' | 'address', required: Derived server-side from `domain_id`/`from`; never trusted from the caller.
    - `status` 'active' | 'expired' | 'removed', required
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
    - `expires_at` string, date-time, nullable: Optional expiration time. An active row stops matching send-time suppression checks as soon as `expires_at <= now()`. A maintenance worker later transitions the row to `status: expired` and appends an `expired` audit event (normally within 15 minutes).

## Other responses

- `401`: Missing or invalid gateway auth.
- `404`: Resource not found (cross-account lookups and malformed UUIDs also return 404 — no leak).
- `406`: Framework-rendered error (e.g. 406 Not Acceptable, 405 Method Not Allowed, 415 Unsupported Media Type). HTTP status matches the error and the body `code` carries that same status (e.g. `"406"`, not a hardcoded `"500"`). The explicit `500.json` clause still emits `code: "500"` for genuine 500s.

## Changes

- **2026-10-15** `a72569d69430`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/team-telnyx/apis/telnyx-api/changes/email_blocks/:id/get.md)

---

[API](https://skmtc.dev/team-telnyx/apis/telnyx-api.md) - [All operations](https://skmtc.dev/team-telnyx/apis/telnyx-api/llms.txt) - [OpenAPI document](https://skmtc.dev/team-telnyx/apis/telnyx-api/revisions/0f17b8167873?raw)
