Validates up to 5,000 events independently and preserves their original
indexes in error paths. Requires WRITE access for Personal Access Tokens
and write-capable OAuth users. The body is limited to 20 MiB
and each event to 256 KiB of UTF-8 JSON. A 202 response can be SUCCESS
or PARTIAL_SUCCESS; rejected events are listed in errors while accepted
events are durably queued. This request consumes 2,000
Product Activity rate-limit units.
Personal Access Token or OAuth 2.1 access token, sent as a bearer
credential (Authorization: Bearer inf_pat_...). Read operations
require a token with the READ scope; write operations
(POST/PATCH/DELETE) require WRITE.
SUCCESS: every event was accepted. PARTIAL_SUCCESS (batch only): at least
one event was accepted and the rejected ones are listed in errors.
Contains only errors and metadata; accepted events are not listed individually.
Missing required fields are grouped into one INVALID_SCHEMA error; a null
value counts as missing. If none are missing, unknown fields are grouped the
same way. Otherwise only the first validation failure is returned. Each
failed event produces at most one public error.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Inflection Help Center","colors":{"primary":"#0A6E72","light":"#10CFC9","dark":"#082A5F"},"logo":{"light":"https://mintcdn.com/inflection-4b2c0de4/HuHUfaapytjERxAZ/logo/light.svg?fit=max\u0026auto=format\u0026n=HuHUfaapytjERxAZ\u0026q=85\u0026s=81098246e2501d2a46b750c33ea43379","dark":"https://mintcdn.com/inflection-4b2c0de4/HuHUfaapytjERxAZ/logo/dark.svg?fit=max\u0026auto=format\u0026n=HuHUfaapytjERxAZ\u0026q=85\u0026s=f04bdd1942876b51714222e6720a0751","href":"https://www.inflection.io"},"favicon":"https://mintcdn.com/inflection-4b2c0de4/N4VRWuxaoalXbMy_/favicon.png?fit=max\u0026auto=format\u0026n=N4VRWuxaoalXbMy_\u0026q=85\u0026s=314755a3da2ea10586a133a2ebc9b918","api":{"openapi":"api-reference/openapi.yaml"},"appearance":{"default":"dark","strict":false},"background":{"color":{"light":"#FFFFFF","dark":"#081020"}},"navbar":{"links":[{"href":"mailto:support@inflection.io","label":"Support"}],"primary":{"type":"button","label":"Sign in","href":"https://app.inflection.io"}},"footer":{"socials":{"website":"https://www.inflection.io","linkedin":"https://www.linkedin.com/company/inflection-io"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"inflection-4b2c0de4","hasAudioNarration":false,"actualSubdomain":"inflection-4b2c0de4","customDomains":["docs.inflection.io"],"gitSource":{"type":"github","owner":"inflectionio","repo":"mintlify-docs","deployBranch":"develop","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"collectionId":"469c8d07-f520-47ad-8850-d069d2f8522a","liveDeploymentHistoryId":"6aeb224269a4caf965b0de14","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aeb224269a4caf965b0de14"},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6aeda6f10c0840f387743842","clientVersion":"0.0.4076","searchFilterCounts":[{"language":"default","tag":"Product Docs","count":64},{"language":"default","tag":"Developer APIs","count":52},{"language":"default","tag":"What's New","count":28},{"language":"default","tag":"Connections \u0026 Mapping","count":27},{"language":"default","tag":"Getting Started","count":15},{"language":"default","tag":"MCP and Agents","count":12},{"language":"default","tag":"Journeys \u0026 Assets","count":12},{"language":"default","tag":"Inbound Webhook Setup Guides","count":8},{"language":"default","tag":"Lists","count":8},{"language":"default","tag":"Core Concepts","count":7}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/product-activity/submit-a-batch-of-product-events","slug":"/api-reference/product-activity/submit-a-batch-of-product-events","pageMetadata":{"title":"Submit a batch of product events","description":"Validates up to 5,000 events independently and preserves their original\nindexes in error paths. Requires `WRITE` access for Personal Access Tokens\nand write-capable OAuth users. The body is limited to 20 MiB\nand each event to 256 KiB of UTF-8 JSON. A `202` response can be `SUCCESS`\nor `PARTIAL_SUCCESS`; rejected events are listed in `errors` while accepted\nevents are durably queued. This request consumes 2,000\nProduct Activity rate-limit units.\n","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v2/product-events/batch","href":"/api-reference/product-activity/submit-a-batch-of-product-events","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"Validates up to 5,000 events independently and preserves their original\\nindexes in error paths. Requires \", _jsx(_components.code, {\n children: \"WRITE\"\n }), \" access for Personal Access Tokens\\nand write-capable OAuth users. The body is limited to 20 MiB\\nand each event to 256 KiB of UTF-8 JSON. A \", _jsx(_components.code, {\n children: \"202\"\n }), \" response can be \", _jsx(_components.code, {\n children: \"SUCCESS\"\n }), \"\\nor \", _jsx(_components.code, {\n children: \"PARTIAL_SUCCESS\"\n }), \"; rejected events are listed in \", _jsx(_components.code, {\n children: \"errors\"\n }), \" while accepted\\nevents are durably queued. This request consumes 2,000\\nProduct Activity rate-limit units.\"]\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":"Submit a batch of product events","description":"Validates up to 5,000 events independently and preserves their original\nindexes in error paths. Requires `WRITE` access for Personal Access Tokens\nand write-capable OAuth users. The body is limited to 20 MiB\nand each event to 256 KiB of UTF-8 JSON. A `202` response can be `SUCCESS`\nor `PARTIAL_SUCCESS`; rejected events are listed in `errors` while accepted\nevents are durably queued. This request consumes 2,000\nProduct Activity rate-limit units.\n","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v2/product-events/batch","href":"/api-reference/product-activity/submit-a-batch-of-product-events","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Product Activity"],"operationId":"createProductActivityEventBatch","summary":"Submit a batch of product events","description":"Validates up to 5,000 events independently and preserves their original\nindexes in error paths. Requires `WRITE` access for Personal Access Tokens\nand write-capable OAuth users. The body is limited to 20 MiB\nand each event to 256 KiB of UTF-8 JSON. A `202` response can be `SUCCESS`\nor `PARTIAL_SUCCESS`; rejected events are listed in `errors` while accepted\nevents are durably queued. This request consumes 2,000\nProduct Activity rate-limit units.\n","x-required-permission":"write","x-max-body-bytes":20971520,"requestBody":"6f2aa01a-c07a-4180-96e3-01182ed95a08","responses":{"202":"ea73e73b-f6c8-47ab-ab14-aaa137d57158","400":"d604ca00-eaa2-41ed-8f21-8e1d36506579","401":"6e41133b-9c40-414f-9961-4a48c38f070d","403":"953d4ce7-1d56-40f7-8f69-c4bf7b623dc1","413":"af1eb6bb-16e3-4ad3-a5c8-c80407a4b076","415":"51aaac61-6871-49ff-962b-7a6414566793","429":"d24deb4d-de72-4196-99e3-aea5535d1f17","500":"695694d2-4e7c-417f-a0a4-bcaea5f4cdf3","503":"d158ee26-7c2a-466c-a00e-ede3eafb7d76"},"method":"post","type":"path","servers":["8d3910c8-69dd-47d6-b28b-33a83970ae65"],"security":["82cbf908-a1ea-4f0d-84ee-01937d72cff5"],"path":"/v2/product-events/batch","baseUrlOptions":["https://api.inflection.io"],"title":"Submit a batch of product events","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"events":{"type":"array","minItems":1,"maxItems":5000,"items":{"type":"object","additionalProperties":false,"x-max-encoded-bytes":262144,"description":"One product event. The encoded event must not exceed 256 KiB. String\nlimits count Unicode code points. See `timestamp` for the accepted\nformats.\n","properties":{"eventId":{"type":"string","minLength":1,"maxLength":100,"description":"Unique per event within your tenant; used for deduplication. Must not be blank.","isRequired":true,"uniqueKey":"events.items.[INDEX].eventId","typeLabel":"string"},"userId":{"type":"string","minLength":1,"maxLength":100,"description":"The product user id, as used by `POST /v2/users`. Must not be blank.","isRequired":true,"uniqueKey":"events.items.[INDEX].userId","typeLabel":"string"},"eventName":{"type":"string","minLength":1,"maxLength":200,"description":"Must not be blank or start with `$`.","isRequired":true,"uniqueKey":"events.items.[INDEX].eventName","typeLabel":"string"},"timestamp":{"oneOf":[{"type":"string","description":"When the event happened, as one of:\n- An ISO 8601 date-time with an offset: `2026-11-04T10:52:00Z`,\n `2026-11-04T10:52:00.123+05:30`.\n- An ISO 8601 date-time without an offset, read as UTC:\n `2026-11-04T10:52:00`.\n- An integer number of Unix milliseconds: `1793789520000`. Seconds\n resolve to a date in 1970.\n\nDate-times need the `T` separator and at least hours and minutes;\nseconds and up to nine fraction digits are optional, and precision\nbeyond microseconds is truncated. Offsets are `Z`, `±HH`, `±HH:MM` or\n`±HH:MM:SS` (`+0530` is rejected). A date alone, a space separator, a numeric string\nand a non-integer number are rejected. The result must fall in a UTC\nyear from 1000 through 9999.\n","isRequired":true,"uniqueKey":"events.items.[INDEX].timestamp.oneOf.0","typeLabel":"string"},{"type":"integer","description":"When the event happened, as one of:\n- An ISO 8601 date-time with an offset: `2026-11-04T10:52:00Z`,\n `2026-11-04T10:52:00.123+05:30`.\n- An ISO 8601 date-time without an offset, read as UTC:\n `2026-11-04T10:52:00`.\n- An integer number of Unix milliseconds: `1793789520000`. Seconds\n resolve to a date in 1970.\n\nDate-times need the `T` separator and at least hours and minutes;\nseconds and up to nine fraction digits are optional, and precision\nbeyond microseconds is truncated. Offsets are `Z`, `±HH`, `±HH:MM` or\n`±HH:MM:SS` (`+0530` is rejected). A date alone, a space separator, a numeric string\nand a non-integer number are rejected. The result must fall in a UTC\nyear from 1000 through 9999.\n","format":"int64","isRequired":true,"uniqueKey":"events.items.[INDEX].timestamp.oneOf.1","typeLabel":"integer\u003cint64>"}],"isRequired":true,"uniqueKey":"events.items.[INDEX].timestamp","typeLabel":"string | integer\u003cint64>"},"properties":{"type":"object","minProperties":1,"maxProperties":256,"additionalProperties":true,"description":"Arbitrary JSON values. Top-level keys contain 1-200 Unicode code\npoints and must not be blank; every string value, at any depth, is limited to 8,192 Unicode code\npoints. Numbers must be within the finite IEEE 754 double-precision\nrange. Nested objects and arrays are stored, but only top-level string,\nnumber and boolean values can be used in dynamic lists and triggers.\n","isRequired":true,"uniqueKey":"events.items.[INDEX].properties","typeLabel":"object"},"orgId":{"oneOf":[{"type":"string","minLength":1,"maxLength":100,"description":"Optional organization identifier; `null` is treated as absent and whitespace-only values are rejected.","uniqueKey":"events.items.[INDEX].orgId.oneOf.0","typeLabel":"string"},{"type":"null","minLength":1,"maxLength":100,"description":"Optional organization identifier; `null` is treated as absent and whitespace-only values are rejected.","uniqueKey":"events.items.[INDEX].orgId.oneOf.1","typeLabel":"null"}],"uniqueKey":"events.items.[INDEX].orgId","typeLabel":"string | null"}},"required":["eventId","userId","eventName","timestamp","properties"],"uniqueKey":"events.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"events","typeLabel":"object[]"}},"required":["events"],"uniqueKey":"","typeLabel":"object"},"examples":{"batch":{"title":"batch","value":{"events":[{"eventId":"event-123","userId":"user-42","eventName":"Viewed Page","timestamp":"2026-10-21T12:00:00Z","properties":{"page":"/pricing"}},{"eventId":"event-124","userId":"user-42","eventName":"Started Trial","timestamp":1792584060000,"properties":{"plan":"growth"}}]}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"ea73e73b-f6c8-47ab-ab14-aaa137d57158":{"description":"`SUCCESS`: every event was accepted. `PARTIAL_SUCCESS` (batch only): at least\none event was accepted and the rejected ones are listed in `errors`.\n","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"description":"Contains only errors and metadata; accepted events are not listed individually.\nMissing required fields are grouped into one `INVALID_SCHEMA` error; a `null`\nvalue counts as missing. If none are missing, unknown fields are grouped the\nsame way. Otherwise only the first validation failure is returned. Each\nfailed event produces at most one public error.\n","properties":{"meta":{"type":"object","additionalProperties":false,"properties":{"status":{"type":"string","enum":["SUCCESS","PARTIAL_SUCCESS","FAILURE"],"isRequired":true,"uniqueKey":"meta.status","typeLabel":"enum\u003cstring>"},"timestamp":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"meta.timestamp","typeLabel":"string\u003cdate-time>"},"correlationId":{"type":"string","format":"uuid","description":"Use this identifier when tracing a request with support.","isRequired":true,"uniqueKey":"meta.correlationId","typeLabel":"string\u003cuuid>"}},"required":["status","timestamp","correlationId"],"isRequired":true,"uniqueKey":"meta","typeLabel":"object"},"errors":{"type":"array","items":{"type":"object","additionalProperties":false,"description":"Request-level errors may omit `paths`. Event-level batch paths begin with\n`/events/{originalIndex}` so indexes remain stable when other events fail;\non the single-event endpoint paths have no prefix (for example `/eventId`).\n`MALFORMED_JSON`, `INVALID_SCHEMA`, `DUPLICATE_EVENT` and `INVALID_TENANT`\nproduce `400` when no event is accepted. `TOO_LARGE` produces `413` when the\nrequest body is too large; an oversized event inside a batch is an event\nerror instead (`400`, or `202` with `PARTIAL_SUCCESS`).\n`UNSUPPORTED_MEDIA_TYPE` and `UNSUPPORTED_CONTENT_ENCODING` produce `415`;\n`INTERNAL_ERROR` produces `500`; and `DEPENDENCY_UNAVAILABLE` produces `503`\nwhen no event is accepted, in which case other event errors may also be\nlisted. A `202 PARTIAL_SUCCESS` may contain event errors.\n","properties":{"errorCode":{"type":"string","enum":["INVALID_TENANT","UNSUPPORTED_MEDIA_TYPE","UNSUPPORTED_CONTENT_ENCODING","TOO_LARGE","MALFORMED_JSON","INVALID_SCHEMA","DUPLICATE_EVENT","DEPENDENCY_UNAVAILABLE","INTERNAL_ERROR"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].errorCode","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"},"paths":{"type":"array","description":"JSON Pointer locations. Batch event paths retain original event indexes.","items":{"type":"string","uniqueKey":"errors.items.[INDEX].paths.items.[INDEX]","typeLabel":"string"},"uniqueKey":"errors.items.[INDEX].paths","typeLabel":"string[]"}},"required":["errorCode","message"],"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"required":["meta"],"uniqueKey":"","typeLabel":"object"},"examples":{"success":{"title":"success","value":{"meta":{"status":"SUCCESS","timestamp":"2026-10-21T12:00:00.000Z","correlationId":"4d36e05b-21ab-4633-b811-cf4f1ad8f72c"}}},"batchSuccess":{"title":"batchSuccess","value":{"meta":{"status":"SUCCESS","timestamp":"2026-10-21T12:00:00.000Z","correlationId":"4d36e05b-21ab-4633-b811-cf4f1ad8f72c"}}},"partialSuccess":{"title":"partialSuccess","value":{"errors":[{"errorCode":"INVALID_SCHEMA","message":"Required fields are missing.","paths":["/events/1/userId"]}],"meta":{"status":"PARTIAL_SUCCESS","timestamp":"2026-10-21T12:00:00.000Z","correlationId":"4d36e05b-21ab-4633-b811-cf4f1ad8f72c"}}}},"exampleType":"examples"}},"exampleType":"examples"},"d604ca00-eaa2-41ed-8f21-8e1d36506579":{"description":"No event was accepted: malformed JSON (including an empty body, invalid UTF-8, a NUL\nbyte, duplicate keys, trailing content or excessive nesting), an invalid\nschema, too many events in a batch, or every event invalid, oversized or a\nduplicate.\n","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"description":"Contains only errors and metadata; accepted events are not listed individually.\nMissing required fields are grouped into one `INVALID_SCHEMA` error; a `null`\nvalue counts as missing. If none are missing, unknown fields are grouped the\nsame way. Otherwise only the first validation failure is returned. Each\nfailed event produces at most one public error.\n","properties":{"meta":{"type":"object","additionalProperties":false,"properties":{"status":{"type":"string","enum":["SUCCESS","PARTIAL_SUCCESS","FAILURE"],"isRequired":true,"uniqueKey":"meta.status","typeLabel":"enum\u003cstring>"},"timestamp":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"meta.timestamp","typeLabel":"string\u003cdate-time>"},"correlationId":{"type":"string","format":"uuid","description":"Use this identifier when tracing a request with support.","isRequired":true,"uniqueKey":"meta.correlationId","typeLabel":"string\u003cuuid>"}},"required":["status","timestamp","correlationId"],"isRequired":true,"uniqueKey":"meta","typeLabel":"object"},"errors":{"type":"array","items":{"type":"object","additionalProperties":false,"description":"Request-level errors may omit `paths`. Event-level batch paths begin with\n`/events/{originalIndex}` so indexes remain stable when other events fail;\non the single-event endpoint paths have no prefix (for example `/eventId`).\n`MALFORMED_JSON`, `INVALID_SCHEMA`, `DUPLICATE_EVENT` and `INVALID_TENANT`\nproduce `400` when no event is accepted. `TOO_LARGE` produces `413` when the\nrequest body is too large; an oversized event inside a batch is an event\nerror instead (`400`, or `202` with `PARTIAL_SUCCESS`).\n`UNSUPPORTED_MEDIA_TYPE` and `UNSUPPORTED_CONTENT_ENCODING` produce `415`;\n`INTERNAL_ERROR` produces `500`; and `DEPENDENCY_UNAVAILABLE` produces `503`\nwhen no event is accepted, in which case other event errors may also be\nlisted. A `202 PARTIAL_SUCCESS` may contain event errors.\n","properties":{"errorCode":{"type":"string","enum":["INVALID_TENANT","UNSUPPORTED_MEDIA_TYPE","UNSUPPORTED_CONTENT_ENCODING","TOO_LARGE","MALFORMED_JSON","INVALID_SCHEMA","DUPLICATE_EVENT","DEPENDENCY_UNAVAILABLE","INTERNAL_ERROR"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].errorCode","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"},"paths":{"type":"array","description":"JSON Pointer locations. Batch event paths retain original event indexes.","items":{"type":"string","uniqueKey":"errors.items.[INDEX].paths.items.[INDEX]","typeLabel":"string"},"uniqueKey":"errors.items.[INDEX].paths","typeLabel":"string[]"}},"required":["errorCode","message"],"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"required":["meta"],"uniqueKey":"","typeLabel":"object"},"examples":{"groupedMissingFields":{"title":"groupedMissingFields","value":{"errors":[{"errorCode":"INVALID_SCHEMA","message":"Required fields are missing.","paths":["/events/0/eventId","/events/0/userId"]}],"meta":{"status":"FAILURE","timestamp":"2026-10-21T12:00:00.000Z","correlationId":"4d36e05b-21ab-4633-b811-cf4f1ad8f72c"}}},"duplicate":{"title":"duplicate","value":{"errors":[{"errorCode":"DUPLICATE_EVENT","message":"Event is a duplicate."}],"meta":{"status":"FAILURE","timestamp":"2026-10-21T12:00:00.000Z","correlationId":"4d36e05b-21ab-4633-b811-cf4f1ad8f72c"}}}},"exampleType":"examples"}},"exampleType":"examples"},"6e41133b-9c40-414f-9961-4a48c38f070d":{"description":"Missing or invalid Personal Access Token or OAuth access token. Empty body.","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"953d4ce7-1d56-40f7-8f69-c4bf7b623dc1":{"description":"The credential lacks `WRITE` access. Empty body.","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"af1eb6bb-16e3-4ad3-a5c8-c80407a4b076":{"description":"The request body exceeds its endpoint limit.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"description":"Contains only errors and metadata; accepted events are not listed individually.\nMissing required fields are grouped into one `INVALID_SCHEMA` error; a `null`\nvalue counts as missing. If none are missing, unknown fields are grouped the\nsame way. Otherwise only the first validation failure is returned. Each\nfailed event produces at most one public error.\n","properties":{"meta":{"type":"object","additionalProperties":false,"properties":{"status":{"type":"string","enum":["SUCCESS","PARTIAL_SUCCESS","FAILURE"],"isRequired":true,"uniqueKey":"meta.status","typeLabel":"enum\u003cstring>"},"timestamp":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"meta.timestamp","typeLabel":"string\u003cdate-time>"},"correlationId":{"type":"string","format":"uuid","description":"Use this identifier when tracing a request with support.","isRequired":true,"uniqueKey":"meta.correlationId","typeLabel":"string\u003cuuid>"}},"required":["status","timestamp","correlationId"],"isRequired":true,"uniqueKey":"meta","typeLabel":"object"},"errors":{"type":"array","items":{"type":"object","additionalProperties":false,"description":"Request-level errors may omit `paths`. Event-level batch paths begin with\n`/events/{originalIndex}` so indexes remain stable when other events fail;\non the single-event endpoint paths have no prefix (for example `/eventId`).\n`MALFORMED_JSON`, `INVALID_SCHEMA`, `DUPLICATE_EVENT` and `INVALID_TENANT`\nproduce `400` when no event is accepted. `TOO_LARGE` produces `413` when the\nrequest body is too large; an oversized event inside a batch is an event\nerror instead (`400`, or `202` with `PARTIAL_SUCCESS`).\n`UNSUPPORTED_MEDIA_TYPE` and `UNSUPPORTED_CONTENT_ENCODING` produce `415`;\n`INTERNAL_ERROR` produces `500`; and `DEPENDENCY_UNAVAILABLE` produces `503`\nwhen no event is accepted, in which case other event errors may also be\nlisted. A `202 PARTIAL_SUCCESS` may contain event errors.\n","properties":{"errorCode":{"type":"string","enum":["INVALID_TENANT","UNSUPPORTED_MEDIA_TYPE","UNSUPPORTED_CONTENT_ENCODING","TOO_LARGE","MALFORMED_JSON","INVALID_SCHEMA","DUPLICATE_EVENT","DEPENDENCY_UNAVAILABLE","INTERNAL_ERROR"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].errorCode","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"},"paths":{"type":"array","description":"JSON Pointer locations. Batch event paths retain original event indexes.","items":{"type":"string","uniqueKey":"errors.items.[INDEX].paths.items.[INDEX]","typeLabel":"string"},"uniqueKey":"errors.items.[INDEX].paths","typeLabel":"string[]"}},"required":["errorCode","message"],"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"required":["meta"],"uniqueKey":"","typeLabel":"object"},"examples":{"tooLarge":{"title":"tooLarge","value":{"errors":[{"errorCode":"TOO_LARGE","message":"Request body must not exceed 262144 UTF-8 bytes."}],"meta":{"status":"FAILURE","timestamp":"2026-10-21T12:00:00.000Z","correlationId":"4d36e05b-21ab-4633-b811-cf4f1ad8f72c"}}}},"exampleType":"examples"}},"exampleType":"examples"},"51aaac61-6871-49ff-962b-7a6414566793":{"description":"`Content-Type` must be `application/json`, optionally with\n`charset=utf-8`. Compressed bodies (any `Content-Encoding` other than\n`identity`) are not accepted.\n","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"description":"Contains only errors and metadata; accepted events are not listed individually.\nMissing required fields are grouped into one `INVALID_SCHEMA` error; a `null`\nvalue counts as missing. If none are missing, unknown fields are grouped the\nsame way. Otherwise only the first validation failure is returned. Each\nfailed event produces at most one public error.\n","properties":{"meta":{"type":"object","additionalProperties":false,"properties":{"status":{"type":"string","enum":["SUCCESS","PARTIAL_SUCCESS","FAILURE"],"isRequired":true,"uniqueKey":"meta.status","typeLabel":"enum\u003cstring>"},"timestamp":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"meta.timestamp","typeLabel":"string\u003cdate-time>"},"correlationId":{"type":"string","format":"uuid","description":"Use this identifier when tracing a request with support.","isRequired":true,"uniqueKey":"meta.correlationId","typeLabel":"string\u003cuuid>"}},"required":["status","timestamp","correlationId"],"isRequired":true,"uniqueKey":"meta","typeLabel":"object"},"errors":{"type":"array","items":{"type":"object","additionalProperties":false,"description":"Request-level errors may omit `paths`. Event-level batch paths begin with\n`/events/{originalIndex}` so indexes remain stable when other events fail;\non the single-event endpoint paths have no prefix (for example `/eventId`).\n`MALFORMED_JSON`, `INVALID_SCHEMA`, `DUPLICATE_EVENT` and `INVALID_TENANT`\nproduce `400` when no event is accepted. `TOO_LARGE` produces `413` when the\nrequest body is too large; an oversized event inside a batch is an event\nerror instead (`400`, or `202` with `PARTIAL_SUCCESS`).\n`UNSUPPORTED_MEDIA_TYPE` and `UNSUPPORTED_CONTENT_ENCODING` produce `415`;\n`INTERNAL_ERROR` produces `500`; and `DEPENDENCY_UNAVAILABLE` produces `503`\nwhen no event is accepted, in which case other event errors may also be\nlisted. A `202 PARTIAL_SUCCESS` may contain event errors.\n","properties":{"errorCode":{"type":"string","enum":["INVALID_TENANT","UNSUPPORTED_MEDIA_TYPE","UNSUPPORTED_CONTENT_ENCODING","TOO_LARGE","MALFORMED_JSON","INVALID_SCHEMA","DUPLICATE_EVENT","DEPENDENCY_UNAVAILABLE","INTERNAL_ERROR"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].errorCode","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"},"paths":{"type":"array","description":"JSON Pointer locations. Batch event paths retain original event indexes.","items":{"type":"string","uniqueKey":"errors.items.[INDEX].paths.items.[INDEX]","typeLabel":"string"},"uniqueKey":"errors.items.[INDEX].paths","typeLabel":"string[]"}},"required":["errorCode","message"],"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"required":["meta"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"meta":{"status":"SUCCESS","timestamp":"2023-11-07T05:31:56Z","correlationId":"3c90c3cc-0d44-4b50-8888-8dd25736052a"},"errors":[{"errorCode":"INVALID_TENANT","message":"\u003cstring>","paths":["\u003cstring>"]}]}}},"exampleType":"generated"}},"exampleType":"generated"},"d24deb4d-de72-4196-99e3-aea5535d1f17":{"description":"Per-tenant rate limit exceeded. Empty body. Retry after the number of\nseconds given in the `Retry-After` header.\n","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Sustained request budget, in requests per second, per tenant.","schema":{"type":"integer"}}},"content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"695694d2-4e7c-417f-a0a4-bcaea5f4cdf3":{"description":"The request could not be processed. Some events may already have been\naccepted; resend the whole request unchanged.\n","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"description":"Contains only errors and metadata; accepted events are not listed individually.\nMissing required fields are grouped into one `INVALID_SCHEMA` error; a `null`\nvalue counts as missing. If none are missing, unknown fields are grouped the\nsame way. Otherwise only the first validation failure is returned. Each\nfailed event produces at most one public error.\n","properties":{"meta":{"type":"object","additionalProperties":false,"properties":{"status":{"type":"string","enum":["SUCCESS","PARTIAL_SUCCESS","FAILURE"],"isRequired":true,"uniqueKey":"meta.status","typeLabel":"enum\u003cstring>"},"timestamp":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"meta.timestamp","typeLabel":"string\u003cdate-time>"},"correlationId":{"type":"string","format":"uuid","description":"Use this identifier when tracing a request with support.","isRequired":true,"uniqueKey":"meta.correlationId","typeLabel":"string\u003cuuid>"}},"required":["status","timestamp","correlationId"],"isRequired":true,"uniqueKey":"meta","typeLabel":"object"},"errors":{"type":"array","items":{"type":"object","additionalProperties":false,"description":"Request-level errors may omit `paths`. Event-level batch paths begin with\n`/events/{originalIndex}` so indexes remain stable when other events fail;\non the single-event endpoint paths have no prefix (for example `/eventId`).\n`MALFORMED_JSON`, `INVALID_SCHEMA`, `DUPLICATE_EVENT` and `INVALID_TENANT`\nproduce `400` when no event is accepted. `TOO_LARGE` produces `413` when the\nrequest body is too large; an oversized event inside a batch is an event\nerror instead (`400`, or `202` with `PARTIAL_SUCCESS`).\n`UNSUPPORTED_MEDIA_TYPE` and `UNSUPPORTED_CONTENT_ENCODING` produce `415`;\n`INTERNAL_ERROR` produces `500`; and `DEPENDENCY_UNAVAILABLE` produces `503`\nwhen no event is accepted, in which case other event errors may also be\nlisted. A `202 PARTIAL_SUCCESS` may contain event errors.\n","properties":{"errorCode":{"type":"string","enum":["INVALID_TENANT","UNSUPPORTED_MEDIA_TYPE","UNSUPPORTED_CONTENT_ENCODING","TOO_LARGE","MALFORMED_JSON","INVALID_SCHEMA","DUPLICATE_EVENT","DEPENDENCY_UNAVAILABLE","INTERNAL_ERROR"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].errorCode","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"},"paths":{"type":"array","description":"JSON Pointer locations. Batch event paths retain original event indexes.","items":{"type":"string","uniqueKey":"errors.items.[INDEX].paths.items.[INDEX]","typeLabel":"string"},"uniqueKey":"errors.items.[INDEX].paths","typeLabel":"string[]"}},"required":["errorCode","message"],"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"required":["meta"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"meta":{"status":"SUCCESS","timestamp":"2023-11-07T05:31:56Z","correlationId":"3c90c3cc-0d44-4b50-8888-8dd25736052a"},"errors":[{"errorCode":"INVALID_TENANT","message":"\u003cstring>","paths":["\u003cstring>"]}]}}},"exampleType":"generated"}},"exampleType":"generated"},"d158ee26-7c2a-466c-a00e-ede3eafb7d76":{"description":"No event was accepted because a required dependency was unavailable. Resend\nthe events whose error is `DEPENDENCY_UNAVAILABLE`, unchanged; any other\nevents listed in `errors` were invalid, oversized or duplicates. A `503` with\nan empty body means authentication was temporarily unavailable.\n","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"description":"Contains only errors and metadata; accepted events are not listed individually.\nMissing required fields are grouped into one `INVALID_SCHEMA` error; a `null`\nvalue counts as missing. If none are missing, unknown fields are grouped the\nsame way. Otherwise only the first validation failure is returned. Each\nfailed event produces at most one public error.\n","properties":{"meta":{"type":"object","additionalProperties":false,"properties":{"status":{"type":"string","enum":["SUCCESS","PARTIAL_SUCCESS","FAILURE"],"isRequired":true,"uniqueKey":"meta.status","typeLabel":"enum\u003cstring>"},"timestamp":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"meta.timestamp","typeLabel":"string\u003cdate-time>"},"correlationId":{"type":"string","format":"uuid","description":"Use this identifier when tracing a request with support.","isRequired":true,"uniqueKey":"meta.correlationId","typeLabel":"string\u003cuuid>"}},"required":["status","timestamp","correlationId"],"isRequired":true,"uniqueKey":"meta","typeLabel":"object"},"errors":{"type":"array","items":{"type":"object","additionalProperties":false,"description":"Request-level errors may omit `paths`. Event-level batch paths begin with\n`/events/{originalIndex}` so indexes remain stable when other events fail;\non the single-event endpoint paths have no prefix (for example `/eventId`).\n`MALFORMED_JSON`, `INVALID_SCHEMA`, `DUPLICATE_EVENT` and `INVALID_TENANT`\nproduce `400` when no event is accepted. `TOO_LARGE` produces `413` when the\nrequest body is too large; an oversized event inside a batch is an event\nerror instead (`400`, or `202` with `PARTIAL_SUCCESS`).\n`UNSUPPORTED_MEDIA_TYPE` and `UNSUPPORTED_CONTENT_ENCODING` produce `415`;\n`INTERNAL_ERROR` produces `500`; and `DEPENDENCY_UNAVAILABLE` produces `503`\nwhen no event is accepted, in which case other event errors may also be\nlisted. A `202 PARTIAL_SUCCESS` may contain event errors.\n","properties":{"errorCode":{"type":"string","enum":["INVALID_TENANT","UNSUPPORTED_MEDIA_TYPE","UNSUPPORTED_CONTENT_ENCODING","TOO_LARGE","MALFORMED_JSON","INVALID_SCHEMA","DUPLICATE_EVENT","DEPENDENCY_UNAVAILABLE","INTERNAL_ERROR"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].errorCode","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"},"paths":{"type":"array","description":"JSON Pointer locations. Batch event paths retain original event indexes.","items":{"type":"string","uniqueKey":"errors.items.[INDEX].paths.items.[INDEX]","typeLabel":"string"},"uniqueKey":"errors.items.[INDEX].paths","typeLabel":"string[]"}},"required":["errorCode","message"],"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"required":["meta"],"uniqueKey":"","typeLabel":"object"},"examples":{"unavailable":{"title":"unavailable","value":{"errors":[{"errorCode":"DEPENDENCY_UNAVAILABLE","message":"Event could not be processed because a required dependency is unavailable."}],"meta":{"status":"FAILURE","timestamp":"2026-10-21T12:00:00.000Z","correlationId":"4d36e05b-21ab-4633-b811-cf4f1ad8f72c"}}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"82cbf908-a1ea-4f0d-84ee-01937d72cff5":{"PatAuth":{"type":"http","scheme":"bearer","bearerFormat":"inf_pat","description":"Personal Access Token or OAuth 2.1 access token, sent as a bearer\ncredential (`Authorization: Bearer inf_pat_...`). Read operations\nrequire a token with the `READ` scope; write operations\n(POST/PATCH/DELETE) require `WRITE`.\n","scopes":[],"schemeName":"PatAuth"}}},"servers":{"8d3910c8-69dd-47d6-b28b-33a83970ae65":{"url":"https://api.inflection.io","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"inf_pat","description":"Personal Access Token or OAuth 2.1 access token, sent as a bearer\ncredential (`Authorization: Bearer inf_pat_...`). Read operations\nrequire a token with the `READ` scope; write operations\n(POST/PATCH/DELETE) require `WRITE`.\n","scopes":[],"schemeName":"PatAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Personal Access Token or OAuth 2.1 access token, sent as a bearer\ncredential (`Authorization: Bearer inf_pat_...`). Read operations\nrequire a token with the `READ` scope; write operations\n(POST/PATCH/DELETE) require `WRITE`.\n","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"PatAuth","name":"Authorization"}],"title":"PatAuth"}]},"originalFileLocation":"api-reference/openapi.yaml"},"subdomain":"inflection-4b2c0de4","siteName":"Inflection Help Center","title":"Submit a batch of product events - Inflection Help Center","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-06T10:07:56.177Z","originalFileLocation":"api-reference/product-activity/submit-a-batch-of-product-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=\"dark\"}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=\"Validates up to 5,000 events independently and preserves their original indexes in error paths. Requires WRITE access for Personal Access Tokens and write-capable OAuth users. The body is limited to 20 MiB and each event to 256 KiB of UTF-8 JSON. A 202 response can be SUCCESS or PARTIAL_SUCCESS; rejected events are listed in errors while accepted events are durably queued. This request consumes 2,000 Product Activity rate-limit units.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Inflection Help Center\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/inflection-4b2c0de4/ujDt567pRjq9Wn90/_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/inflection-4b2c0de4/ujDt567pRjq9Wn90/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/inflection-4b2c0de4/ujDt567pRjq9Wn90/_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/inflection-4b2c0de4/ujDt567pRjq9Wn90/_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/inflection-4b2c0de4/ujDt567pRjq9Wn90/_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/inflection-4b2c0de4/ujDt567pRjq9Wn90/_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/inflection-4b2c0de4/ujDt567pRjq9Wn90/_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/inflection-4b2c0de4/ujDt567pRjq9Wn90/_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/inflection-4b2c0de4/ujDt567pRjq9Wn90/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Submit a batch of product events - Inflection Help Center\">\u003cmeta data-mint-head property=\"og:description\" content=\"Validates up to 5,000 events independently and preserves their original indexes in error paths. Requires WRITE access for Personal Access Tokens and write-capable OAuth users. The body is limited to 20 MiB and each event to 256 KiB of UTF-8 JSON. A 202 response can be SUCCESS or PARTIAL_SUCCESS; rejected events are listed in errors while accepted events are durably queued. This request consumes 2,000 Product Activity rate-limit units.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Inflection Help Center\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.inflection.io/api-reference/product-activity/submit-a-batch-of-product-events\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://inflection-4b2c0de4.mintlify.site/_mintlify/api/og/v2?division=Product+Activity\u0026amp;title=Submit+a+batch+of+product+events\u0026amp;description=Validates+up+to+5%2C000+events+independently+and+preserves+their+original%0Aindexes+in+error+paths.+Requires+%60WRITE%60+access+for+Personal+Access+Tokens%0Aand+write-cap\u0026amp;theme=b843e5c8ecad724aa75d7ee0\u0026amp;signature=d9f6e223b992fc30da737e985f4aa5984bce79445ac6f858e19a1dbae1522546\">\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=\"Submit a batch of product events - Inflection Help Center\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Validates up to 5,000 events independently and preserves their original indexes in error paths. Requires WRITE access for Personal Access Tokens and write-capable OAuth users. The body is limited to 20 MiB and each event to 256 KiB of UTF-8 JSON. A 202 response can be SUCCESS or PARTIAL_SUCCESS; rejected events are listed in errors while accepted events are durably queued. This request consumes 2,000 Product Activity rate-limit units.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://inflection-4b2c0de4.mintlify.site/_mintlify/api/og/v2?division=Product+Activity\u0026amp;title=Submit+a+batch+of+product+events\u0026amp;description=Validates+up+to+5%2C000+events+independently+and+preserves+their+original%0Aindexes+in+error+paths.+Requires+%60WRITE%60+access+for+Personal+Access+Tokens%0Aand+write-cap\u0026amp;theme=b843e5c8ecad724aa75d7ee0\u0026amp;signature=d9f6e223b992fc30da737e985f4aa5984bce79445ac6f858e19a1dbae1522546\">\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/inflection-4b2c0de4/ujDt567pRjq9Wn90/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Inflection Help Center\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0A6E72\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.inflection.io/api-reference/product-activity/submit-a-batch-of-product-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/product-activity/submit-a-batch-of-product-events.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.inflection.io/#organization\",\"name\":\"Inflection Help Center\",\"url\":\"https://docs.inflection.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/inflection-4b2c0de4/HuHUfaapytjERxAZ/logo/light.svg?fit=max\u0026auto=format\u0026n=HuHUfaapytjERxAZ\u0026q=85\u0026s=81098246e2501d2a46b750c33ea43379\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.inflection.io#website\",\"name\":\"Inflection Help Center\",\"url\":\"https://docs.inflection.io\",\"publisher\":{\"@id\":\"https://docs.inflection.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.inflection.io/api-reference/product-activity/submit-a-batch-of-product-events#webpage\",\"url\":\"https://docs.inflection.io/api-reference/product-activity/submit-a-batch-of-product-events\",\"name\":\"Submit a batch of product events\",\"description\":\"Validates up to 5,000 events independently and preserves their original indexes in error paths. Requires WRITE access for Personal Access Tokens and write-capable OAuth users. The body is limited to 20 MiB and each event to 256 KiB of UTF-8 JSON. A 202 response can be SUCCESS or PARTIAL_SUCCESS; rejected events are listed in errors while accepted events are durably queued. This request consumes 2,000 Product Activity rate-limit units.\",\"dateModified\":\"2026-11-06T10:07:56.177Z\",\"isPartOf\":{\"@id\":\"https://docs.inflection.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.inflection.io/api-reference/product-activity/submit-a-batch-of-product-events#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.inflection.io/api-reference/product-activity/submit-a-batch-of-product-events#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Product Activity\",\"item\":\"https://docs.inflection.io/api-reference/product-activity/submit-one-product-event\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Submit a batch of product events\",\"item\":\"https://docs.inflection.io/api-reference/product-activity/submit-a-batch-of-product-events\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.inflection.io/api-reference/product-activity/submit-a-batch-of-product-events#apireference\",\"headline\":\"Submit a batch of product events\",\"name\":\"Submit a batch of product events\",\"description\":\"Validates up to 5,000 events independently and preserves their original indexes in error paths. Requires WRITE access for Personal Access Tokens and write-capable OAuth users. The body is limited to 20 MiB and each event to 256 KiB of UTF-8 JSON. A 202 response can be SUCCESS or PARTIAL_SUCCESS; rejected events are listed in errors while accepted events are durably queued. This request consumes 2,000 Product Activity rate-limit units.\",\"url\":\"https://docs.inflection.io/api-reference/product-activity/submit-a-batch-of-product-events\",\"mainEntityOfPage\":{\"@id\":\"https://docs.inflection.io/api-reference/product-activity/submit-a-batch-of-product-events#webpage\"},\"dateModified\":\"2026-11-06T10:07:56.177Z\",\"publisher\":{\"@id\":\"https://docs.inflection.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.inflection.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Inflection Help Center\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Inflection Help Center","nav":{"global":null,"tabs":[{"tab":"Product Docs","pages":[{"title":"Product Docs","href":""}]},{"tab":"MCP and Agents","pages":[{"title":"MCP and Agents","href":"/agents/inflection-agents"}]},{"tab":"Developer APIs","groups":[{"group":"Getting Started","pages":[{"title":"Introduction","icon":"book-open","href":"/api-reference/introduction"},{"title":"Quickstart","icon":"rocket","href":"/api-reference/quickstart"},{"title":"Get Your Personal Access Token","icon":"id-card","href":"/api-reference/get-your-pat"}]},{"group":"Core Concepts","pages":[{"title":"Authentication","icon":"key","href":"/api-reference/authentication"},{"title":"The response envelope","icon":"box","href":"/api-reference/response-envelope"},{"title":"Asynchronous writes","icon":"clock","href":"/api-reference/async-writes"},{"title":"Sending product events","icon":"bolt","href":"/api-reference/product-events"},{"title":"Pagination","icon":"list","href":"/api-reference/pagination"},{"title":"Errors \u0026 status codes","icon":"triangle-exclamation","href":"/api-reference/errors"},{"title":"Rate Limits","icon":"gauge-high","href":"/api-reference/rate-limits"}]},{"group":"Contacts","pages":[{"title":"Create a contact","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v2/contacts","href":"/api-reference/contacts/create-a-contact"},{"title":"Batch create/upsert contacts","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v2/contacts/batch","href":"/api-reference/contacts/batch-createupsert-contacts"},{"title":"Get a contact by email","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v2/contacts/by-email/{email}","href":"/api-reference/contacts/get-a-contact-by-email"},{"title":"Get a contact write transaction","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v2/contacts/transactions/{transactionId}","href":"/api-reference/contacts/get-a-contact-write-transaction"},{"title":"Get a contact by id","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v2/contacts/{id}","href":"/api-reference/contacts/get-a-contact-by-id"},{"title":"Update a contact","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /v2/contacts/{id}","href":"/api-reference/contacts/update-a-contact"}]},{"group":"Contact Activity","pages":[{"title":"Get a contact's product activity","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v2/contacts/{id}/product-activity","href":"/api-reference/contact-activity/get-a-contacts-product-activity"},{"title":"Get a contact's marketing activity","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v2/contacts/{id}/marketing-activity","href":"/api-reference/contact-activity/get-a-contacts-marketing-activity"},{"title":"Get a contact's activity log","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v2/contacts/{id}/activity-log","href":"/api-reference/contact-activity/get-a-contacts-activity-log"},{"title":"Get a contact's Salesforce record","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v2/contacts/{id}/salesforce","href":"/api-reference/contact-activity/get-a-contacts-salesforce-record"}]},{"group":"Product Activity","pages":[{"title":"Submit one product event","description":"Validates, deduplicates and publishes one product event. Requires `WRITE`\naccess for Personal Access Tokens and write-capable OAuth users.\nThe request body is limited to 256 KiB of UTF-8 JSON. A `202` response means\nthe event was accepted and durably queued.\nThis request consumes 1 Product Activity rate-limit unit.\n","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v2/product-events","href":"/api-reference/product-activity/submit-one-product-event"},{"title":"Submit a batch of product events","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v2/product-events/batch","href":"/api-reference/product-activity/submit-a-batch-of-product-events"}]},{"group":"Journeys","pages":[{"title":"List journeys","description":"Paged list of journeys. `status`, `type` and `tag` are repeatable and OR\nwithin themselves. `tag` matches the tag **name**, not its id, and a tag\nor folder resolving to nothing yields an empty page rather than an error.\nRepeating a single-valued parameter (`search`, `folderId`, `pageNumber`,\n`pageSize`) is a 400.\n","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v2/journeys","href":"/api-reference/journeys/list-journeys"},{"title":"Get a journey","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v2/journeys/{id}","href":"/api-reference/journeys/get-a-journey"}]},{"group":"Stats","pages":[{"title":"Journey stats rollup","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v2/journeys/stats","href":"/api-reference/stats/journey-stats-rollup"},{"title":"Get a journey's stats","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v2/journeys/{id}/stats","href":"/api-reference/stats/get-a-journeys-stats"},{"title":"Email stats rollup","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v2/emails/stats","href":"/api-reference/stats/email-stats-rollup"},{"title":"Get an email's stats","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v2/emails/{id}/stats","href":"/api-reference/stats/get-an-emails-stats"}]},{"group":"Lists","pages":[{"title":"List static and dynamic lists","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v2/lists","href":"/api-reference/lists/list-static-and-dynamic-lists"},{"title":"Create a static list","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v2/lists","href":"/api-reference/lists/create-a-static-list"},{"title":"Get a static list","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v2/lists/{id}","href":"/api-reference/lists/get-a-static-list"},{"title":"Update a static list","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /v2/lists/{id}","href":"/api-reference/lists/update-a-static-list"},{"title":"Delete a static list","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v2/lists/{id}","href":"/api-reference/lists/delete-a-static-list"},{"title":"Get members of a static list","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v2/lists/{id}/members","href":"/api-reference/lists/get-members-of-a-static-list"},{"title":"Add members to a static list","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v2/lists/{id}/members","href":"/api-reference/lists/add-members-to-a-static-list"},{"title":"Remove a member from a static list","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v2/lists/{id}/members/{contactId}","href":"/api-reference/lists/remove-a-member-from-a-static-list"}]},{"group":"Emails","pages":[{"title":"List emails","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v2/emails","href":"/api-reference/emails/list-emails"},{"title":"Create an email","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v2/emails","href":"/api-reference/emails/create-an-email"},{"title":"Get an email","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v2/emails/{id}","href":"/api-reference/emails/get-an-email"}]},{"group":"Email Versions","pages":[{"title":"Set a personalized email version","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/email-versions","href":"/api-reference/email-versions/set-a-personalized-email-version"}]},{"group":"Product Users","pages":[{"title":"Create a product user","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v2/users","href":"/api-reference/product-users/create-a-product-user"},{"title":"Get a product-user write transaction","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v2/users/transactions/{transactionId}","href":"/api-reference/product-users/get-a-product-user-write-transaction"},{"title":"Get a product user by email","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v2/users/by-email/{email}","href":"/api-reference/product-users/get-a-product-user-by-email"},{"title":"Get a product user","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v2/users/{id}","href":"/api-reference/product-users/get-a-product-user"},{"title":"Update a product user","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /v2/users/{id}","href":"/api-reference/product-users/update-a-product-user"},{"title":"List a contact's product users","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v2/contacts/{id}/users","href":"/api-reference/product-users/list-a-contacts-product-users"},{"title":"List an organization's product users","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v2/orgs/{id}/users","href":"/api-reference/product-users/list-an-organizations-product-users"}]},{"group":"Organizations","pages":[{"title":"List a contact's organizations","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v2/contacts/{id}/orgs","href":"/api-reference/organizations/list-a-contacts-organizations"},{"title":"Add product users to an organization","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v2/orgs/{id}/users","href":"/api-reference/organizations/add-product-users-to-an-organization"},{"title":"Create an organization","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v2/orgs","href":"/api-reference/organizations/create-an-organization"},{"title":"Get an organization","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v2/orgs/{id}","href":"/api-reference/organizations/get-an-organization"},{"title":"Update an organization","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /v2/orgs/{id}","href":"/api-reference/organizations/update-an-organization"}]}]},{"tab":"What's New","pages":[{"title":"What's New","href":"/whats-new/october-2026"}]}]},"basePath":"","title":"Submit a batch of product events - Inflection Help Center","buildId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","deploymentId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-i2a3QZ8E.js","utils-ChLwp8m0.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DRktVTDc.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-CA2pEs4T.js","snippetPresets-ClQ6XrKD.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-Ct_Lv36y.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-Cn2PYw9e.js","shallow-rkyymjXQ.js","getApiPlaygroundDisplay-BB9vkXtE.js","CodeSnippet-Bm5RU7m1.js","CodeSnippets-BgU9Deuz.js","Page-BUDYNlhG.js","getPastedJson-BD-6NNum.js","icon-8Z6tud2e.js","MethodPill-Tuzr4g3V.js","DuplicateIcon-0ceWFYhN.js","createIcon-FBXow_ST.js","DynamicMarkdown-CD8713Yy.js","SectionHeading-7zgzQbH-.js","axios-vUo_bRtp.js","Markdown-D7Ofw1oz.js","clsx-eKJ4rcii.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CwjSCXIK.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-9EK5IAXV.js"]}