Proofpoint API (1.0.1)

Download OpenAPI specification:Download

Overview

The information and data accessible via this API contain Proofpoint proprietary, confidential, and/or trade secret information. Sharing or providing the information to another party without Proofpoint's express written consent is prohibited. Please review the updated Terms of Use for Proofpoint APIs. API Terms of Use can be found online at API Terms of Use | Proofpoint US.

Proofpoint provides advanced detection through its Intelligent Cloud Email Security (ICES) products to protect organizations from inbound threats and outbound data loss.

The Proofpoint API provides customers access to Proofpoint security event data and can be used to integrate into your SOC Workflows and other auditing and monitoring measures.

We offer RESTful API endpoints that return JSON objects containing the requested data.

Proofpoint API: User Guide

The API enables you to ingest Proofpoint data into your own tools or datastores, where you can visualize and interact with the data.

The most common use cases for which data is consumed outside the Proofpoint Portal include:

  • Triage of security events across your SOC workflow applications
  • Correlation of important Proofpoint event data with other sources, such as device monitoring, password resets etc.
  • Integration of Proofpoint events into internal security dashboards, SIEM/SOAR tooling for effective reporting and alerting
  • Automation of security/compliance-wide statistics and presentations to track your team's success

The most common use case is to call the API on a recurring basis (e.g. once per hour or day) to retrieve all new or updated data, and send that data to your desired data tool.

The hostname of the API endpoint will be the same as for the URL of your Proofpoint Portal page:

  • For our EU environment, that is https://your-subdomain.tessian-platform.com/...
  • For our US environment, that is https://your-subdomain.tessian-app.com/...

The documentation for each endpoint provides an example code snippet showing how to call it, alongside the schemas for the request and response.

Authentication & API Permissions

Generating an API Token

In order to authenticate and authorize the API request, you must provide a valid API Token.

ℹ️ Note

In order to generate an API Token, the user creating it must be assigned to a role with both "Integrations" and "Security Events" permissions.

A Proofpoint Portal user who has the correct permissions can generate an API Token by navigating to Integrations > Security Integrations > Proofpoint API in the Proofpoint Portal.

⚠️ Warning

The API Token will only ever be shown once; at the time it is generated.

Data Security Best Practice

  • Never share your API Token with other people. When generating an API Token, we always recommend creating a separate Token for each use case. This way you can terminate access to specific Tokens at any point without disrupting your existing integrations.
  • For permanent integrations, we recommend injecting your API Token into your code via an environment variable. This way, visibility of your Token is limited to applications running within this environment.
  • We recommend that you regularly review any Tokens in use and delete any of unknown use. You can see on the Proofpoint Portal when a Token was last used to call the Proofpoint API. This is on the same page where you can generate and delete tokens: Integrations > Security Integrations > Proofpoint API.
  • API Token creation and deletion are audited in the Proofpoint Portal's Audit Trail.

Permissions & Lifecycle

An API Token always has the same permissions as the user who created it. Changes to permissions of the the owning user are automatically reflected in the Token's permissions.

If the owning user is deleted, the API Token's access will be revoked automatically. Similarly, if an API Token is deleted from the Proofpoint API Portal page (Integrations > Security Integrations > Proofpoint API), it will no longer be valid and any subsequent API requests will be rejected.

If you prefer, you can create a separate Proofpoint Portal user as a "service" account for access to the API, rather than representing a human. This can then be used as an API-only account, e.g. for Managed Service Providers to access the Proofpoint API. As with any user account, the Tokens created while using that account will allow access to the API until the Token is deleted, the relevant endpoint permissions are revoked from the user's role, or the user is deleted.

Endpoint Permissions

Below are the required Portal Permissions for the given API endpoints:

Endpoint(s) Permission
Security Events Security Events
User Groups Groups
User Monitoring User Monitoring
Audit Trail Audit Trail
Remediation Action Quarantined Emails
All other endpoints Security Events

Calling the API

Calling the API with a Token

On each request, you must send a valid API Token in the Authorization HTTP header, in the format Authorization: API-Token <your-api-token> (where <your-api-token> is the token that you generated via the steps outlined above).

Example: Raw HTTP

GET /api/v1/endpoint HTTP/1.1
Host: you.tessian-platform.com
Authorization: API-Token <your-api-token>

