Events are the raw material for everything else. The Composer reads them to
find where users drop off, and flows trigger on them. Track the actions that
matter to your product: signing up, finishing a lesson, adding a connection,
starting a trial.
Events are written to disk first, then uploaded in batches: when 20 are
queued, or every 30 seconds, whichever comes first. A failed upload is retried
later, and an event that arrives twice is counted once, so retries never
double count. Events survive the app being killed.Call Push.flush() to upload right away, for example before a user signs out.
Some flows need to react within seconds: “30 seconds after the user finishes
a drill, if they haven’t started another.” For those, waiting for a batch
would make the send late. List those event names in immediateEvents and they
upload as soon as they are tracked:
Comparisons in flows never convert types. A condition score >= 80 only
matches when score arrived as the number 80, never the string "80".
Push.track sends every property as a string. In a flow, compare SDK
properties with eq, neq, contains, exists or not_exists, using string
values. Number comparisons (gt, gte, lt, lte) only match properties that
arrived as JSON numbers, which today means events sent through the
ingest API.Limits: an event name is at most 128 characters, and an event’s properties at
most 32 KB of JSON.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"PushNotifAI","colors":{"primary":"#2563EB","light":"#3B82F6","dark":"#1D4ED8"},"favicon":"https://mintcdn.com/pushnotifai/BLbBUE8Qbf4kydTk/favicon.svg?fit=max\u0026auto=format\u0026n=BLbBUE8Qbf4kydTk\u0026q=85\u0026s=bbbd385e3340675d7ef7c301bd95ca45","navbar":{"links":[{"href":"https://app.pushnotif.ai","label":"Dashboard"}],"primary":{"type":"button","label":"Website","href":"https://pushnotif.ai"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"pushnotifai","hasAudioNarration":false,"actualSubdomain":"pushnotifai","customDomains":["docs.pushnotif.ai"],"gitSource":{"type":"github","owner":"vdsingh","repo":"pushnotifai","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":"","_id":"6aebc00510839d9e5cb483cb"},"chroma":{"latestBuiltDeploymentHistoryId":"6aebc01910839d9e5cb485c1","collectionId":"43681cf8-fe9e-4111-a4f5-efb301fab11a","liveDeploymentHistoryId":"6aebc01910839d9e5cb485c1","schemaVersion":"v3"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aebc5463ffc322287710ae7","clientVersion":"0.0.4067","searchFilterCounts":[{"language":"default","tag":"Guides","count":19},{"language":"default","tag":"iOS SDK","count":7},{"language":"default","tag":"Notification strategy","count":5},{"language":"default","tag":"API reference","count":4},{"language":"default","tag":"Ingest API","count":4},{"language":"default","tag":"Get started","count":3},{"language":"default","tag":"Dashboard","count":3},{"language":"default","tag":"AI agents","count":1}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"sdk/tracking-events","slug":"/sdk/tracking-events","pageMetadata":{"title":"Track events","description":"Send the user actions your notification strategy is built on.","href":"/sdk/tracking-events"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Send the user actions your notification strategy is built on.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`swift`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`swift`,children:_jsxs(_components.code,{language:`swift`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`Push.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`track`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"lesson_completed\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`properties`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"lesson_id\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` lesson.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"score\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"92\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`])`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Events are the raw material for everything else. The Composer reads them to\nfind where users drop off, and flows trigger on them. Track the actions that\nmatter to your product: signing up, finishing a lesson, adding a connection,\nstarting a trial.`}),`\n`,_jsx(Heading,{level:`2`,id:`how-events-reach-us`,children:`How events reach us`}),`\n`,_jsx(_components.p,{children:`Events are written to disk first, then uploaded in batches: when 20 are\nqueued, or every 30 seconds, whichever comes first. A failed upload is retried\nlater, and an event that arrives twice is counted once, so retries never\ndouble count. Events survive the app being killed.`}),`\n`,_jsxs(_components.p,{children:[`Call `,_jsx(_components.code,{children:`Push.flush()`}),` to upload right away, for example before a user signs out.`]}),`\n`,_jsx(Heading,{level:`2`,id:`events-a-flow-triggers-on`,children:`Events a flow triggers on`}),`\n`,_jsxs(_components.p,{children:[`Some flows need to react within seconds: “30 seconds after the user finishes\na drill, if they haven’t started another.” For those, waiting for a batch\nwould make the send late. List those event names in `,_jsx(_components.code,{children:`immediateEvents`}),` and they\nupload as soon as they are tracked:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`swift`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`swift`,children:_jsxs(_components.code,{language:`swift`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`PushConfiguration`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:` apiKey`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"pna_...\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:` baseURL`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`URL`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`string`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://api.pushnotif.ai\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`!`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:` immediateEvents`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"drill_completed\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`naming`,children:`Naming`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Use `,_jsx(_components.code,{children:`snake_case`}),` past-tense names: `,_jsx(_components.code,{children:`lesson_completed`}),`, not `,_jsx(_components.code,{children:`CompleteLesson`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Names starting with `,_jsx(_components.code,{children:`$`}),` are reserved for `,_jsx(_components.a,{href:`/sdk/automatic-events`,children:`events the SDK reports itself`}),`.`]}),`\n`,_jsx(_components.li,{children:`Keep names stable. A flow refers to an event by its exact name, so renaming\none silently stops every flow that triggers on it.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`properties-and-types`,children:`Properties and types`}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Comparisons in flows `,_jsx(_components.strong,{children:`never convert types`}),`. A condition `,_jsx(_components.code,{children:`score >= 80`}),` only\nmatches when `,_jsx(_components.code,{children:`score`}),` arrived as the number `,_jsx(_components.code,{children:`80`}),`, never the string `,_jsx(_components.code,{children:`\"80\"`}),`.`]})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Push.track`}),` sends every property as a string. In a flow, compare SDK\nproperties with `,_jsx(_components.code,{children:`eq`}),`, `,_jsx(_components.code,{children:`neq`}),`, `,_jsx(_components.code,{children:`contains`}),`, `,_jsx(_components.code,{children:`exists`}),` or `,_jsx(_components.code,{children:`not_exists`}),`, using string\nvalues. Number comparisons (`,_jsx(_components.code,{children:`gt`}),`, `,_jsx(_components.code,{children:`gte`}),`, `,_jsx(_components.code,{children:`lt`}),`, `,_jsx(_components.code,{children:`lte`}),`) only match properties that\narrived as JSON numbers, which today means events sent through the\n`,_jsx(_components.a,{href:`/api/events`,children:`ingest API`}),`.`]}),`\n`,_jsx(_components.p,{children:`Limits: an event name is at most 128 characters, and an event’s properties at\nmost 32 KB of JSON.`})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Track events","description":"Send the user actions your notification strategy is built on.","href":"/sdk/tracking-events"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"How events reach us","slug":"how-events-reach-us","depth":2,"children":[]},{"title":"Events a flow triggers on","slug":"events-a-flow-triggers-on","depth":2,"children":[]},{"title":"Naming","slug":"naming","depth":2,"children":[]},{"title":"Properties and types","slug":"properties-and-types","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"pushnotifai","siteName":"PushNotifAI","title":"Track events - PushNotifAI","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-04T23:30:46.823Z","originalFileLocation":"sdk/tracking-events.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Send the user actions your notification strategy is built on.\">\u003cmeta data-mint-head name=\"application-name\" content=\"PushNotifAI\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/pushnotifai/cHj3xQcxR3dkHTJM/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/pushnotifai/cHj3xQcxR3dkHTJM/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/pushnotifai/cHj3xQcxR3dkHTJM/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/pushnotifai/cHj3xQcxR3dkHTJM/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/pushnotifai/cHj3xQcxR3dkHTJM/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/pushnotifai/cHj3xQcxR3dkHTJM/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/pushnotifai/cHj3xQcxR3dkHTJM/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/pushnotifai/cHj3xQcxR3dkHTJM/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/pushnotifai/cHj3xQcxR3dkHTJM/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Track events - PushNotifAI\">\u003cmeta data-mint-head property=\"og:description\" content=\"Send the user actions your notification strategy is built on.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"PushNotifAI\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.pushnotif.ai/sdk/tracking-events\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://pushnotifai.mintlify.app/_mintlify/api/og/v2?division=iOS+SDK\u0026amp;title=Track+events\u0026amp;description=Send+the+user+actions+your+notification+strategy+is+built+on.\u0026amp;theme=85f832f8b30837d0268a5e67\u0026amp;signature=901a49934698db8e971a4b5254c3acfaea812e68a7972407d10a551e33fc95c2\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Track events - PushNotifAI\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Send the user actions your notification strategy is built on.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://pushnotifai.mintlify.app/_mintlify/api/og/v2?division=iOS+SDK\u0026amp;title=Track+events\u0026amp;description=Send+the+user+actions+your+notification+strategy+is+built+on.\u0026amp;theme=85f832f8b30837d0268a5e67\u0026amp;signature=901a49934698db8e971a4b5254c3acfaea812e68a7972407d10a551e33fc95c2\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/pushnotifai/cHj3xQcxR3dkHTJM/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"PushNotifAI\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#2563EB\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.pushnotif.ai/sdk/tracking-events\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/sdk/tracking-events.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.pushnotif.ai/#organization\",\"name\":\"PushNotifAI\",\"url\":\"https://docs.pushnotif.ai\"},{\"@type\":\"WebSite\",\"@id\":\"https://docs.pushnotif.ai#website\",\"name\":\"PushNotifAI\",\"url\":\"https://docs.pushnotif.ai\",\"publisher\":{\"@id\":\"https://docs.pushnotif.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.pushnotif.ai/sdk/tracking-events#webpage\",\"url\":\"https://docs.pushnotif.ai/sdk/tracking-events\",\"name\":\"Track events\",\"description\":\"Send the user actions your notification strategy is built on.\",\"dateModified\":\"2026-11-04T23:30:46.823Z\",\"isPartOf\":{\"@id\":\"https://docs.pushnotif.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.pushnotif.ai/sdk/tracking-events#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.pushnotif.ai/sdk/tracking-events#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"iOS SDK\",\"item\":\"https://docs.pushnotif.ai/sdk/install\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Track events\",\"item\":\"https://docs.pushnotif.ai/sdk/tracking-events\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.pushnotif.ai/sdk/tracking-events#article\",\"headline\":\"Track events\",\"name\":\"Track events\",\"description\":\"Send the user actions your notification strategy is built on.\",\"url\":\"https://docs.pushnotif.ai/sdk/tracking-events\",\"mainEntityOfPage\":{\"@id\":\"https://docs.pushnotif.ai/sdk/tracking-events#webpage\"},\"dateModified\":\"2026-11-04T23:30:46.823Z\",\"publisher\":{\"@id\":\"https://docs.pushnotif.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.pushnotif.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"PushNotifAI\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"PushNotifAI","nav":{"global":null,"tabs":[{"tab":"Guides","groups":[{"group":"Get started","pages":[{"title":"Introduction","href":"/introduction"},{"title":"Quickstart","href":"/quickstart"},{"title":"Core concepts","href":"/concepts"}]},{"group":"iOS SDK","pages":[{"title":"Install the SDK","description":"Add the PushNotifAI Swift package to your app and configure it.","href":"/sdk/install"},{"title":"Track events","href":"/sdk/tracking-events"},{"title":"Identify users","description":"Link devices to your own user ids, and attach what you know about each user.","href":"/sdk/identifying-users"},{"title":"Push tokens, taps and dismissals","href":"/sdk/push-handling"},{"title":"Delivery telemetry","href":"/sdk/delivery-telemetry"},{"title":"Automatic events","href":"/sdk/automatic-events"},{"title":"Configuration reference","href":"/sdk/configuration"}]},{"group":"Notification strategy","pages":[{"title":"Flows","href":"/strategy/flows"},{"title":"The Composer","href":"/strategy/composer"},{"title":"Lookups","href":"/strategy/lookups"},{"title":"Broadcasts","href":"/strategy/broadcasts"},{"title":"The holdout","href":"/strategy/holdout"}]},{"group":"Dashboard","pages":[{"title":"Team, apps and keys","href":"/dashboard/team-and-apps"},{"title":"APNs key","href":"/dashboard/apns-key"},{"title":"Debug a user","href":"/dashboard/debugging-a-user"}]},{"group":"AI agents","pages":[{"title":"MCP server","href":"/agents/mcp"}]}]},{"tab":"API reference","pages":[{"title":"API reference","href":"/api/overview"}]}]},"basePath":"","title":"Track events - PushNotifAI","buildId":"dpl_9VVk5y1P8k1ATeJguVngy9Q3cmbD","deploymentId":"dpl_9VVk5y1P8k1ATeJguVngy9Q3cmbD","dynamics":[],"chunks":[]}