Skip to content
StatusSupportDashboard

Create event (Beta)

POST/v1/events

Beta. Send a backend event after a meaningful product action happens in your system. Use events for durable server-side context such as account creation, account updates, user-to-user contact, content uploads, user reports, appeals, and moderation decisions. Do not send browser pageviews, button clicks, or other client-only telemetry through this endpoint.

Body ParametersJSONExpand Collapse
body: object { event_name, target_user_id, timestamp, 8 more } or object { content, event_name, timestamp, 7 more } or object { content, event_name, product, 8 more } or 6 more

Backend event or ordered batch of events to send to SafetyKit. Send events from your server after an action has happened in your product. Do not send these events directly from a browser or mobile client.

One of the following:
UserContactEventRequest object { event_name, target_user_id, timestamp, 8 more }

A user contacts, transacts with, or otherwise interacts with another user.

event_name: string

Stable, low-cardinality product action name. Use snake_case and put dynamic values in typed fields, content, resources_used, or metadata.

target_user_id: string

Your stable canonical identifier for the other user in a user-to-user interaction.

minLength1
timestamp: string

The time the event occurred in your system, as an ISO 8601 datetime string.

formatdate-time
type: "user_contact"
user_id: string

Your stable canonical identifier for the user or account.

minLength1
client_info: optional object { ip }

Client context observed by your backend for the user action that triggered the event.

ip: optional string

IP address observed by your backend for the client that triggered the event.

minLength1
content: optional array of object { text, type, key } or object { source, type, key }

User-authored or user-uploaded content parts. Use this for message bodies, bios, listing text, image URLs, and similar content SafetyKit should compare or analyze.

One of the following:
EventTextContent object { text, type, key }

User-authored text content associated with an event.

text: string

User-authored text SafetyKit should compare or analyze.

type: "text"

Text content part.

key: optional string

Stable field key for this content part.

EventImageContent object { source, type, key }

User-uploaded image content associated with an event.

source: object { type, url }

Image source information.

type: "url"

URL image source.

url: string

URL of the image SafetyKit should compare or analyze.

formaturi
type: "image"

Image content part.

key: optional string

Stable field key for this content part.

content_id: optional string

Your stable identifier for the content involved in this event, such as a message, listing, page, post, profile, or uploaded media item.

minLength1
maxLength512
idempotency_key: optional string

Optional caller-provided key used to make retries of this individual event idempotent. Reuse the same key only for retries of the same logical event.

minLength1
maxLength255
metadata: optional map[string or number or boolean or array of string or number or boolean]

Non-PII product context for filtering, segmentation, and debugging. Values may be strings, numbers, booleans, or arrays of those scalar values.

One of the following:
string
number
boolean
array of string or number or boolean
One of the following:
string
number
boolean
resources_used: optional array of object { namespace, type, value } or object { type, value }

Reusable resources observed during the event. Use this for emails, phone numbers, names, addresses, social handles, URLs, payment identifiers, caller-defined ids, or similar identifiers.

One of the following:
EntityIDResource object { namespace, type, value }

Caller-defined stable entity identifier resource. This is equivalent to an id resource value of urlEncode(namespace) + ’/’ + urlEncode(value).

namespace: string

Caller-defined namespace for the identifier. SafetyKit stores this with value as urlEncode(namespace) + ’/’ + urlEncode(value).

minLength1
type: "id"

Caller-defined entity identifier resource.

value: string

Identifier value within namespace. SafetyKit stores a normalized hash of the encoded namespace/value pair, not the raw value.

minLength1
object { type, value }

Real-world or account resource used during the event, such as an email, phone number, address, URL, social handle, or payment identifier.

type: string

Resource family, such as email, phone, name, address, url, social handles, payment identifiers, or another stable snake_case identifier. Use the entity ID resource shape when the value belongs to a caller-defined namespace.

value: string

Resource value used during the event. SafetyKit stores a normalized hash of this value, not the raw value. When type is url, this must be a valid URL.

minLength1
ContentUploadedEventRequest object { content, event_name, timestamp, 7 more }

A user posts, uploads, publishes, edits, or replaces content.

content: array of object { text, type, key } or object { source, type, key }

User-authored or user-uploaded content parts. Use this for message bodies, bios, listing text, image URLs, and similar content SafetyKit should compare or analyze.

One of the following:
EventTextContent object { text, type, key }

User-authored text content associated with an event.

text: string

User-authored text SafetyKit should compare or analyze.

type: "text"

Text content part.

key: optional string

Stable field key for this content part.

EventImageContent object { source, type, key }

User-uploaded image content associated with an event.

source: object { type, url }

Image source information.

type: "url"

URL image source.

url: string

URL of the image SafetyKit should compare or analyze.

formaturi
type: "image"

Image content part.

key: optional string

Stable field key for this content part.

event_name: string

Stable, low-cardinality product action name. Use snake_case and put dynamic values in typed fields, content, resources_used, or metadata.

timestamp: string

The time the event occurred in your system, as an ISO 8601 datetime string.

formatdate-time
type: "content_uploaded"
user_id: string

Your stable canonical identifier for the user or account.

minLength1
client_info: optional object { ip }

Client context observed by your backend for the user action that triggered the event.

ip: optional string

IP address observed by your backend for the client that triggered the event.

minLength1
content_id: optional string

Your stable identifier for the content involved in this event, such as a message, listing, page, post, profile, or uploaded media item.

minLength1
maxLength512
idempotency_key: optional string

Optional caller-provided key used to make retries of this individual event idempotent. Reuse the same key only for retries of the same logical event.

minLength1
maxLength255
metadata: optional map[string or number or boolean or array of string or number or boolean]

Non-PII product context for filtering, segmentation, and debugging. Values may be strings, numbers, booleans, or arrays of those scalar values.

One of the following:
string
number
boolean
array of string or number or boolean
One of the following:
string
number
boolean
resources_used: optional array of object { namespace, type, value } or object { type, value }

Reusable resources observed during the event. Use this for emails, phone numbers, names, addresses, social handles, URLs, payment identifiers, caller-defined ids, or similar identifiers.

One of the following:
EntityIDResource object { namespace, type, value }

Caller-defined stable entity identifier resource. This is equivalent to an id resource value of urlEncode(namespace) + ’/’ + urlEncode(value).

namespace: string

Caller-defined namespace for the identifier. SafetyKit stores this with value as urlEncode(namespace) + ’/’ + urlEncode(value).

minLength1
type: "id"

Caller-defined entity identifier resource.

value: string

Identifier value within namespace. SafetyKit stores a normalized hash of the encoded namespace/value pair, not the raw value.

minLength1
object { type, value }

Real-world or account resource used during the event, such as an email, phone number, address, URL, social handle, or payment identifier.

type: string

Resource family, such as email, phone, name, address, url, social handles, payment identifiers, or another stable snake_case identifier. Use the entity ID resource shape when the value belongs to a caller-defined namespace.

value: string

Resource value used during the event. SafetyKit stores a normalized hash of this value, not the raw value. When type is url, this must be a valid URL.

minLength1
ProductChangedEventRequest object { content, event_name, product, 8 more }