Example: cURL

curl -H "Authorization: API-Token $YOUR_API_TOKEN" https://you.tessian-platform.com/api/v1/endpoint

Example: Python

import requests

response = requests.get(
  "https://you.tessian-platform.com/api/v1/endpoint",
  headers={"Authorization": f"API-Token {api_token}"},
)

Paginated Endpoints

For any endpoint that returns paginated results, you will need to supply a checkpoint to fetch more than the first page of results.

  • Paginated endpoints always return a boolean flag that indicates whether there are further pages of results.
    • This is under the additional_results key of the root object.
  • Paginated endpoints always return a checkpoint that can be used to retrieve the next page of results.
    • This is under the checkpoint key of the root object.
  • The first time a paginated endpoint is called, no checkpoint should be supplied. This will return the first page of results.
  • Any subsequent calls must include the last supplied checkpoint as the after_checkpoint URL parameter.
  • Once additional_results is false, there are no more results to fetch.

Example

ℹ️ Note

A robust implementation will require error handling and backoff logic in the case of rate limiting.

url = "https://you.tessian-platform.com/api/v1/endpoint"
headers = {"Authorization": f"API-Token {api_token}"}

results = []

# First request
response = requests.get(url, headers=headers).json()
results.extend(response["results"])
checkpoint = response["checkpoint"]
additional_results = response["additional_results"]

# Subsequent requests, if necessary
while additional_results:
    response = requests.get(url, headers=headers, params={"after_checkpoint": checkpoint}).json()
    # The above is broadly equivalent to appending "?after_checkpoint=checkpoint_value" to the URL
    results.extend(response["results"])
    checkpoint = response["checkpoint"]
    additional_results = response["additional_results"]

Date & Response Format

Timestamps

The timestamp (date & time) of the email follows the ISO 8601 format as Coordinated Universal Time (UTC), using (optional) microsecond precision and a zero-offset: YYYY-MM-DDTHH:MM:SSZ or YYYY-MM-DDTHH:MM:SS.mmmmmmZ. Note that this format uses 24 hour time.

Timestamp Example: 2022-09-07T23:34:28Z.

  • For inbound emails, the timestamp describes the actual time that the email was sent.
  • For outbound emails, the timestamp describes the time that the user (sender) attempted to send the email.

Return Values

All responses include a JSON object containing the requested data. The structure of the each return type is documented in our OpenAPI Specification. This file documents all requests that can be made to the various endpoints, as well as the expected return types.

Return types for specific requests are documented alongside the requests themselves throughout the endpoints section of this document.

General Guidance

Data Mutability

Data returned by the Proofpoint API is not immutable. Various external factors may cause changes, for example user and admin interactions with Security Events, or extra details being added by Proofpoint's algorithms as more information is available.

Consequently, some datapoints may be returned by the API multiple times as new information is added to them.

If a datapoint returned in a previous API call was updated with new information, the updated datapoint will be returned when calling the API using the most recent checkpoint.

When consuming Proofpoint API data, you should deduplicate returned data based on the id field, keeping only the latest returned version.

ℹ️ Tip

In Splunk, deduplication can be performed using the dedup command.

Old versions of updated datapoints will never be returned from the API, even if you reuse an old checkpoint (or use no checkpoint). At any given point in time, only the most recent version of any datapoint will be returned.

Pagination Limits

For paginated endpoints, you may receive fewer than limit items back (or even zero items), while still receiving additional_results equal to true. Do not rely on counting the number of rows returned in order to determine whether to call the API again; instead, always look at additional_results. Conversely, there may be times when additional_results is true, but then you make a subsequent call and receive back zero rows (and additional_results is false).

Rate Limits

Rate limiting is enforced for the Proofpoint API API. If you receive HTTP status code 429 "Too Many Requests", give the API a break and try again in a few seconds. You may inspect the response headers for details; these broadly follow this draft RFC. Exact rate limits are subject to change.

Future Changes

We reserve the right to make unannounced non-breaking changes to existing endpoints, such as:

  • adding new optional request parameters
  • adding additional attributes to responses
  • adding new values to enum types

Any breaking changes will be communicated in advance. This may include (but is not limited to):

  • changing required request parameters
  • modifying response types in a backwards-incompatible manner
  • deprecating and/or removing old endpoints

Support & Questions

