Ingests events from your backend using an API key. For browser and native collection, use the
Observe SDKs and their separate project-scoped transport.
Server-side enrichment
Attach a user reference or tags, such as a risk or bot verdict, to a flow without sending them
through the browser. Target a flow by event ID or temporal matching; authenticated enrichment
allows a symmetric 10-second matching tolerance.
If your backend does not know the Observe session ID, send crossEnvironmentTransactionID
instead of sessionID: a UUID that the browser also sends as user.crossEnvironmentTransactionID
on one of its events (for example an ID per sign-in attempt that browser and backend share).
Exactly one of the two must be set. The events are then matched against the flows of the
browser sessions that carried the same ID, using the same temporal matching; when several
browser sessions carried it, the flow running at the event time is enriched. The request may
arrive before or after the browser events. Retries with the same transaction ID and event id
are deduplicated.
A request accepts at most 2,000 events and low-level events combined.
Required API key permission: observe:events:write.
Use an Observe API key from the management console. The key selects the project and must grant the permission listed on the operation. Keep this key on your server.
Array of events to create. The request must carry at least one item (event, low, telemetry entry, probe or deviceInfo); events and lows together are at most 2000.
Authenticated requests only, instead of sessionID: a UUID shared with the browser, which sends
it as user.crossEnvironmentTransactionID on one of its events. The events are attached to the
flows of the browser sessions that carried the same ID. Must not be combined with sessionID.
Diagnostic telemetry entries (SDK/integration-side messages, not auth-flow events). They ride along
with the normal event batch, are tied to the same session, and never participate in flow
classification. A batch may carry telemetry only (no events/lows). Capped at 2000 per batch.
Internal, experimental: raw probe items captured by Corbado autocapture bundles. They ride along
with the normal event batch, are tied to the same session and never participate in flow
classification. A batch may carry probes only. Invalid, oversized or over-limit items are dropped
server-side; they never cause the batch to be rejected. At most 200 items per batch are stored.
A device info snapshot sent without an event, for a snapshot no event of the page could carry (e.g. a late
update published after the page's last event). Handled exactly like an event's deviceInfo (deduplicated
against, or merged into, the session's latest device info) and stamped with meta.sent (receive time when
absent). A batch may carry a device info only; it never creates events.
Identity of the SDK that produced the batch. Clients have always sent this; it is declared here so the backend can branch on it (e.g. serve the app-specific reliability config to native SDKs). Optional for backwards compatibility.
Show child attributes
Response
SDK reliability configuration (returned only when the X-Corbado-Observe-Config header is set). The shape depends on the requesting SDK: web SDKs receive observeEventCreateRes, native app SDKs (request sdk.name observe-android/observe-ios) receive the app-specific observeSdkConfigApp.
Option 1
Option 2
SDK reliability configuration. Returned from the event ingestion endpoints only when the client opts in
by sending the X-Corbado-Observe-Config request header carrying the config version the client is
currently running (or 1 when it has none cached). When the sent version matches the current one the
endpoints return 204 No Content (nothing new); without the header they always return 204, so this is
a fully backwards-compatible addition. The SDK applies a received config on its next page load
(boot-snapshot model) and stamps the version it ran under into each batch's meta.configVersion.
Content-derived version (hash) of this configuration. Changes whenever any value changes. The SDK
caches it, echoes it in the X-Corbado-Observe-Config request header, and stamps it into
meta.configVersion of every event batch so analyses can segment by the config actually in effect.
Inactivity threshold for continuity sessions, in milliseconds. When more time than this has
passed since the last tracked activity, the SDK rotates to a new session id on the next load.
Only relevant when sessionContinuity is enabled.
Maximum time to wait for the cross-tab sequence Web Lock before allocating without it,
in milliseconds. Clamped to 0–100ms. 0 is a sentinel that disables the lock: the SDK then
allocates the sequence counter without requesting a lock at all, giving up cross-tab
atomicity (two tabs can allocate the same seq) to save a lock round-trip per event.
Flush-trigger switch: flush pending events when the document becomes hidden (visibilitychange).
Default true; the SDK treats a missing value as true, so delivery can never be disabled by accident.
Enables serialization of explicitly supplied raw error diagnostics into stepData.rawError.
Server default is true; an explicit false disables diagnostics. Normalized errors
are always reported independently. SDK built-in defaults may differ (Android defaults off). SDKs apply this using their normal config lifecycle;
disabling affects newly captured diagnostics, not events already queued.
Master switch for the diagnostic telemetry stream. When true the SDK sends buffered telemetry
entries (observeTelemetry) piggybacked on normal event requests; when false it collects nothing
and sends nothing. Lets telemetry be turned off server-side without a customer redeploy.
When true (and telemetry is enabled), enqueuing a telemetry entry triggers an immediate client
flush so diagnostics go out promptly (e.g. before a crash/navigation). Default false: a telemetry
entry alone never triggers a flush, it only rides the next flush caused by anything else.
Superseded by flushOnFlowTypeFinished; served only for SDK versions that predate it (they
ignore the new field, newer SDKs ignore this one). Event names that trigger an immediate
client-side flush when enqueued (e.g. flow_finished, conversion), so high-value events go
out while the page is still alive instead of relying on unload delivery. Empty = no priority
events. Capped at 20 names (both sides).
Flow types whose completion triggers an immediate client-side flush when enqueued, so the
highest-value events go out while the page is still alive instead of relying on unload
delivery. Both completion events count — flow_finished and flow_auto_finished — matched
on their flowName; no other event name ever flushes early. Empty = no priority flows.
Capped at 20 entries (both sides). Replaces flushOnEventNames, which SDKs from the version
that introduced this field on no longer read.
Per-field timeout for the SDK's device info collection, in milliseconds. A browser API that does
not answer within this budget is recorded as a timeout in the event's device info collection
errors and the field stays empty; the other fields are unaffected. Clamped to 10–10000ms.
The SDK reads it per collection run, so a new value takes effect from the next device info
refresh; the first collection of a load without a cached config runs on the built-in default.
When true (and telemetry is enabled), every device info collection emits an info telemetry
entry carrying the total duration and each field's duration in milliseconds. Default false —
a diagnostic stream to switch on while investigating slow collection, not for permanent use.
Durations of fields that hit deviceInfoCollectorTimeoutMs are censored at that value.
Capability policy token for Corbado frontend SDKs and adapters. Values are assigned by
Corbado per project and select how a capability behaves for that project; an SDK that does
not implement the token it receives ignores it and keeps its standard behavior. Empty (the
default) always means standard behavior. Capped at 16 characters — a longer value is served
as empty.
Which query values the SDK includes in the page URL it reports as meta.trackingSourcePath:
allowlist (the default) or all. allowlist keeps every query key and its position but
replaces each value with * unless its key is listed in sourcePathQueryAllow (empty by
default, so every value is masked); empty values and keys without a value stay as they are.
all sends the query unchanged. The path itself is never changed. Any value other than all
(including unset or empty) is served as allowlist. Server-side email/phone redaction still
applies to whatever is sent.
Query keys whose values are kept when sourcePathQuery is allowlist. Matched
case-insensitively and exactly; a trailing * matches a key prefix (utm_*). Empty or
oversized entries (more than 64 characters) are dropped and the list is capped at 50 entries
(both sides). Empty by default. Ignored in all mode.
Client-side retry configuration (exponential backoff) for failed event flushes.
Show child attributes
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Corbado docs","colors":{"primary":"#184aff","light":"#629eff","dark":"#184aff"},"logo":{"light":"https://mintcdn.com/corbado-43/uh5IdxgOHQMtEt9x/logo/corbado-logo-light.svg?fit=max\u0026auto=format\u0026n=uh5IdxgOHQMtEt9x\u0026q=85\u0026s=decbc139fa76d9eeee8dcfbe91ed2094","dark":"https://mintcdn.com/corbado-43/uh5IdxgOHQMtEt9x/logo/corbado-logo-dark.svg?fit=max\u0026auto=format\u0026n=uh5IdxgOHQMtEt9x\u0026q=85\u0026s=398183bb6eb303cda3062b080363672b"},"favicon":"https://mintcdn.com/corbado-43/uh5IdxgOHQMtEt9x/logo/favicon.svg?fit=max\u0026auto=format\u0026n=uh5IdxgOHQMtEt9x\u0026q=85\u0026s=7e718008fe38fabeacb4a3d75472a491","navbar":{"links":[{"href":"mailto:support@corbado.com","label":"Support"}],"primary":{"type":"button","label":"Start for free","href":"https://app.corbado.com/"}},"footer":{"socials":{"twitter":"https://twitter.com/corbadotech","linkedin":"https://www.linkedin.com/company/corbado"}},"integrations":{"hotjar":{"hjid":"3375029","hjsv":"6"},"koala":{"publicApiKey":"pk_ca0e031974819fc6f69a82b884ff6f1cb661"}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"Community","icon":"slack","href":"https://bit.ly/passkeys-community"},{"anchor":"GitHub","icon":"github","href":"https://github.com/corbado"},{"anchor":"Blog","icon":"newspaper","href":"https://www.corbado.com/blog"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"corbado-43","hasAudioNarration":false,"actualSubdomain":"corbado-43","customDomains":["docs.corbado.com"],"gitSource":{"type":"github","owner":"corbadotech","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aec3e1525c041b786079735","collectionId":"dfcf9d0e-3ac9-4252-a39b-21a2d577fca8","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aec3e1525c041b786079735"},"feedback":{"thumbs":true,"edits":false,"issues":false},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6aedee1cde69105c4467d729","clientVersion":"0.0.4074","searchFilterCounts":[{"language":"default","tag":"API Reference","count":184},{"language":"default","tag":"Corbado Connect","count":155},{"language":"default","tag":"Corbado Observe","count":137},{"language":"default","tag":"API endpoints","count":91},{"language":"default","tag":"Backend API","count":69},{"language":"default","tag":"Passkey UI Flows","count":32},{"language":"default","tag":"Alert management","count":23},{"language":"default","tag":"Overview","count":17},{"language":"default","tag":"Web","count":16},{"language":"default","tag":"Analytics and configuration","count":16}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"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},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"html{scroll-behavior:smooth!important}.pk-accent{fill:#184aff}.dark .pk-accent{fill:#629eff}.pk-accent-text{fill:#184aff}.dark .pk-accent-text{fill:#629eff}.pk-node{cursor:pointer;transition:opacity 0.15s ease}.pk-node:hover{opacity:0.72}.observe-visual-light,.observe-visual-dark,.connect-visual-light,.connect-visual-dark{width:100%;height:auto}.observe-visual-light,.connect-visual-light{display:block}.observe-visual-dark,.connect-visual-dark{display:none}.dark .observe-visual-light,.dark .connect-visual-light{display:none}.dark .observe-visual-dark,.dark .connect-visual-dark{display:block}"}],"page":{"pagePath":"api-reference/observe/send-events","slug":"/api-reference/observe/send-events","pageMetadata":{"title":"Create new events","description":"Ingests events from your backend using an API key. For browser and native collection, use the\n[Observe SDKs](/sdks/overview) and their separate project-scoped transport.\n\n### Server-side enrichment\n\nAttach a user reference or tags, such as a risk or bot verdict, to a flow without sending them\nthrough the browser. Target a flow by event ID or temporal matching; authenticated enrichment\nallows a symmetric 10-second matching tolerance.\n\nIf your backend does not know the Observe session ID, send `crossEnvironmentTransactionID`\ninstead of `sessionID`: a UUID that the browser also sends as `user.crossEnvironmentTransactionID`\non one of its events (for example an ID per sign-in attempt that browser and backend share).\nExactly one of the two must be set. The events are then matched against the flows of the\nbrowser sessions that carried the same ID, using the same temporal matching; when several\nbrowser sessions carried it, the flow running at the event time is enriched. The request may\narrive before or after the browser events. Retries with the same transaction ID and event `id`\nare deduplicated.\n\nA request accepts at most 2,000 events and low-level events combined.\n\nRequired API key permission: `observe:events:write`.","deprecated":null,"version":null,"sidebarTitle":"Send events","openapi":"/api-reference/openapi/observe.yaml post /observe/events","href":"/api-reference/observe/send-events","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n a: \"a\",\n code: \"code\",\n h3: \"h3\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Ingests events from your backend using an API key. For browser and native collection, use the\\n\", _jsx(_components.a, {\n href: \"/sdks/overview\",\n children: \"Observe SDKs\"\n }), \" and their separate project-scoped transport.\"]\n }), \"\\n\", _jsx(_components.h3, {\n children: \"Server-side enrichment\"\n }), \"\\n\", _jsx(_components.p, {\n children: \"Attach a user reference or tags, such as a risk or bot verdict, to a flow without sending them\\nthrough the browser. Target a flow by event ID or temporal matching; authenticated enrichment\\nallows a symmetric 10-second matching tolerance.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"If your backend does not know the Observe session ID, send \", _jsx(_components.code, {\n children: \"crossEnvironmentTransactionID\"\n }), \"\\ninstead of \", _jsx(_components.code, {\n children: \"sessionID\"\n }), \": a UUID that the browser also sends as \", _jsx(_components.code, {\n children: \"user.crossEnvironmentTransactionID\"\n }), \"\\non one of its events (for example an ID per sign-in attempt that browser and backend share).\\nExactly one of the two must be set. The events are then matched against the flows of the\\nbrowser sessions that carried the same ID, using the same temporal matching; when several\\nbrowser sessions carried it, the flow running at the event time is enriched. The request may\\narrive before or after the browser events. Retries with the same transaction ID and event \", _jsx(_components.code, {\n children: \"id\"\n }), \"\\nare deduplicated.\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"A request accepts at most 2,000 events and low-level events combined.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Required API key permission: \", _jsx(_components.code, {\n children: \"observe:events:write\"\n }), \".\"]\n })]\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}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Create new events","description":"Ingests events from your backend using an API key. For browser and native collection, use the\n[Observe SDKs](/sdks/overview) and their separate project-scoped transport.\n\n### Server-side enrichment\n\nAttach a user reference or tags, such as a risk or bot verdict, to a flow without sending them\nthrough the browser. Target a flow by event ID or temporal matching; authenticated enrichment\nallows a symmetric 10-second matching tolerance.\n\nIf your backend does not know the Observe session ID, send `crossEnvironmentTransactionID`\ninstead of `sessionID`: a UUID that the browser also sends as `user.crossEnvironmentTransactionID`\non one of its events (for example an ID per sign-in attempt that browser and backend share).\nExactly one of the two must be set. The events are then matched against the flows of the\nbrowser sessions that carried the same ID, using the same temporal matching; when several\nbrowser sessions carried it, the flow running at the event time is enriched. The request may\narrive before or after the browser events. Retries with the same transaction ID and event `id`\nare deduplicated.\n\nA request accepts at most 2,000 events and low-level events combined.\n\nRequired API key permission: `observe:events:write`.","deprecated":null,"version":null,"sidebarTitle":"Send events","openapi":"/api-reference/openapi/observe.yaml post /observe/events","href":"/api-reference/observe/send-events","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/corbado-43/07f8b5952369ac3b/content/matomo.js","/_mintlify/custom/corbado-43/3de72dcbd84a772a/content/linkedin-insight-tag.js","/_mintlify/custom/corbado-43/674dd5320b6b99a7/content/commonroom.js"],"openApiReferenceData":{"operation":{"x-mint":{"href":"/api-reference/observe/send-events"},"summary":"Create new events","description":"Ingests events from your backend using an API key. For browser and native collection, use the\n[Observe SDKs](/sdks/overview) and their separate project-scoped transport.\n\n### Server-side enrichment\n\nAttach a user reference or tags, such as a risk or bot verdict, to a flow without sending them\nthrough the browser. Target a flow by event ID or temporal matching; authenticated enrichment\nallows a symmetric 10-second matching tolerance.\n\nIf your backend does not know the Observe session ID, send `crossEnvironmentTransactionID`\ninstead of `sessionID`: a UUID that the browser also sends as `user.crossEnvironmentTransactionID`\non one of its events (for example an ID per sign-in attempt that browser and backend share).\nExactly one of the two must be set. The events are then matched against the flows of the\nbrowser sessions that carried the same ID, using the same temporal matching; when several\nbrowser sessions carried it, the flow running at the event time is enriched. The request may\narrive before or after the browser events. Retries with the same transaction ID and event `id`\nare deduplicated.\n\nA request accepts at most 2,000 events and low-level events combined.\n\nRequired API key permission: `observe:events:write`.","operationId":"ObserveEventCreateAuthenticated","tags":["ObserveEvent"],"security":["1dcef489-3540-4ec1-8856-f23014662e5b"],"requestBody":"d2ffdc09-cdbd-4e71-9b8b-992e1cac7cf9","responses":{"200":"4ecb5cbb-a9ed-4daf-bbed-f85690941861","204":"27012a2d-ec2a-4c4a-b64c-fe2f97a6cbd3","default":"5a846bfc-a4de-415c-a015-c48d1c5b5c43"},"method":"post","type":"path","servers":["22c3014f-9385-4d0c-83b4-842924313628"],"path":"/observe/events","baseUrlOptions":["https://api.cloud.corbado.io/v1"],"title":"Create new events","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["events"],"properties":{"events":{"type":"array","description":"Array of events to create. The request must carry at least one item (event, low, telemetry entry, probe or `deviceInfo`); events and lows together are at most 2000.","items":{"type":"object","additionalProperties":true,"required":["type","name","timestamp"],"properties":{"type":{"type":"string","description":"Type of the tracking event","enum":["predefined","custom"],"x-oapi-codegen-extra-tags":{"validate":"oneof=predefined custom"},"isRequired":true,"uniqueKey":"events.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"name":{"type":"string","description":"Name of the event. `flow_enriched` carries a user reference and/or tags and is accepted on both unauthenticated and authenticated endpoints. Its optional `data` section selects the matching flow and controls tag expansion: Explicit targeting uses `{ targetEventId: \"\u003cclient event UUID>\" }` and enriches the flows that directly own that event in the same project and session, including completed flows: every flow a `flow_started` opened, the flow a `flow_finished` finished, or the flow of one of its subflow steps — never a nested flow's event and never another enrichment — so an integration can enrich a flow from the page that finished it. `flowStartedEventId` is deprecated: it remains accepted as an alias of `targetEventId` for SDKs that predate it, and both may be sent together only with the same UUID. Explicit targeting is mutually exclusive with `match`; it never falls back to temporal matching, advances flow duration, or establishes identity for unrelated later flows. Delivery order does not matter once both events are available to classification. Without an explicit target, temporal targeting uses `{ match: { flowType?: string, at?: \"started\" | \"finished\" | \"during\" }, expCh?: boolean, expFol?: boolean }` — defaults `flowType` login, `at` finished, `expCh`/`expFol` true. The explicit `flowType` value `*` accepts any flow type; omission retains the login default. `started` and `finished` select the nearest qualifying start or finish; `during` selects the innermost matching flow at the event time. Temporal unauthenticated enrichments require a flow started or explicitly continued in the emitting session before the enrichment and still open when it is emitted. Timestamp and sequence determine emission order; delivery time does not affect ownership. Matching has no grace period, and these references cannot identify earlier flows through late or future-reference fallback. Sequences must be non-negative. Authenticated enrichment retains a symmetric 10-second matching tolerance. `expCh` and `expFol` control tag expansion to child and following flows; user identity propagates forward independently. An unmatched enrichment has no flow association and its tags are dropped, while its reference remains available for forward propagation. The legacy alias `session_enriched` remains accepted; on the unauthenticated endpoint its `data` must remain empty for compatibility. User references on other events remain supported. On the authenticated endpoint, `flow_finished` does not close a flow in event order: it finishes the unfinished flow of its `flowName` that runs at the event time (from 10 seconds before the flow's start to 10 seconds after its last client event), in the event's session or else in a session sharing its `crossEnvironmentTransactionID`; the nearest such flow wins and takes the event's user reference and tags. Without such a flow, or for a flow that is already finished, the event is ignored; it never creates a flow.","enum":["flow_started","flow_finished","flow_reset","flow_decided","flow_auto_finished","auth_method_decision_started","auth_method_decision_finished","auth_decision_started","auth_decision_finished","subflow_started","subflow_step_started","subflow_step_finished","subflow_step_error","subflow_trigger","subflow_spacer","subflow_error","conversion","session_enriched","flow_enriched"],"example":"flow_started","x-oapi-codegen-extra-tags":{"validate":"required,oneof=flow_started flow_finished flow_reset flow_decided flow_auto_finished auth_method_decision_started auth_method_decision_finished auth_decision_started auth_decision_finished subflow_started subflow_step_started subflow_step_finished subflow_step_error subflow_trigger subflow_spacer subflow_error conversion session_enriched flow_enriched"},"isRequired":true,"uniqueKey":"events.items.[INDEX].name","typeLabel":"enum\u003cstring>"},"timestamp":{"type":"integer","format":"int64","description":"Unix timestamp of when the event was created (in milliseconds elapsed since January 1, 1970, 00:00:00 UTC)","example":1752738240000,"x-oapi-codegen-extra-tags":{"validate":"required"},"isRequired":true,"uniqueKey":"events.items.[INDEX].timestamp","typeLabel":"integer\u003cint64>"},"id":{"type":"string","description":"Client-generated unique event ID (UUID) used for idempotent ingestion. When provided, the backend deduplicates events with the same id within the same session, so safe client retries do not create duplicates. Optional for backwards compatibility.","example":"550e8400-e29b-41d4-a716-446655440000","x-oapi-codegen-extra-tags":{"validate":"omitempty,uuid"},"uniqueKey":"events.items.[INDEX].id","typeLabel":"string"},"data":{"type":"object","description":"Additional event data (arbitrary JSON)","additionalProperties":true,"uniqueKey":"events.items.[INDEX].data","typeLabel":"object"},"meta":{"type":"object","properties":{"captureVersion":{"type":"integer","format":"int32","description":"Capture contract version. Missing means legacy v0.","x-oapi-codegen-extra-tags":{"validate":"omitempty,min=0,max=255"},"uniqueKey":"events.items.[INDEX].meta.captureVersion","typeLabel":"integer\u003cint32>"},"pageId":{"type":"string","description":"Document capture UUID, retained through retries.","x-oapi-codegen-extra-tags":{"validate":"omitempty,uuid"},"uniqueKey":"events.items.[INDEX].meta.pageId","typeLabel":"string"},"initiator":{"type":"string","description":"Semantic initiating control when observed; unknown otherwise.","x-oapi-codegen-extra-tags":{"validate":"omitempty,max=32"},"uniqueKey":"events.items.[INDEX].meta.initiator","typeLabel":"string"},"subflowStartEventId":{"type":"string","description":"Client UUID of the owning start event; preserved on each step event through retries.","x-oapi-codegen-extra-tags":{"validate":"omitempty,uuid"},"uniqueKey":"events.items.[INDEX].meta.subflowStartEventId","typeLabel":"string"},"trackingSourcePath":{"type":"string","description":"Tracking source path of the event including query string (\"where\" was this event created). Web SDKs send it (page path); native app SDKs send the host-provided screen name and omit the field when no screen is set. The backend stores it ONCE PER BATCH — on the first event of the batch that reports one; later events of the batch are stored without it and resolve the batch's path on read — so an SDK may omit it on all but the first event of a batch. Email addresses and phone numbers are redacted before storage.","uniqueKey":"events.items.[INDEX].meta.trackingSourcePath","typeLabel":"string"},"tabId":{"type":"string","description":"Per-tab id (sessionStorage-scoped) of the tab that CREATED this event, stamped at track() time. Distinguishes tabs that share one localStorage-backed session; late-flushed events keep the tab they originated in, regardless of which page delivers them. Native app SDKs send their per-process id here on every event (the process-incarnation marker used for stream splitting and seq disambiguation).\n","uniqueKey":"events.items.[INDEX].meta.tabId","typeLabel":"string"}},"uniqueKey":"events.items.[INDEX].meta","typeLabel":"object"},"deviceInfo":{"type":"object","required":["type","clientEnvHandle","clientEnvHandleMeta"],"properties":{"type":{"type":"string","enum":["web","app"],"isRequired":true,"uniqueKey":"events.items.[INDEX].deviceInfo.type","typeLabel":"enum\u003cstring>"},"clientEnvHandle":{"type":"string","isRequired":true,"uniqueKey":"events.items.[INDEX].deviceInfo.clientEnvHandle","typeLabel":"string"},"clientEnvHandleMeta":{"type":"object","required":["ts","source"],"properties":{"ts":{"type":"integer","format":"int64","isRequired":true,"uniqueKey":"events.items.[INDEX].deviceInfo.clientEnvHandleMeta.ts","typeLabel":"integer\u003cint64>"},"source":{"type":"string","enum":["ls","cookie","storage"],"isRequired":true,"uniqueKey":"events.items.[INDEX].deviceInfo.clientEnvHandleMeta.source","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"events.items.[INDEX].deviceInfo.clientEnvHandleMeta","typeLabel":"object"},"tabId":{"type":"string","description":"Per-tab id (sessionStorage-scoped) distinguishing tabs that share one localStorage-backed session.","uniqueKey":"events.items.[INDEX].deviceInfo.tabId","typeLabel":"string"},"data":{"oneOf":[{"type":"object","properties":{"bluetoothAvailable":{"type":"boolean","uniqueKey":"events.items.[INDEX].deviceInfo.data.oneOf.0.bluetoothAvailable","typeLabel":"boolean"},"userVerifyingPlatformAuthenticatorAvailable":{"type":"boolean","uniqueKey":"events.items.[INDEX].deviceInfo.data.oneOf.0.userVerifyingPlatformAuthenticatorAvailable","typeLabel":"boolean"},"conditionalMediationAvailable":{"type":"boolean","uniqueKey":"events.items.[INDEX].deviceInfo.data.oneOf.0.conditionalMediationAvailable","typeLabel":"boolean"},"javaScriptHighEntropy":{"type":"object","required":["platform","platformVersion","mobile"],"properties":{"platform":{"type":"string","isRequired":true,"uniqueKey":"events.items.[INDEX].deviceInfo.data.oneOf.0.javaScriptHighEntropy.platform","typeLabel":"string"},"platformVersion":{"type":"string","isRequired":true,"uniqueKey":"events.items.[INDEX].deviceInfo.data.oneOf.0.javaScriptHighEntropy.platformVersion","typeLabel":"string"},"mobile":{"type":"boolean","isRequired":true,"uniqueKey":"events.items.[INDEX].deviceInfo.data.oneOf.0.javaScriptHighEntropy.mobile","typeLabel":"boolean"},"model":{"type":"string","description":"Device model from the UA-CH model hint (only populated on Android browsers).","uniqueKey":"events.items.[INDEX].deviceInfo.data.oneOf.0.javaScriptHighEntropy.model","typeLabel":"string"}},"uniqueKey":"events.items.[INDEX].deviceInfo.data.oneOf.0.javaScriptHighEntropy","typeLabel":"object"},"webDriver":{"type":"boolean","uniqueKey":"events.items.[INDEX].deviceInfo.data.oneOf.0.webDriver","typeLabel":"boolean"},"privateMode":{"type":"boolean","uniqueKey":"events.items.[INDEX].deviceInfo.data.oneOf.0.privateMode","typeLabel":"boolean"},"clientCapabilities":{"type":"object","additionalProperties":{"type":"string","uniqueKey":"events.items.[INDEX].deviceInfo.data.oneOf.0.clientCapabilities.additionalProperties","typeLabel":"string"},"uniqueKey":"events.items.[INDEX].deviceInfo.data.oneOf.0.clientCapabilities","typeLabel":"object"},"maxTouchPoints":{"type":"integer","description":"navigator.maxTouchPoints, the maximum number of simultaneous touch contact points. Stored raw. Values outside 0-255 are ignored.","uniqueKey":"events.items.[INDEX].deviceInfo.data.oneOf.0.maxTouchPoints","typeLabel":"integer"}},"uniqueKey":"events.items.[INDEX].deviceInfo.data.oneOf.0","typeLabel":"object"},{"type":"object","required":["osName","osVersion"],"properties":{"osName":{"type":"string","isRequired":true,"uniqueKey":"events.items.[INDEX].deviceInfo.data.oneOf.1.osName","typeLabel":"string"},"osVersion":{"type":"string","isRequired":true,"uniqueKey":"events.items.[INDEX].deviceInfo.data.oneOf.1.osVersion","typeLabel":"string"},"model":{"type":"string","description":"Device model (e.g. \"iPhone15,3\", \"Pixel 8\"). Optional; older SDKs omit it.","uniqueKey":"events.items.[INDEX].deviceInfo.data.oneOf.1.model","typeLabel":"string"},"brand":{"type":"string","description":"Device manufacturer/brand (e.g. \"Apple\", \"Google\"). Optional; older SDKs omit it.","uniqueKey":"events.items.[INDEX].deviceInfo.data.oneOf.1.brand","typeLabel":"string"},"appName":{"type":"string","description":"Host application name (e.g. \"Acme Banking\"). Optional; older SDKs omit it.","uniqueKey":"events.items.[INDEX].deviceInfo.data.oneOf.1.appName","typeLabel":"string"},"appVersion":{"type":"string","description":"Host application version (e.g. \"3.2.1\"). Optional; older SDKs omit it.","uniqueKey":"events.items.[INDEX].deviceInfo.data.oneOf.1.appVersion","typeLabel":"string"},"deviceOwnerAuth":{"type":"string","enum":["none","code","bio-face","bio-touch","bio-strong","bio-weak","bio"],"description":"Device owner authentication / screen-lock method. iOS reports bio-face/bio-touch, Android reports bio-strong/bio-weak, bio is a catch-all for other biometrics. Optional; older SDKs omit it.","uniqueKey":"events.items.[INDEX].deviceInfo.data.oneOf.1.deviceOwnerAuth","typeLabel":"enum\u003cstring>"},"isBluetoothAvailable":{"type":"boolean","description":"Whether Bluetooth is available on the device. Optional; older SDKs omit it.","uniqueKey":"events.items.[INDEX].deviceInfo.data.oneOf.1.isBluetoothAvailable","typeLabel":"boolean"},"androidGooglePlayServicesVersion":{"type":"string","description":"Google Play Services version (Android only; null on iOS). Optional; older SDKs omit it.","uniqueKey":"events.items.[INDEX].deviceInfo.data.oneOf.1.androidGooglePlayServicesVersion","typeLabel":"string"},"locale":{"type":"string","description":"Device locale (BCP-47, e.g. \"en-US\"). Optional; older SDKs omit it.","uniqueKey":"events.items.[INDEX].deviceInfo.data.oneOf.1.locale","typeLabel":"string"},"screen":{"type":"object","description":"Native app screen geometry in logical points plus the backing scale factor.","properties":{"widthPoints":{"type":"number","format":"float","uniqueKey":"events.items.[INDEX].deviceInfo.data.oneOf.1.screen.widthPoints","typeLabel":"number\u003cfloat>"},"heightPoints":{"type":"number","format":"float","uniqueKey":"events.items.[INDEX].deviceInfo.data.oneOf.1.screen.heightPoints","typeLabel":"number\u003cfloat>"},"scale":{"type":"number","format":"float","uniqueKey":"events.items.[INDEX].deviceInfo.data.oneOf.1.screen.scale","typeLabel":"number\u003cfloat>"}},"uniqueKey":"events.items.[INDEX].deviceInfo.data.oneOf.1.screen","typeLabel":"object"}},"uniqueKey":"events.items.[INDEX].deviceInfo.data.oneOf.1","typeLabel":"object"}],"uniqueKey":"events.items.[INDEX].deviceInfo.data","typeLabel":"object"},"collectionErrors":{"type":"array","items":{"type":"object","required":["field","source","error"],"properties":{"field":{"type":"string","enum":["bluetoothAvailable","conditionalMediationAvailable","userVerifyingPlatformAuthenticatorAvailable","clientCapabilities","javaScriptHighEntropy","privateMode","webdriver","maxTouchPoints"],"isRequired":true,"uniqueKey":"events.items.[INDEX].deviceInfo.collectionErrors.items.[INDEX].field","typeLabel":"enum\u003cstring>"},"source":{"type":"string","isRequired":true,"uniqueKey":"events.items.[INDEX].deviceInfo.collectionErrors.items.[INDEX].source","typeLabel":"string"},"error":{"type":"object","required":["message"],"properties":{"message":{"type":"string","isRequired":true,"uniqueKey":"events.items.[INDEX].deviceInfo.collectionErrors.items.[INDEX].error.message","typeLabel":"string"},"name":{"type":"string","uniqueKey":"events.items.[INDEX].deviceInfo.collectionErrors.items.[INDEX].error.name","typeLabel":"string"}},"isRequired":true,"uniqueKey":"events.items.[INDEX].deviceInfo.collectionErrors.items.[INDEX].error","typeLabel":"object"}},"uniqueKey":"events.items.[INDEX].deviceInfo.collectionErrors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"events.items.[INDEX].deviceInfo.collectionErrors","typeLabel":"object[]"}},"uniqueKey":"events.items.[INDEX].deviceInfo","typeLabel":"object"},"passwordManagers":{"type":"array","description":"Password manager browser extensions the SDK detected on the page so far. Sent by the SDK only when the set grew since the previous event; omitting it never removes an earlier detection. Unknown names are ignored.\n","items":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"Name of the detected password manager, e.g. `1password`.","example":"1password","isRequired":true,"uniqueKey":"events.items.[INDEX].passwordManagers.items.[INDEX].name","typeLabel":"string"}},"uniqueKey":"events.items.[INDEX].passwordManagers.items.[INDEX]","typeLabel":"object"},"uniqueKey":"events.items.[INDEX].passwordManagers","typeLabel":"object[]"},"user":{"type":"object","properties":{"userId":{"type":"string","description":"User ID","uniqueKey":"events.items.[INDEX].user.userId","typeLabel":"string"},"identifier":{"type":"string","description":"User identifier (e.g. email)","uniqueKey":"events.items.[INDEX].user.identifier","typeLabel":"string"},"crossEnvironmentTransactionIDStart":{"type":"string","description":"Cross-environment transaction ID used to correlate events across sessions/devices","uniqueKey":"events.items.[INDEX].user.crossEnvironmentTransactionIDStart","typeLabel":"string"},"crossEnvironmentTransactionIDFinish":{"type":"string","description":"Cross-environment transaction ID used to correlate events across sessions/devices","uniqueKey":"events.items.[INDEX].user.crossEnvironmentTransactionIDFinish","typeLabel":"string"},"crossEnvironmentTransactionID":{"type":"string","description":"Generic transaction ID that links any sessions sharing the same value so they are classified together (independent of subflow type)","uniqueKey":"events.items.[INDEX].user.crossEnvironmentTransactionID","typeLabel":"string"}},"uniqueKey":"events.items.[INDEX].user","typeLabel":"object"},"tags":{"type":"object","additionalProperties":{"type":"string","uniqueKey":"events.items.[INDEX].tags.additionalProperties","typeLabel":"string"},"uniqueKey":"events.items.[INDEX].tags","typeLabel":"object"},"experiments":{"type":"object","description":"Experiment assignments active for this event, as a map of experiment key to variant value (e.g. {\"button_color\": \"blue\"}). First-class, prefix-free representation of A/B-test exposure; the backend attributes the flow to these. The SDK sends the full active set on every event, so the latest change is the complete truth.\n","additionalProperties":{"type":"string","uniqueKey":"events.items.[INDEX].experiments.additionalProperties","typeLabel":"string"},"uniqueKey":"events.items.[INDEX].experiments","typeLabel":"object"},"seq":{"type":"integer","description":"Sequence number to order events within the same session (must be strictly increasing for each subsequent event in the same session). It belongs to the SDK's counter, so a server sending events into a browser session does not share it: on the authenticated endpoint the value is moved into negative space at ingest, where it orders that sender's own events only and is excluded from gap detection. Send -1 (or any negative value, which is stored unchanged) to state explicitly that the event carries no sequence information. Never try to force sort order with an out-of-band positive value such as 100000 — relative to the client's counter it means \"everything in between was lost in transit\".\n","uniqueKey":"events.items.[INDEX].seq","typeLabel":"integer"}},"uniqueKey":"events.items.[INDEX]","typeLabel":"object"},"x-oapi-codegen-extra-tags":{"validate":"max=2000,dive"},"isRequired":true,"uniqueKey":"events","typeLabel":"object[]"},"deliveryAck":{"type":"boolean","description":"Request synchronous durable ingestion. Only a committed request returns X-Corbado-Observe-Accepted=1; temporary persistence failures return 503. Legacy delivery is unchanged.","uniqueKey":"deliveryAck","typeLabel":"boolean"},"sessionID":{"type":"string","description":"Session ID for the events (UUID format). Required, except for authenticated requests that send\n`crossEnvironmentTransactionID` instead.","example":"550e8400-e29b-41d4-a716-446655440000","x-go-type-skip-optional-pointer":true,"x-oapi-codegen-extra-tags":{"validate":"required_without=CrossEnvironmentTransactionID,omitempty,uuid"},"uniqueKey":"sessionID","typeLabel":"string"},"crossEnvironmentTransactionID":{"type":"string","description":"Authenticated requests only, instead of `sessionID`: a UUID shared with the browser, which sends\nit as `user.crossEnvironmentTransactionID` on one of its events. The events are attached to the\nflows of the browser sessions that carried the same ID. Must not be combined with `sessionID`.","example":"3f2b8c1e-7d4a-4f6b-9e2c-1a5d8b7c6e4f","x-oapi-codegen-extra-tags":{"validate":"excluded_with=SessionID,omitempty,uuid"},"uniqueKey":"crossEnvironmentTransactionID","typeLabel":"string"},"lows":{"type":"array","description":"Array of low-level events to create. The combined number of events and lows must be at least 1 and at most 2000.","items":{"required":["lowType","ts"],"properties":{"lowType":{"type":"string","isRequired":true,"uniqueKey":"lows.items.[INDEX].lowType","typeLabel":"string"},"ts":{"type":"integer","format":"int64","isRequired":true,"uniqueKey":"lows.items.[INDEX].ts","typeLabel":"integer\u003cint64>"},"captureSeq":{"type":"integer","format":"int64","minimum":0,"maximum":4294967295,"description":"Unsigned per-page capture order, reserved at observation start and retained through retries. Zero or missing means unavailable.","x-oapi-codegen-extra-tags":{"validate":"omitempty,min=0,max=4294967295"},"uniqueKey":"lows.items.[INDEX].captureSeq","typeLabel":"integer\u003cint64>"},"captureVersion":{"type":"integer","format":"int32","description":"Capture contract version. Missing means legacy v0.","x-oapi-codegen-extra-tags":{"validate":"omitempty,min=0,max=255"},"uniqueKey":"lows.items.[INDEX].captureVersion","typeLabel":"integer\u003cint32>"},"pageId":{"type":"string","description":"Document capture UUID, retained through retries.","x-oapi-codegen-extra-tags":{"validate":"omitempty,uuid"},"uniqueKey":"lows.items.[INDEX].pageId","typeLabel":"string"},"initiator":{"type":"string","description":"Semantic initiating control when observed; unknown otherwise.","x-oapi-codegen-extra-tags":{"validate":"omitempty,max=32"},"uniqueKey":"lows.items.[INDEX].initiator","typeLabel":"string"},"id":{"type":"string","description":"Immutable client low-event UUID for retry deduplication.","x-oapi-codegen-extra-tags":{"validate":"omitempty,uuid"},"uniqueKey":"lows.items.[INDEX].id","typeLabel":"string"},"subflowStartEventId":{"type":"string","description":"Client UUID of the owning subflow_started, scoped to this project and session.","x-oapi-codegen-extra-tags":{"validate":"omitempty,uuid"},"uniqueKey":"lows.items.[INDEX].subflowStartEventId","typeLabel":"string"},"sourceKind":{"type":"string","description":"Capture source category. Unknown future values are stored as NULL.","x-oapi-codegen-extra-tags":{"validate":"omitempty,max=32"},"uniqueKey":"lows.items.[INDEX].sourceKind","typeLabel":"string"},"fieldRole":{"type":"string","description":"Logical field role (password, identifier, otp, data). Unknown values are stored as NULL.","x-oapi-codegen-extra-tags":{"validate":"omitempty,max=32"},"uniqueKey":"lows.items.[INDEX].fieldRole","typeLabel":"string"},"inputEffect":{"type":"string","description":"Observed value effect (fill, modify, clear); unknown values are ignored.","x-oapi-codegen-extra-tags":{"validate":"omitempty,max=32"},"uniqueKey":"lows.items.[INDEX].inputEffect","typeLabel":"string"},"durationMs":{"type":"integer","format":"int64","uniqueKey":"lows.items.[INDEX].durationMs","typeLabel":"integer\u003cint64>"},"fieldType":{"type":"string","description":"Semantic field the low relates to, named by subflow-type vocabulary (e.g. provide-identifier, password-login). Native SDK extension; free-form on the wire — the backend stores known values and drops unknown ones.","x-oapi-codegen-extra-tags":{"validate":"omitempty,max=64"},"uniqueKey":"lows.items.[INDEX].fieldType","typeLabel":"string"},"actor":{"type":"string","description":"Who caused the observed effect, when known (password-manager, app). Native SDK extension; free-form on the wire — the backend stores known values and drops unknown ones.","x-oapi-codegen-extra-tags":{"validate":"omitempty,max=64"},"uniqueKey":"lows.items.[INDEX].actor","typeLabel":"string"}},"type":"object","uniqueKey":"lows.items.[INDEX]","typeLabel":"object"},"x-oapi-codegen-extra-tags":{"validate":"omitempty,max=2000,dive"},"uniqueKey":"lows","typeLabel":"object[]"},"telemetry":{"type":"array","description":"Diagnostic telemetry entries (SDK/integration-side messages, not auth-flow events). They ride along\nwith the normal event batch, are tied to the same session, and never participate in flow\nclassification. A batch may carry telemetry only (no events/lows). Capped at 2000 per batch.\n","items":{"type":"object","description":"A single diagnostic telemetry entry (a level + free-form message) tied to the batch's session.\nUsed for SDK/integration-side diagnostics; it is never classified as an auth-flow event.\n","required":["level","message","ts"],"properties":{"level":{"type":"string","description":"Severity of the telemetry message.","enum":["info","error"],"x-oapi-codegen-extra-tags":{"validate":"required,oneof=info error"},"isRequired":true,"uniqueKey":"telemetry.items.[INDEX].level","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Free-form diagnostic message. Truncated server-side. Must not contain credentials or PII.","x-oapi-codegen-extra-tags":{"validate":"required,max=1000"},"isRequired":true,"uniqueKey":"telemetry.items.[INDEX].message","typeLabel":"string"},"ts":{"type":"integer","format":"int64","description":"Client capture time (unix ms). Corrected against batch send time like low events.","x-oapi-codegen-extra-tags":{"validate":"required"},"isRequired":true,"uniqueKey":"telemetry.items.[INDEX].ts","typeLabel":"integer\u003cint64>"},"id":{"type":"string","description":"Client-generated idempotency id (uuidv7). Lets safe resends (retry/beacon/outbox) dedupe server-side.","x-oapi-codegen-extra-tags":{"validate":"omitempty,uuid"},"uniqueKey":"telemetry.items.[INDEX].id","typeLabel":"string"}},"uniqueKey":"telemetry.items.[INDEX]","typeLabel":"object"},"x-oapi-codegen-extra-tags":{"validate":"omitempty,max=2000,dive"},"uniqueKey":"telemetry","typeLabel":"object[]"},"probes":{"type":"array","description":"Internal, experimental: raw probe items captured by Corbado autocapture bundles. They ride along\nwith the normal event batch, are tied to the same session and never participate in flow\nclassification. A batch may carry probes only. Invalid, oversized or over-limit items are dropped\nserver-side; they never cause the batch to be rejected. At most 200 items per batch are stored.\n","items":{"type":"object","description":"A single raw probe item (internal autocapture diagnostics). Items are validated one by one on the\nserver; an invalid item is dropped, the rest of the batch is stored. No validation tags on purpose.\n","required":["id","kind","ts","pageId","seq","payload"],"properties":{"id":{"type":"string","description":"Client-generated idempotency id (uuidv7).","isRequired":true,"uniqueKey":"probes.items.[INDEX].id","typeLabel":"string"},"kind":{"type":"string","description":"Probe kind, `^[a-z][a-z0-9_-]{0,31}$` (e.g. ui, act, net, page, snapshot).","isRequired":true,"uniqueKey":"probes.items.[INDEX].kind","typeLabel":"string"},"ts":{"type":"integer","format":"int64","description":"Client capture time (unix ms). Corrected against the batch send time.","isRequired":true,"uniqueKey":"probes.items.[INDEX].ts","typeLabel":"integer\u003cint64>"},"pageId":{"type":"string","description":"Id of the document the item was captured on, `^[A-Za-z0-9_-]{1,16}$`.","isRequired":true,"uniqueKey":"probes.items.[INDEX].pageId","typeLabel":"string"},"seq":{"type":"integer","format":"int64","description":"Sequence number per pageId (>= 0); gaps mean lost items.","isRequired":true,"uniqueKey":"probes.items.[INDEX].seq","typeLabel":"integer\u003cint64>"},"payload":{"description":"Probe payload, a JSON object or array; at most 16384 bytes serialized.","x-go-type":"json.RawMessage","isRequired":true,"uniqueKey":"probes.items.[INDEX].payload","typeLabel":"any"},"cfg":{"type":"string","description":"Hash of the probe config the item was captured under, `^[A-Za-z0-9_-]{1,16}$`.","uniqueKey":"probes.items.[INDEX].cfg","typeLabel":"string"},"ctx":{"type":"object","description":"Integration context at capture time. Each value at most 64 characters.","properties":{"state":{"type":"string","uniqueKey":"probes.items.[INDEX].ctx.state","typeLabel":"string"},"flowType":{"type":"string","uniqueKey":"probes.items.[INDEX].ctx.flowType","typeLabel":"string"},"step":{"type":"string","uniqueKey":"probes.items.[INDEX].ctx.step","typeLabel":"string"}},"uniqueKey":"probes.items.[INDEX].ctx","typeLabel":"object"}},"uniqueKey":"probes.items.[INDEX]","typeLabel":"object"},"uniqueKey":"probes","typeLabel":"object[]"},"deviceInfo":{"type":"object","required":["type","clientEnvHandle","clientEnvHandleMeta"],"properties":{"type":{"type":"string","enum":["web","app"],"isRequired":true,"uniqueKey":"deviceInfo.type","typeLabel":"enum\u003cstring>"},"clientEnvHandle":{"type":"string","isRequired":true,"uniqueKey":"deviceInfo.clientEnvHandle","typeLabel":"string"},"clientEnvHandleMeta":{"type":"object","required":["ts","source"],"properties":{"ts":{"type":"integer","format":"int64","isRequired":true,"uniqueKey":"deviceInfo.clientEnvHandleMeta.ts","typeLabel":"integer\u003cint64>"},"source":{"type":"string","enum":["ls","cookie","storage"],"isRequired":true,"uniqueKey":"deviceInfo.clientEnvHandleMeta.source","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"deviceInfo.clientEnvHandleMeta","typeLabel":"object"},"tabId":{"type":"string","description":"Per-tab id (sessionStorage-scoped) distinguishing tabs that share one localStorage-backed session.","uniqueKey":"deviceInfo.tabId","typeLabel":"string"},"data":{"oneOf":[{"type":"object","properties":{"bluetoothAvailable":{"type":"boolean","uniqueKey":"deviceInfo.data.oneOf.0.bluetoothAvailable","typeLabel":"boolean"},"userVerifyingPlatformAuthenticatorAvailable":{"type":"boolean","uniqueKey":"deviceInfo.data.oneOf.0.userVerifyingPlatformAuthenticatorAvailable","typeLabel":"boolean"},"conditionalMediationAvailable":{"type":"boolean","uniqueKey":"deviceInfo.data.oneOf.0.conditionalMediationAvailable","typeLabel":"boolean"},"javaScriptHighEntropy":{"type":"object","required":["platform","platformVersion","mobile"],"properties":{"platform":{"type":"string","isRequired":true,"uniqueKey":"deviceInfo.data.oneOf.0.javaScriptHighEntropy.platform","typeLabel":"string"},"platformVersion":{"type":"string","isRequired":true,"uniqueKey":"deviceInfo.data.oneOf.0.javaScriptHighEntropy.platformVersion","typeLabel":"string"},"mobile":{"type":"boolean","isRequired":true,"uniqueKey":"deviceInfo.data.oneOf.0.javaScriptHighEntropy.mobile","typeLabel":"boolean"},"model":{"type":"string","description":"Device model from the UA-CH model hint (only populated on Android browsers).","uniqueKey":"deviceInfo.data.oneOf.0.javaScriptHighEntropy.model","typeLabel":"string"}},"uniqueKey":"deviceInfo.data.oneOf.0.javaScriptHighEntropy","typeLabel":"object"},"webDriver":{"type":"boolean","uniqueKey":"deviceInfo.data.oneOf.0.webDriver","typeLabel":"boolean"},"privateMode":{"type":"boolean","uniqueKey":"deviceInfo.data.oneOf.0.privateMode","typeLabel":"boolean"},"clientCapabilities":{"type":"object","additionalProperties":{"type":"string","uniqueKey":"deviceInfo.data.oneOf.0.clientCapabilities.additionalProperties","typeLabel":"string"},"uniqueKey":"deviceInfo.data.oneOf.0.clientCapabilities","typeLabel":"object"},"maxTouchPoints":{"type":"integer","description":"navigator.maxTouchPoints, the maximum number of simultaneous touch contact points. Stored raw. Values outside 0-255 are ignored.","uniqueKey":"deviceInfo.data.oneOf.0.maxTouchPoints","typeLabel":"integer"}},"uniqueKey":"deviceInfo.data.oneOf.0","typeLabel":"object"},{"type":"object","required":["osName","osVersion"],"properties":{"osName":{"type":"string","isRequired":true,"uniqueKey":"deviceInfo.data.oneOf.1.osName","typeLabel":"string"},"osVersion":{"type":"string","isRequired":true,"uniqueKey":"deviceInfo.data.oneOf.1.osVersion","typeLabel":"string"},"model":{"type":"string","description":"Device model (e.g. \"iPhone15,3\", \"Pixel 8\"). Optional; older SDKs omit it.","uniqueKey":"deviceInfo.data.oneOf.1.model","typeLabel":"string"},"brand":{"type":"string","description":"Device manufacturer/brand (e.g. \"Apple\", \"Google\"). Optional; older SDKs omit it.","uniqueKey":"deviceInfo.data.oneOf.1.brand","typeLabel":"string"},"appName":{"type":"string","description":"Host application name (e.g. \"Acme Banking\"). Optional; older SDKs omit it.","uniqueKey":"deviceInfo.data.oneOf.1.appName","typeLabel":"string"},"appVersion":{"type":"string","description":"Host application version (e.g. \"3.2.1\"). Optional; older SDKs omit it.","uniqueKey":"deviceInfo.data.oneOf.1.appVersion","typeLabel":"string"},"deviceOwnerAuth":{"type":"string","enum":["none","code","bio-face","bio-touch","bio-strong","bio-weak","bio"],"description":"Device owner authentication / screen-lock method. iOS reports bio-face/bio-touch, Android reports bio-strong/bio-weak, bio is a catch-all for other biometrics. Optional; older SDKs omit it.","uniqueKey":"deviceInfo.data.oneOf.1.deviceOwnerAuth","typeLabel":"enum\u003cstring>"},"isBluetoothAvailable":{"type":"boolean","description":"Whether Bluetooth is available on the device. Optional; older SDKs omit it.","uniqueKey":"deviceInfo.data.oneOf.1.isBluetoothAvailable","typeLabel":"boolean"},"androidGooglePlayServicesVersion":{"type":"string","description":"Google Play Services version (Android only; null on iOS). Optional; older SDKs omit it.","uniqueKey":"deviceInfo.data.oneOf.1.androidGooglePlayServicesVersion","typeLabel":"string"},"locale":{"type":"string","description":"Device locale (BCP-47, e.g. \"en-US\"). Optional; older SDKs omit it.","uniqueKey":"deviceInfo.data.oneOf.1.locale","typeLabel":"string"},"screen":{"type":"object","description":"Native app screen geometry in logical points plus the backing scale factor.","properties":{"widthPoints":{"type":"number","format":"float","uniqueKey":"deviceInfo.data.oneOf.1.screen.widthPoints","typeLabel":"number\u003cfloat>"},"heightPoints":{"type":"number","format":"float","uniqueKey":"deviceInfo.data.oneOf.1.screen.heightPoints","typeLabel":"number\u003cfloat>"},"scale":{"type":"number","format":"float","uniqueKey":"deviceInfo.data.oneOf.1.screen.scale","typeLabel":"number\u003cfloat>"}},"uniqueKey":"deviceInfo.data.oneOf.1.screen","typeLabel":"object"}},"uniqueKey":"deviceInfo.data.oneOf.1","typeLabel":"object"}],"uniqueKey":"deviceInfo.data","typeLabel":"object"},"collectionErrors":{"type":"array","items":{"type":"object","required":["field","source","error"],"properties":{"field":{"type":"string","enum":["bluetoothAvailable","conditionalMediationAvailable","userVerifyingPlatformAuthenticatorAvailable","clientCapabilities","javaScriptHighEntropy","privateMode","webdriver","maxTouchPoints"],"isRequired":true,"uniqueKey":"deviceInfo.collectionErrors.items.[INDEX].field","typeLabel":"enum\u003cstring>"},"source":{"type":"string","isRequired":true,"uniqueKey":"deviceInfo.collectionErrors.items.[INDEX].source","typeLabel":"string"},"error":{"type":"object","required":["message"],"properties":{"message":{"type":"string","isRequired":true,"uniqueKey":"deviceInfo.collectionErrors.items.[INDEX].error.message","typeLabel":"string"},"name":{"type":"string","uniqueKey":"deviceInfo.collectionErrors.items.[INDEX].error.name","typeLabel":"string"}},"isRequired":true,"uniqueKey":"deviceInfo.collectionErrors.items.[INDEX].error","typeLabel":"object"}},"uniqueKey":"deviceInfo.collectionErrors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"deviceInfo.collectionErrors","typeLabel":"object[]"}},"description":"A device info snapshot sent without an event, for a snapshot no event of the page could carry (e.g. a late\nupdate published after the page's last event). Handled exactly like an event's `deviceInfo` (deduplicated\nagainst, or merged into, the session's latest device info) and stamped with `meta.sent` (receive time when\nabsent). A batch may carry a device info only; it never creates events.\n","uniqueKey":"deviceInfo","typeLabel":"object"},"meta":{"type":"object","required":["sent","transport"],"properties":{"sent":{"type":"integer","format":"int64","isRequired":true,"uniqueKey":"meta.sent","typeLabel":"integer\u003cint64>"},"transport":{"type":"string","description":"Transport used by the client to send events","isRequired":true,"uniqueKey":"meta.transport","typeLabel":"string"},"flushReason":{"type":"string","description":"What triggered the flush this batch was sent in (timer, backoff, recovery, flow-finished, telemetry, visibility-change, pagehide, low-event-teardown, destroy, manual). Deliberately not an enum: a newer SDK must never have its batch rejected for reporting a trigger this backend does not know yet. Absent for legacy SDKs.","x-oapi-codegen-extra-tags":{"validate":"omitempty,max=32"},"uniqueKey":"meta.flushReason","typeLabel":"string"},"configVersion":{"type":"string","description":"Version of the SDK reliability configuration the client was running when it captured this batch. Absent for legacy SDKs or when no config was cached yet.","x-oapi-codegen-extra-tags":{"validate":"omitempty,max=64"},"uniqueKey":"meta.configVersion","typeLabel":"string"},"retryCount":{"type":"integer","format":"int32","description":"Number of prior failed delivery attempts for this batch; absent on the first attempt.","x-oapi-codegen-extra-tags":{"validate":"omitempty,min=0"},"uniqueKey":"meta.retryCount","typeLabel":"integer\u003cint32>"},"dataPolicy":{"type":"integer","format":"int32","description":"Project-scoped data policy code (0..255) the tracker is running under, as set through the SDK's\n`setDataPolicy(code)` / `init({ dataPolicy })`. Sent on every batch once known, including an\nexplicit 0; absent for legacy SDKs and before the first call. Codes are opaque project-scoped\nselectors of the project's data policies (0 = default). Stored as-is on the batch and copied onto\nthe session (last write wins); never validated at ingestion (unknown codes are reported by\nclassification).\n","x-oapi-codegen-extra-tags":{"validate":"omitempty,min=0,max=255"},"uniqueKey":"meta.dataPolicy","typeLabel":"integer\u003cint32>"}},"uniqueKey":"meta","typeLabel":"object"},"sdk":{"type":"object","description":"Identity of the SDK that produced the batch. Clients have always sent this; it is declared here so the backend can branch on it (e.g. serve the app-specific reliability config to native SDKs). Optional for backwards compatibility.","required":["name","version"],"properties":{"name":{"type":"string","description":"SDK wire name, e.g. \"@corbado/observe\" (web) or \"observe-android\".","x-oapi-codegen-extra-tags":{"validate":"max=64"},"isRequired":true,"uniqueKey":"sdk.name","typeLabel":"string"},"version":{"type":"string","description":"SDK version, e.g. \"0.2.0\".","x-oapi-codegen-extra-tags":{"validate":"max=32"},"isRequired":true,"uniqueKey":"sdk.version","typeLabel":"string"},"integrationVersion":{"type":"string","description":"Version of the integration that drives the SDK, e.g. \"1.1.22\" for an autocapture bundle. Stored on the batch to cohort sessions by integration version. Optional; a value longer than 32 characters or with characters outside `[0-9A-Za-z.+_-]` is dropped (the batch is never rejected for it).","uniqueKey":"sdk.integrationVersion","typeLabel":"string"}},"uniqueKey":"sdk","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"events":[{"name":"flow_started","timestamp":1752738240000,"id":"550e8400-e29b-41d4-a716-446655440000","data":{},"meta":{"captureVersion":123,"pageId":"\u003cstring>","initiator":"\u003cstring>","subflowStartEventId":"\u003cstring>","trackingSourcePath":"\u003cstring>","tabId":"\u003cstring>"},"passwordManagers":[{"name":"1password"}],"user":{"userId":"\u003cstring>","identifier":"\u003cstring>","crossEnvironmentTransactionIDStart":"\u003cstring>","crossEnvironmentTransactionIDFinish":"\u003cstring>","crossEnvironmentTransactionID":"\u003cstring>"},"tags":{},"experiments":{},"seq":123}],"deliveryAck":true,"sessionID":"550e8400-e29b-41d4-a716-446655440000","crossEnvironmentTransactionID":"3f2b8c1e-7d4a-4f6b-9e2c-1a5d8b7c6e4f","lows":[{"lowType":"\u003cstring>","ts":123,"captureSeq":2147483647,"captureVersion":123,"pageId":"\u003cstring>","initiator":"\u003cstring>","id":"\u003cstring>","subflowStartEventId":"\u003cstring>","sourceKind":"\u003cstring>","fieldRole":"\u003cstring>","inputEffect":"\u003cstring>","durationMs":123,"fieldType":"\u003cstring>","actor":"\u003cstring>"}],"telemetry":[{"message":"\u003cstring>","ts":123,"id":"\u003cstring>"}],"probes":[{"id":"\u003cstring>","kind":"\u003cstring>","ts":123,"pageId":"\u003cstring>","seq":123,"payload":"\u003cunknown>","cfg":"\u003cstring>","ctx":{"state":"\u003cstring>","flowType":"\u003cstring>","step":"\u003cstring>"}}]}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"4ecb5cbb-a9ed-4daf-bbed-f85690941861":{"description":"SDK reliability configuration (returned only when the X-Corbado-Observe-Config header is set). The shape depends on the requesting SDK: web SDKs receive observeEventCreateRes, native app SDKs (request `sdk.name` observe-android/observe-ios) receive the app-specific observeSdkConfigApp.","content":{"application/json":{"schema":{"oneOf":[{"type":"object","description":"SDK reliability configuration. Returned from the event ingestion endpoints only when the client opts in\nby sending the `X-Corbado-Observe-Config` request header carrying the config version the client is\ncurrently running (or `1` when it has none cached). When the sent version matches the current one the\nendpoints return `204 No Content` (nothing new); without the header they always return `204`, so this is\na fully backwards-compatible addition. The SDK applies a received config on its next page load\n(boot-snapshot model) and stamps the version it ran under into each batch's `meta.configVersion`.\n","required":["version","flushIntervalMs","durableOutbox","durableLowOutbox","beaconKeepalive","sessionContinuity","sessionInactivityMs","seqLockTimeoutMs","tvc","tph","td","telemetry","rawErrors","flushOnTelemetry","flushOnEventNames","flushOnFlowTypeFinished","deviceInfoCollectorTimeoutMs","deviceInfoTiming","aap","pmd","sourcePathQuery","sourcePathQueryAllow","retry"],"properties":{"version":{"type":"string","description":"Content-derived version (hash) of this configuration. Changes whenever any value changes. The SDK\ncaches it, echoes it in the `X-Corbado-Observe-Config` request header, and stamps it into\n`meta.configVersion` of every event batch so analyses can segment by the config actually in effect.\n","example":"3f2a1b9c0d4e","isRequired":true,"uniqueKey":"oneOf.0.version","typeLabel":"string"},"flushIntervalMs":{"type":"integer","format":"int32","description":"How often the SDK should flush its event queue, in milliseconds.","example":500,"isRequired":true,"uniqueKey":"oneOf.0.flushIntervalMs","typeLabel":"integer\u003cint32>"},"durableLowOutbox":{"type":"boolean","description":"Persist lows in a separate bounded outbox and require durable server acknowledgement. Default false.","isRequired":true,"uniqueKey":"oneOf.0.durableLowOutbox","typeLabel":"boolean"},"durableOutbox":{"type":"boolean","description":"Whether the SDK should persist queued events to a durable outbox so they survive reloads, redirects and browser-context switches.","isRequired":true,"uniqueKey":"oneOf.0.durableOutbox","typeLabel":"boolean"},"beaconKeepalive":{"type":"boolean","description":"Whether the SDK should use keepalive/sendBeacon transport for flushes triggered during page unload.","isRequired":true,"uniqueKey":"oneOf.0.beaconKeepalive","typeLabel":"boolean"},"sessionContinuity":{"type":"boolean","description":"Whether the SDK should maintain session continuity across browser-context switches (e.g. in-app browser to system browser).","isRequired":true,"uniqueKey":"oneOf.0.sessionContinuity","typeLabel":"boolean"},"sessionInactivityMs":{"type":"integer","format":"int32","description":"Inactivity threshold for continuity sessions, in milliseconds. When more time than this has\npassed since the last tracked activity, the SDK rotates to a new session id on the next load.\nOnly relevant when `sessionContinuity` is enabled.\n","example":1800000,"isRequired":true,"uniqueKey":"oneOf.0.sessionInactivityMs","typeLabel":"integer\u003cint32>"},"seqLockTimeoutMs":{"type":"integer","format":"int32","description":"Maximum time to wait for the cross-tab sequence Web Lock before allocating without it,\nin milliseconds. Clamped to 0–100ms. 0 is a sentinel that disables the lock: the SDK then\nallocates the sequence counter without requesting a lock at all, giving up cross-tab\natomicity (two tabs can allocate the same seq) to save a lock round-trip per event.\n","example":5,"isRequired":true,"uniqueKey":"oneOf.0.seqLockTimeoutMs","typeLabel":"integer\u003cint32>"},"tvc":{"type":"boolean","description":"Flush-trigger switch: flush pending events when the document becomes hidden (`visibilitychange`).\nDefault true; the SDK treats a missing value as true, so delivery can never be disabled by accident.\n","isRequired":true,"uniqueKey":"oneOf.0.tvc","typeLabel":"boolean"},"tph":{"type":"boolean","description":"Flush-trigger switch: flush pending events on `pagehide` (navigation/close). Default true.","isRequired":true,"uniqueKey":"oneOf.0.tph","typeLabel":"boolean"},"td":{"type":"boolean","description":"Flush-trigger switch: flush pending events when the integrator calls `destroy()`. Default true.","isRequired":true,"uniqueKey":"oneOf.0.td","typeLabel":"boolean"},"rawErrors":{"type":"boolean","default":true,"description":"Enables serialization of explicitly supplied raw error diagnostics into stepData.rawError.\nServer default is true; an explicit false disables diagnostics. Normalized errors\nare always reported independently. SDK built-in defaults may differ (Android defaults off). SDKs apply this using their normal config lifecycle;\ndisabling affects newly captured diagnostics, not events already queued.\n","isRequired":true,"uniqueKey":"oneOf.0.rawErrors","typeLabel":"boolean"},"telemetry":{"type":"boolean","description":"Master switch for the diagnostic telemetry stream. When true the SDK sends buffered telemetry\nentries (`observeTelemetry`) piggybacked on normal event requests; when false it collects nothing\nand sends nothing. Lets telemetry be turned off server-side without a customer redeploy.\n","isRequired":true,"uniqueKey":"oneOf.0.telemetry","typeLabel":"boolean"},"flushOnTelemetry":{"type":"boolean","description":"When true (and `telemetry` is enabled), enqueuing a telemetry entry triggers an immediate client\nflush so diagnostics go out promptly (e.g. before a crash/navigation). Default false: a telemetry\nentry alone never triggers a flush, it only rides the next flush caused by anything else.\n","isRequired":true,"uniqueKey":"oneOf.0.flushOnTelemetry","typeLabel":"boolean"},"flushOnEventNames":{"type":"array","description":"Superseded by `flushOnFlowTypeFinished`; served only for SDK versions that predate it (they\nignore the new field, newer SDKs ignore this one). Event names that trigger an immediate\nclient-side flush when enqueued (e.g. `flow_finished`, `conversion`), so high-value events go\nout while the page is still alive instead of relying on unload delivery. Empty = no priority\nevents. Capped at 20 names (both sides).\n","items":{"type":"string","uniqueKey":"oneOf.0.flushOnEventNames.items.[INDEX]","typeLabel":"string"},"example":["flow_finished","conversion"],"isRequired":true,"uniqueKey":"oneOf.0.flushOnEventNames","typeLabel":"string[]"},"flushOnFlowTypeFinished":{"type":"array","description":"Flow types whose completion triggers an immediate client-side flush when enqueued, so the\nhighest-value events go out while the page is still alive instead of relying on unload\ndelivery. Both completion events count — `flow_finished` and `flow_auto_finished` — matched\non their `flowName`; no other event name ever flushes early. Empty = no priority flows.\nCapped at 20 entries (both sides). Replaces `flushOnEventNames`, which SDKs from the version\nthat introduced this field on no longer read.\n","items":{"type":"string","uniqueKey":"oneOf.0.flushOnFlowTypeFinished.items.[INDEX]","typeLabel":"string"},"example":["login","enrollment"],"isRequired":true,"uniqueKey":"oneOf.0.flushOnFlowTypeFinished","typeLabel":"string[]"},"deviceInfoCollectorTimeoutMs":{"type":"integer","format":"int32","description":"Per-field timeout for the SDK's device info collection, in milliseconds. A browser API that does\nnot answer within this budget is recorded as a timeout in the event's device info collection\nerrors and the field stays empty; the other fields are unaffected. Clamped to 10–10000ms.\nThe SDK reads it per collection run, so a new value takes effect from the next device info\nrefresh; the first collection of a load without a cached config runs on the built-in default.\n","example":1000,"isRequired":true,"uniqueKey":"oneOf.0.deviceInfoCollectorTimeoutMs","typeLabel":"integer\u003cint32>"},"deviceInfoTiming":{"type":"boolean","description":"When true (and `telemetry` is enabled), every device info collection emits an `info` telemetry\nentry carrying the total duration and each field's duration in milliseconds. Default false —\na diagnostic stream to switch on while investigating slow collection, not for permanent use.\nDurations of fields that hit `deviceInfoCollectorTimeoutMs` are censored at that value.\n","isRequired":true,"uniqueKey":"oneOf.0.deviceInfoTiming","typeLabel":"boolean"},"aap":{"type":"string","description":"Capability policy token for Corbado frontend SDKs and adapters. Values are assigned by\nCorbado per project and select how a capability behaves for that project; an SDK that does\nnot implement the token it receives ignores it and keeps its standard behavior. Empty (the\ndefault) always means standard behavior. Capped at 16 characters — a longer value is served\nas empty.\n","example":"c1","isRequired":true,"uniqueKey":"oneOf.0.aap","typeLabel":"string"},"pmd":{"type":"boolean","description":"Internal SDK setting that enables password manager detection. Default true.","isRequired":true,"uniqueKey":"oneOf.0.pmd","typeLabel":"boolean"},"sourcePathQuery":{"type":"string","description":"Which query values the SDK includes in the page URL it reports as `meta.trackingSourcePath`:\n`allowlist` (the default) or `all`. `allowlist` keeps every query key and its position but\nreplaces each value with `*` unless its key is listed in `sourcePathQueryAllow` (empty by\ndefault, so every value is masked); empty values and keys without a value stay as they are.\n`all` sends the query unchanged. The path itself is never changed. Any value other than `all`\n(including unset or empty) is served as `allowlist`. Server-side email/phone redaction still\napplies to whatever is sent.\n","example":"allowlist","isRequired":true,"uniqueKey":"oneOf.0.sourcePathQuery","typeLabel":"string"},"sourcePathQueryAllow":{"type":"array","description":"Query keys whose values are kept when `sourcePathQuery` is `allowlist`. Matched\ncase-insensitively and exactly; a trailing `*` matches a key prefix (`utm_*`). Empty or\noversized entries (more than 64 characters) are dropped and the list is capped at 50 entries\n(both sides). Empty by default. Ignored in `all` mode.\n","items":{"type":"string","uniqueKey":"oneOf.0.sourcePathQueryAllow.items.[INDEX]","typeLabel":"string"},"example":["utm_*","section"],"isRequired":true,"uniqueKey":"oneOf.0.sourcePathQueryAllow","typeLabel":"string[]"},"retry":{"type":"object","description":"Client-side retry configuration (exponential backoff) for failed event flushes.","required":["maxAttempts","baseDelayMs","maxDelayMs"],"properties":{"maxAttempts":{"type":"integer","format":"int32","description":"Maximum number of send attempts, including the first one.","example":5,"isRequired":true,"uniqueKey":"oneOf.0.retry.maxAttempts","typeLabel":"integer\u003cint32>"},"baseDelayMs":{"type":"integer","format":"int32","description":"Base delay for exponential backoff, in milliseconds.","example":500,"isRequired":true,"uniqueKey":"oneOf.0.retry.baseDelayMs","typeLabel":"integer\u003cint32>"},"maxDelayMs":{"type":"integer","format":"int32","description":"Maximum backoff delay between attempts, in milliseconds.","example":15000,"isRequired":true,"uniqueKey":"oneOf.0.retry.maxDelayMs","typeLabel":"integer\u003cint32>"}},"isRequired":true,"uniqueKey":"oneOf.0.retry","typeLabel":"object"}},"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","description":"SDK reliability configuration for native app SDKs (observe-android/observe-ios). Served from the\nconfig GET endpoint when `sdkName` names a native SDK, or from event ingestion instead of\nobserveEventCreateRes when the request's `sdk.name` names a native SDK. Contains only native fields —\nweb-only flags (beaconKeepalive, seqLockTimeoutMs, tvc/tph/tlf, durableOutbox, sessionContinuity)\nnever appear. Config GET always returns the current policy and content-hash version. Legacy ingestion\nuses the `X-Corbado-Observe-Config` request header and returns 204 when the version is current.\n","required":["version","flushIntervalMs","sessionInactivityMs","telemetry","rawErrors","flushOnTelemetry","flushOnFlowTypeFinished","deviceInfoCollectorTimeoutMs","flushOnBackground","retry"],"properties":{"version":{"type":"string","description":"Content-derived version (hash); echoed by the SDK in the request header.","isRequired":true,"uniqueKey":"oneOf.1.version","typeLabel":"string"},"flushIntervalMs":{"type":"integer","format":"int32","description":"How often the SDK flushes its event queue, in milliseconds. Native default is 2000 (battery/radio frugality).","isRequired":true,"uniqueKey":"oneOf.1.flushIntervalMs","typeLabel":"integer\u003cint32>"},"sessionInactivityMs":{"type":"integer","format":"int32","description":"Inactivity threshold after which the session id rotates, in milliseconds.","isRequired":true,"uniqueKey":"oneOf.1.sessionInactivityMs","typeLabel":"integer\u003cint32>"},"rawErrors":{"type":"boolean","default":true,"description":"Enables serialization of explicitly supplied raw error diagnostics into stepData.rawError.\nServer default is true; an explicit false disables diagnostics. Normalized errors\nare always reported independently. SDK built-in defaults may differ (Android defaults off). SDKs apply this using their normal config lifecycle;\ndisabling affects newly captured diagnostics, not events already queued.\n","isRequired":true,"uniqueKey":"oneOf.1.rawErrors","typeLabel":"boolean"},"telemetry":{"type":"boolean","description":"Master switch for the diagnostic telemetry stream.","isRequired":true,"uniqueKey":"oneOf.1.telemetry","typeLabel":"boolean"},"flushOnTelemetry":{"type":"boolean","description":"When true (and telemetry is enabled), enqueuing a telemetry entry triggers an immediate flush.","isRequired":true,"uniqueKey":"oneOf.1.flushOnTelemetry","typeLabel":"boolean"},"flushOnFlowTypeFinished":{"type":"array","items":{"type":"string","uniqueKey":"oneOf.1.flushOnFlowTypeFinished.items.[INDEX]","typeLabel":"string"},"description":"Flow types whose completion (flow_finished/flow_auto_finished) triggers an immediate flush.","isRequired":true,"uniqueKey":"oneOf.1.flushOnFlowTypeFinished","typeLabel":"string[]"},"deviceInfoCollectorTimeoutMs":{"type":"integer","format":"int32","description":"Per-field timeout for device info collection, in milliseconds.","isRequired":true,"uniqueKey":"oneOf.1.deviceInfoCollectorTimeoutMs","typeLabel":"integer\u003cint32>"},"flushOnBackground":{"type":"boolean","description":"Native flush-trigger switch: flush pending events when the app leaves the foreground (the last reliable delivery moment before a potential process kill). Defaults to true; a missing value can never disable delivery.","isRequired":true,"uniqueKey":"oneOf.1.flushOnBackground","typeLabel":"boolean"},"retry":{"type":"object","description":"Client-side retry configuration (exponential backoff) for failed event flushes.","required":["maxAttempts","baseDelayMs","maxDelayMs"],"properties":{"maxAttempts":{"type":"integer","format":"int32","description":"Maximum number of send attempts, including the first one.","example":5,"isRequired":true,"uniqueKey":"oneOf.1.retry.maxAttempts","typeLabel":"integer\u003cint32>"},"baseDelayMs":{"type":"integer","format":"int32","description":"Base delay for exponential backoff, in milliseconds.","example":500,"isRequired":true,"uniqueKey":"oneOf.1.retry.baseDelayMs","typeLabel":"integer\u003cint32>"},"maxDelayMs":{"type":"integer","format":"int32","description":"Maximum backoff delay between attempts, in milliseconds.","example":15000,"isRequired":true,"uniqueKey":"oneOf.1.retry.maxDelayMs","typeLabel":"integer\u003cint32>"}},"isRequired":true,"uniqueKey":"oneOf.1.retry","typeLabel":"object"}},"uniqueKey":"oneOf.1","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"version":"3f2a1b9c0d4e","flushIntervalMs":500,"durableLowOutbox":true,"durableOutbox":true,"beaconKeepalive":true,"sessionContinuity":true,"sessionInactivityMs":1800000,"seqLockTimeoutMs":5,"tvc":true,"tph":true,"td":true,"rawErrors":true,"telemetry":true,"flushOnTelemetry":true,"flushOnEventNames":["flow_finished","conversion"],"flushOnFlowTypeFinished":["login","enrollment"],"deviceInfoCollectorTimeoutMs":1000,"deviceInfoTiming":true,"aap":"c1","pmd":true,"sourcePathQuery":"allowlist","sourcePathQueryAllow":["utm_*","section"],"retry":{"maxAttempts":5,"baseDelayMs":500,"maxDelayMs":15000}}}},"exampleType":"generated"}},"exampleType":"generated"},"27012a2d-ec2a-4c4a-b64c-fe2f97a6cbd3":{"description":"Operation succeeded without content","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"5a846bfc-a4de-415c-a015-c48d1c5b5c43":{"description":"Error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["message"],"properties":{"message":{"description":"Error message","type":"string","example":"Validation failed","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"description":"Validation error details per field","type":"array","items":{"type":"object","required":["field","message"],"properties":{"field":{"description":"Field name that failed validation","type":"string","example":"projectID","isRequired":true,"uniqueKey":"error.details.items.[INDEX].field","typeLabel":"string"},"message":{"description":"Validation error message","type":"string","example":"required","isRequired":true,"uniqueKey":"error.details.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"error.details.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"message":"Validation failed","details":[{"field":"projectID","message":"required"}]}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"1dcef489-3540-4ec1-8856-f23014662e5b":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Use an Observe API key from the management console. The key selects the project and must grant the permission listed on the operation. Keep this key on your server.","scopes":["observe:events:write"],"schemeName":"bearerAuth"}}},"servers":{"22c3014f-9385-4d0c-83b4-842924313628":{"url":"https://api.cloud.corbado.io/v1"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"Use an Observe API key from the management console. The key selects the project and must grant the permission listed on the operation. Keep this key on your server.","scopes":["observe:events:write"],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Use an Observe API key from the management console. The key selects the project and must grant the permission listed on the operation. Keep this key on your server.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"api-reference/openapi/observe.yaml"},"subdomain":"corbado-43","siteName":"Corbado docs","title":"Create new events - Corbado docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-06T15:11:48.121Z","originalFileLocation":"api-reference/observe/send-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=\"Ingests events from your backend using an API key. For browser and native collection, use the Observe SDKs and their separate project-scoped transport. ### Server-side enrichment Attach a user reference or tags, such as a risk or bot verdict, to a flow without sending them through the browser. Target a flow by event ID or temporal matching; authenticated enrichment allows a symmetric 10-second matching tolerance. If your backend does not know the Observe session ID, send crossEnvironmentTransactionID instead of sessionID: a UUID that the browser also sends as user.crossEnvironmentTransactionID on one of its events (for example an ID per sign-in attempt that browser and backend share). Exactly one of the two must be set. The events are then matched against the flows of the browser sessions that carried the same ID, using the same temporal matching; when several browser sessions carried it, the flow running at the event time is enriched. The request may arrive before or after the browser events. Retries with the same transaction ID and event id are deduplicated. A request accepts at most 2,000 events and low-level events combined. Required API key permission: observe:events:write.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Corbado docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/corbado-43/noBvchxiQo85SoLM/_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/corbado-43/noBvchxiQo85SoLM/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/corbado-43/noBvchxiQo85SoLM/_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/corbado-43/noBvchxiQo85SoLM/_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/corbado-43/noBvchxiQo85SoLM/_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/corbado-43/noBvchxiQo85SoLM/_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/corbado-43/noBvchxiQo85SoLM/_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/corbado-43/noBvchxiQo85SoLM/_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/corbado-43/noBvchxiQo85SoLM/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create new events - Corbado docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Ingests events from your backend using an API key. For browser and native collection, use the Observe SDKs and their separate project-scoped transport. ### Server-side enrichment Attach a user reference or tags, such as a risk or bot verdict, to a flow without sending them through the browser. Target a flow by event ID or temporal matching; authenticated enrichment allows a symmetric 10-second matching tolerance. If your backend does not know the Observe session ID, send crossEnvironmentTransactionID instead of sessionID: a UUID that the browser also sends as user.crossEnvironmentTransactionID on one of its events (for example an ID per sign-in attempt that browser and backend share). Exactly one of the two must be set. The events are then matched against the flows of the browser sessions that carried the same ID, using the same temporal matching; when several browser sessions carried it, the flow running at the event time is enriched. The request may arrive before or after the browser events. Retries with the same transaction ID and event id are deduplicated. A request accepts at most 2,000 events and low-level events combined. Required API key permission: observe:events:write.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Corbado docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.corbado.com/api-reference/observe/send-events\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://corbado-43.mintlify.site/_mintlify/api/og/v2?division=Events\u0026amp;title=Create+new+events\u0026amp;description=Ingests+events+from+your+backend+using+an+API+key.+For+browser+and+native+collection%2C+use+the%0A%5BObserve+SDKs%5D%28%2Fsdks%2Foverview%29+and+their+separate+project-scoped+t\u0026amp;theme=46938e1ac6053c91ba042440\u0026amp;signature=2e23358a9751772757f8fc59b61696b2c2f484e263d0c2f022b08dc412aecf33\">\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=\"Create new events - Corbado docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Ingests events from your backend using an API key. For browser and native collection, use the Observe SDKs and their separate project-scoped transport. ### Server-side enrichment Attach a user reference or tags, such as a risk or bot verdict, to a flow without sending them through the browser. Target a flow by event ID or temporal matching; authenticated enrichment allows a symmetric 10-second matching tolerance. If your backend does not know the Observe session ID, send crossEnvironmentTransactionID instead of sessionID: a UUID that the browser also sends as user.crossEnvironmentTransactionID on one of its events (for example an ID per sign-in attempt that browser and backend share). Exactly one of the two must be set. The events are then matched against the flows of the browser sessions that carried the same ID, using the same temporal matching; when several browser sessions carried it, the flow running at the event time is enriched. The request may arrive before or after the browser events. Retries with the same transaction ID and event id are deduplicated. A request accepts at most 2,000 events and low-level events combined. Required API key permission: observe:events:write.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://corbado-43.mintlify.site/_mintlify/api/og/v2?division=Events\u0026amp;title=Create+new+events\u0026amp;description=Ingests+events+from+your+backend+using+an+API+key.+For+browser+and+native+collection%2C+use+the%0A%5BObserve+SDKs%5D%28%2Fsdks%2Foverview%29+and+their+separate+project-scoped+t\u0026amp;theme=46938e1ac6053c91ba042440\u0026amp;signature=2e23358a9751772757f8fc59b61696b2c2f484e263d0c2f022b08dc412aecf33\">\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/corbado-43/noBvchxiQo85SoLM/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Corbado docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#184aff\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.corbado.com/api-reference/observe/send-events\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/observe/send-events.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.corbado.com/#organization\",\"name\":\"Corbado docs\",\"url\":\"https://docs.corbado.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/corbado-43/uh5IdxgOHQMtEt9x/logo/corbado-logo-light.svg?fit=max\u0026auto=format\u0026n=uh5IdxgOHQMtEt9x\u0026q=85\u0026s=decbc139fa76d9eeee8dcfbe91ed2094\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.corbado.com#website\",\"name\":\"Corbado docs\",\"url\":\"https://docs.corbado.com\",\"publisher\":{\"@id\":\"https://docs.corbado.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.corbado.com/api-reference/observe/send-events#webpage\",\"url\":\"https://docs.corbado.com/api-reference/observe/send-events\",\"name\":\"Create new events\",\"description\":\"Ingests events from your backend using an API key. For browser and native collection, use the Observe SDKs and their separate project-scoped transport. ### Server-side enrichment Attach a user reference or tags, such as a risk or bot verdict, to a flow without sending them through the browser. Target a flow by event ID or temporal matching; authenticated enrichment allows a symmetric 10-second matching tolerance. If your backend does not know the Observe session ID, send crossEnvironmentTransactionID instead of sessionID: a UUID that the browser also sends as user.crossEnvironmentTransactionID on one of its events (for example an ID per sign-in attempt that browser and backend share). Exactly one of the two must be set. The events are then matched against the flows of the browser sessions that carried the same ID, using the same temporal matching; when several browser sessions carried it, the flow running at the event time is enriched. The request may arrive before or after the browser events. Retries with the same transaction ID and event id are deduplicated. A request accepts at most 2,000 events and low-level events combined. Required API key permission: observe:events:write.\",\"dateModified\":\"2026-11-06T15:11:48.121Z\",\"isPartOf\":{\"@id\":\"https://docs.corbado.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.corbado.com/api-reference/observe/send-events#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.corbado.com/api-reference/observe/send-events#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Corbado Observe\",\"item\":\"https://docs.corbado.com/api-reference/observe/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create new events\",\"item\":\"https://docs.corbado.com/api-reference/observe/send-events\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.corbado.com/api-reference/observe/send-events#apireference\",\"headline\":\"Create new events\",\"name\":\"Create new events\",\"description\":\"Ingests events from your backend using an API key. For browser and native collection, use the Observe SDKs and their separate project-scoped transport. ### Server-side enrichment Attach a user reference or tags, such as a risk or bot verdict, to a flow without sending them through the browser. Target a flow by event ID or temporal matching; authenticated enrichment allows a symmetric 10-second matching tolerance. If your backend does not know the Observe session ID, send crossEnvironmentTransactionID instead of sessionID: a UUID that the browser also sends as user.crossEnvironmentTransactionID on one of its events (for example an ID per sign-in attempt that browser and backend share). Exactly one of the two must be set. The events are then matched against the flows of the browser sessions that carried the same ID, using the same temporal matching; when several browser sessions carried it, the flow running at the event time is enriched. The request may arrive before or after the browser events. Retries with the same transaction ID and event id are deduplicated. A request accepts at most 2,000 events and low-level events combined. Required API key permission: observe:events:write.\",\"url\":\"https://docs.corbado.com/api-reference/observe/send-events\",\"mainEntityOfPage\":{\"@id\":\"https://docs.corbado.com/api-reference/observe/send-events#webpage\"},\"dateModified\":\"2026-11-06T15:11:48.121Z\",\"publisher\":{\"@id\":\"https://docs.corbado.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.corbado.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Corbado docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Corbado docs","nav":{"global":{"anchors":[{"anchor":"Community","icon":"slack","href":"https://bit.ly/passkeys-community"},{"anchor":"GitHub","icon":"github","href":"https://github.com/corbado"},{"anchor":"Blog","icon":"newspaper","href":"https://www.corbado.com/blog"}]},"tabs":[{"tab":"Start","pages":[{"title":"Start","href":"/start"}]},{"tab":"Corbado Observe","pages":[{"title":"Corbado Observe","href":"/corbado-observe/overview/welcome"}]},{"tab":"Corbado Connect","pages":[{"title":"Corbado Connect","href":"/corbado-connect/overview/welcome"}]},{"tab":"SDKs","pages":[{"title":"SDKs","href":"/sdks/overview"}]},{"tab":"API Reference","groups":[{"group":"Overview","pages":[{"title":"Corbado Observe and Connect API Reference","sidebarTitle":"Choose an API","href":"/api-reference/overview"}]},{"group":"Corbado Observe","pages":[{"title":"Observe API reference","sidebarTitle":"Overview","href":"/api-reference/observe/overview"},{"title":"Observe API authentication","sidebarTitle":"Authentication","href":"/api-reference/observe/authentication"},{"title":"Observe errors, pagination and limits","sidebarTitle":"Errors and limits","href":"/api-reference/observe/errors"},{"title":"User data export and deletion","sidebarTitle":"User data requests","description":"Export Observe data for an external user ID, request deletion and track completion.","href":"/api-reference/observe/user-data"},{"group":"API endpoints","pages":[{"group":"Events","pages":[{"title":"Create new events","deprecated":null,"version":null,"sidebarTitle":"Send events","openapi":"/api-reference/openapi/observe.yaml post /observe/events","href":"/api-reference/observe/send-events"},{"title":"Search events by filter criteria","description":"Finds SDK tracking events for selected flows. Use the flow IDs returned by flow\nsearch to inspect the event timeline behind those flows.\n\nResults are ordered as a stable timeline, oldest first (by creation time), and\ncapped at `limit`.\n\nRequired API key permission: `observe:events:read`.","deprecated":null,"version":null,"sidebarTitle":"Search events","openapi":"/api-reference/openapi/observe.yaml post /observe/eventSearch","href":"/api-reference/observe/search-events"},{"title":"Search low-level tracking events by filter criteria","deprecated":null,"version":null,"sidebarTitle":"Search low events","openapi":"/api-reference/openapi/observe.yaml post /observe/trackingEventLowSearch","href":"/api-reference/observe/search-low-events"}]},{"group":"Catalogs and labels","pages":[{"title":"List flow type definitions","deprecated":null,"version":null,"sidebarTitle":"Flow types","openapi":"/api-reference/openapi/observe.yaml get /observe/flowTypeDefinitions","href":"/api-reference/observe/flow-types"},{"title":"List decisions","deprecated":null,"version":null,"sidebarTitle":"Decisions","openapi":"/api-reference/openapi/observe.yaml get /observe/decisions","href":"/api-reference/observe/decisions"},{"title":"List decision variants","deprecated":null,"version":null,"sidebarTitle":"Decision variants","openapi":"/api-reference/openapi/observe.yaml get /observe/decisionVariants","href":"/api-reference/observe/decision-variants"},{"title":"List challenge variants","deprecated":null,"version":null,"sidebarTitle":"Challenge variants","openapi":"/api-reference/openapi/observe.yaml get /observe/challengeVariants","href":"/api-reference/observe/challenge-variants"},{"title":"List applications","deprecated":null,"version":null,"sidebarTitle":"Applications","openapi":"/api-reference/openapi/observe.yaml get /observe/applications","href":"/api-reference/observe/applications"},{"title":"List email domains","deprecated":null,"version":null,"sidebarTitle":"Email domains","openapi":"/api-reference/openapi/observe.yaml get /observe/emailDomains","href":"/api-reference/observe/email-domains"},{"title":"List labels","deprecated":null,"version":null,"sidebarTitle":"Labels","openapi":"/api-reference/openapi/observe.yaml get /observe/labels","href":"/api-reference/observe/labels"},{"title":"Create label","deprecated":null,"version":null,"sidebarTitle":"Create label","openapi":"/api-reference/openapi/observe.yaml post /observe/labels","href":"/api-reference/observe/create-label"},{"title":"Update label","deprecated":null,"version":null,"sidebarTitle":"Update label","openapi":"/api-reference/openapi/observe.yaml put /observe/labels/{labelID}","href":"/api-reference/observe/update-label"},{"title":"Delete label","deprecated":null,"version":null,"sidebarTitle":"Delete label","openapi":"/api-reference/openapi/observe.yaml delete /observe/labels/{labelID}","href":"/api-reference/observe/delete-label"}]},{"group":"Metrics and funnels","pages":[{"title":"Calculate historical metrics for an exact journey position","deprecated":null,"version":null,"sidebarTitle":"Funnel metrics","openapi":"/api-reference/openapi/observe.yaml post /observe/funnel/metricSeries","href":"/api-reference/observe/funnel-metrics"},{"title":"Get project-owned history dictionaries and coverage","deprecated":null,"version":null,"sidebarTitle":"Funnel metadata","openapi":"/api-reference/openapi/observe.yaml get /observe/funnel/metricSeries/metadata","href":"/api-reference/observe/funnel-metadata"},{"title":"Get time series data","deprecated":null,"version":null,"sidebarTitle":"Time series","openapi":"/api-reference/openapi/observe.yaml get /observe/timeSeries","href":"/api-reference/observe/time-series"},{"title":"Get time series totals","deprecated":null,"version":null,"sidebarTitle":"Time series totals","openapi":"/api-reference/openapi/observe.yaml get /observe/timeSeries/totals","href":"/api-reference/observe/time-series-totals"},{"title":"List time-series definitions","deprecated":null,"version":null,"sidebarTitle":"Time series definitions","openapi":"/api-reference/openapi/observe.yaml get /observe/timeSeriesDefinitions","href":"/api-reference/observe/time-series-definitions"}]},{"group":"Data exports","pages":[{"title":"Export time series to downloadable files","deprecated":null,"version":null,"sidebarTitle":"Create time series export","openapi":"/api-reference/openapi/observe.yaml post /observe/timeSeries/export","href":"/api-reference/observe/create-time-series-export"},{"title":"List time series exports","deprecated":null,"version":null,"sidebarTitle":"Time series exports","openapi":"/api-reference/openapi/observe.yaml get /observe/timeSeries/exports","href":"/api-reference/observe/time-series-exports"},{"title":"Get a time series export by ID","deprecated":null,"version":null,"sidebarTitle":"Time series export","openapi":"/api-reference/openapi/observe.yaml get /observe/timeSeries/exports/{exportID}","href":"/api-reference/observe/time-series-export"},{"title":"Get a download link for a time series export file","deprecated":null,"version":null,"sidebarTitle":"Time series export download","openapi":"/api-reference/openapi/observe.yaml get /observe/timeSeries/exports/{exportID}/files/{fileName}/downloadLink","href":"/api-reference/observe/time-series-export-download"},{"title":"List observe table export files","deprecated":null,"version":null,"sidebarTitle":"Table exports","openapi":"/api-reference/openapi/observe.yaml get /observe/tableExports","href":"/api-reference/observe/table-exports"},{"title":"Get observe table export download link","deprecated":null,"version":null,"sidebarTitle":"Table export download","openapi":"/api-reference/openapi/observe.yaml get /observe/tableExports/{filename}/downloadLink","href":"/api-reference/observe/table-export-download"}]},{"group":"User data","pages":[{"title":"Create data deletion jobs","deprecated":null,"version":null,"sidebarTitle":"Delete user data","openapi":"/api-reference/openapi/observe.yaml post /observe/dataDeletionJobs","href":"/api-reference/observe/delete-user-data"},{"title":"Get a data deletion job by ID","deprecated":null,"version":null,"sidebarTitle":"Deletion status","openapi":"/api-reference/openapi/observe.yaml get /observe/dataDeletionJobs/{dataDeletionJobID}","href":"/api-reference/observe/deletion-status"},{"title":"Export observe data by external ID","deprecated":null,"version":null,"sidebarTitle":"Export user","openapi":"/api-reference/openapi/observe.yaml get /observe/dataExports/{externalID}","href":"/api-reference/observe/export-user"}]},{"group":"Metadata","pages":[{"title":"List FIDO MDS authenticator metadata","deprecated":null,"version":null,"sidebarTitle":"Authenticator metadata","openapi":"/api-reference/openapi/observe.yaml get /observe/metadata/mds","href":"/api-reference/observe/authenticator-metadata"},{"title":"List passkey authenticator (AAGUID) metadata","deprecated":null,"version":null,"sidebarTitle":"Passkey authenticator metadata","openapi":"/api-reference/openapi/observe.yaml get /observe/metadata/passkey-aaguid","href":"/api-reference/observe/passkey-authenticator-metadata"}]},{"group":"Saved ID lists","pages":[{"title":"Get Observe ID list","deprecated":null,"version":null,"sidebarTitle":"Id list","openapi":"/api-reference/openapi/observe.yaml get /observe/idLists/{id}","href":"/api-reference/observe/id-list"},{"title":"Create Observe ID list","deprecated":null,"version":null,"sidebarTitle":"Create id list","openapi":"/api-reference/openapi/observe.yaml post /observe/idLists","href":"/api-reference/observe/create-id-list"}]},{"group":"Journeys and users","pages":[{"title":"Search flows by filter criteria","deprecated":null,"version":null,"sidebarTitle":"Search flows","openapi":"/api-reference/openapi/observe.yaml post /observe/flowSearch","href":"/api-reference/observe/search-flows"},{"title":"Search subflows by filter criteria","deprecated":null,"version":null,"sidebarTitle":"Search subflows","openapi":"/api-reference/openapi/observe.yaml post /observe/subFlowSearch","href":"/api-reference/observe/search-subflows"},{"title":"Search flow tags","deprecated":null,"version":null,"sidebarTitle":"Search flow tags","openapi":"/api-reference/openapi/observe.yaml post /observe/flowTagSearch","href":"/api-reference/observe/search-flow-tags"},{"title":"Search users by filter criteria","deprecated":null,"version":null,"sidebarTitle":"Search users","openapi":"/api-reference/openapi/observe.yaml post /observe/userSearch","href":"/api-reference/observe/search-users"},{"title":"Search identifier submissions","deprecated":null,"version":null,"sidebarTitle":"Search identifiers","openapi":"/api-reference/openapi/observe.yaml post /observe/identifierSearch","href":"/api-reference/observe/search-identifiers"},{"title":"Search client environments","deprecated":null,"version":null,"sidebarTitle":"Search client environments","openapi":"/api-reference/openapi/observe.yaml post /observe/clientEnvSearch","href":"/api-reference/observe/search-client-environments"}]},{"group":"Passkey Intelligence","pages":[{"title":"Explain what went wrong for a user","deprecated":null,"version":null,"sidebarTitle":"User diagnosis","openapi":"/api-reference/openapi/observe.yaml post /observe/userDiagnosis","href":"/api-reference/observe/passkey-intelligence/user-diagnosis"},{"title":"Predict the passkey login outcome","deprecated":null,"version":null,"sidebarTitle":"Predict login","openapi":"/api-reference/openapi/observe.yaml post /observe/passkeyIntelligence","href":"/api-reference/observe/passkey-intelligence/predict-login"}]},{"group":"Passkey analysis","pages":[{"title":"List passkey behaviour for a user cohort","deprecated":null,"version":null,"sidebarTitle":"Passkey cohort","openapi":"/api-reference/openapi/observe.yaml post /observe/passkeyCohort","href":"/api-reference/observe/passkey-cohort"},{"title":"Search passkeys","deprecated":null,"version":null,"sidebarTitle":"Search passkeys","openapi":"/api-reference/openapi/observe.yaml post /observe/passkeySearch","href":"/api-reference/observe/search-passkeys"}]},{"group":"Annotations","pages":[{"title":"List annotations","deprecated":null,"version":null,"sidebarTitle":"Annotations","openapi":"/api-reference/openapi/observe.yaml get /observe/annotations","href":"/api-reference/observe/annotations"},{"title":"Create annotation","deprecated":null,"version":null,"sidebarTitle":"Create annotation","openapi":"/api-reference/openapi/observe.yaml post /observe/annotations","href":"/api-reference/observe/create-annotation"},{"title":"Get project memory document","deprecated":null,"version":null,"sidebarTitle":"Annotation document","openapi":"/api-reference/openapi/observe.yaml get /observe/annotations/document","href":"/api-reference/observe/annotation-document"},{"title":"Create or update annotation by external key","deprecated":null,"version":null,"sidebarTitle":"Upsert annotation","openapi":"/api-reference/openapi/observe.yaml put /observe/annotations/byExternalKey/{externalKey}","href":"/api-reference/observe/upsert-annotation"},{"title":"Get annotation","deprecated":null,"version":null,"sidebarTitle":"Get annotation","openapi":"/api-reference/openapi/observe.yaml get /observe/annotations/{annotationID}","href":"/api-reference/observe/get-annotation"},{"title":"Update annotation","deprecated":null,"version":null,"sidebarTitle":"Update annotation","openapi":"/api-reference/openapi/observe.yaml put /observe/annotations/{annotationID}","href":"/api-reference/observe/update-annotation"},{"title":"Delete annotation","deprecated":null,"version":null,"sidebarTitle":"Delete annotation","openapi":"/api-reference/openapi/observe.yaml delete /observe/annotations/{annotationID}","href":"/api-reference/observe/delete-annotation"},{"title":"List annotation history","deprecated":null,"version":null,"sidebarTitle":"List annotation events","openapi":"/api-reference/openapi/observe.yaml get /observe/annotations/{annotationID}/events","href":"/api-reference/observe/list-annotation-events"}]},{"group":"Error management","pages":[{"title":"List error flavours","deprecated":null,"version":null,"sidebarTitle":"Error flavours","openapi":"/api-reference/openapi/observe.yaml get /observe/errorFlavours","href":"/api-reference/observe/error-flavours"},{"title":"Assign error flavours","deprecated":null,"version":null,"sidebarTitle":"Assign error flavours","openapi":"/api-reference/openapi/observe.yaml patch /observe/errorFlavours","href":"/api-reference/observe/assign-error-flavours"},{"title":"Analyze the flow impact of error flavours","deprecated":null,"version":null,"sidebarTitle":"Error impact","openapi":"/api-reference/openapi/observe.yaml post /observe/errorFlavours/impact","href":"/api-reference/observe/error-impact"},{"title":"List errors","deprecated":null,"version":null,"sidebarTitle":"Errors list","openapi":"/api-reference/openapi/observe.yaml get /observe/errors","href":"/api-reference/observe/errors-list"},{"title":"Create error","deprecated":null,"version":null,"sidebarTitle":"Create error","openapi":"/api-reference/openapi/observe.yaml post /observe/errors","href":"/api-reference/observe/create-error"},{"title":"Update error","deprecated":null,"version":null,"sidebarTitle":"Update error","openapi":"/api-reference/openapi/observe.yaml put /observe/errors/{errorID}","href":"/api-reference/observe/update-error"},{"title":"Delete error","deprecated":null,"version":null,"sidebarTitle":"Delete error","openapi":"/api-reference/openapi/observe.yaml delete /observe/errors/{errorID}","href":"/api-reference/observe/delete-error"},{"title":"Upsert error recommendation","deprecated":null,"version":null,"sidebarTitle":"Upsert error recommendation","openapi":"/api-reference/openapi/observe.yaml put /observe/errors/{errorID}/recommendation","href":"/api-reference/observe/upsert-error-recommendation"},{"title":"Delete error recommendation","deprecated":null,"version":null,"sidebarTitle":"Delete error recommendation","openapi":"/api-reference/openapi/observe.yaml delete /observe/errors/{errorID}/recommendation","href":"/api-reference/observe/delete-error-recommendation"},{"title":"Create recommendation asset upload","deprecated":null,"version":null,"sidebarTitle":"Create recommendation asset upload","openapi":"/api-reference/openapi/observe.yaml post /observe/errors/{errorID}/recommendation/assets","href":"/api-reference/observe/create-recommendation-asset-upload"},{"title":"Delete recommendation asset","deprecated":null,"version":null,"sidebarTitle":"Delete recommendation asset","openapi":"/api-reference/openapi/observe.yaml delete /observe/errors/{errorID}/recommendation/assets/{assetID}","href":"/api-reference/observe/delete-recommendation-asset"},{"title":"Confirm recommendation asset upload","deprecated":null,"version":null,"sidebarTitle":"Confirm recommendation asset upload","openapi":"/api-reference/openapi/observe.yaml post /observe/errors/{errorID}/recommendation/assets/{assetID}/confirm","href":"/api-reference/observe/confirm-recommendation-asset-upload"},{"title":"Get recommendation asset download URL","deprecated":null,"version":null,"sidebarTitle":"Recommendation asset download","openapi":"/api-reference/openapi/observe.yaml get /observe/errors/{errorID}/recommendation/assets/{assetID}/downloadUrl","href":"/api-reference/observe/recommendation-asset-download"}]},{"group":"ObserveErrorCode","pages":[{"title":"Get the error dictionary","deprecated":null,"version":null,"sidebarTitle":"Error codes","openapi":"/api-reference/openapi/observe.yaml get /observe/errorCodes","href":"/api-reference/observe/error-codes"}]},{"group":"Alert management","pages":[{"title":"Get alerting summary","deprecated":null,"version":null,"sidebarTitle":"Alert summary","openapi":"/api-reference/openapi/observe.yaml get /observe/alertSummary","href":"/api-reference/observe/alert-summary"},{"title":"List alert rules","deprecated":null,"version":null,"sidebarTitle":"Alert rules","openapi":"/api-reference/openapi/observe.yaml get /observe/alertRules","href":"/api-reference/observe/alert-rules"},{"title":"Create alert rule","deprecated":null,"version":null,"sidebarTitle":"Create alert rule","openapi":"/api-reference/openapi/observe.yaml post /observe/alertRules","href":"/api-reference/observe/create-alert-rule"},{"title":"Simulate alert rule","deprecated":null,"version":null,"sidebarTitle":"Simulate alert rule","openapi":"/api-reference/openapi/observe.yaml post /observe/alertRules/simulate","href":"/api-reference/observe/simulate-alert-rule"},{"title":"Get alert rule","deprecated":null,"version":null,"sidebarTitle":"Alert rule","openapi":"/api-reference/openapi/observe.yaml get /observe/alertRules/{alertRuleID}","href":"/api-reference/observe/alert-rule"},{"title":"Update alert rule","deprecated":null,"version":null,"sidebarTitle":"Update alert rule","openapi":"/api-reference/openapi/observe.yaml put /observe/alertRules/{alertRuleID}","href":"/api-reference/observe/update-alert-rule"},{"title":"Delete alert rule","deprecated":null,"version":null,"sidebarTitle":"Delete alert rule","openapi":"/api-reference/openapi/observe.yaml delete /observe/alertRules/{alertRuleID}","href":"/api-reference/observe/delete-alert-rule"},{"title":"Evaluate alert rules","deprecated":null,"version":null,"sidebarTitle":"Evaluate alert rules","openapi":"/api-reference/openapi/observe.yaml post /observe/alerts/evaluate","href":"/api-reference/observe/evaluate-alert-rules"},{"title":"List alert contact points","deprecated":null,"version":null,"sidebarTitle":"Alert contact points","openapi":"/api-reference/openapi/observe.yaml get /observe/alertContactPoints","href":"/api-reference/observe/alert-contact-points"},{"title":"Create alert contact point","deprecated":null,"version":null,"sidebarTitle":"Create alert contact point","openapi":"/api-reference/openapi/observe.yaml post /observe/alertContactPoints","href":"/api-reference/observe/create-alert-contact-point"},{"title":"Get alert contact point","deprecated":null,"version":null,"sidebarTitle":"Alert contact point","openapi":"/api-reference/openapi/observe.yaml get /observe/alertContactPoints/{alertContactPointID}","href":"/api-reference/observe/alert-contact-point"},{"title":"Update alert contact point","deprecated":null,"version":null,"sidebarTitle":"Update alert contact point","openapi":"/api-reference/openapi/observe.yaml put /observe/alertContactPoints/{alertContactPointID}","href":"/api-reference/observe/update-alert-contact-point"},{"title":"Delete alert contact point","deprecated":null,"version":null,"sidebarTitle":"Delete alert contact point","openapi":"/api-reference/openapi/observe.yaml delete /observe/alertContactPoints/{alertContactPointID}","href":"/api-reference/observe/delete-alert-contact-point"},{"title":"Send test notification","deprecated":null,"version":null,"sidebarTitle":"Test alert contact point integration","openapi":"/api-reference/openapi/observe.yaml post /observe/alertContactPoints/{alertContactPointID}/integrations/{alertContactPointIntegrationID}/test","href":"/api-reference/observe/test-alert-contact-point-integration"},{"title":"List alert rule types","deprecated":null,"version":null,"sidebarTitle":"Alert rule types","openapi":"/api-reference/openapi/observe.yaml get /observe/alertRuleTypes","href":"/api-reference/observe/alert-rule-types"},{"title":"List alert rule groups","deprecated":null,"version":null,"sidebarTitle":"Alert rule groups","openapi":"/api-reference/openapi/observe.yaml get /observe/alertRuleGroups","href":"/api-reference/observe/alert-rule-groups"},{"title":"List alert instances","deprecated":null,"version":null,"sidebarTitle":"Alert instances","openapi":"/api-reference/openapi/observe.yaml get /observe/alertInstances","href":"/api-reference/observe/alert-instances"},{"title":"Get alert instance statistics","deprecated":null,"version":null,"sidebarTitle":"Alert instance statistics","openapi":"/api-reference/openapi/observe.yaml get /observe/alertInstanceStatistics","href":"/api-reference/observe/alert-instance-statistics"},{"title":"Get alert firing","deprecated":null,"version":null,"sidebarTitle":"Alert firing","openapi":"/api-reference/openapi/observe.yaml get /observe/alertFirings/{alertFiringID}","href":"/api-reference/observe/alert-firing"},{"title":"Get alert rule statistics","deprecated":null,"version":null,"sidebarTitle":"Alert rule statistics","openapi":"/api-reference/openapi/observe.yaml get /observe/alertRuleStatistics","href":"/api-reference/observe/alert-rule-statistics"},{"title":"List alert evaluations","deprecated":null,"version":null,"sidebarTitle":"Alert evaluations","openapi":"/api-reference/openapi/observe.yaml get /observe/alertEvaluations","href":"/api-reference/observe/alert-evaluations"},{"title":"List alert transitions","deprecated":null,"version":null,"sidebarTitle":"Alert transitions","openapi":"/api-reference/openapi/observe.yaml get /observe/alertTransitions","href":"/api-reference/observe/alert-transitions"},{"title":"List alert notifications","deprecated":null,"version":null,"sidebarTitle":"Alert notifications","openapi":"/api-reference/openapi/observe.yaml get /observe/alertNotifications","href":"/api-reference/observe/alert-notifications"}]},{"group":"Experiments","pages":[{"title":"List experiments","deprecated":null,"version":null,"sidebarTitle":"Experiments","openapi":"/api-reference/openapi/observe.yaml get /observe/experiments","href":"/api-reference/observe/experiments"},{"title":"List experiment runs","deprecated":null,"version":null,"sidebarTitle":"Experiment runs","openapi":"/api-reference/openapi/observe.yaml get /observe/experimentRuns","href":"/api-reference/observe/experiment-runs"},{"title":"Create experiment run","deprecated":null,"version":null,"sidebarTitle":"Create experiment run","openapi":"/api-reference/openapi/observe.yaml post /observe/experimentRuns","href":"/api-reference/observe/create-experiment-run"},{"title":"Update experiment run","deprecated":null,"version":null,"sidebarTitle":"Update experiment run","openapi":"/api-reference/openapi/observe.yaml put /observe/experimentRuns/{experimentRunID}","href":"/api-reference/observe/update-experiment-run"},{"title":"Delete experiment run","deprecated":null,"version":null,"sidebarTitle":"Delete experiment run","openapi":"/api-reference/openapi/observe.yaml delete /observe/experimentRuns/{experimentRunID}","href":"/api-reference/observe/delete-experiment-run"}]}]}]},{"group":"Corbado Connect","pages":[{"title":"Connect API reference","sidebarTitle":"Overview","href":"/api-reference/connect/overview"},{"title":"Connect API authentication","sidebarTitle":"Authentication","href":"/api-reference/connect/authentication"},{"title":"Connect API error types","sidebarTitle":"Error types","href":"/api-reference/connect/error-types"},{"title":"Connect Frontend API","sidebarTitle":"Frontend protocol","href":"/api-reference/connect/frontend"},{"group":"Frontend API","pages":[{"group":"Passkey flows","pages":[{"title":"Initialize connect login","deprecated":null,"version":null,"sidebarTitle":"Initialize connect login","openapi":"/api-reference/openapi/connect-frontend.yaml post /v2/connect/login/init","href":"/api-reference/connect/frontend/corbadoconnect/initialize-connect-login"},{"title":"Start connect login","deprecated":null,"version":null,"sidebarTitle":"Start connect login","openapi":"/api-reference/openapi/connect-frontend.yaml post /v2/connect/login/start","href":"/api-reference/connect/frontend/corbadoconnect/start-connect-login"},{"title":"Finish connect login","deprecated":null,"version":null,"sidebarTitle":"Finish connect login","openapi":"/api-reference/openapi/connect-frontend.yaml post /v2/connect/login/finish","href":"/api-reference/connect/frontend/corbadoconnect/finish-connect-login"},{"title":"Initialize connect append","deprecated":null,"version":null,"sidebarTitle":"Initialize connect append","openapi":"/api-reference/openapi/connect-frontend.yaml post /v2/connect/append/init","href":"/api-reference/connect/frontend/corbadoconnect/initialize-connect-append"},{"title":"Start connect append","deprecated":null,"version":null,"sidebarTitle":"Start connect append","openapi":"/api-reference/openapi/connect-frontend.yaml post /v2/connect/append/start","href":"/api-reference/connect/frontend/corbadoconnect/start-connect-append"},{"title":"Finish connect append","deprecated":null,"version":null,"sidebarTitle":"Finish connect append","openapi":"/api-reference/openapi/connect-frontend.yaml post /v2/connect/append/finish","href":"/api-reference/connect/frontend/corbadoconnect/finish-connect-append"},{"title":"Initialize connect management","deprecated":null,"version":null,"sidebarTitle":"Initialize connect management","openapi":"/api-reference/openapi/connect-frontend.yaml post /v2/connect/manage/init","href":"/api-reference/connect/frontend/corbadoconnect/initialize-connect-management"},{"title":"Delete connect passkey","deprecated":null,"version":null,"sidebarTitle":"Delete connect passkey","openapi":"/api-reference/openapi/connect-frontend.yaml post /v2/connect/manage/delete","href":"/api-reference/connect/frontend/corbadoconnect/delete-connect-passkey"},{"title":"List connect passkeys","deprecated":null,"version":null,"sidebarTitle":"List connect passkeys","openapi":"/api-reference/openapi/connect-frontend.yaml post /v2/connect/manage/list","href":"/api-reference/connect/frontend/corbadoconnect/list-connect-passkeys"},{"title":"Create connect event","deprecated":null,"version":null,"sidebarTitle":"Create connect event","openapi":"/api-reference/openapi/connect-frontend.yaml post /v2/connect/events","href":"/api-reference/connect/frontend/corbadoconnect/create-connect-event"},{"title":"Send low-level Connect events","deprecated":null,"version":null,"sidebarTitle":"Send low-level Connect events","openapi":"/api-reference/openapi/connect-frontend.yaml post /v2/connect/eventsLow","href":"/api-reference/connect/frontend/corbadoconnect/post-v2connecteventslow"},{"title":"Clear connect process","deprecated":null,"version":null,"sidebarTitle":"Clear connect process","openapi":"/api-reference/openapi/connect-frontend.yaml post /v2/connect/process/clear","href":"/api-reference/connect/frontend/corbadoconnect/clear-connect-process"}]},{"group":"App association and keys","pages":[{"title":"Get Android Digital Asset Links","deprecated":null,"version":null,"sidebarTitle":"Get Android Digital Asset Links","openapi":"/api-reference/openapi/connect-frontend.yaml get /.well-known/assetlinks.json","href":"/api-reference/connect/frontend/wellknown/get-well-knownassetlinksjson"},{"title":"Get Apple App Site Association","deprecated":null,"version":null,"sidebarTitle":"Get Apple App Site Association","openapi":"/api-reference/openapi/connect-frontend.yaml get /.well-known/apple-app-site-association","href":"/api-reference/connect/frontend/wellknown/get-well-knownapple-app-site-association"},{"title":"Get project signing keys","deprecated":null,"version":null,"sidebarTitle":"Get project signing keys","openapi":"/api-reference/openapi/connect-frontend.yaml get /.well-known/jwks","href":"/api-reference/connect/frontend/wellknown/get-well-knownjwks"}]}]},{"group":"Backend API","pages":[{"group":"Users and passkeys","pages":[{"title":"List users","deprecated":null,"version":null,"sidebarTitle":"List users","openapi":"/api-reference/openapi/connect-backend.yaml get /users","href":"/api-reference/connect/backend/users/list-users"},{"title":"Create a new user","deprecated":null,"version":null,"sidebarTitle":"Create a new user","openapi":"/api-reference/openapi/connect-backend.yaml post /users","href":"/api-reference/connect/backend/users/create-a-new-user"},{"title":"Retrieve a user","deprecated":null,"version":null,"sidebarTitle":"Retrieve a user","openapi":"/api-reference/openapi/connect-backend.yaml get /users/{userID}","href":"/api-reference/connect/backend/users/retrieve-a-user"},{"title":"Delete a user","deprecated":null,"version":null,"sidebarTitle":"Delete a user","openapi":"/api-reference/openapi/connect-backend.yaml delete /users/{userID}","href":"/api-reference/connect/backend/users/delete-a-user"},{"title":"Update a user","deprecated":null,"version":null,"sidebarTitle":"Update a user","openapi":"/api-reference/openapi/connect-backend.yaml patch /users/{userID}","href":"/api-reference/connect/backend/users/update-a-user"},{"title":"List passkeys for a user","deprecated":null,"version":null,"sidebarTitle":"List passkeys for a user","openapi":"/api-reference/openapi/connect-backend.yaml get /users/{userID}/credentials","href":"/api-reference/connect/backend/users/list-passkeys-for-a-user"},{"title":"Delete a passkey for a user","deprecated":null,"version":null,"sidebarTitle":"Delete a passkey for a user","openapi":"/api-reference/openapi/connect-backend.yaml delete /users/{userID}/credentials/{credentialID}","href":"/api-reference/connect/backend/users/delete-a-passkey-for-a-user"},{"title":"List passkeys for a user including full authenticator data","deprecated":null,"version":null,"sidebarTitle":"List passkeys for a user including full authenticator data","openapi":"/api-reference/openapi/connect-backend.yaml get /users/{userID}/fullCredentials","href":"/api-reference/connect/backend/users/list-passkeys-for-a-user-including-full-authenticator-data"}]},{"group":"Identifiers","pages":[{"title":"Create a login identifier for a user","deprecated":null,"version":null,"sidebarTitle":"Create a login identifier for a user","openapi":"/api-reference/openapi/connect-backend.yaml post /users/{userID}/identifiers","href":"/api-reference/connect/backend/identifiers/create-a-login-identifier-for-a-user"},{"title":"Delete a login identifier for a user","deprecated":null,"version":null,"sidebarTitle":"Delete a login identifier for a user","openapi":"/api-reference/openapi/connect-backend.yaml delete /users/{userID}/identifiers/{identifierID}","href":"/api-reference/connect/backend/identifiers/delete-a-login-identifier-for-a-user"},{"title":"Update a login identifier for a user","deprecated":null,"version":null,"sidebarTitle":"Update a login identifier for a user","openapi":"/api-reference/openapi/connect-backend.yaml patch /users/{userID}/identifiers/{identifierID}","href":"/api-reference/connect/backend/identifiers/update-a-login-identifier-for-a-user"},{"title":"List all login identifiers","deprecated":null,"version":null,"sidebarTitle":"List all login identifiers","openapi":"/api-reference/openapi/connect-backend.yaml get /identifiers","href":"/api-reference/connect/backend/identifiers/list-all-login-identifiers"}]},{"group":"Passkey diagnostics","pages":[{"title":"List all passkey events for a user","deprecated":null,"version":null,"sidebarTitle":"List all passkey events for a user","openapi":"/api-reference/openapi/connect-backend.yaml get /users/{userID}/passkeyEvents","href":"/api-reference/connect/backend/passkeyevents/list-all-passkey-events-for-a-user"},{"title":"Create a passkey event for a user","deprecated":null,"version":null,"sidebarTitle":"Create a passkey event for a user","openapi":"/api-reference/openapi/connect-backend.yaml post /users/{userID}/passkeyEvents","href":"/api-reference/connect/backend/passkeyevents/create-a-passkey-event-for-a-user"},{"title":"Delete a passkey event for a user","deprecated":null,"version":null,"sidebarTitle":"Delete a passkey event for a user","openapi":"/api-reference/openapi/connect-backend.yaml delete /users/{userID}/passkeyEvents/{passkeyEventID}","href":"/api-reference/connect/backend/passkeyevents/delete-a-passkey-event-for-a-user"},{"title":"List all passkey challenges for a user","deprecated":null,"version":null,"sidebarTitle":"List all passkey challenges for a user","openapi":"/api-reference/openapi/connect-backend.yaml get /users/{userID}/passkeyChallenges","href":"/api-reference/connect/backend/passkeychallenges/list-all-passkey-challenges-for-a-user"},{"title":"Update a passkey challenge for a user","deprecated":null,"version":null,"sidebarTitle":"Update a passkey challenge for a user","openapi":"/api-reference/openapi/connect-backend.yaml patch /users/{userID}/passkeyChallenges/{passkeyChallengeID}","href":"/api-reference/connect/backend/passkeychallenges/update-a-passkey-challenge-for-a-user"}]},{"group":"Connect tokens","pages":[{"title":"List all ConnectTokens","deprecated":null,"version":null,"sidebarTitle":"List all connecttokens","openapi":"/api-reference/openapi/connect-backend.yaml get /connectTokens","href":"/api-reference/connect/backend/connecttokens/list-all-connecttokens"},{"title":"Create a connectToken","deprecated":null,"version":null,"sidebarTitle":"Create a connecttoken","openapi":"/api-reference/openapi/connect-backend.yaml post /connectTokens","href":"/api-reference/connect/backend/connecttokens/create-a-connecttoken"},{"title":"Delete a ConnectToken","deprecated":null,"version":null,"sidebarTitle":"Delete a connecttoken","openapi":"/api-reference/openapi/connect-backend.yaml delete /connectTokens/{connectTokenID}","href":"/api-reference/connect/backend/connecttokens/delete-a-connecttoken"},{"title":"Update a ConnectToken","deprecated":null,"version":null,"sidebarTitle":"Update a connecttoken","openapi":"/api-reference/openapi/connect-backend.yaml patch /connectTokens/{connectTokenID}","href":"/api-reference/connect/backend/connecttokens/update-a-connecttoken"}]},{"group":"Passkey ceremonies","pages":[{"title":"Start creating a new passkey","deprecated":null,"version":null,"sidebarTitle":"Start creating a new passkey","openapi":"/api-reference/openapi/connect-backend.yaml post /passkey/append/start","href":"/api-reference/connect/backend/passkeys/start-creating-a-new-passkey"},{"title":"Finish creating a new passkey","deprecated":null,"version":null,"sidebarTitle":"Finish creating a new passkey","openapi":"/api-reference/openapi/connect-backend.yaml post /passkey/append/finish","href":"/api-reference/connect/backend/passkeys/finish-creating-a-new-passkey"},{"title":"Start login with an existing passkey","deprecated":null,"version":null,"sidebarTitle":"Start login with an existing passkey","openapi":"/api-reference/openapi/connect-backend.yaml post /passkey/login/start","href":"/api-reference/connect/backend/passkeys/start-login-with-an-existing-passkey"},{"title":"Finish login with an existing passkey","deprecated":null,"version":null,"sidebarTitle":"Finish login with an existing passkey","openapi":"/api-reference/openapi/connect-backend.yaml post /passkey/login/finish","href":"/api-reference/connect/backend/passkeys/finish-login-with-an-existing-passkey"},{"title":"Verify signedPasskeyData from a passkey login","deprecated":null,"version":null,"sidebarTitle":"Verify signedpasskeydata from a passkey login","openapi":"/api-reference/openapi/connect-backend.yaml post /passkey/verifySignedData","href":"/api-reference/connect/backend/passkeys/verify-signedpasskeydata-from-a-passkey-login"},{"title":"Start login with an existing passkey (Conditional UI)","deprecated":null,"version":null,"sidebarTitle":"Start login with an existing passkey conditional ui","openapi":"/api-reference/openapi/connect-backend.yaml post /passkey/mediation/start","href":"/api-reference/connect/backend/passkeys/start-login-with-an-existing-passkey-conditional-ui"},{"title":"Finish login with an existing passkey (Conditional UI)","deprecated":null,"version":null,"sidebarTitle":"Finish login with an existing passkey conditional ui","openapi":"/api-reference/openapi/connect-backend.yaml post /passkey/mediation/finish","href":"/api-reference/connect/backend/passkeys/finish-login-with-an-existing-passkey-conditional-ui"}]},{"group":"Data exports","pages":[{"title":"List project exports","deprecated":null,"version":null,"sidebarTitle":"List project exports","openapi":"/api-reference/openapi/connect-backend.yaml get /exports/{exportType}","href":"/api-reference/connect/backend/exports/list-project-exports"},{"title":"Get download link for an export file","deprecated":null,"version":null,"sidebarTitle":"Get download link for an export file","openapi":"/api-reference/openapi/connect-backend.yaml get /exports/{exportType}/{filename}/downloadLink","href":"/api-reference/connect/backend/exports/get-download-link-for-an-export-file"}]},{"group":"Analytics and configuration","pages":[{"title":"Get project statistics","deprecated":null,"version":null,"sidebarTitle":"Get project statistics","openapi":"/api-reference/openapi/connect-backend.yaml get /stats","href":"/api-reference/connect/backend/connect-reads/get-stats"},{"title":"Get statistics over time","deprecated":null,"version":null,"sidebarTitle":"Get statistics over time","openapi":"/api-reference/openapi/connect-backend.yaml get /statsByTime","href":"/api-reference/connect/backend/connect-reads/get-statsbytime"},{"title":"List applications","deprecated":null,"version":null,"sidebarTitle":"List applications","openapi":"/api-reference/openapi/connect-backend.yaml get /connect/applications","href":"/api-reference/connect/backend/connect-reads/get-connectapplications"},{"title":"Search Connect processes","deprecated":null,"version":null,"sidebarTitle":"Search Connect processes","openapi":"/api-reference/openapi/connect-backend.yaml post /connect/processSearch","href":"/api-reference/connect/backend/connect-reads/post-connectprocesssearch"},{"title":"Get Connect processes by ID","deprecated":null,"version":null,"sidebarTitle":"Get Connect processes by ID","openapi":"/api-reference/openapi/connect-backend.yaml post /connect/processList","href":"/api-reference/connect/backend/connect-reads/post-connectprocesslist"},{"title":"List process events","deprecated":null,"version":null,"sidebarTitle":"List process events","openapi":"/api-reference/openapi/connect-backend.yaml get /connect/processes/{processID}/events","href":"/api-reference/connect/backend/connect-reads/get-connectprocesses-events"},{"title":"Get process metadata","deprecated":null,"version":null,"sidebarTitle":"Get process metadata","openapi":"/api-reference/openapi/connect-backend.yaml get /connect/processMetadata/{processID}","href":"/api-reference/connect/backend/connect-reads/get-connectprocessmetadata"},{"title":"List subprocesses","deprecated":null,"version":null,"sidebarTitle":"List subprocesses","openapi":"/api-reference/openapi/connect-backend.yaml get /connect/processes/{processID}/subProcesses","href":"/api-reference/connect/backend/connect-reads/get-connectprocesses-subprocesses"},{"title":"List process errors","deprecated":null,"version":null,"sidebarTitle":"List process errors","openapi":"/api-reference/openapi/connect-backend.yaml get /connect/processErrors","href":"/api-reference/connect/backend/connect-reads/get-connectprocesserrors"},{"title":"List error patterns","deprecated":null,"version":null,"sidebarTitle":"List error patterns","openapi":"/api-reference/openapi/connect-backend.yaml get /connect/processErrorPatterns","href":"/api-reference/connect/backend/connect-reads/get-connectprocesserrorpatterns"},{"title":"List devices for multiple users","deprecated":null,"version":null,"sidebarTitle":"List devices for multiple users","openapi":"/api-reference/openapi/connect-backend.yaml post /devices","href":"/api-reference/connect/backend/connect-reads/list-devices-for-multiple-users"},{"title":"List shared devices for a user","deprecated":null,"version":null,"sidebarTitle":"List shared devices for a user","openapi":"/api-reference/openapi/connect-backend.yaml get /sharedDevices","href":"/api-reference/connect/backend/connect-reads/get-shareddevices"},{"title":"List Android app configurations","deprecated":null,"version":null,"sidebarTitle":"List Android app configurations","openapi":"/api-reference/openapi/connect-backend.yaml get /androidappconfig","href":"/api-reference/connect/backend/connect-reads/get-androidappconfig"},{"title":"List Passkey Intelligence rulesets","deprecated":null,"version":null,"sidebarTitle":"List Passkey Intelligence rulesets","openapi":"/api-reference/openapi/connect-backend.yaml get /passkeyIntelligence/{projectID}/rulesetsMetadata","href":"/api-reference/connect/backend/connect-reads/get-passkeyintelligence-rulesetsmetadata"},{"title":"Get a Passkey Intelligence ruleset","deprecated":null,"version":null,"sidebarTitle":"Get a Passkey Intelligence ruleset","openapi":"/api-reference/openapi/connect-backend.yaml get /passkeyIntelligence/{projectID}/rulesets/{rulesetID}","href":"/api-reference/connect/backend/connect-reads/get-passkeyintelligence-rulesets"},{"title":"Get project configuration","deprecated":null,"version":null,"sidebarTitle":"Get project configuration","openapi":"/api-reference/openapi/connect-backend.yaml get /projectConfig","href":"/api-reference/connect/backend/connect-reads/get-projectconfig"}]},{"group":"App configuration","pages":[{"title":"Create an application","deprecated":null,"version":null,"sidebarTitle":"Create an application","openapi":"/api-reference/openapi/connect-backend.yaml post /connect/applications","href":"/api-reference/connect/backend/connectmanagement/post-connectapplications"},{"title":"Create an Android app configuration","deprecated":null,"version":null,"sidebarTitle":"Create an Android app configuration","openapi":"/api-reference/openapi/connect-backend.yaml post /androidappconfig","href":"/api-reference/connect/backend/connectmanagement/post-androidappconfig"},{"title":"Update an application","deprecated":null,"version":null,"sidebarTitle":"Update an application","openapi":"/api-reference/openapi/connect-backend.yaml put /connect/applications/{applicationID}","href":"/api-reference/connect/backend/connectmanagement/put-connectapplications"},{"title":"Delete an application","deprecated":null,"version":null,"sidebarTitle":"Delete an application","openapi":"/api-reference/openapi/connect-backend.yaml delete /connect/applications/{applicationID}","href":"/api-reference/connect/backend/connectmanagement/delete-connectapplications"},{"title":"Update an Android app configuration","deprecated":null,"version":null,"sidebarTitle":"Update an Android app configuration","openapi":"/api-reference/openapi/connect-backend.yaml put /androidappconfig/{androidAppConfigID}","href":"/api-reference/connect/backend/connectmanagement/put-androidappconfig"},{"title":"Delete an Android app configuration","deprecated":null,"version":null,"sidebarTitle":"Delete an Android app configuration","openapi":"/api-reference/openapi/connect-backend.yaml delete /androidappconfig/{androidAppConfigID}","href":"/api-reference/connect/backend/connectmanagement/delete-androidappconfig"},{"title":"Create a Passkey Intelligence ruleset","deprecated":null,"version":null,"sidebarTitle":"Create a Passkey Intelligence ruleset","openapi":"/api-reference/openapi/connect-backend.yaml post /passkeyIntelligence/{projectID}/rulesets","href":"/api-reference/connect/backend/connectmanagement/post-passkeyintelligence-rulesets"},{"title":"Activate a Passkey Intelligence ruleset","deprecated":null,"version":null,"sidebarTitle":"Activate a Passkey Intelligence ruleset","openapi":"/api-reference/openapi/connect-backend.yaml post /passkeyIntelligence/{projectID}/rulesets/{rulesetID}/activate","href":"/api-reference/connect/backend/connectmanagement/post-passkeyintelligence-rulesets-activate"}]},{"group":"Rollout configuration","pages":[{"title":"Get Connect configuration","deprecated":null,"version":null,"sidebarTitle":"Get Connect configuration","openapi":"/api-reference/openapi/connect-backend.yaml get /connect/config","href":"/api-reference/connect/backend/connectrollout/get-connectconfig"},{"title":"Update Connect configuration","deprecated":null,"version":null,"sidebarTitle":"Update Connect configuration","openapi":"/api-reference/openapi/connect-backend.yaml put /connect/config","href":"/api-reference/connect/backend/connectrollout/put-connectconfig"},{"title":"Create Connect configuration","deprecated":null,"version":null,"sidebarTitle":"Create Connect configuration","openapi":"/api-reference/openapi/connect-backend.yaml post /connect/config","href":"/api-reference/connect/backend/connectrollout/post-connectconfig"},{"title":"List rollout rulesets","deprecated":null,"version":null,"sidebarTitle":"List rollout rulesets","openapi":"/api-reference/openapi/connect-backend.yaml get /connect/rulesetsMetadata","href":"/api-reference/connect/backend/connectrollout/get-connectrulesetsmetadata"},{"title":"Create a rollout ruleset","deprecated":null,"version":null,"sidebarTitle":"Create a rollout ruleset","openapi":"/api-reference/openapi/connect-backend.yaml post /connect/rulesets","href":"/api-reference/connect/backend/connectrollout/post-connectrulesets"},{"title":"Get a rollout ruleset","deprecated":null,"version":null,"sidebarTitle":"Get a rollout ruleset","openapi":"/api-reference/openapi/connect-backend.yaml get /connect/rulesets/{rulesetID}","href":"/api-reference/connect/backend/connectrollout/get-connectrulesets"},{"title":"Update a rollout ruleset","deprecated":null,"version":null,"sidebarTitle":"Update a rollout ruleset","openapi":"/api-reference/openapi/connect-backend.yaml patch /connect/rulesets/{rulesetID}","href":"/api-reference/connect/backend/connectrollout/patch-connectrulesets"},{"title":"Activate a rollout ruleset","deprecated":null,"version":null,"sidebarTitle":"Activate a rollout ruleset","openapi":"/api-reference/openapi/connect-backend.yaml post /connect/rulesets/{rulesetID}/activate","href":"/api-reference/connect/backend/connectrollout/post-connectrulesets-activate"},{"title":"List identifier allowlists","deprecated":null,"version":null,"sidebarTitle":"List identifier allowlists","openapi":"/api-reference/openapi/connect-backend.yaml get /connect/identifierWhitelists","href":"/api-reference/connect/backend/connectrollout/get-connectidentifierwhitelists"},{"title":"Create an identifier allowlist","deprecated":null,"version":null,"sidebarTitle":"Create an identifier allowlist","openapi":"/api-reference/openapi/connect-backend.yaml post /connect/identifierWhitelists","href":"/api-reference/connect/backend/connectrollout/post-connectidentifierwhitelists"},{"title":"Update an identifier allowlist","deprecated":null,"version":null,"sidebarTitle":"Update an identifier allowlist","openapi":"/api-reference/openapi/connect-backend.yaml put /connect/identifierWhitelists/{identifierWhitelistID}","href":"/api-reference/connect/backend/connectrollout/put-connectidentifierwhitelists"},{"title":"Delete an identifier allowlist","deprecated":null,"version":null,"sidebarTitle":"Delete an identifier allowlist","openapi":"/api-reference/openapi/connect-backend.yaml delete /connect/identifierWhitelists/{identifierWhitelistID}","href":"/api-reference/connect/backend/connectrollout/delete-connectidentifierwhitelists"},{"title":"List rollout simulations","deprecated":null,"version":null,"sidebarTitle":"List rollout simulations","openapi":"/api-reference/openapi/connect-backend.yaml get /connect/rulesets/{rulesetID}/simulations","href":"/api-reference/connect/backend/connectrollout/get-connectrulesets-simulations"},{"title":"Create a rollout simulation","deprecated":null,"version":null,"sidebarTitle":"Create a rollout simulation","openapi":"/api-reference/openapi/connect-backend.yaml post /connect/rulesets/{rulesetID}/simulations","href":"/api-reference/connect/backend/connectrollout/post-connectrulesets-simulations"},{"title":"Get rollout simulation status","deprecated":null,"version":null,"sidebarTitle":"Get rollout simulation status","openapi":"/api-reference/openapi/connect-backend.yaml get /connect/rulesets/{rulesetID}/simulations/{simulationID}","href":"/api-reference/connect/backend/connectrollout/get-connectrulesets-simulations-1"}]}]}]}]},{"tab":"Passkey UI Flows","pages":[{"title":"Passkey UI Flows","href":"/passkey-ui-flows/overview"}]}]},"basePath":"","title":"Create new events - Corbado docs","buildId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","deploymentId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-Myd8dsju.js","utils-C2HkQgW0.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-8rSppmTv.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-B6MjiCFm.js","snippetPresets-DwrSAONL.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-1-a5UQKQ.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-C541m7wZ.js","shallow-CWELCZ77.js","getApiPlaygroundDisplay-CTo5Zn03.js","CodeSnippet-D--dzvnl.js","CodeSnippets-DM3cXEDh.js","Page-CxAy5y67.js","getPastedJson-C-VECgcL.js","icon-BPq2-Mg3.js","MethodPill-D9J5cUHd.js","DuplicateIcon-BqHaxUnD.js","createIcon-CIbcZHp9.js","DynamicMarkdown-BKiHAm_d.js","SectionHeading-DstQXt3H.js","axios-vUo_bRtp.js","Markdown-CpxgzsKA.js","clsx-C5EfhVm0.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CJ9Oly2E.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-Mk6P3qvh.js"]}