A product listing is created, updated, or has a discount added.

content: array of object { text, type, key } or object { source, type, key }

User-authored or user-uploaded content parts. Use this for message bodies, bios, listing text, image URLs, and similar content SafetyKit should compare or analyze.

One of the following:
EventTextContent object { text, type, key }

User-authored text content associated with an event.

text: string

User-authored text SafetyKit should compare or analyze.

type: "text"

Text content part.

key: optional string

Stable field key for this content part.

EventImageContent object { source, type, key }

User-uploaded image content associated with an event.

source: object { type, url }

Image source information.

type: "url"

URL image source.

url: string

URL of the image SafetyKit should compare or analyze.

formaturi
type: "image"

Image content part.

key: optional string

Stable field key for this content part.

event_name: "product_created" or "product_updated"

Product action that triggered this event.

One of the following:
"product_created"
"product_updated"
product: object { price, discounted_price, shipping_info }

Commerce details for the product involved in this event.

price: object { amount, currency }

Current listed price of the product.

amount: string

Price amount as a decimal string.

minLength1
currency: string

ISO 4217 currency code.

minLength1
discounted_price: optional object { amount, currency }

Discounted price of the product, when a discount applies.

amount: string

Price amount as a decimal string.

minLength1
currency: string

ISO 4217 currency code.

minLength1
shipping_info: optional object { ships_from, ships_to }

Shipping details for the product.

ships_from: string

Location the product ships from.

minLength1
ships_to: array of string

Locations the product ships to.

timestamp: string

The time the event occurred in your system, as an ISO 8601 datetime string.

formatdate-time
type: "product_changed"
user_id: string

Your stable canonical identifier for the user or account.

minLength1
client_info: optional object { ip }

Client context observed by your backend for the user action that triggered the event.

ip: optional string

IP address observed by your backend for the client that triggered the event.

minLength1
content_id: optional string

Your stable identifier for the content involved in this event, such as a message, listing, page, post, profile, or uploaded media item.

minLength1
maxLength512
idempotency_key: optional string

Optional caller-provided key used to make retries of this individual event idempotent. Reuse the same key only for retries of the same logical event.

minLength1
maxLength255
metadata: optional map[string or number or boolean or array of string or number or boolean]

Non-PII product context for filtering, segmentation, and debugging. Values may be strings, numbers, booleans, or arrays of those scalar values.

One of the following:
string
number
boolean
array of string or number or boolean
One of the following:
string
number
boolean
resources_used: optional array of object { namespace, type, value } or object { type, value }

Reusable resources observed during the event. Use this for emails, phone numbers, names, addresses, social handles, URLs, payment identifiers, caller-defined ids, or similar identifiers.

One of the following:
EntityIDResource object { namespace, type, value }

Caller-defined stable entity identifier resource. This is equivalent to an id resource value of urlEncode(namespace) + ’/’ + urlEncode(value).

namespace: string

Caller-defined namespace for the identifier. SafetyKit stores this with value as urlEncode(namespace) + ’/’ + urlEncode(value).

minLength1
type: "id"

Caller-defined entity identifier resource.

value: string

Identifier value within namespace. SafetyKit stores a normalized hash of the encoded namespace/value pair, not the raw value.

minLength1
object { type, value }

Real-world or account resource used during the event, such as an email, phone number, address, URL, social handle, or payment identifier.

type: string

Resource family, such as email, phone, name, address, url, social handles, payment identifiers, or another stable snake_case identifier. Use the entity ID resource shape when the value belongs to a caller-defined namespace.

value: string

Resource value used during the event. SafetyKit stores a normalized hash of this value, not the raw value. When type is url, this must be a valid URL.

minLength1
CreateAccountEventRequest object { event_name, timestamp, type, 7 more }

A user or account is created.

event_name: string

Stable, low-cardinality product action name. Use snake_case and put dynamic values in typed fields, content, resources_used, or metadata.

timestamp: string

The time the event occurred in your system, as an ISO 8601 datetime string.

formatdate-time
type: "create_account"
user_id: string

Your stable canonical identifier for the user or account.

minLength1
client_info: optional object { ip }

Client context observed by your backend for the user action that triggered the event.

ip: optional string

IP address observed by your backend for the client that triggered the event.

minLength1
content: optional array of object { text, type, key } or object { source, type, key }

User-authored or user-uploaded content parts. Use this for message bodies, bios, listing text, image URLs, and similar content SafetyKit should compare or analyze.

One of the following:
EventTextContent object { text, type, key }

User-authored text content associated with an event.

text: string

User-authored text SafetyKit should compare or analyze.

type: "text"

Text content part.

key: optional string

Stable field key for this content part.

EventImageContent object { source, type, key }

User-uploaded image content associated with an event.

source: object { type, url }

Image source information.

type: "url"

URL image source.

url: string

URL of the image SafetyKit should compare or analyze.

formaturi
type: "image"

Image content part.

key: optional string

Stable field key for this content part.

content_id: optional string

Your stable identifier for the content involved in this event, such as a message, listing, page, post, profile, or uploaded media item.

minLength1
maxLength512
idempotency_key: optional string

Optional caller-provided key used to make retries of this individual event idempotent. Reuse the same key only for retries of the same logical event.

minLength1
maxLength255
metadata: optional map[string or number or boolean or array of string or number or boolean]

Non-PII product context for filtering, segmentation, and debugging. Values may be strings, numbers, booleans, or arrays of those scalar values.

One of the following:
string
number
boolean
array of string or number or boolean
One of the following:
string
number
boolean
resources_used: optional array of object { namespace, type, value } or object { type, value }

Reusable resources observed during the event. Use this for emails, phone numbers, names, addresses, social handles, URLs, payment identifiers, caller-defined ids, or similar identifiers.

One of the following:
EntityIDResource object { namespace, type, value }

Caller-defined stable entity identifier resource. This is equivalent to an id resource value of urlEncode(namespace) + ’/’ + urlEncode(value).

namespace: string

Caller-defined namespace for the identifier. SafetyKit stores this with value as urlEncode(namespace) + ’/’ + urlEncode(value).

minLength1
type: "id"

Caller-defined entity identifier resource.

value: string

Identifier value within namespace. SafetyKit stores a normalized hash of the encoded namespace/value pair, not the raw value.

minLength1
object { type, value }

Real-world or account resource used during the event, such as an email, phone number, address, URL, social handle, or payment identifier.

type: string

Resource family, such as email, phone, name, address, url, social handles, payment identifiers, or another stable snake_case identifier. Use the entity ID resource shape when the value belongs to a caller-defined namespace.

value: string

Resource value used during the event. SafetyKit stores a normalized hash of this value, not the raw value. When type is url, this must be a valid URL.

minLength1
UpdateAccountEventRequest object { event_name, timestamp, type, 7 more }

A user or account profile, contact detail, payment detail, or public bio changes.

event_name: string

Stable, low-cardinality product action name. Use snake_case and put dynamic values in typed fields, content, resources_used, or metadata.

timestamp: string

The time the event occurred in your system, as an ISO 8601 datetime string.

