SafeWeb
Partner API

List partner customers

GET
/api/v1/integrations/partner/customers

Query Parameters

page?integer

Page number (1-based)

Range1 <= value
Default1
pageSize?integer

Number of customers per page (max 100)

Range1 <= value <= 100
Default20
status?string

Filter customers by lifecycle status

Value in

  • "active"
  • "inactive"
  • "dormant"
  • "prospect"

Header Parameters

SW-PARTNER-ID*string

Partner organization identifier

SW-API-KEY*string

API authentication key

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/api/v1/integrations/partner/customers" \  -H "SW-PARTNER-ID: string" \  -H "SW-API-KEY: string"
{  "success": true,  "customers": [    {      "customerId": "550e8400-e29b-41d4-a716-446655440000",      "customerRef": "CUST-001",      "customerStatus": "active",      "breachStatus": true,      "breachCount": 3,      "domains": [        "example.com",        "example.net"      ],      "emails": [        "user@example.com"      ]    },    {      "customerId": "660e8400-e29b-41d4-a716-446655440001",      "customerRef": "CUST-002",      "customerStatus": "prospect",      "breachStatus": false,      "breachCount": 0,      "domains": [],      "emails": []    }  ],  "pagination": {    "totalCount": 42,    "page": 1,    "pageSize": 20,    "hasNextPage": true  }}

When to use this endpoint

Use this endpoint to enumerate and reconcile your customer portfolio without calling per-customer endpoints. Each record includes:

  • The customer UUID and your customer reference
  • Lifecycle status (active, prospect, inactive, or dormant)
  • Breach summary (breachStatus and breachCount)
  • Monitored domains and asset emails

For full customer profile details, use Get customer info. For breach records or threat scoring, use the dedicated customer endpoints.

Requires SW-PARTNER-ID and SW-API-KEY. Distributors may use a distributor API key on behalf of a partner. See Partner API authentication.

Customer statuses

StatusMeaning
activeLive customer with full monitoring
prospectPre-onboard customer; see Prospecting
inactiveOffboarded customer
dormantPaused customer that has not been deactivated

Filter results with the optional status query parameter.

Breach fields

FieldMeaning
breachCountTotal breach instances across monitored emails, including resolved breaches
breachStatustrue when breachCount > 0, otherwise false

Asset fields

FieldMeaning
domainsMonitored domains configured for the customer
emailsMonitored asset email addresses (discovered_customer_emails), not the contact email from onboarding

Empty asset lists are returned as [].

Pagination

ParameterDefaultDescription
page11-based page number
pageSize20Customers per page (max 100)

Use pagination.hasNextPage to determine whether another page is available. pagination.totalCount reflects the full result set for the current filter, not just the current page.

Worked example

# List active customers, page 1
curl -sS "https://connect.safeweb.co/api/v1/integrations/partner/customers?status=active" \
  -H "SW-PARTNER-ID: your-partner-id" \
  -H "SW-API-KEY: your-api-key" | jq .

# Next page when hasNextPage is true
curl -sS "https://connect.safeweb.co/api/v1/integrations/partner/customers?status=active&page=2&pageSize=50" \
  -H "SW-PARTNER-ID: your-partner-id" \
  -H "SW-API-KEY: your-api-key" | jq .

Example success response:

{
  "success": true,
  "customers": [
    {
      "customerId": "550e8400-e29b-41d4-a716-446655440000",
      "customerRef": "CUST-001",
      "customerStatus": "active",
      "breachStatus": true,
      "breachCount": 3,
      "domains": ["example.com", "example.net"],
      "emails": ["user@example.com"]
    },
    {
      "customerId": "660e8400-e29b-41d4-a716-446655440001",
      "customerRef": "CUST-002",
      "customerStatus": "prospect",
      "breachStatus": false,
      "breachCount": 0,
      "domains": [],
      "emails": []
    }
  ],
  "pagination": {
    "totalCount": 42,
    "page": 1,
    "pageSize": 20,
    "hasNextPage": true
  }
}