Email Activity (beta)
sendgrid · Communication
The Beta endpoints for the new Email Activity APIs - functionality is subject to change without notice. You may not have access to this Beta endpoint. Email Activity offers filtering and search by event type for two days worth of data. There is an optional add-on to store 60 days worth of data. This add-on also gives you access to the ability to download a CSV of the 60 days worth of email event data. The Beta endpoints for the new Email Activity APIs - functionality is subject to change withou
Authentication
Sample Requests
**This endpoint allows you to retrieve all API Keys that belong to the authenticated user.** A successful response from this API will include all available API keys' names and IDs. For security reasons, there is not a way to retrieve the key itself after it's created. If you lose your API key, you
Hover any highlighted part to learn what it does
curl -X GET "https://api.apis.guru/v2/specs/sendgrid.com/1.0.0/api_keys?limit=10"
import requests
params = {
"limit": "10"
}
response = requests.get(
"https://api.apis.guru/v2/specs/sendgrid.com/1.0.0/api_keys",
params=params,
)
print(response.json())const url = new URL('https://api.apis.guru/v2/specs/sendgrid.com/1.0.0/api_keys');
url.searchParams.set('limit', '10');
const response = await fetch(url);
const data = await response.json();
console.log(data);package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
baseURL, _ := url.Parse("https://api.apis.guru/v2/specs/sendgrid.com/1.0.0/api_keys")
q := baseURL.Query()
q.Set("limit", "10")
baseURL.RawQuery = q.Encode()
targetURL := baseURL.String()
req, _ := http.NewRequest("GET", targetURL, nil)
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}require "net/http"
require "json"
uri = URI("https://api.apis.guru/v2/specs/sendgrid.com/1.0.0/api_keys")
uri.query = URI.encode_www_form({
"limit" => "10"
})
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"
req = Net::HTTP::Get.new(uri)
res = http.request(req)
puts JSON.parse(res.body)<?php
$url = "https://api.apis.guru/v2/specs/sendgrid.com/1.0.0/api_keys?" . http_build_query([
"limit" => "10"
]);
$opts = ["http" => [
"method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));**This endpoint allows you to retrieve a list of all of your campaigns.** Returns campaigns in reverse order they were created (newest first). Returns an empty array if no campaigns exist.
Hover any highlighted part to learn what it does
curl -X GET "https://api.apis.guru/v2/specs/sendgrid.com/1.0.0/campaigns?limit=10&offset=0"
import requests
params = {
"limit": "10",
"offset": "0"
}
response = requests.get(
"https://api.apis.guru/v2/specs/sendgrid.com/1.0.0/campaigns",
params=params,
)
print(response.json())const url = new URL('https://api.apis.guru/v2/specs/sendgrid.com/1.0.0/campaigns');
url.searchParams.set('limit', '10');
url.searchParams.set('offset', '0');
const response = await fetch(url);
const data = await response.json();
console.log(data);package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
baseURL, _ := url.Parse("https://api.apis.guru/v2/specs/sendgrid.com/1.0.0/campaigns")
q := baseURL.Query()
q.Set("limit", "10")
q.Set("offset", "0")
baseURL.RawQuery = q.Encode()
targetURL := baseURL.String()
req, _ := http.NewRequest("GET", targetURL, nil)
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}require "net/http"
require "json"
uri = URI("https://api.apis.guru/v2/specs/sendgrid.com/1.0.0/campaigns")
uri.query = URI.encode_www_form({
"limit" => "10",
"offset" => "0"
})
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"
req = Net::HTTP::Get.new(uri)
res = http.request(req)
puts JSON.parse(res.body)<?php
$url = "https://api.apis.guru/v2/specs/sendgrid.com/1.0.0/campaigns?" . http_build_query([
"limit" => "10",
"offset" => "0"
]);
$opts = ["http" => [
"method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));**This endpoint allows you to retrieve a list of all of your categories.**
Hover any highlighted part to learn what it does
curl -X GET "https://api.apis.guru/v2/specs/sendgrid.com/1.0.0/categories?limit=50&offset=0&category=example"
import requests
params = {
"limit": "50",
"offset": "0",
"category": "example"
}
response = requests.get(
"https://api.apis.guru/v2/specs/sendgrid.com/1.0.0/categories",
params=params,
)
print(response.json())const url = new URL('https://api.apis.guru/v2/specs/sendgrid.com/1.0.0/categories');
url.searchParams.set('limit', '50');
url.searchParams.set('offset', '0');
url.searchParams.set('category', 'example');
const response = await fetch(url);
const data = await response.json();
console.log(data);package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
baseURL, _ := url.Parse("https://api.apis.guru/v2/specs/sendgrid.com/1.0.0/categories")
q := baseURL.Query()
q.Set("limit", "50")
q.Set("offset", "0")
q.Set("category", "example")
baseURL.RawQuery = q.Encode()
targetURL := baseURL.String()
req, _ := http.NewRequest("GET", targetURL, nil)
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}require "net/http"
require "json"
uri = URI("https://api.apis.guru/v2/specs/sendgrid.com/1.0.0/categories")
uri.query = URI.encode_www_form({
"limit" => "50",
"offset" => "0",
"category" => "example"
})
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"
req = Net::HTTP::Get.new(uri)
res = http.request(req)
puts JSON.parse(res.body)<?php
$url = "https://api.apis.guru/v2/specs/sendgrid.com/1.0.0/categories?" . http_build_query([
"limit" => "50",
"offset" => "0",
"category" => "example"
]);
$opts = ["http" => [
"method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));Postman Setup Guide
- See official documentation for authentication and setup.
What can you build with Email Activity (beta)?
Email Activity (beta) is a Communication API. Developers commonly use communication APIs for:
- sending SMS alerts and notifications
- building in-app chat and messaging features
- automating email sequences and transactional emails
- creating voice bots and IVR systems
- verifying phone numbers at signup
No authentication required. This API is open — no signup or key needed. Ideal for quick prototypes and public-facing features. Email Activity (beta) is free to use, making it a low-risk choice to experiment with.
New to APIs? Read our beginner's guide · Learn about API keys · What is REST?