formatdate-time
type: "update_account"
user_id: string

Your stable canonical identifier for the user or account.

minLength1
client_info: optional object { ip }

Client context observed by your backend for the user action that triggered the event.

ip: optional string

IP address observed by your backend for the client that triggered the event.

minLength1
content: optional array of object { text, type, key } or object { source, type, key }

User-authored or user-uploaded content parts. Use this for message bodies, bios, listing text, image URLs, and similar content SafetyKit should compare or analyze.

One of the following:
EventTextContent object { text, type, key }

User-authored text content associated with an event.

text: string

User-authored text SafetyKit should compare or analyze.

type: "text"

Text content part.

key: optional string

Stable field key for this content part.

EventImageContent object { source, type, key }

User-uploaded image content associated with an event.

source: object { type, url }

Image source information.

type: "url"

URL image source.

url: string

URL of the image SafetyKit should compare or analyze.

formaturi
type: "image"

Image content part.

key: optional string

Stable field key for this content part.

content_id: optional string

Your stable identifier for the content involved in this event, such as a message, listing, page, post, profile, or uploaded media item.

minLength1
maxLength512
idempotency_key: optional string

Optional caller-provided key used to make retries of this individual event idempotent. Reuse the same key only for retries of the same logical event.

minLength1
maxLength255
metadata: optional map[string or number or boolean or array of string or number or boolean]

Non-PII product context for filtering, segmentation, and debugging. Values may be strings, numbers, booleans, or arrays of those scalar values.

One of the following:
string
number
boolean
array of string or number or boolean
One of the following:
string
number
boolean
resources_used: optional array of object { namespace, type, value } or object { type, value }

Reusable resources observed during the event. Use this for emails, phone numbers, names, addresses, social handles, URLs, payment identifiers, caller-defined ids, or similar identifiers.

One of the following:
EntityIDResource object { namespace, type, value }

Caller-defined stable entity identifier resource. This is equivalent to an id resource value of urlEncode(namespace) + ’/’ + urlEncode(value).

namespace: string

Caller-defined namespace for the identifier. SafetyKit stores this with value as urlEncode(namespace) + ’/’ + urlEncode(value).

minLength1
type: "id"

Caller-defined entity identifier resource.

value: string

Identifier value within namespace. SafetyKit stores a normalized hash of the encoded namespace/value pair, not the raw value.

minLength1
object { type, value }

Real-world or account resource used during the event, such as an email, phone number, address, URL, social handle, or payment identifier.

type: string

Resource family, such as email, phone, name, address, url, social handles, payment identifiers, or another stable snake_case identifier. Use the entity ID resource shape when the value belongs to a caller-defined namespace.

value: string

Resource value used during the event. SafetyKit stores a normalized hash of this value, not the raw value. When type is url, this must be a valid URL.

minLength1
UserReportEventRequest object { event_name, labels, timestamp, 10 more }

A user-submitted report. Use user_id for the reporter. Include target_user_id when a user is reported, target_content_id when content is reported, and both when the report is about content associated with a user. Use content and content_id for the report itself.

event_name: string

Stable, low-cardinality product action name. Use snake_case and put dynamic values in typed fields, content, resources_used, or metadata.

labels: array of string

One or more label categories supplied with the report or moderation decision.

timestamp: string

The time the event occurred in your system, as an ISO 8601 datetime string.

formatdate-time
type: "user_report"
user_id: string

Your stable canonical identifier for the user or account.

minLength1
client_info: optional object { ip }

Client context observed by your backend for the user action that triggered the event.

ip: optional string

IP address observed by your backend for the client that triggered the event.

minLength1
content: optional array of object { text, type, key } or object { source, type, key }

User-authored or user-uploaded content parts. Use this for message bodies, bios, listing text, image URLs, and similar content SafetyKit should compare or analyze.

One of the following:
EventTextContent object { text, type, key }

User-authored text content associated with an event.

text: string

User-authored text SafetyKit should compare or analyze.

type: "text"

Text content part.

key: optional string

Stable field key for this content part.

EventImageContent object { source, type, key }

User-uploaded image content associated with an event.

source: object { type, url }

Image source information.

type: "url"

URL image source.

url: string

URL of the image SafetyKit should compare or analyze.

formaturi
type: "image"

Image content part.

key: optional string

Stable field key for this content part.

content_id: optional string

Your stable identifier for the content involved in this event, such as a message, listing, page, post, profile, or uploaded media item.

minLength1
maxLength512
idempotency_key: optional string

Optional caller-provided key used to make retries of this individual event idempotent. Reuse the same key only for retries of the same logical event.

minLength1
maxLength255
metadata: optional map[string or number or boolean or array of string or number or boolean]

Non-PII product context for filtering, segmentation, and debugging. Values may be strings, numbers, booleans, or arrays of those scalar values.

One of the following:
string
number
boolean
array of string or number or boolean
One of the following:
string
number
boolean
resources_used: optional array of object { namespace, type, value } or object { type, value }

Reusable resources observed during the event. Use this for emails, phone numbers, names, addresses, social handles, URLs, payment identifiers, caller-defined ids, or similar identifiers.

One of the following:
EntityIDResource object { namespace, type, value }

Caller-defined stable entity identifier resource. This is equivalent to an id resource value of urlEncode(namespace) + ’/’ + urlEncode(value).

namespace: string

Caller-defined namespace for the identifier. SafetyKit stores this with value as urlEncode(namespace) + ’/’ + urlEncode(value).

minLength1
type: "id"

Caller-defined entity identifier resource.

value: string

Identifier value within namespace. SafetyKit stores a normalized hash of the encoded namespace/value pair, not the raw value.

minLength1
object { type, value }

Real-world or account resource used during the event, such as an email, phone number, address, URL, social handle, or payment identifier.

type: string

Resource family, such as email, phone, name, address, url, social handles, payment identifiers, or another stable snake_case identifier. Use the entity ID resource shape when the value belongs to a caller-defined namespace.

value: string

Resource value used during the event. SafetyKit stores a normalized hash of this value, not the raw value. When type is url, this must be a valid URL.

minLength1
target_content_id: optional string

Your stable identifier for the content being reported.

minLength1
maxLength512
target_user_id: optional string

Your stable canonical identifier for the user being reported.

minLength1
maxLength512
AppealEventRequest object { event_name, timestamp, type, 8 more }

A user appeals a moderation action taken against them. Use user_id for the appealing user, appealed_decision_id to reference the decision being appealed, and content and content_id for the appeal itself.

event_name: string

Stable, low-cardinality product action name. Use snake_case and put dynamic values in typed fields, content, resources_used, or metadata.

timestamp: string

The time the event occurred in your system, as an ISO 8601 datetime string.

formatdate-time
type: "appeal"
user_id: string

Your stable canonical identifier for the user or account.

minLength1
appealed_decision_id: optional string

Your stable identifier for the moderation decision or enforcement action being appealed, such as the content_id of a moderation_decision event you previously sent.

minLength1
maxLength512
client_info: optional object { ip }

Client context observed by your backend for the user action that triggered the event.

ip: optional string

