Find an API

Search public APIs with auth details & Postman guides

← All APIs

Email Activity (beta)

sendgrid · Communication

Communication No Auth Free & Open email marketing

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

No authentication requiredFree to use with no key needed.

Sample Requests

GET Retrieve all API Keys belonging to the authenticated user

**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

https://api.apis.guru/v2/specs/sendgrid.com/1.0.0/api_keys?limit=10

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));
GET Retrieve all Campaigns

**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.

https://api.apis.guru/v2/specs/sendgrid.com/1.0.0/campaigns?limit=10&offset=0

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));
GET Retrieve all categories

**This endpoint allows you to retrieve a list of all of your categories.**

https://api.apis.guru/v2/specs/sendgrid.com/1.0.0/categories?limit=50&offset=0&category=example

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

Get Postman ↗
  1. 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?

Open documentation ↗