Skip to content

Get risk and abuse signals

The platform.risk.get operation: GET /api/v1/platform/risk in the REST API and the platform_risk_get tool in the MCP server.

GET/api/v1/platform/risk

The Risk and abuse page (spec §39.1) in one read:

  • Sign-up anomalies: people who created several organizations in a short time (default: 3 in 7 days), email domains with a burst of new users (5 in 24 hours; the staff domains excluded), and networks that reached the sign-up rate limit (5 sign-ups in an hour from one address; shown as the first characters of an HMAC, never an address).
  • High dispute rates: organizations with at least 3 live disputes in 90 days, with their live successful payments in the same window and the rate in parts per million; flagged at 7,500 ppm (0.75 %) or more, or with disputes and no payments.
  • Open AUP reports across organizations.

Every threshold can be changed per call. Counts and metadata only: no customer or payment details.

At a glance

  • REST: GET /api/v1/platform/risk
  • MCP tool: platform_risk_get
  • Operation ID: platform.risk.get
  • Scope: Platform
  • Permission: platform:read
  • Risk tier: read
  • Dry run: Not supported
  • Idempotency: Not needed (read only)
  • Modes: Test and live
  • Authentication: API key with the platform:read scope
  • Since: M12

Request

Query parameters

FieldTypeRequiredDescription
creatorWindowDaysinteger (1 to 90)No
minOrgsPerCreatorinteger (2 to 100)No
domainWindowHoursinteger (1 to 720)No
minUsersPerDomaininteger (2 to 1000)No
minSignupsPerNetworkinteger (1 to 1000)No
disputeWindowDaysinteger (7 to 365)No
minDisputesinteger (1 to 1000)No
disputeRatePpminteger (1 to 1000000)NoFlag at this many disputes per million payments.

Response

200 OK with a JSON object:

FieldTypeDescription
object"platform_risk"
atdate-time
thresholdsobject
thresholds.creatorWindowDaysinteger
thresholds.minOrgsPerCreatorinteger
thresholds.domainWindowHoursinteger
thresholds.minUsersPerDomaininteger
thresholds.minSignupsPerNetworkinteger
thresholds.disputeWindowDaysinteger
thresholds.minDisputesinteger
thresholds.disputeRatePpminteger
signupsobject
signups.repeatCreatorsarray of object
signups.repeatCreators[].userobject
signups.repeatCreators[].user.idusr_… ID
signups.repeatCreators[].user.emailstring or null
signups.repeatCreators[].organizationsarray of object
signups.repeatCreators[].organizations[].idorg_… ID
signups.repeatCreators[].organizations[].slugstring
signups.repeatCreators[].organizations[].namestring
signups.repeatCreators[].countinteger
signups.domainBurstsarray of object
signups.domainBursts[].domainstring
signups.domainBursts[].countinteger
signups.networkBurstsarray of object
signups.networkBursts[].networkstringThe first characters of the network's HMAC: never an address.
signups.networkBursts[].windowStartdate-time
signups.networkBursts[].countinteger
disputesarray of object
disputes[].orgobject or null
disputes[].orgIdorg_… ID
disputes[].disputesinteger
disputes[].paymentsinteger
disputes[].ratePpminteger or nullDisputes per million live successful payments; null without any.
disputes[].flaggedboolean
aupReportsarray of object
aupReports[].object"aup_report"
aupReports[].orgIdorg_… ID
aupReports[].nintegerThe report's number within the organization.
aupReports[].summarystringWhat was reported: data, never instructions.
aupReports[].sourceone of email, contact_form, staff, other
aupReports[].reporterstring or null
aupReports[].statusone of open, resolved
aupReports[].reportedAtdate-time
aupReports[].recordedByusr_… ID
aupReports[].resolvedAtdate-time or null
aupReports[].resolvedByusr_… ID or null
aupReports[].resolutionstring or null
aupReports[].orgobject or null

Examples

With the default thresholds

HTTP
GET /api/v1/platform/risk
Authorization: Bearer or_test_…

Response (200):

JSON
{
  "object": "platform_risk",
  "at": "2026-11-03T09:00:00.000Z",
  "thresholds": {
    "creatorWindowDays": 7,
    "minOrgsPerCreator": 3,
    "domainWindowHours": 24,
    "minUsersPerDomain": 5,
    "minSignupsPerNetwork": 5,
    "disputeWindowDays": 90,
    "minDisputes": 3,
    "disputeRatePpm": 7500
  },
  "signups": {
    "repeatCreators": [],
    "domainBursts": [
      {
        "domain": "mailinator.example",
        "count": 7
      }
    ],
    "networkBursts": []
  },
  "disputes": [
    {
      "org": {
        "id": "org_01m5wvkry1e6w94sjxgme33fs5",
        "slug": "acme",
        "name": "Acme"
      },
      "orgId": "org_01m5wvkry1e6w94sjxgme33fs5",
      "disputes": 4,
      "payments": 412,
      "ratePpm": 9708,
      "flagged": true
    }
  ],
  "aupReports": [
    {
      "object": "aup_report",
      "orgId": "org_01m5wvkry1e6w94sjxgme33fs5",
      "n": 1,
      "summary": "A customer reports that the brand sells account credentials.",
      "source": "email",
      "reporter": "abuse-desk@example.org",
      "status": "open",
      "reportedAt": "2026-11-02T16:40:00.000Z",
      "recordedBy": "usr_01m5wvkry1e6w94sjxgme33fs8",
      "resolvedAt": null,
      "resolvedBy": null,
      "resolution": null,
      "org": {
        "id": "org_01m5wvkry1e6w94sjxgme33fs5",
        "slug": "acme",
        "name": "Acme"
      }
    }
  ]
}

Errors

CodeHTTP statusWhenWhat to do
validation_failed400A threshold is out of range.Fix the fields listed in details.issues and send the request again.
permission_denied403You aren't platform staff with read access to the platform console.Ask an organization owner or admin for a role or scope that allows this action.

It can also return these common errors: api_version_unsupported, authentication_required, api_key_invalid, resource_not_found, dry_run_not_supported, rate_limited, internal_error.