IP address observed by your backend for the client that triggered the event.

minLength1
content: optional array of object { text, type, key } or object { source, type, key }

User-authored or user-uploaded content parts. Use this for message bodies, bios, listing text, image URLs, and similar content SafetyKit should compare or analyze.

One of the following:
EventTextContent object { text, type, key }

User-authored text content associated with an event.

text: string

User-authored text SafetyKit should compare or analyze.

type: "text"

Text content part.

key: optional string

Stable field key for this content part.

EventImageContent object { source, type, key }

User-uploaded image content associated with an event.

source: object { type, url }

Image source information.

type: "url"

URL image source.

url: string

URL of the image SafetyKit should compare or analyze.

formaturi
type: "image"

Image content part.

key: optional string

Stable field key for this content part.

content_id: optional string

Your stable identifier for the content involved in this event, such as a message, listing, page, post, profile, or uploaded media item.

minLength1
maxLength512
idempotency_key: optional string

Optional caller-provided key used to make retries of this individual event idempotent. Reuse the same key only for retries of the same logical event.

minLength1
maxLength255
metadata: optional map[string or number or boolean or array of string or number or boolean]

Non-PII product context for filtering, segmentation, and debugging. Values may be strings, numbers, booleans, or arrays of those scalar values.

One of the following:
string
number
boolean
array of string or number or boolean
One of the following:
string
number
boolean
resources_used: optional array of object { namespace, type, value } or object { type, value }

Reusable resources observed during the event. Use this for emails, phone numbers, names, addresses, social handles, URLs, payment identifiers, caller-defined ids, or similar identifiers.

One of the following:
EntityIDResource object { namespace, type, value }

Caller-defined stable entity identifier resource. This is equivalent to an id resource value of urlEncode(namespace) + ’/’ + urlEncode(value).

namespace: string

Caller-defined namespace for the identifier. SafetyKit stores this with value as urlEncode(namespace) + ’/’ + urlEncode(value).

minLength1
type: "id"

Caller-defined entity identifier resource.

value: string

Identifier value within namespace. SafetyKit stores a normalized hash of the encoded namespace/value pair, not the raw value.

minLength1
object { type, value }

Real-world or account resource used during the event, such as an email, phone number, address, URL, social handle, or payment identifier.

type: string

Resource family, such as email, phone, name, address, url, social handles, payment identifiers, or another stable snake_case identifier. Use the entity ID resource shape when the value belongs to a caller-defined namespace.

value: string

Resource value used during the event. SafetyKit stores a normalized hash of this value, not the raw value. When type is url, this must be a valid URL.

minLength1
ModerationDecisionEventRequest object { event_name, labels, source_id, 11 more }

A moderation label or decision from an automated enforcement system or manual review workflow. Do not send user_id; use source_type and source_id for attribution.

event_name: string

Stable, low-cardinality product action name. Use snake_case and put dynamic values in typed fields, content, resources_used, or metadata.

labels: array of string

One or more label categories supplied with the report or moderation decision.

source_id: string

Stable identifier within source_type. Examples: moderator@example.com or 550e8400-e29b-41d4-a716-446655440000 for expert_labeler or human_moderator, automated_review_v2026_06_04 for automation, or <vendor_name>-v2.1 for vendor.

minLength1
maxLength512
source_type: "human_moderator" or "expert_labeler" or "automation" or "vendor"

Coarse attribution category for the moderation decision source. Supported values: human_moderator (a human reviewer in your moderation workflow), expert_labeler (an expert human labeler or specialist reviewer), automation (an automated model, rules engine, or enforcement workflow), or vendor (an external review or moderation provider).

One of the following:
"human_moderator"
"expert_labeler"
"automation"
"vendor"
timestamp: string

The time the event occurred in your system, as an ISO 8601 datetime string.

formatdate-time
type: "moderation_decision"
client_info: optional object { ip }

Client context observed by your backend for the user action that triggered the event.

ip: optional string

IP address observed by your backend for the client that triggered the event.

minLength1
content: optional array of object { text, type, key } or object { source, type, key }

User-authored or user-uploaded content parts. Use this for message bodies, bios, listing text, image URLs, and similar content SafetyKit should compare or analyze.

One of the following:
EventTextContent object { text, type, key }

User-authored text content associated with an event.

text: string

User-authored text SafetyKit should compare or analyze.

type: "text"

Text content part.

key: optional string

Stable field key for this content part.

EventImageContent object { source, type, key }

User-uploaded image content associated with an event.

source: object { type, url }

Image source information.

type: "url"

URL image source.

url: string

URL of the image SafetyKit should compare or analyze.

formaturi
type: "image"

Image content part.

key: optional string

Stable field key for this content part.

content_id: optional string

Your stable identifier for the content involved in this event, such as a message, listing, page, post, profile, or uploaded media item.

minLength1
maxLength512
idempotency_key: optional string

Optional caller-provided key used to make retries of this individual event idempotent. Reuse the same key only for retries of the same logical event.

minLength1
maxLength255
metadata: optional map[string or number or boolean or array of string or number or boolean]

Non-PII product context for filtering, segmentation, and debugging. Values may be strings, numbers, booleans, or arrays of those scalar values.

One of the following:
string
number
boolean
array of string or number or boolean
One of the following:
string
number
boolean
resources_used: optional array of object { namespace, type, value } or object { type, value }

Reusable resources observed during the event. Use this for emails, phone numbers, names, addresses, social handles, URLs, payment identifiers, caller-defined ids, or similar identifiers.

One of the following:
EntityIDResource object { namespace, type, value }

Caller-defined stable entity identifier resource. This is equivalent to an id resource value of urlEncode(namespace) + ’/’ + urlEncode(value).

namespace: string

Caller-defined namespace for the identifier. SafetyKit stores this with value as urlEncode(namespace) + ’/’ + urlEncode(value).

minLength1
type: "id"

Caller-defined entity identifier resource.

value: string

Identifier value within namespace. SafetyKit stores a normalized hash of the encoded namespace/value pair, not the raw value.

minLength1
object { type, value }

Real-world or account resource used during the event, such as an email, phone number, address, URL, social handle, or payment identifier.

type: string

Resource family, such as email, phone, name, address, url, social handles, payment identifiers, or another stable snake_case identifier. Use the entity ID resource shape when the value belongs to a caller-defined namespace.

value: string

Resource value used during the event. SafetyKit stores a normalized hash of this value, not the raw value. When type is url, this must be a valid URL.

minLength1
target_content_id: optional string

Your stable identifier for the content being reported.

minLength1
maxLength512
target_user_id: optional string

Your stable canonical identifier for the user being reported.

minLength1
maxLength512
array of object { event_name, target_user_id, timestamp, 8 more } or object { content, event_name, timestamp, 7 more } or object { content, event_name, product, 8 more } or 5 more
One of the following:
UserContact object { event_name, target_user_id, timestamp, 8 more }

A user contacts, transacts with, or otherwise interacts with another user.

event_name: string

Stable, low-cardinality product action name. Use snake_case and put dynamic values in typed fields, content, resources_used, or metadata.

target_user_id: string

