Get Email
Retrieve detailed delivery status for a specific email, including per-recipient tracking.
Endpoint
GET /email/:id
Path Parameters
| Parameter | Type | Description |
|---|---|---|
id | string | The email ID returned from POST /email/send |
Response
{
"id": "01957e3a-4b5c-7d8e-9f0a-1b2c3d4e5f6a",
"from": "noreply@yourdomain.com",
"from_name": "My App",
"to": [
{
"email": "user@example.com",
"status": "delivered",
"timestamp": "2026-03-08T12:00:05.000Z"
}
],
"cc": [
{
"email": "manager@example.com",
"status": "delivered",
"timestamp": "2026-03-08T12:00:05.000Z"
}
],
"bcc": [
{
"email": "archive@example.com",
"status": "bounced",
"timestamp": "2026-03-08T12:00:03.000Z"
}
],
"subject": "Welcome to our platform",
"html": "<h1>Welcome!</h1><p>Thanks for signing up.</p>",
"text": null,
"reply_to": null,
"category": "welcome",
"attachments": [
{
"filename": "guide.pdf",
"size": 204800,
"content_type": "application/pdf"
}
],
"created_at": "2026-03-08T12:00:00.000Z"
}
The to, cc, and bcc arrays each list their respective recipients with the
latest delivery status per address. status reflects the most recent tracking
event for that recipient and defaults to sent until the first event arrives.
note
Open and click tracking is message-level for multi-recipient emails — an open or
click cannot be attributed to a specific cc/bcc recipient.
Recipient Status Values
| Status | Description |
|---|---|
sent | Accepted by the mail provider, delivery pending |
delivered | Confirmed delivered to the recipient's inbox |
opened | Recipient opened the email |
clicked | Recipient clicked a link in the email |
bounced | Delivery failed (address doesn't exist or mailbox full) |
complained | Recipient reported the email as spam |
rejected | The mail provider rejected the message |
unsubscribed | Recipient unsubscribed via the email's unsubscribe link |
render_failure | The email template failed to render |
Examples
- cURL
- JavaScript
- Python
- C#
- PHP
curl "https://api.arsel.sa/v1/email/01957e3a-4b5c-7d8e-9f0a-1b2c3d4e5f6a" \
-H "Authorization: Bearer be_your_api_key"
const emailId = "01957e3a-4b5c-7d8e-9f0a-1b2c3d4e5f6a";
const response = await fetch(`https://api.arsel.sa/v1/email/${emailId}`, {
headers: { Authorization: "Bearer be_your_api_key" },
});
const email = await response.json();
for (const recipient of email.to) {
console.log(`${recipient.email}: ${recipient.status}`);
}
import requests
email_id = "01957e3a-4b5c-7d8e-9f0a-1b2c3d4e5f6a"
response = requests.get(
f"https://api.arsel.sa/v1/email/{email_id}",
headers={"Authorization": "Bearer be_your_api_key"},
)
email = response.json()
for recipient in email["to"]:
print(f"{recipient['email']}: {recipient['status']}")
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer be_your_api_key");
var emailId = "01957e3a-4b5c-7d8e-9f0a-1b2c3d4e5f6a";
var response = await client.GetAsync($"https://api.arsel.sa/v1/email/{emailId}");
var json = await response.Content.ReadAsStringAsync();
Console.WriteLine(json);
<?php
$emailId = "01957e3a-4b5c-7d8e-9f0a-1b2c3d4e5f6a";
$ch = curl_init("https://api.arsel.sa/v1/email/{$emailId}");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer be_your_api_key"
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$email = json_decode($response, true);
foreach ($email["to"] as $recipient) {
echo "{$recipient['email']}: {$recipient['status']}\n";
}
curl_close($ch);
Error Responses
- 404 Not Found
{
"status_code": 404,
"name": "not_found",
"message": "Email not found"
}