Event Verification
Event Verification helps you understand how Freshpaint is processing your events.
The goal for Event Verification is to make Freshpaint's data processing as transparent as possible users. With Event Verification, you can verify your events are being processed the way you expect.
Event Verification Overview
When navigating to Event Verification, you will be brought to the Event Verification Overview. The Event Verification Overview lets you filter for a specific destination and event. You can then see how Freshpaint processed that event before sending it to your destination. A specific record of how Freshpaint processed an event is referred to as a "trace".

The Event Verification Summary offers several filters to help you find traces you care about.
First, you must select a Destination you want to investigate via the dropdown at the top of the tool.
We have 5 types of filters to help you identify the events you care about:
Time filter: This allows you to select events in a particular time frame.
"Show Only Me" filter: Selecting this toggle switch filters the events down to show only events that are generated from your current IP address - events that you've created. This can be particularly useful if you want to send some test events and see how they are being processed.
NOTE: this filter only selects events from your current IP address, so if you generate events on your home network, then move to work at a café (for example), your IP address will change and we won't find events generated from your home network while you're at the café.
Event Definition filter: This dropdown allows you to zoom into a particular event definition to see only events that match the definition you've selected.
Status filter: This dropdown allows you to find events with a particular terminal status (e.g. OK, Errors, Warnings, etc). This can be useful if you're looking to see which events failed to be delivered, or warnings associated with your events.
Search Trace Contents filter: This filter (in the bottom right of the tool) allows you to search the traces we have saved based on the contents of the trace. For example, if you know a particular piece of text you expect to show up in a trace, you can use the search bar to find Traces that contain that snippet.
If we find any traces matching your search criteria, you'll see the Event Verification Overview populate with trace entries.

Trace Details
From the Trace Summary view, you can access the Trace Details view by clicking the "VIEW" button in the rightmost column.

The Trace Detail view is divided into 2 parts - the Trace Header, and the Trace Steps.

Trace Header
The Header shows a summary of what happened on the event, including the type of event ($web_event below), the event definition if we could find an associated event definition (Test event below), a status chip explaining the terminal status of the event (OK), and a timestamp representing when we started processing the event.

Trace Steps
The Trace Steps tell the story of how we processed your event. The drawer on the left shows the key steps in the Freshpaint event processing model, and the right pane shows a zoomed-in look at the details of how we processed the event.