Your stable canonical identifier for the other user in a user-to-user interaction.

minLength1
timestamp: string

The time the event occurred in your system, as an ISO 8601 datetime string.

formatdate-time
type: "user_contact"
user_id: string

Your stable canonical identifier for the user or account.

minLength1
client_info: optional object { ip }

Client context observed by your backend for the user action that triggered the event.

ip: optional string

IP address observed by your backend for the client that triggered the event.

minLength1
content: optional array of object { text, type, key } or object { source, type, key }

User-authored or user-uploaded content parts. Use this for message bodies, bios, listing text, image URLs, and similar content SafetyKit should compare or analyze.

One of the following:
EventTextContent object { text, type, key }

User-authored text content associated with an event.

text: string

User-authored text SafetyKit should compare or analyze.

type: "text"

Text content part.

key: optional string

Stable field key for this content part.

EventImageContent object { source, type, key }

User-uploaded image content associated with an event.

source: object { type, url }

Image source information.

type: "url"

URL image source.

url: string

URL of the image SafetyKit should compare or analyze.

formaturi
type: "image"

Image content part.

key: optional string

Stable field key for this content part.

content_id: optional string

Your stable identifier for the content involved in this event, such as a message, listing, page, post, profile, or uploaded media item.

minLength1
maxLength512
idempotency_key: optional string

Optional caller-provided key used to make retries of this individual event idempotent. Reuse the same key only for retries of the same logical event.

minLength1
maxLength255
metadata: optional map[string or number or boolean or array of string or number or boolean]

Non-PII product context for filtering, segmentation, and debugging. Values may be strings, numbers, booleans, or arrays of those scalar values.

One of the following:
string
number
boolean
array of string or number or boolean
One of the following:
string
number
boolean
resources_used: optional array of object { namespace, type, value } or object { type, value }

Reusable resources observed during the event. Use this for emails, phone numbers, names, addresses, social handles, URLs, payment identifiers, caller-defined ids, or similar identifiers.

One of the following:
EntityIDResource object { namespace, type, value }

Caller-defined stable entity identifier resource. This is equivalent to an id resource value of urlEncode(namespace) + ’/’ + urlEncode(value).

namespace: string

Caller-defined namespace for the identifier. SafetyKit stores this with value as urlEncode(namespace) + ’/’ + urlEncode(value).

minLength1
type: "id"

Caller-defined entity identifier resource.

value: string

Identifier value within namespace. SafetyKit stores a normalized hash of the encoded namespace/value pair, not the raw value.

minLength1
object { type, value }

Real-world or account resource used during the event, such as an email, phone number, address, URL, social handle, or payment identifier.

type: string

Resource family, such as email, phone, name, address, url, social handles, payment identifiers, or another stable snake_case identifier. Use the entity ID resource shape when the value belongs to a caller-defined namespace.

value: string

Resource value used during the event. SafetyKit stores a normalized hash of this value, not the raw value. When type is url, this must be a valid URL.

minLength1
ContentUploaded object { content, event_name, timestamp, 7 more }

A user posts, uploads, publishes, edits, or replaces content.

content: array of object { text, type, key } or object { source, type, key }

User-authored or user-uploaded content parts. Use this for message bodies, bios, listing text, image URLs, and similar content SafetyKit should compare or analyze.

One of the following:
EventTextContent object { text, type, key }

User-authored text content associated with an event.

text: string

User-authored text SafetyKit should compare or analyze.

type: "text"

Text content part.

key: optional string

Stable field key for this content part.

EventImageContent object { source, type, key }

User-uploaded image content associated with an event.

source: object { type, url }

Image source information.

type: "url"

URL image source.

url: string

URL of the image SafetyKit should compare or analyze.

formaturi
type: "image"

Image content part.

key: optional string

Stable field key for this content part.

event_name: string

Stable, low-cardinality product action name. Use snake_case and put dynamic values in typed fields, content, resources_used, or metadata.

timestamp: string

The time the event occurred in your system, as an ISO 8601 datetime string.

formatdate-time
type: "content_uploaded"
user_id: string

Your stable canonical identifier for the user or account.

minLength1
client_info: optional object { ip }

Client context observed by your backend for the user action that triggered the event.

ip: optional string

IP address observed by your backend for the client that triggered the event.

minLength1
content_id: optional string

Your stable identifier for the content involved in this event, such as a message, listing, page, post, profile, or uploaded media item.

minLength1
maxLength512
idempotency_key: optional string

Optional caller-provided key used to make retries of this individual event idempotent. Reuse the same key only for retries of the same logical event.

minLength1
maxLength255
metadata: optional map[string or number or boolean or array of string or number or boolean]

Non-PII product context for filtering, segmentation, and debugging. Values may be strings, numbers, booleans, or arrays of those scalar values.

One of the following:
string
number
boolean
array of string or number or boolean
One of the following:
string
number
boolean
resources_used: optional array of object { namespace, type, value } or object { type, value }

Reusable resources observed during the event. Use this for emails, phone numbers, names, addresses, social handles, URLs, payment identifiers, caller-defined ids, or similar identifiers.

One of the following:
EntityIDResource object { namespace, type, value }

Caller-defined stable entity identifier resource. This is equivalent to an id resource value of urlEncode(namespace) + ’/’ + urlEncode(value).

namespace: string

Caller-defined namespace for the identifier. SafetyKit stores this with value as urlEncode(namespace) + ’/’ + urlEncode(value).

minLength1
type: "id"

Caller-defined entity identifier resource.

value: string

Identifier value within namespace. SafetyKit stores a normalized hash of the encoded namespace/value pair, not the raw value.

minLength1
object { type, value }

Real-world or account resource used during the event, such as an email, phone number, address, URL, social handle, or payment identifier.

type: string

Resource family, such as email, phone, name, address, url, social handles, payment identifiers, or another stable snake_case identifier. Use the entity ID resource shape when the value belongs to a caller-defined namespace.

value: string

Resource value used during the event. SafetyKit stores a normalized hash of this value, not the raw value. When type is url, this must be a valid URL.

minLength1
ProductChanged object { content, event_name, product, 8 more }

A product listing is created, updated, or has a discount added.

content: array of object { text, type, key } or object { source, type, key }

User-authored or user-uploaded content parts. Use this for message bodies, bios, listing text, image URLs, and similar content SafetyKit should compare or analyze.

One of the following:
EventTextContent object { text, type, key }

User-authored text content associated with an event.

text: string

User-authored text SafetyKit should compare or analyze.

type: "text"

Text content part.

key: optional string

Stable field key for this content part.

EventImageContent object { source, type, key }

User-uploaded image content associated with an event.

source: object { type, url }

Image source information.

type: "url"

URL image source.

url: string

URL of the image SafetyKit should compare or analyze.

formaturi
type: "image"

Image content part.

key: optional string

Stable field key for this content part.

event_name: "product_created" or "product_updated"

Product action that triggered this event.

One of the following:
"product_created"
"product_updated"
product: object { price, discounted_price, shipping_info }

Commerce details for the product involved in this event.

price: object { amount, currency }

Current listed price of the product.

amount: string