If you have any questions at any time we are here to support you. Please contact Proofpoint at: tessian-support@proofpoint.com.

Security Events

Endpoints in this section provide granular access to security events across Proofpoint products.

Security Events

This endpoint provides security events from Defender, Guardian, and Architect. Events returned are those produced by purchased Proofpoint modules only.

query Parameters
created_after
string <date-time>

Only include events that were created after this time. You should use either this parameter, or the after_checkpoint parameter, but not both at once.

If this parameter is provided, but no events are returned, the checkpoint will behave as if no checkpoint was provided at all - i.e. the next request that uses the checkpoint will return all events from the first event that exists on the Proofpoint platform.

In this case, no events are currently available and you should make your call again later with created_after to retrieve events created after your specified date.

limit
integer [ 2 .. 100 ]
Default: 100

The maximum number of events to return.

after_checkpoint
string

If provided, this parameter must be set to the checkpoint returned by a previous request to this endpoint. When provided, events from the previous request will not be included in the response from this request. If the new checkpoint returned by this request is used in yet another call to this endpoint events from both previous requests will not be included in the response (and so on). By making a number of consecutive requests to this endpoint where the checkpoint from the previous request is provided, clients can get all events from the Proofpoint platform, even when there are many more than can be returned in a single request. This process is often referred to as pagination.

If an event is updated, it will no longer be excluded from subsequent requests.

Responses

Request samples

import requests

subdomain = "YOUR_SUBDOMAIN"
api_token = "YOUR_TOKEN"

url = f"https://{subdomain}.tessian-platform.com/api/v1/events"

response = requests.get(
    url,
    headers={"Authorization": f"API-Token {api_token}"},
)

print(response.json())

Response samples

Content type
application/json
{
  • "checkpoint": "string",
  • "additional_results": true,
  • "results": [
    ]
}

User Groups

Groups are named collections of email addresses; their members may be specified either by specific address, or by a wildcard including all addresses in an entire domain. You can retrieve information about the Groups Proofpoint, create, modify or delete them.

Get Groups

Fetch a list of all groups.

query Parameters
after_checkpoint
string

Use with the output of the 'checkpoint' field to iteratively retrieve all groups where the total exceeds the query limit.

limit
integer <int32> [ 1 .. 1000 ]
Default: 1000
Example: limit=100

The maximum number of groups to return per page.

Responses

Request samples

import requests

subdomain = "YOUR_SUBDOMAIN"
api_token = "YOUR_TOKEN"

url = f"https://{subdomain}.tessian-platform.com/api/v1/groups"

response = requests.get(
    url,
    headers={"Authorization": f"API-Token {api_token}"},
)

print(response.json())

Response samples

Content type
application/json
{
  • "checkpoint": "string",
  • "additional_results": true,
  • "groups": [
    ]
}

Create Group

Creates a group with the supplied name.

Request Body schema: application/json
name
required
string

The name of the group to be created.

Responses

Request samples

Content type
application/json
{
  • "name": "string"
}

Response samples

Content type
application/json
{
  • "id": 0
}

Read Group

Get information about a group.

path Parameters
id
required
integer
Example: 42

The ID of the group to query.

query Parameters
after_checkpoint
string

Use with the output of the 'checkpoint' field to iteratively retrieve all members of the group where the total exceeds the query limit.

limit
integer <int32> [ 1 .. 1000 ]
Default: 1000
Example: limit=100

The maximum number of group members to return per page.

Responses

Request samples

import requests

subdomain = "YOUR_SUBDOMAIN"
api_token = "YOUR_TOKEN"

group_id = "73"

url = f"https://{subdomain}.tessian-platform.com/api/v1/groups/{group_id}"

response = requests.get(
    url,
    headers={"Authorization": f"API-Token {api_token}"},
)

print(response.json())

Response samples

Content type
application/json
{
  • "checkpoint": "string",
  • "additional_results": true,
  • "results": {
    }
}

Update a group.

Updates the group with the supplied information.

path Parameters
id
required
integer
Example: 42

The ID of the group to update.

Request Body schema: application/json
name
required
string

Responses

Request samples

Content type
application/json
{
  • "name": "string"
}

Delete a group.

Delete a group. Caveat — all deletions are final; a deleted group cannot be recovered.

path Parameters
id
required
integer
Example: 42

