Skip to content
cursareDocs
Sign inGet started
Documentation
  • Overview
  • Index2
  • Organization17
  • Sales6
  • Insights8
  • Reports and safety7
  • Minor accounts8
  • Minor safety3
  • Offers11
  • Media1
  • Contents10
  • Learner delivery1
  • Learner runtime5
  • Learners12
  • Cohorts12
  • Intake forms5
  • Campaigns4
  • Teams8
  • Affiliates7
  • Links7
  • Reviews1
  • Integrations26
  • MCP2
  • Webhooks6

Reports and safety

Reports and safety operations.

7 endpoints

Report a trust-and-safety concern

POST/safety/cases

Creates a stable case for an accessible user, content, organization, payment, guardian relationship, or platform concern. Narrative is stored only in the protected case detail.

Request body

categoryenumrequired

inappropriate_contentharassment_abusefraudprivacyintellectual_propertyaccount_accesschild_adolescent_safetyguardian_relationshipother

severityenumrequired

lowmediumhighcritical

targetTypeenumrequired

usercontentorganizationpaymentguardian_relationshipplatform

narrativestring | null
organizationIdstring | null
targetIdstring | null

Responses

201Report a trust-and-safety concern.
400Validation failed or the request body is malformed.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
404The resource does not exist (or belongs to another org).
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/safety/cases \
  --request POST \
  --header 'Authorization: Bearer cr_live_…' \
  --header 'Content-Type: application/json' \
  --data '{
  "category": "inappropriate_content",
  "severity": "low",
  "targetType": "user",
  "narrative": "string",
  "organizationId": "string",
  "targetId": "string"
}'
{
  "data": {
    "id": "string"
  }
}

List visible safety cases

GET/safety/cases

Returns a bounded operator collection without reporter narrative, internal notes, evidence, or hidden restricted counts.

Query parameters

activeenum

truefalse

assignedToUserIdstring
categoryenum

inappropriate_contentharassment_abusefraudprivacyintellectual_propertyaccount_accesschild_adolescent_safetyguardian_relationshipother

cursorCreatedAtdate-time
cursorIdstring
limitinteger
organizationIdstring
querystring
sensitivityenum

standardminor_restricted

severityenum

lowmediumhighcritical

statusenum

opentriagedactionedclosedescalated

subjectKeystring
targetTypeenum

usercontentorganizationpaymentguardian_relationshipplatform

Responses

200List visible safety cases.
400Validation failed or the request body is malformed.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/safety/cases \
  --header 'Authorization: Bearer cr_live_…'
{
  "data": {
    "items": [
      {
        "assignedToUserId": "string",
        "category": "inappropriate_content",
        "closedAt": "2026-01-31T12:00:00.000Z",
        "createdAt": "2026-01-31T12:00:00.000Z",
        "id": "string",
        "organizationId": "string",
        "reporterUserId": "string",
        "sensitivity": "standard",
        "severity": "low",
        "status": "open",
        "subjectKey": "string",
        "subjectUserId": "string",
        "targetId": "string",
        "targetSnapshot": {
          "label": "string",
          "publicReference": "string",
          "secondaryLabel": "string"
        },
        "targetType": "user",
        "updatedAt": "2026-01-31T12:00:00.000Z"
      }
    ],
    "nextCursor": {
      "createdAt": "2026-01-31T12:00:00.000Z",
      "id": "string"
    }
  }
}

Get the status of a submitted report

GET/safety/cases/{id}/status

Path parameters

idstring

Safety case id returned to the reporter.

Responses

200Get the status of a submitted report.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
404The resource does not exist (or belongs to another org).
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/safety/cases/{id}/status \
  --header 'Authorization: Bearer cr_live_…'
{
  "data": {
    "category": "inappropriate_content",
    "closedAt": "2026-01-31T12:00:00.000Z",
    "createdAt": "2026-01-31T12:00:00.000Z",
    "id": "string",
    "severity": "low",
    "status": "open",
    "targetSnapshot": {
      "label": "string",
      "publicReference": "string",
      "secondaryLabel": "string"
    },
    "targetType": "user",
    "updatedAt": "2026-01-31T12:00:00.000Z"
  }
}

List report subjects

GET/safety/subjects

Groups only cases visible to the caller by their canonical user, content, organization, payment, guardian-relationship, or platform subject.

Query parameters

activeenum

truefalse

assignedToUserIdstring
categoryenum

inappropriate_contentharassment_abusefraudprivacyintellectual_propertyaccount_accesschild_adolescent_safetyguardian_relationshipother

cursorLatestActivitydate-time
cursorSubjectKeystring
limitinteger
minimumVisibleCaseCountinteger
organizationIdstring
querystring
sensitivityenum

standardminor_restricted

severityenum

lowmediumhighcritical

statusenum

opentriagedactionedclosedescalated

targetTypeenum

usercontentorganizationpaymentguardian_relationshipplatform

Responses

200List report subjects.
400Validation failed or the request body is malformed.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/safety/subjects \
  --header 'Authorization: Bearer cr_live_…'
{
  "data": {
    "items": [
      {
        "activeCaseCount": 0,
        "categories": [
          "inappropriate_content"
        ],
        "highestSeverity": "low",
        "latestActivity": "2026-01-31T12:00:00.000Z",
        "organizationId": "string",
        "subjectKey": "string",
        "targetId": "string",
        "targetSnapshot": {
          "label": "string",
          "publicReference": "string",
          "secondaryLabel": "string"
        },
        "targetType": "user",
        "visibleCaseCount": 0
      }
    ],
    "nextCursor": {
      "latestActivity": "2026-01-31T12:00:00.000Z",
      "subjectKey": "string"
    }
  }
}

