Appearance
Retrieve a topic
Fetch one topic by its id.
http
GET /v1/topics/{id}Requires a Full access API key.
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | The topic id. This is the id, not the key. |
Example
bash
curl "https://api.sendgrail.com/v1/topics/$TOPIC_ID" \
-H "Authorization: Bearer $SENDGRAIL_API_KEY"js
const res = await fetch(`https://api.sendgrail.com/v1/topics/${id}`, {
headers: { Authorization: `Bearer ${process.env.SENDGRAIL_API_KEY}` },
});
const topic = await res.json();Response
json
{
"object": "topic",
"id": "7b2e6f90-3c11-4a5d-9b8e-1f0c4d6a2e59",
"key": "product-updates",
"name": "Product updates",
"description": "New features and improvements, about once a month",
"default_subscription": "opt_out",
"visibility": "public",
"created_at": "2026-07-14T19:44:32+00:00"
}The topic object describes the category, not who is on it. A contact's subscription state lives on the contact — read it with GET /v1/contacts/{id}/topics. See Contact topics.
A topic belonging to another team answers 404, not 403 — an id that isn't yours is an id that doesn't exist, as far as your key is concerned.
json
{
"message": "No topic with the id 7b2e6f90-3c11-4a5d-9b8e-1f0c4d6a2e59.",
"code": "not_found",
"request_id": "8f2c1e64-1b17-4f8c-9f0e-3b6c1e0f5c31"
}A Sending-access key is a different failure: it is a real key, it just isn't allowed here, so it answers 403. See Errors.