Send backend events
Record optional app milestones using authenticated, app-scoped events.
On this page
What you need
A real milestone defined and implemented in your app, the private workspace key and owned HeyCrust app UUID. Shopify does not supply arbitrary in-app activation steps.
Steps
- Define the milestone and emit it only when that app action actually succeeds. Examples such as
onboarding_completedare developer-defined names, not Shopify events automatically present in HeyCrust. - POST JSON to
https://heycrust.com/api/eventswithAuthorization: Bearer <workspace key>andContent-Type: application/json. - Send the single event below or an
eventsarray of 1–50 events. Use permanentmyshopify.comdomains for app-scoped requests. - Reuse
eventIdonly for retries of the same content. A changed payload using the same app/event ID can return 409. - Check the receipt’s stored/deduped count,
scopeand app-specific result. Configure the Flow’s event name/source/app scope only after observing it.
{
"appId": "11111111-1111-4111-8111-111111111111",
"shopDomain": "example.myshopify.com",
"name": "onboarding_completed",
"eventId": "example-onboarding-001",
"occurredAt": "2026-10-07T10:00:00Z",
"properties": {
"step": "published",
"items": 1
}
}
Expected result
A receipt with ok, stored, deduped, scope and result IDs. New integrations should get scope: "app"; omitting appId uses the legacy unscoped path and cannot establish the intended app evidence.
What this proves
An authenticated backend event records what your app reported for a merchant and app. It does not create a Shopify collection, affiliate commission or independent verification of your milestone. Missing/stale tracking stays unknown. Use Browser tracking for optional analytics-grade observations and Data sources for their boundaries.
Troubleshooting
Event names allow letters, digits, underscore, dot and hyphen, up to 64 characters; stored names are lowercase. Properties allow at most 20 keys (64 characters), with string values up to 500 characters, numbers, booleans or null. occurredAt must be ISO datetime; eventId is 1–128 characters. Future times are clamped to receipt time.