Allow List is currently in view, and you can see the event and data exactly as Freshpaint saw it as we filtered out data that was unsafe for HIPAA reasons.Trace statuses (reference)
Event Verification shows the outcome of Freshpaint’s attempt to deliver an event to a destination. Statuses generally fall into three buckets:
Delivered (OK): Freshpaint sent the request and the destination accepted it.
Skipped / Not sent: Freshpaint intentionally did not send a request (usually to prevent bad or non-compliant sends).
Warning / Error: Freshpaint sent the request (or tried to), but something went wrong or looks suspicious.
Common statuses and what they mean
OK / Delivered
OK: Freshpaint sent the request to the destination and got a “success” response back (for example, HTTP 2xx), meaning the destination accepted it.
Not sent / Skipped
These mean Freshpaint did not transmit anything to the destination for this event. This is usually expected.
Missing Required Property: Freshpaint prevented delivery because the destination required a field that wasn’t present (or wasn’t usable after filtering).Common causes:
The event didn’t include the required property.
The property existed upstream but was removed by allowlisting / filtering.
The property was present but empty/invalid format.
What to do:
Open the trace and look at the “event as received” vs “what would be sent.”
Ensure the property is present and correctly formatted before it reaches the destination.
⚠️ (multi-destination setups): Missing Required Property is evaluated per destination. If the same event is configured to send to multiple destinations, it may include identifiers for one destination but not another. For example, an event might include a Meta click ID ($fbclid) but not a Google click ID ($gclid). In that case, Event Verification can show OK for Meta but Missing Required Property for Google Ads for the same event.
Consent Not Granted: Freshpaint prevented delivery because the event/user was not permitted to be sent to that destination under your consent settings.Common causes:
Consent category for the destination (e.g., marketing/analytics) is not granted.
Consent object is missing or indicates denial.
What to do:
Check your consent configuration and destination consent category.
Confirm the event includes the expected consent signal.
Skipped due to Transformation: A transformation rule explicitly stopped this event from being sent to this destination.Common causes:
A “Drop/Skip” transformation matched the event name, destination, or conditions.
A transformation changed the event in a way that triggers a later skip rule.
What to do:
Review transformation rules that apply to this destination/event.
Open the trace to see which transformation ran and why it skipped.
Skipped due to property: A property-based rule caused the event to be skipped for safety/compliance or configuration reasons.Common causes:
A rule that blocks events containing certain properties/values.
Policy enforcement or filtering logic that prevents sending when a sensitive field is present.
What to do:
Inspect the trace for which property triggered the skip.
Adjust upstream instrumentation, filters, or allowlists so only permitted fields are included.
Delayed: Freshpaint is intentionally holding the event to send later, usually because the destination is not ready to accept it right now.Common causes:
The destination is rate-limiting or temporarily unavailable.
Freshpaint is retrying with backoff.
What to do:
Open the trace to see retry/backoff details.
If delays persist, check destination health/rate limits and your credentials.
Warning
Warnings mean “something might be wrong” — delivery may still work, but you should validate.
Downstream Warning: The destination responded, but the response suggests partial issues, non-fatal problems, or conditions that may affect some events.
Examples:
A field was ignored or coerced.
A destination accepted the request but returned a warning payload.
What to do:
Open the trace details and read the destination response body.
Confirm this warning isn’t happening consistently across many events.
💡 You may also see warning statuses related to downstream availability or rate limits (for example, 429 Too Many Requests, temporary 5xx errors, or timeouts). These are often temporary, but repeated warnings typically indicate a recurring destination issue or configuration/volume mismatch.
Error
Errors mean the event did not successfully deliver as intended, either because the destination rejected it or Freshpaint couldn’t send it.
Downstream Error: Freshpaint reached the destination, but the destination rejected the request (often HTTP 4xx/5xx).Common causes:
Invalid payload shape/required fields missing.
Invalid identifiers (formatting, hashing requirements, etc.).
Permission issues in the destination account.
What to do:
Open the trace and check the response status + error message.
Fix the underlying payload/config issue and retry.
Timeout: Freshpaint attempted delivery, but the request did not complete in time.Common causes: destination slowness, network latency, transient outages.
What to do: check if it self-resolves; if persistent, treat like a destination availability issue
Network Error: Freshpaint couldn’t connect to the destination endpoint (DNS/TLS/connectivity failure).What to do: usually transient; if persistent, confirm destination endpoint/credentials/network requirements.
Token Expired:Freshpaint’s credentials for the destination are no longer valid (expired/rotated/revoked).
What to do:
Reconnect/re-authenticate the destination.
If applicable, confirm the connected account still has required permissions.
Transformation Error: A transformation ran but failed (e.g., invalid code, runtime exception, or unexpected input types).What to do:
Open the trace to see which transformation failed and the error details.
Fix the transformation logic and retest.
Freshpaint Internal Error: Freshpaint encountered an internal failure while processing or preparing the request.What to do:
If it’s intermittent, retry later.
If it’s repeatable, contact support with the trace ID and timestamp.
Request Too Large: The payload was too large and was dropped to protect system reliability or destination limits.Common causes: extremely large property values, huge arrays/objects, oversized user traits.
What to do: reduce payload size (trim properties, shorten strings, avoid large blobs).
Sampling
Because of the volume of traffic we handle, Event Verification doesn’t store a trace for every event. To manage volume, it typically keeps up to one trace per minute for each unique combination of event + destination + delivery status. For example, if “Event A” is delivered to the same destination twice in the same minute with the same status, you’ll usually only see one “Event A” trace for that minute (but you may see additional traces if the destination or status differs).
Disabling Sampling
Customers may briefly disable sampling, thereby recording traces for all events, while debugging a problem they're looking into. To do this, you can use the Remove Sampling button. This works by disabling sampling for events that come from your IP address, so that events you generate from your computer will not be sampled. You'll then be able to inspect traces for everything.

If you have questions about Event Verification, contact Freshpaint Support at [email protected].
Last updated
Was this helpful?