Price amount as a decimal string.

minLength1
currency: string

ISO 4217 currency code.

minLength1
discounted_price: optional object { amount, currency }

Discounted price of the product, when a discount applies.

amount: string

Price amount as a decimal string.

minLength1
currency: string

ISO 4217 currency code.

minLength1
shipping_info: optional object { ships_from, ships_to }

Shipping details for the product.

ships_from: string

Location the product ships from.

minLength1
ships_to: array of string

Locations the product ships to.

timestamp: string

The time the event occurred in your system, as an ISO 8601 datetime string.

formatdate-time
type: "product_changed"
user_id: string

Your stable canonical identifier for the user or account.

minLength1
client_info: optional object { ip }

Client context observed by your backend for the user action that triggered the event.

ip: optional string

IP address observed by your backend for the client that triggered the event.

minLength1
content_id: optional string

Your stable identifier for the content involved in this event, such as a message, listing, page, post, profile, or uploaded media item.

minLength1
maxLength512
idempotency_key: optional string

Optional caller-provided key used to make retries of this individual event idempotent. Reuse the same key only for retries of the same logical event.

minLength1
maxLength255
metadata: optional map[string or number or boolean or array of string or number or boolean]

Non-PII product context for filtering, segmentation, and debugging. Values may be strings, numbers, booleans, or arrays of those scalar values.

One of the following:
string
number
boolean
array of string or number or boolean
One of the following:
string
number
boolean
resources_used: optional array of object { namespace, type, value } or object { type, value }

Reusable resources observed during the event. Use this for emails, phone numbers, names, addresses, social handles, URLs, payment identifiers, caller-defined ids, or similar identifiers.

One of the following:
EntityIDResource object { namespace, type, value }

Caller-defined stable entity identifier resource. This is equivalent to an id resource value of urlEncode(namespace) + ’/’ + urlEncode(value).

namespace: string

Caller-defined namespace for the identifier. SafetyKit stores this with value as urlEncode(namespace) + ’/’ + urlEncode(value).

minLength1
type: "id"

Caller-defined entity identifier resource.

value: string

Identifier value within namespace. SafetyKit stores a normalized hash of the encoded namespace/value pair, not the raw value.

minLength1
object { type, value }

Real-world or account resource used during the event, such as an email, phone number, address, URL, social handle, or payment identifier.

type: string

Resource family, such as email, phone, name, address, url, social handles, payment identifiers, or another stable snake_case identifier. Use the entity ID resource shape when the value belongs to a caller-defined namespace.

value: string

Resource value used during the event. SafetyKit stores a normalized hash of this value, not the raw value. When type is url, this must be a valid URL.

minLength1
CreateAccount object { event_name, timestamp, type, 7 more }

A user or account is created.

event_name: string

Stable, low-cardinality product action name. Use snake_case and put dynamic values in typed fields, content, resources_used, or metadata.

timestamp: string

The time the event occurred in your system, as an ISO 8601 datetime string.

formatdate-time
type: "create_account"
user_id: string

Your stable canonical identifier for the user or account.

minLength1
client_info: optional object { ip }

Client context observed by your backend for the user action that triggered the event.

ip: optional string

IP address observed by your backend for the client that triggered the event.

minLength1
content: optional array of object { text, type, key } or object { source, type, key }

User-authored or user-uploaded content parts. Use this for message bodies, bios, listing text, image URLs, and similar content SafetyKit should compare or analyze.

One of the following:
EventTextContent object { text, type, key }

User-authored text content associated with an event.

text: string

User-authored text SafetyKit should compare or analyze.

type: "text"

Text content part.

key: optional string

Stable field key for this content part.

EventImageContent object { source, type, key }

User-uploaded image content associated with an event.

source: object { type, url }

Image source information.

type: "url"

URL image source.

url: string

URL of the image SafetyKit should compare or analyze.

formaturi
type: "image"

Image content part.

key: optional string

Stable field key for this content part.

content_id: optional string

Your stable identifier for the content involved in this event, such as a message, listing, page, post, profile, or uploaded media item.

minLength1
maxLength512
idempotency_key: optional string

Optional caller-provided key used to make retries of this individual event idempotent. Reuse the same key only for retries of the same logical event.

minLength1
maxLength255
metadata: optional map[string or number or boolean or array of string or number or boolean]

Non-PII product context for filtering, segmentation, and debugging. Values may be strings, numbers, booleans, or arrays of those scalar values.

One of the following:
string
number
boolean
array of string or number or boolean
One of the following:
string
number
boolean
resources_used: optional array of object { namespace, type, value } or object { type, value }

Reusable resources observed during the event. Use this for emails, phone numbers, names, addresses, social handles, URLs, payment identifiers, caller-defined ids, or similar identifiers.

One of the following:
EntityIDResource object { namespace, type, value }

Caller-defined stable entity identifier resource. This is equivalent to an id resource value of urlEncode(namespace) + ’/’ + urlEncode(value).

namespace: string

Caller-defined namespace for the identifier. SafetyKit stores this with value as urlEncode(namespace) + ’/’ + urlEncode(value).

minLength1
type: "id"

Caller-defined entity identifier resource.

value: string

Identifier value within namespace. SafetyKit stores a normalized hash of the encoded namespace/value pair, not the raw value.

minLength1
object { type, value }

Real-world or account resource used during the event, such as an email, phone number, address, URL, social handle, or payment identifier.

type: string

Resource family, such as email, phone, name, address, url, social handles, payment identifiers, or another stable snake_case identifier. Use the entity ID resource shape when the value belongs to a caller-defined namespace.

value: string

Resource value used during the event. SafetyKit stores a normalized hash of this value, not the raw value. When type is url, this must be a valid URL.

minLength1
UpdateAccount object { event_name, timestamp, type, 7 more }

A user or account profile, contact detail, payment detail, or public bio changes.

event_name: string

Stable, low-cardinality product action name. Use snake_case and put dynamic values in typed fields, content, resources_used, or metadata.

timestamp: string

The time the event occurred in your system, as an ISO 8601 datetime string.

formatdate-time
type: "update_account"
user_id: string

Your stable canonical identifier for the user or account.

minLength1
client_info: optional object { ip }

Client context observed by your backend for the user action that triggered the event.

ip: optional string

IP address observed by your backend for the client that triggered the event.

minLength1
content: optional array of object { text, type, key } or object { source, type, key }

User-authored or user-uploaded content parts. Use this for message bodies, bios, listing text, image URLs, and similar content SafetyKit should compare or analyze.

One of the following:
EventTextContent object { text, type, key }

User-authored text content associated with an event.

text: string

User-authored text SafetyKit should compare or analyze.

type: "text"

Text content part.

key: optional string

Stable field key for this content part.

EventImageContent object { source, type, key }

User-uploaded image content associated with an event.

source: object { type, url }

Image source information.

type: "url"

URL image source.

url: string

URL of the image SafetyKit should compare or analyze.

formaturi
type: "image"

Image content part.

key: optional string

Stable field key for this content part.

content_id: optional string

Your stable identifier for the content involved in this event, such as a message, listing, page, post, profile, or uploaded media item.