List cases for one report subject

GET/safety/subjects/{subjectKey}/cases

Path parameters

subjectKeystring

Canonical subject key from the subject collection.

Query parameters

activeenum

truefalse

assignedToUserIdstring
categoryenum

inappropriate_contentharassment_abusefraudprivacyintellectual_propertyaccount_accesschild_adolescent_safetyguardian_relationshipother

cursorCreatedAtdate-time
cursorIdstring
limitinteger
organizationIdstring
querystring
sensitivityenum

standardminor_restricted

severityenum

lowmediumhighcritical

statusenum

opentriagedactionedclosedescalated

targetTypeenum

usercontentorganizationpaymentguardian_relationshipplatform

Responses

200List cases for one report subject.
400Validation failed or the request body is malformed.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
404The resource does not exist (or belongs to another org).
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/safety/subjects/{subjectKey}/cases \
  --header 'Authorization: Bearer cr_live_…'
{
  "data": {
    "items": [
      {
        "assignedToUserId": "string",
        "category": "inappropriate_content",
        "closedAt": "2026-01-31T12:00:00.000Z",
        "createdAt": "2026-01-31T12:00:00.000Z",
        "id": "string",
        "organizationId": "string",
        "reporterUserId": "string",
        "sensitivity": "standard",
        "severity": "low",
        "status": "open",
        "subjectKey": "string",
        "subjectUserId": "string",
        "targetId": "string",
        "targetSnapshot": {
          "label": "string",
          "publicReference": "string",
          "secondaryLabel": "string"
        },
        "targetType": "user",
        "updatedAt": "2026-01-31T12:00:00.000Z"
      }
    ],
    "nextCursor": {
      "createdAt": "2026-01-31T12:00:00.000Z",
      "id": "string"
    }
  }
}

Get protected safety-case detail

GET/safety/cases/{id}

Path parameters

idstring

Safety case id.

Responses

200Get protected safety-case detail.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
404The resource does not exist (or belongs to another org).
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/safety/cases/{id} \
  --header 'Authorization: Bearer cr_live_…'
{
  "data": {
    "assignedToUserId": "string",
    "authorityReference": "string",
    "category": "inappropriate_content",
    "closedAt": "2026-01-31T12:00:00.000Z",
    "createdAt": "2026-01-31T12:00:00.000Z",
    "events": [
      {
        "actorUserId": "string",
        "createdAt": "2026-01-31T12:00:00.000Z",
        "details": {},
        "id": "string",
        "type": "created"
      }
    ],
    "id": "string",
    "internalNotes": "string",
    "organizationId": "string",
    "reporterNarrative": "string",
    "reporterUserId": "string",
    "resolutionCode": "string",
    "sensitivity": "standard",
    "severity": "low",
    "status": "open",
    "subjectKey": "string",
    "subjectUserId": "string",
    "targetId": "string",
    "targetSnapshot": {
      "label": "string",
      "publicReference": "string",
      "secondaryLabel": "string"
    },
    "targetType": "user",
    "updatedAt": "2026-01-31T12:00:00.000Z"
  }
}

Triage a safety case

PATCH/safety/cases/{id}

Updates explicit operator fields and appends an immutable sanitized event for every transition.

Path parameters

idstring

Safety case id.

Request body

assignedToUserIdstring | null
authorityReferencestring | null
categoryenum

inappropriate_contentharassment_abusefraudprivacyintellectual_propertyaccount_accesschild_adolescent_safetyguardian_relationshipother

internalNotesstring | null
resolutionCodestring | null
severityenum

lowmediumhighcritical

statusenum

opentriagedactionedclosedescalated

Responses

200Triage a safety case.
400Validation failed or the request body is malformed.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
404The resource does not exist (or belongs to another org).
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/safety/cases/{id} \
  --request PATCH \
  --header 'Authorization: Bearer cr_live_…' \
  --header 'Content-Type: application/json' \
  --data '{
  "assignedToUserId": "string",
  "authorityReference": "string",
  "category": "inappropriate_content",
  "internalNotes": "string",
  "resolutionCode": "string",
  "severity": "low",
  "status": "open"
}'
{
  "data": {
    "assignedToUserId": "string",
    "authorityReference": "string",
    "category": "inappropriate_content",
    "closedAt": "2026-01-31T12:00:00.000Z",
    "createdAt": "2026-01-31T12:00:00.000Z",
    "events": [
      {
        "actorUserId": "string",
        "createdAt": "2026-01-31T12:00:00.000Z",
        "details": {},
        "id": "string",
        "type": "created"
      }
    ],
    "id": "string",
    "internalNotes": "string",
    "organizationId": "string",
    "reporterNarrative": "string",
    "reporterUserId": "string",
    "resolutionCode": "string",
    "sensitivity": "standard",
    "severity": "low",
    "status": "open",
    "subjectKey": "string",
    "subjectUserId": "string",
    "targetId": "string",
    "targetSnapshot": {
      "label": "string",
      "publicReference": "string",
      "secondaryLabel": "string"
    },
    "targetType": "user",
    "updatedAt": "2026-01-31T12:00:00.000Z"
  }
}

Your privacy choices

The technical Tag Manager container is required to apply your choices. Analytics and marketing cookies and storage remain optional and stay off until you authorize them. Privacy Policy.

Sign-in, security, core functions and consent enforcement.

Audience measurement such as Google Analytics.

Marketing storage, campaign attribution and optional tags.