The ID of the group to delete.

Responses

Request samples

import requests

subdomain = "YOUR_SUBDOMAIN"
api_token = "YOUR_TOKEN"

group_id = "73"

url = f"https://{subdomain}.tessian-platform.com/api/v1/groups/{group_id}"

response = requests.delete(
    url,
    headers={"Authorization": f"API-Token {api_token}"},
)

print(response.json())

Add group members

Incremental update: the members listed in the request are added to the group's current members.

path Parameters
id
required
integer
Example: 42

The ID of the group to add members to.

Request Body schema: application/json
Array of AddressMember (object) or DomainMember (object) (GroupMembers) [ 1 .. 100 ] items

Input members data for adding/removing members from group, expects one of address or domain

Responses

Request samples

Content type
application/json
{
  • "members": [
    ]
}

Remove group members

Incremental update: the members listed in the request are removed from the group's current members.

path Parameters
id
required
integer
Example: 42

The ID of the group to remove members from.

Request Body schema: application/json
Array of AddressMember (object) or DomainMember (object) (GroupMembers) [ 1 .. 100 ] items

Input members data for adding/removing members from group, expects one of address or domain

Responses

Request samples

Content type
application/json
{
  • "members": [
    ]
}

User Monitoring

Endpoints in this section provide ways to monitor user deployment health and information. You will be able to monitor deployment statuses, and various aspects of Proofpoint's coverage within your organization.

Users

Provides the same information that is available on the User Monitoring page.

query Parameters
after_checkpoint
string

Use with the output of the 'checkpoint' field to iteratively retrieve all users from the API where the total exceeds the maximum query limit.

limit
integer <int32> [ 1 .. 2000 ]
Example: limit=100

The maximum number of users to return.

Responses

Request samples

import requests

subdomain = "YOUR_SUBDOMAIN"
api_token = "YOUR_TOKEN"

url = f"https://{subdomain}.tessian-platform.com/api/v1/monitoring/users"

response = requests.get(
    url,
    headers={"Authorization": f"API-Token {api_token}"},
)

print(response.json())

Response samples

Content type
application/json
{
  • "checkpoint": "string",
  • "additional_results": true,
  • "results": [
    ]
}

Email Exfiltration Anomalies

Endpoints in this section detail anomalous user activity that has been detected by the system, where anomalous activity is defined as users sending unusual numbers of sensitive emails to unauthorized addresses compared to their normal behaviour.

Email Exfiltration Anomalies

This endpoint provides the same information that is available on the Anomalous Activity page.

As a result of our anomaly detection algorithms, the 'after_checkpoint' value works slightly differently in this endpoint as it would in others. We identify anomalous trends that may span multiple days, and the 'after_checkpoint' value allows us to focus on the events identified at a specific point in time (all anomalies identified on a specific day). If you would like the most recent anomalous events that we have identified, simply query the endpoint without an 'after_checkpoint' value.

For example, if you queried the endpoint on the 20th of December without an 'after_checkpoint' value and used the 'checkpoint' value from that response in subsequent requests, you would not receive any anomalies identified after the 20th of December. This holds true even if you use the updated 'checkpoint' values provided in subsequent responses. With the way we identify anomalous events spanning multiple days, this value represents the anomalies identified at a specific point in time (20th Dec, in this case), and will not reflect any anomalies that were identified after that point.

query Parameters
after_checkpoint
string

Return only anomalies that were created after this one on the same day that this value was provided. Use with the output of the 'checkpoint' field to iteratively retrieve all anomalies from the API where the total exceeds the maximum query limit.

This field is intended to be used for the pagination of results identified on a single day, not as a placeholder for events as they are continuously identitfied. Note that, due to the way we identify anomalous events, using this value in your request will only return anomalous events that occured on the day that you received the initial 'checkpoint' value.

If you're using this value in your requests, you should discard it once you receive a false value for your 'has_more' field as you will never receive any events using the 'after_checkpoint' thereafter.

limit
integer <int32> [ 1 .. 1000 ]
Example: limit=100

The maximum number of anomalies to return.

Responses

Request samples

import requests

subdomain = "YOUR_SUBDOMAIN"
api_token = "YOUR_TOKEN"

url = f"https://{subdomain}.tessian-platform.com/reporting/anomalies/v1"