minLength1
maxLength512
idempotency_key: optional string

Optional caller-provided key used to make retries of this individual event idempotent. Reuse the same key only for retries of the same logical event.

minLength1
maxLength255
metadata: optional map[string or number or boolean or array of string or number or boolean]

Non-PII product context for filtering, segmentation, and debugging. Values may be strings, numbers, booleans, or arrays of those scalar values.

One of the following:
string
number
boolean
array of string or number or boolean
One of the following:
string
number
boolean
resources_used: optional array of object { namespace, type, value } or object { type, value }

Reusable resources observed during the event. Use this for emails, phone numbers, names, addresses, social handles, URLs, payment identifiers, caller-defined ids, or similar identifiers.

One of the following:
EntityIDResource object { namespace, type, value }

Caller-defined stable entity identifier resource. This is equivalent to an id resource value of urlEncode(namespace) + ’/’ + urlEncode(value).

namespace: string

Caller-defined namespace for the identifier. SafetyKit stores this with value as urlEncode(namespace) + ’/’ + urlEncode(value).

minLength1
type: "id"

Caller-defined entity identifier resource.

value: string

Identifier value within namespace. SafetyKit stores a normalized hash of the encoded namespace/value pair, not the raw value.

minLength1
object { type, value }

Real-world or account resource used during the event, such as an email, phone number, address, URL, social handle, or payment identifier.

type: string

Resource family, such as email, phone, name, address, url, social handles, payment identifiers, or another stable snake_case identifier. Use the entity ID resource shape when the value belongs to a caller-defined namespace.

value: string

Resource value used during the event. SafetyKit stores a normalized hash of this value, not the raw value. When type is url, this must be a valid URL.

minLength1
UserReport object { event_name, labels, timestamp, 10 more }

A user-submitted report. Use user_id for the reporter. Include target_user_id when a user is reported, target_content_id when content is reported, and both when the report is about content associated with a user. Use content and content_id for the report itself.

event_name: string

Stable, low-cardinality product action name. Use snake_case and put dynamic values in typed fields, content, resources_used, or metadata.

labels: array of string

One or more label categories supplied with the report or moderation decision.

timestamp: string

The time the event occurred in your system, as an ISO 8601 datetime string.

formatdate-time
type: "user_report"
user_id: string

Your stable canonical identifier for the user or account.

minLength1
client_info: optional object { ip }

Client context observed by your backend for the user action that triggered the event.

ip: optional string

IP address observed by your backend for the client that triggered the event.

minLength1
content: optional array of object { text, type, key } or object { source, type, key }

User-authored or user-uploaded content parts. Use this for message bodies, bios, listing text, image URLs, and similar content SafetyKit should compare or analyze.

One of the following:
EventTextContent object { text, type, key }

User-authored text content associated with an event.

text: string

User-authored text SafetyKit should compare or analyze.

type: "text"

Text content part.

key: optional string

Stable field key for this content part.

EventImageContent object { source, type, key }

User-uploaded image content associated with an event.

source: object { type, url }

Image source information.

type: "url"

URL image source.

url: string

URL of the image SafetyKit should compare or analyze.

formaturi
type: "image"

Image content part.

key: optional string

Stable field key for this content part.

content_id: optional string

Your stable identifier for the content involved in this event, such as a message, listing, page, post, profile, or uploaded media item.

minLength1
maxLength512
idempotency_key: optional string

Optional caller-provided key used to make retries of this individual event idempotent. Reuse the same key only for retries of the same logical event.

minLength1
maxLength255
metadata: optional map[string or number or boolean or array of string or number or boolean]

Non-PII product context for filtering, segmentation, and debugging. Values may be strings, numbers, booleans, or arrays of those scalar values.

One of the following:
string
number
boolean
array of string or number or boolean
One of the following:
string
number
boolean
resources_used: optional array of object { namespace, type, value } or object { type, value }

Reusable resources observed during the event. Use this for emails, phone numbers, names, addresses, social handles, URLs, payment identifiers, caller-defined ids, or similar identifiers.

One of the following:
EntityIDResource object { namespace, type, value }

Caller-defined stable entity identifier resource. This is equivalent to an id resource value of urlEncode(namespace) + ’/’ + urlEncode(value).

namespace: string

Caller-defined namespace for the identifier. SafetyKit stores this with value as urlEncode(namespace) + ’/’ + urlEncode(value).

minLength1
type: "id"

Caller-defined entity identifier resource.

value: string

Identifier value within namespace. SafetyKit stores a normalized hash of the encoded namespace/value pair, not the raw value.

minLength1
object { type, value }

Real-world or account resource used during the event, such as an email, phone number, address, URL, social handle, or payment identifier.

type: string

Resource family, such as email, phone, name, address, url, social handles, payment identifiers, or another stable snake_case identifier. Use the entity ID resource shape when the value belongs to a caller-defined namespace.

value: string

Resource value used during the event. SafetyKit stores a normalized hash of this value, not the raw value. When type is url, this must be a valid URL.

minLength1
target_content_id: optional string

Your stable identifier for the content being reported.

minLength1
maxLength512
target_user_id: optional string

Your stable canonical identifier for the user being reported.

minLength1
maxLength512
Appeal object { event_name, timestamp, type, 8 more }

A user appeals a moderation action taken against them. Use user_id for the appealing user, appealed_decision_id to reference the decision being appealed, and content and content_id for the appeal itself.

event_name: string

Stable, low-cardinality product action name. Use snake_case and put dynamic values in typed fields, content, resources_used, or metadata.

timestamp: string

The time the event occurred in your system, as an ISO 8601 datetime string.

formatdate-time
type: "appeal"
user_id: string

Your stable canonical identifier for the user or account.

minLength1
appealed_decision_id: optional string

Your stable identifier for the moderation decision or enforcement action being appealed, such as the content_id of a moderation_decision event you previously sent.

minLength1
maxLength512
client_info: optional object { ip }

Client context observed by your backend for the user action that triggered the event.

ip: optional string

IP address observed by your backend for the client that triggered the event.

minLength1
content: optional array of object { text, type, key } or object { source, type, key }

User-authored or user-uploaded content parts. Use this for message bodies, bios, listing text, image URLs, and similar content SafetyKit should compare or analyze.

One of the following:
EventTextContent object { text, type, key }

User-authored text content associated with an event.

text: string

User-authored text SafetyKit should compare or analyze.

type: "text"

Text content part.

key: optional string

Stable field key for this content part.

EventImageContent object { source, type, key }

User-uploaded image content associated with an event.

source: object { type, url }

Image source information.

type: "url"

URL image source.

url: string

URL of the image SafetyKit should compare or analyze.

formaturi
type: "image"

Image content part.

key: optional string

Stable field key for this content part.

content_id: optional string

Your stable identifier for the content involved in this event, such as a message, listing, page, post, profile, or uploaded media item.

minLength1
maxLength512
idempotency_key: optional string

Optional caller-provided key used to make retries of this individual event idempotent. Reuse the same key only for retries of the same logical event.

minLength1
maxLength255
metadata: optional map[string or number or boolean or array of string or number or boolean]