response = requests.get(
    url,
    headers={"Authorization": f"API-Token {api_token}"},
)

print(response.json())

Response samples

Content type
application/json
{
  • "status": 0,
  • "has_more": true,
  • "data": [
    ]
}

Remediation

Endpoints in this section allow you to remediate security events.

Release Email from Quarantine

This endpoint allows emails to be released from quarantine using the event ID. Currently, this endpoint only supports Defend events. It will return a status update specifying whether the endpoint has successfully queued emails for deletion. To confirm that the action has been successfully executed, we recommend that you wait for the updated event to come through to the events API.

Request Body schema: application/json
event_id
required
string

The ID of the event to be released from quarantine.

Responses

Request samples

Content type
application/json
{
  • "event_id": "string"
}

Response samples

Content type
application/json
{
  • "number_of_actions_attempted": 0,
  • "number_of_actions_succeeded": 0,
  • "results": [
    ]
}

Delete Email from Quarantine

This endpoint allows emails to be deleted from quarantine using the event ID. Currently, this endpoint only supports Defend events. It will return a status update specifying whether the endpoint has successfully queued emails for deletion. To confirm that the action has been successfully executed, we recommend that you wait for the updated event to come through to the events API.

Request Body schema: application/json
event_id
required
string

The ID of the event to be deleted from quarantine.

Responses

Request samples

Content type
application/json
{
  • "event_id": "string"
}

Response samples

Content type
application/json
{
  • "number_of_actions_attempted": 0,
  • "number_of_actions_succeeded": 0,
  • "results": [
    ]
}

Delete Email From Inbox

This endpoint allows emails to be deleted from user inboxes using the event ID. Currently, this endpoint only supports Defend events. It will return a status update specifying whether the endpoint has successfully queued emails for deletion. To confirm that the action has been successfully executed, we recommend that you wait for the updated event to come through to the events API.

Request Body schema: application/json
event_id
required
string

The ID of the event to be deleted from user inboxes.

Responses

Request samples

Content type
application/json
{
  • "event_id": "string"
}

Response samples

Content type
application/json
{
  • "number_of_actions_attempted": 0,
  • "number_of_actions_succeeded": 0,
  • "results": [
    ]
}

Audit Trail

These endpoints provide access to audit information of usage and changes made to your Proofpoint products and settings.

Audit Logs

This endpoint provides the same information that is available on the Audit Trail page.

query Parameters
after_checkpoint
string

Return only audit entries that were created after the checkpoint. Use with the output of the 'checkpoint' field to iteratively retrieve all audit entries from the API where the total exceeds the maximum query limit.

limit
integer <int32> [ 1 .. 1000 ]
Default: 1000
Example: limit=100

The maximum number of audit entries to return per page.

Responses

Request samples

import requests

subdomain = "YOUR_SUBDOMAIN"
api_token = "YOUR_TOKEN"

url = f"https://{subdomain}.tessian-platform.com/api/v1/audits"

response = requests.get(
    url,
    headers={"Authorization": f"API-Token {api_token}"},
)

print(response.json())

Response samples

Content type
application/json
{
  • "checkpoint": "string",
  • "additional_results": true,
  • "results": [
    ]
}

Risk Hub

Endpoints in this section provide aggregated risk drivers, which are the underlying components for the Proofpoint combined Risk Score.

Company Risks

⚠️ In line with our notification about Risk Hub end-of-life, the Company Risks endpoint will stop serving new data from 30th June 2025 and will be removed in due course.

This endpoint provides the same information that is available on the Human Layer Risk Hub page.

query Parameters
after_checkpoint
string

Use with the output of the 'checkpoint' field to iteratively retrieve all users from the API where the total exceeds the maximum query limit.

limit
integer <int32> [ 1 .. 1000 ]
Default: 1000
Example: limit=7

The maximum number of days of risk data to return.

Responses

Request samples

import requests

subdomain = "YOUR_SUBDOMAIN"
api_token = "YOUR_TOKEN"

url = f"https://{subdomain}.tessian-platform.com/api/v1/risk/company"

response = requests.get(
    url,
    headers={"Authorization": f"API-Token {api_token}"},
)

print(response.json())

Response samples

Content type
application/json
{
  • "checkpoint": "string",
  • "additional_results": true,
  • "results": [
    ]
}