Non-PII product context for filtering, segmentation, and debugging. Values may be strings, numbers, booleans, or arrays of those scalar values.

One of the following:
string
number
boolean
array of string or number or boolean
One of the following:
string
number
boolean
resources_used: optional array of object { namespace, type, value } or object { type, value }

Reusable resources observed during the event. Use this for emails, phone numbers, names, addresses, social handles, URLs, payment identifiers, caller-defined ids, or similar identifiers.

One of the following:
EntityIDResource object { namespace, type, value }

Caller-defined stable entity identifier resource. This is equivalent to an id resource value of urlEncode(namespace) + ’/’ + urlEncode(value).

namespace: string

Caller-defined namespace for the identifier. SafetyKit stores this with value as urlEncode(namespace) + ’/’ + urlEncode(value).

minLength1
type: "id"

Caller-defined entity identifier resource.

value: string

Identifier value within namespace. SafetyKit stores a normalized hash of the encoded namespace/value pair, not the raw value.

minLength1
object { type, value }

Real-world or account resource used during the event, such as an email, phone number, address, URL, social handle, or payment identifier.

type: string

Resource family, such as email, phone, name, address, url, social handles, payment identifiers, or another stable snake_case identifier. Use the entity ID resource shape when the value belongs to a caller-defined namespace.

value: string

Resource value used during the event. SafetyKit stores a normalized hash of this value, not the raw value. When type is url, this must be a valid URL.

minLength1
ModerationDecision object { event_name, labels, source_id, 11 more }

A moderation label or decision from an automated enforcement system or manual review workflow. Do not send user_id; use source_type and source_id for attribution.

event_name: string

Stable, low-cardinality product action name. Use snake_case and put dynamic values in typed fields, content, resources_used, or metadata.

labels: array of string

One or more label categories supplied with the report or moderation decision.

source_id: string

Stable identifier within source_type. Examples: moderator@example.com or 550e8400-e29b-41d4-a716-446655440000 for expert_labeler or human_moderator, automated_review_v2026_06_04 for automation, or <vendor_name>-v2.1 for vendor.

minLength1
maxLength512
source_type: "human_moderator" or "expert_labeler" or "automation" or "vendor"

Coarse attribution category for the moderation decision source. Supported values: human_moderator (a human reviewer in your moderation workflow), expert_labeler (an expert human labeler or specialist reviewer), automation (an automated model, rules engine, or enforcement workflow), or vendor (an external review or moderation provider).

One of the following:
"human_moderator"
"expert_labeler"
"automation"
"vendor"
timestamp: string

The time the event occurred in your system, as an ISO 8601 datetime string.

formatdate-time
type: "moderation_decision"
client_info: optional object { ip }

Client context observed by your backend for the user action that triggered the event.

ip: optional string

IP address observed by your backend for the client that triggered the event.

minLength1
content: optional array of object { text, type, key } or object { source, type, key }

User-authored or user-uploaded content parts. Use this for message bodies, bios, listing text, image URLs, and similar content SafetyKit should compare or analyze.

One of the following:
EventTextContent object { text, type, key }

User-authored text content associated with an event.

text: string

User-authored text SafetyKit should compare or analyze.

type: "text"

Text content part.

key: optional string

Stable field key for this content part.

EventImageContent object { source, type, key }

User-uploaded image content associated with an event.

source: object { type, url }

Image source information.

type: "url"

URL image source.

url: string

URL of the image SafetyKit should compare or analyze.

formaturi
type: "image"

Image content part.

key: optional string

Stable field key for this content part.

content_id: optional string

Your stable identifier for the content involved in this event, such as a message, listing, page, post, profile, or uploaded media item.

minLength1
maxLength512
idempotency_key: optional string

Optional caller-provided key used to make retries of this individual event idempotent. Reuse the same key only for retries of the same logical event.

minLength1
maxLength255
metadata: optional map[string or number or boolean or array of string or number or boolean]

Non-PII product context for filtering, segmentation, and debugging. Values may be strings, numbers, booleans, or arrays of those scalar values.

One of the following:
string
number
boolean
array of string or number or boolean
One of the following:
string
number
boolean
resources_used: optional array of object { namespace, type, value } or object { type, value }

Reusable resources observed during the event. Use this for emails, phone numbers, names, addresses, social handles, URLs, payment identifiers, caller-defined ids, or similar identifiers.

One of the following:
EntityIDResource object { namespace, type, value }

Caller-defined stable entity identifier resource. This is equivalent to an id resource value of urlEncode(namespace) + ’/’ + urlEncode(value).

namespace: string

Caller-defined namespace for the identifier. SafetyKit stores this with value as urlEncode(namespace) + ’/’ + urlEncode(value).

minLength1
type: "id"

Caller-defined entity identifier resource.

value: string

Identifier value within namespace. SafetyKit stores a normalized hash of the encoded namespace/value pair, not the raw value.

minLength1
object { type, value }

Real-world or account resource used during the event, such as an email, phone number, address, URL, social handle, or payment identifier.

type: string

Resource family, such as email, phone, name, address, url, social handles, payment identifiers, or another stable snake_case identifier. Use the entity ID resource shape when the value belongs to a caller-defined namespace.

value: string

Resource value used during the event. SafetyKit stores a normalized hash of this value, not the raw value. When type is url, this must be a valid URL.

minLength1
target_content_id: optional string

Your stable identifier for the content being reported.

minLength1
maxLength512
target_user_id: optional string

Your stable canonical identifier for the user being reported.

minLength1
maxLength512
ReturnsExpand Collapse
object { event_id, status }
event_id: string

SafetyKit identifier for the event.

status: "ok"

Event was accepted.

object { event_ids, status }
event_ids: array of string

SafetyKit identifiers for the accepted events, in request order.

status: "ok"

Events were accepted.

Create event (Beta)

curl https://api.safetykit.com/v1/events \
    -H 'Content-Type: application/json' \
    -H "Authorization: Bearer $SAFETYKIT_API_KEY" \
    -d '{
          "event_name": "message_sent",
          "target_user_id": "987654321",
          "timestamp": "2026-05-21T00:15:15.000Z",
          "type": "user_contact",
          "user_id": "123456789",
          "client_info": {
            "ip": "203.0.113.7"
          },
          "content_id": "message_abc123",
          "idempotency_key": "event_123_retry_key",
          "metadata": {
            "conversation_id": "conversation_789",
            "channel": "marketplace_dm"
          }
        }'
{
  "status": "ok",
  "event_id": "01KSR4C8JN1SA9X63T6P368K6W"
}
{
  "status": "ok",
  "event_ids": [
    "01KSR4C8JN1SA9X63T6P368K6W",
    "01KSR4CB1MFVX1TAYM46YQXZ3E"
  ]
}
Returns Examples
{
  "status": "ok",
  "event_id": "01KSR4C8JN1SA9X63T6P368K6W"
}
{
  "status": "ok",
  "event_ids": [
    "01KSR4C8JN1SA9X63T6P368K6W",
    "01KSR4CB1MFVX1TAYM46YQXZ3E"
  ]
}