Upsert up to 1000 custom objects in one request. Idempotent and safely retryable. By DEFAULT each item REPLACES that object’s entire attributes blob, so an item carrying only the fields you want to change DELETES every other attribute on that object. To add or change a subset across many objects, pass mode: 'merge' — it overlays the keys you send and leaves the rest untouched, with no need to read each object first. Pass createMissing: false to update only objects that already exist; anything unmatched comes back in skipped rather than being created.
How attributes is applied. 'replace' (default) swaps the whole blob — any stored attribute you leave out is DELETED. 'merge' overlays the keys you send onto the stored ones and leaves the rest untouched, which is what you want when adding or changing a subset.
When false, objects that do not already exist are skipped and reported in skipped instead of being created. Use it when working from a list that may not match, so a bad id enriches nothing rather than inventing an object.
{"docsConfig":{"theme":"luma","$schema":"https://mintlify.com/docs.json","name":"Boom","description":"Boom's public API — REST and MCP over the same capabilities","colors":{"primary":"#3B3B3B","light":"#E5E5E5","dark":"#171717"},"logo":{"light":"https://mintcdn.com/boomai-c1f672dc/2DiZiPkeLvrlfzgs/logo.svg?fit=max\u0026auto=format\u0026n=2DiZiPkeLvrlfzgs\u0026q=85\u0026s=a014030c9acb0f3d8eee9de1fbe632a7","dark":"https://mintcdn.com/boomai-c1f672dc/2DiZiPkeLvrlfzgs/logo-dark.svg?fit=max\u0026auto=format\u0026n=2DiZiPkeLvrlfzgs\u0026q=85\u0026s=8ec1c838c16743220fd0e7f46a0be157","href":"/introduction"},"favicon":"https://mintcdn.com/boomai-c1f672dc/4m9zfCL8IkhJn1sI/favicon.svg?fit=max\u0026auto=format\u0026n=4m9zfCL8IkhJn1sI\u0026q=85\u0026s=949c3ecc5e2011cf0a7d4a0e33204c1d","appearance":{"default":"system"},"navbar":{"links":[{"href":"mailto:support@useboom.ai","label":"Support"},{"href":"https://app.useboom.ai","label":"Dashboard"}]},"icons":{"library":"lucide"},"contextual":{"options":["copy","view","assistant","chatgpt","claude"],"display":"header"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"boomai-c1f672dc","hasAudioNarration":false,"actualSubdomain":"boomai-c1f672dc","customDomains":["docs.useboom.ai"],"gitSource":{"type":"github","owner":"boom-tml","repo":"product-research","deployBranch":"main","contentDirectory":"docs-site","isPrivate":true,"mountPath":"","label":""},"chroma":{"collectionId":"ca542f17-f4ef-4bd7-9dec-4327eb890a84","liveDeploymentHistoryId":"6adada31c9b285ea9e7588cf","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6adada31c9b285ea9e7588cf"},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6adada31c9b285ea9e7588cf","clientVersion":"0.0.3965","searchFilterCounts":[{"language":"default","tag":"API","count":80},{"language":"default","tag":"Guides","count":34},{"language":"default","tag":"CDP","count":29},{"language":"default","tag":"Initiatives","count":23},{"language":"default","tag":"Journeys","count":22},{"language":"default","tag":"How Boom works","count":17},{"language":"default","tag":"Lead Capture","count":11},{"language":"default","tag":"Tutorials","count":10},{"language":"default","tag":"Segments","count":10},{"language":"default","tag":"Connect your tools","count":9}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"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":"editor-v7-file-tree","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":"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":"pause-universal-search-reconcile","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":"per-site-search-delta","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":"editor-private-page-search","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":"editor-nav-generations","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":"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":"byok-sep-25","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":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","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}],"isAtlas":false,"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"html{font-size:14px}:root:root{--font-family-headings-custom:ui-sans-serif, system-ui, sans-serif;--font-family-body-custom:ui-sans-serif, system-ui, sans-serif}#page-title{font-weight:400!important;letter-spacing:-.025em!important}#content-area .prose h2{font-weight:400;letter-spacing:-.015em}#content-area .prose h3{font-weight:500;letter-spacing:-.008em}body{background-color:oklch(.97 0 0)}.dark body{background-color:oklch(.18 0 0)}#content-area .text-primary.font-semibold:not(.eyebrow){color:#18181b!important}.dark #content-area .text-primary.font-semibold:not(.eyebrow){color:#f4f4f5!important}#pagination{background-color:transparent!important;border:0!important;border-top:1px solid rgba(17,17,26,.08)!important;border-radius:0!important;padding:1.25rem 0 0!important}.dark #pagination{border-top-color:rgba(255,255,255,.08)!important}#footer a[href*=mintlify],#pagination a .flex-col.items-end,#pagination a .w-px{display:none!important}#pagination a.w-full>div{justify-content:flex-end!important}@media (min-width:1024px){#sidebar-content{width:18rem!important}#body-content{padding-left:18rem!important}}#sidebar-content a[aria-current=page]{background-color:oklch(.955 .004 80);border-radius:.5rem}.dark #sidebar-content a[aria-current=page]{background-color:rgba(255,255,255,.06)}#sidebar-content [class*=group i]:not(a):not(:has(a)),#sidebar-content h5,#sidebar-content li>div:first-child>p:first-child:not(:has(a)){font-size:.9rem!important;font-weight:600!important;letter-spacing:normal!important;text-transform:none!important}.boom-home{--bh-ink:oklch(0.145 0 0);--bh-muted:oklch(0.556 0 0);--bh-hero:oklch(0.984 0.003 85);--bh-card:oklch(0.984 0.003 85);--bh-line:rgba(0, 0, 0, 0.07);--bh-grain:url(\"data:image/svg+xml;utf8,\u003csvg xmlns='http://www.w3.org/2000/svg' width='220' height='220'>\u003cfilter id='n'>\u003cfeTurbulence type='fractalNoise' baseFrequency='0.72' numOctaves='3' stitchTiles='stitch'/>\u003cfeColorMatrix values='0 0 0 0 0.5 0 0 0 0 0.5 0 0 0 0 0.5 0 0 0 1.4 -0.2'/>\u003c/filter>\u003crect width='100%' height='100%' filter='url(%23n)'/>\u003c/svg>\");padding:.5rem 0 1rem;container-type:inline-size}.dark .boom-home{--bh-ink:oklch(0.978 0.001 286);--bh-muted:oklch(0.78 0.016 286);--bh-hero:rgba(255, 255, 255, 0.03);--bh-card:rgba(255, 255, 255, 0.03);--bh-line:rgba(255, 255, 255, 0.08)}.boom-home a,.boom-home a:focus,.boom-home a:hover{text-decoration:none;border:0}.boom-home span{display:block}.boom-home .bh-hero{position:relative;overflow:hidden;isolation:isolate;border-radius:24px;border:1px solid var(--bh-line);background:var(--bh-hero);padding:clamp(2.5rem,7vw,4.5rem) clamp(1.5rem,5vw,3.5rem);margin-bottom:1rem}.boom-home .bh-eyebrow{display:inline-block;font-size:.93rem;color:var(--bh-muted);border:1px solid var(--bh-line);border-radius:999px;padding:.3rem .8rem;background:rgba(255,255,255,.8)}.dark .boom-home .bh-eyebrow{background:rgba(255,255,255,.04)}.boom-home .bh-title{margin:1.4rem 0 0;max-width:14ch;font-weight:400;font-size:clamp(2.6rem,6.5vw,4.2rem);line-height:1.04;letter-spacing:-.025em;color:var(--bh-ink);opacity:.85;text-wrap:balance}.boom-home .bh-sub{margin:1.25rem 0 0;max-width:34rem;color:var(--bh-muted);font-size:1.15rem;line-height:1.6;text-wrap:pretty}.boom-home .bh-arcs{position:absolute;z-index:-1;right:-17rem;top:50%;width:34rem;height:34rem;transform:translateY(-50%);color:var(--bh-ink);opacity:.16;pointer-events:none}.boom-home .bh-arcs svg{width:100%;height:100%}@media (max-width:640px){.boom-home .bh-arcs{display:none}}.boom-home .bh-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.75rem}@container (max-width: 820px){.boom-home .bh-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@container (max-width: 520px){.boom-home .bh-grid{grid-template-columns:1fr}}.boom-home .bh-tile{position:relative;overflow:hidden;isolation:isolate;height:17rem;border-radius:24px;border:1px solid var(--bh-line);background:var(--bh-card)}.boom-home .bh-tile:focus-visible{outline:2px solid var(--bh-ink);outline-offset:3px}.boom-home .bh-paint{position:absolute;inset:0;z-index:-1;opacity:0;background:var(--bh-paint);transition:opacity .5s ease-out}.boom-home .bh-paint::after{content:\"\";position:absolute;inset:0;mix-blend-mode:overlay;opacity:.7;background-image:var(--bh-grain)}.boom-home .bh-tile:focus-visible .bh-paint,.boom-home .bh-tile:hover .bh-paint{opacity:1}.boom-home .bh-tile:nth-child(1){--bh-paint:radial-gradient(85% 60% at 90% 0%, oklch(0.84 0.07 315) 0%, transparent 60%), linear-gradient(180deg, oklch(0.62 0.13 305), oklch(0.42 0.12 295))}.boom-home .bh-tile:nth-child(2){--bh-paint:radial-gradient(85% 60% at 90% 0%, oklch(0.9 0.09 85) 0%, transparent 60%), linear-gradient(180deg, oklch(0.72 0.13 55), oklch(0.5 0.14 22))}.boom-home .bh-tile:nth-child(3){--bh-paint:radial-gradient(85% 60% at 10% 0%, oklch(0.88 0.06 30) 0%, transparent 60%), linear-gradient(180deg, oklch(0.66 0.13 18), oklch(0.46 0.13 0))}.boom-home .bh-tile:nth-child(4){--bh-paint:radial-gradient(85% 60% at 90% 0%, oklch(0.88 0.06 220) 0%, transparent 60%), linear-gradient(180deg, oklch(0.66 0.11 240), oklch(0.4 0.1 258))}.boom-home .bh-tile:nth-child(5){--bh-paint:radial-gradient(85% 60% at 10% 0%, oklch(0.88 0.08 150) 0%, transparent 60%), linear-gradient(180deg, oklch(0.6 0.09 180), oklch(0.4 0.07 215))}.boom-home .bh-tile:nth-child(6){--bh-paint:radial-gradient(85% 60% at 90% 0%, oklch(0.8 0.09 295) 0%, transparent 60%), linear-gradient(180deg, oklch(0.55 0.15 280), oklch(0.33 0.11 268))}.boom-home .bh-art{position:absolute;inset:0 0 5.25rem;display:grid;place-items:center;padding:1.25rem 2rem 0;color:var(--bh-ink);opacity:.85;transition:color .5s ease,opacity .5s ease}.boom-home .bh-art svg{width:100%;max-width:230px;height:140px;overflow:visible}.boom-home .bh-text{position:absolute;inset:auto 0 0;height:5.25rem;padding:0 1.5rem;text-align:center}.boom-home .bh-h{font-size:1.15rem;font-weight:500;letter-spacing:-.008em;color:var(--bh-ink);transition:color .5s ease}.boom-home .bh-p{margin:.3rem auto 0;font-size:.95rem;font-weight:400;line-height:1.5;color:var(--bh-muted);text-wrap:pretty;transition:color .5s ease}.boom-home .bh-tile:focus-visible .bh-art,.boom-home .bh-tile:hover .bh-art{color:#fff;opacity:1}.boom-home .bh-tile:focus-visible .bh-h,.boom-home .bh-tile:hover .bh-h{color:#fff}.boom-home .bh-tile:focus-visible .bh-p,.boom-home .bh-tile:hover .bh-p{color:rgba(255,255,255,.85)}.boom-home svg .d,.boom-home svg .h{fill:none;stroke:currentColor;stroke-width:.75;vector-effect:non-scaling-stroke}.boom-home svg .d{stroke-dasharray:.5 3;stroke-linecap:round}.boom-home svg .f{fill:currentColor;stroke:none}body:has(.boom-home) #header,body:has(.boom-home) #page-context-menu,body:has(.boom-home) #page-context-menu-button,body:has(.boom-home) #pagination{display:none!important}body:has(.boom-home) #content-area{max-width:72rem!important}#page-context-menu button[aria-haspopup=menu]{height:calc(2rem + 2px)}"}],"page":{"pagePath":"api-reference/cdp-custom-objects/batch-upsert-objects","slug":"/api-reference/cdp-custom-objects/batch-upsert-objects","pageMetadata":{"title":"Batch upsert objects","description":"Upsert up to 1000 custom objects in one request. Idempotent and safely retryable. By DEFAULT each item REPLACES that object's entire `attributes` blob, so an item carrying only the fields you want to change DELETES every other attribute on that object. To add or change a subset across many objects, pass `mode: 'merge'` — it overlays the keys you send and leaves the rest untouched, with no need to read each object first. Pass `createMissing: false` to update only objects that already exist; anything unmatched comes back in `skipped` rather than being created.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/v1/cdp/custom-objects/batch","href":"/api-reference/cdp-custom-objects/batch-upsert-objects","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: [\"Upsert up to 1000 custom objects in one request. Idempotent and safely retryable. By DEFAULT each item REPLACES that object’s entire \", _jsx(_components.code, {\n children: \"attributes\"\n }), \" blob, so an item carrying only the fields you want to change DELETES every other attribute on that object. To add or change a subset across many objects, pass \", _jsx(_components.code, {\n children: \"mode: 'merge'\"\n }), \" — it overlays the keys you send and leaves the rest untouched, with no need to read each object first. Pass \", _jsx(_components.code, {\n children: \"createMissing: false\"\n }), \" to update only objects that already exist; anything unmatched comes back in \", _jsx(_components.code, {\n children: \"skipped\"\n }), \" rather than being created.\"]\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":"Batch upsert objects","description":"Upsert up to 1000 custom objects in one request. Idempotent and safely retryable. By DEFAULT each item REPLACES that object's entire `attributes` blob, so an item carrying only the fields you want to change DELETES every other attribute on that object. To add or change a subset across many objects, pass `mode: 'merge'` — it overlays the keys you send and leaves the rest untouched, with no need to read each object first. Pass `createMissing: false` to update only objects that already exist; anything unmatched comes back in `skipped` rather than being created.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/v1/cdp/custom-objects/batch","href":"/api-reference/cdp-custom-objects/batch-upsert-objects","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"cdp_custom_objects_batch_upsert","summary":"Batch upsert objects","description":"Upsert up to 1000 custom objects in one request. Idempotent and safely retryable. By DEFAULT each item REPLACES that object's entire `attributes` blob, so an item carrying only the fields you want to change DELETES every other attribute on that object. To add or change a subset across many objects, pass `mode: 'merge'` — it overlays the keys you send and leaves the rest untouched, with no need to read each object first. Pass `createMissing: false` to update only objects that already exist; anything unmatched comes back in `skipped` rather than being created.","tags":["CDP Custom Objects"],"requestBody":"ebf56e0f-f73d-43c9-b797-571621139b73","responses":{"200":"f63ddb74-87e8-454b-88a9-c1b23db81fb0","400":"e86d26f6-87a8-494f-bf87-c5377d8ab91a","401":"e9e61535-4660-47c9-9f44-6dccb2ad8c5c","404":"0e9df33f-063c-4284-80c0-c2cd1ec5756d","409":"1e887d95-8c2b-451e-9733-b83df1899e39","422":"ea8ab371-aa7a-48d3-90e4-aa29fee4ce76","429":"8c74cc84-7afd-43cc-b76b-1b78dddc685b","500":"eee52635-62e8-4091-a1fb-7550527421e9","503":"5dcd475d-f915-4685-8633-eed409ca5b27"},"method":"post","type":"path","servers":["c765c082-4d63-4903-8901-a4e25004f471","b80279d2-0255-46dc-bddc-f490bd7a2ec8"],"security":["ec2314a0-cdd3-4628-bc94-f84fbb0b23d0"],"path":"/api/v1/cdp/custom-objects/batch","baseUrlOptions":["https://www.useboom.ai","https://dev.useboom.ai"],"title":"Batch upsert objects","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"minItems":1,"maxItems":1000,"type":"array","items":{"type":"object","properties":{"type":{"type":"string","minLength":1,"maxLength":255,"description":"The custom object type name. Must already exist (create it with the types endpoint) — unknown types are rejected.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].type","typeLabel":"string"},"externalId":{"type":"string","minLength":1,"maxLength":255,"description":"Your stable identifier for this object within its type (idempotency key).","isRequired":true,"uniqueKey":"\\items.items.[INDEX].externalId","typeLabel":"string"},"displayName":{"description":"Human-readable label for the object.","type":"string","minLength":1,"maxLength":255,"uniqueKey":"\\items.items.[INDEX].displayName","typeLabel":"string"},"attributes":{"description":"Free-form custom traits. Full-replace by default — omitted keys are deleted. Pass mode:'merge' to overlay only what you send.","type":"object","propertyNames":{"type":"string","maxLength":255},"additionalProperties":{"oneOf":[{}],"uniqueKey":"\\items.items.[INDEX].attributes.additionalProperties","typeLabel":"any"},"uniqueKey":"\\items.items.[INDEX].attributes","typeLabel":"object"}},"required":["type","externalId"],"uniqueKey":"\\items.items.[INDEX]","typeLabel":"object"},"description":"Custom objects to upsert.","isRequired":true,"uniqueKey":"\\items","typeLabel":"object[]"},"mode":{"default":"replace","description":"How `attributes` is applied. 'replace' (default) swaps the whole blob — any stored attribute you leave out is DELETED. 'merge' overlays the keys you send onto the stored ones and leaves the rest untouched, which is what you want when adding or changing a subset.","type":"string","enum":["replace","merge"],"uniqueKey":"mode","typeLabel":"enum\u003cstring>"},"createMissing":{"default":true,"description":"When false, objects that do not already exist are skipped and reported in `skipped` instead of being created. Use it when working from a list that may not match, so a bad id enriches nothing rather than inventing an object.","type":"boolean","uniqueKey":"createMissing","typeLabel":"boolean"}},"required":["items"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"items":[{"type":"\u003cstring>","externalId":"\u003cstring>","displayName":"\u003cstring>","attributes":{}}],"mode":"replace","createMissing":true}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"f63ddb74-87e8-454b-88a9-c1b23db81fb0":{"description":"Success","content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"summary":{"type":"object","properties":{"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"isRequired":true,"uniqueKey":"summary.total","typeLabel":"integer"},"created":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"isRequired":true,"uniqueKey":"summary.created","typeLabel":"integer"},"updated":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"isRequired":true,"uniqueKey":"summary.updated","typeLabel":"integer"},"failed":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"isRequired":true,"uniqueKey":"summary.failed","typeLabel":"integer"},"skipped":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"isRequired":true,"uniqueKey":"summary.skipped","typeLabel":"integer"}},"required":["total","created","updated","failed","skipped"],"additionalProperties":false,"isRequired":true,"uniqueKey":"summary","typeLabel":"object"},"errors":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Zero-based index of the failed item.","isRequired":true,"uniqueKey":"errors.items.[INDEX].index","typeLabel":"integer"},"error":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine-readable error code (snake_case).","isRequired":true,"uniqueKey":"errors.items.[INDEX].error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"errors.items.[INDEX].error.message","typeLabel":"string"}},"required":["code","message"],"additionalProperties":false,"isRequired":true,"uniqueKey":"errors.items.[INDEX].error","typeLabel":"object"},"externalId":{"type":"string","uniqueKey":"errors.items.[INDEX].externalId","typeLabel":"string"}},"required":["index","error"],"additionalProperties":false,"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"errors","typeLabel":"object[]"},"skipped":{"type":"array","items":{"type":"string","uniqueKey":"skipped.items.[INDEX]","typeLabel":"string"},"description":"externalIds not written because `createMissing` was false and no such object exists.","isRequired":true,"uniqueKey":"skipped","typeLabel":"string[]"}},"required":["summary","errors","skipped"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"summary":{"total":0,"created":0,"updated":0,"failed":0,"skipped":0},"errors":[{"index":0,"error":{"code":"\u003cstring>","message":"\u003cstring>"},"externalId":"\u003cstring>"}],"skipped":["\u003cstring>"]}}},"exampleType":"generated"}},"exampleType":"generated"},"e86d26f6-87a8-494f-bf87-c5377d8ab91a":{"description":"Validation failed or the request cannot proceed.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine-readable error code (snake_case).","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"e9e61535-4660-47c9-9f44-6dccb2ad8c5c":{"description":"Missing, malformed, or revoked API key.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine-readable error code (snake_case).","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"0e9df33f-063c-4284-80c0-c2cd1ec5756d":{"description":"The resource does not exist in this organization.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine-readable error code (snake_case).","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"1e887d95-8c2b-451e-9733-b83df1899e39":{"description":"Conflicts with the current state (duplicates, wrong lifecycle state).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine-readable error code (snake_case).","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"ea8ab371-aa7a-48d3-90e4-aa29fee4ce76":{"description":"The request is well-formed but semantically invalid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine-readable error code (snake_case).","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"8c74cc84-7afd-43cc-b76b-1b78dddc685b":{"description":"Rate limit exceeded — retry after `Retry-After`.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine-readable error code (snake_case).","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"eee52635-62e8-4091-a1fb-7550527421e9":{"description":"Internal server error.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine-readable error code (snake_case).","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"5dcd475d-f915-4685-8633-eed409ca5b27":{"description":"Transient error — retry with a narrower request.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine-readable error code (snake_case).","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"ec2314a0-cdd3-4628-bc94-f84fbb0b23d0":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Organization API key, sent as `Authorization: Bearer boom_org_...`.","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"c765c082-4d63-4903-8901-a4e25004f471":{"url":"https://www.useboom.ai","description":"Production"},"b80279d2-0255-46dc-bddc-f490bd7a2ec8":{"url":"https://dev.useboom.ai","description":"Development (sandbox — use a development organization API key)"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"Organization API key, sent as `Authorization: Bearer boom_org_...`.","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Organization API key, sent as `Authorization: Bearer boom_org_...`.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"api-reference/openapi.json"},"subdomain":"boomai-c1f672dc","siteName":"Boom","title":"Batch upsert objects - Boom","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-22T19:58:55.703Z","originalFileLocation":"api-reference/cdp-custom-objects/batch-upsert-objects.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=\"Upsert up to 1000 custom objects in one request. Idempotent and safely retryable. By DEFAULT each item REPLACES that object\u0026#x27;s entire attributes blob, so an item carrying only the fields you want to change DELETES every other attribute on that object. To add or change a subset across many objects, pass mode: \u0026#x27;merge\u0026#x27; — it overlays the keys you send and leaves the rest untouched, with no need to read each object first. Pass createMissing: false to update only objects that already exist; anything unmatched comes back in skipped rather than being created.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Boom\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/boomai-c1f672dc/nVSaLoJMoPadjXEM/_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/boomai-c1f672dc/nVSaLoJMoPadjXEM/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/boomai-c1f672dc/nVSaLoJMoPadjXEM/_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/boomai-c1f672dc/nVSaLoJMoPadjXEM/_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/boomai-c1f672dc/nVSaLoJMoPadjXEM/_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/boomai-c1f672dc/nVSaLoJMoPadjXEM/_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/boomai-c1f672dc/nVSaLoJMoPadjXEM/_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/boomai-c1f672dc/nVSaLoJMoPadjXEM/_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/boomai-c1f672dc/nVSaLoJMoPadjXEM/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Batch upsert objects - Boom\">\u003cmeta data-mint-head property=\"og:description\" content=\"Upsert up to 1000 custom objects in one request. Idempotent and safely retryable. By DEFAULT each item REPLACES that object\u0026#x27;s entire attributes blob, so an item carrying only the fields you want to change DELETES every other attribute on that object. To add or change a subset across many objects, pass mode: \u0026#x27;merge\u0026#x27; — it overlays the keys you send and leaves the rest untouched, with no need to read each object first. Pass createMissing: false to update only objects that already exist; anything unmatched comes back in skipped rather than being created.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Boom\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.useboom.ai/api-reference/cdp-custom-objects/batch-upsert-objects\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://boomai-c1f672dc.mintlify.app/_mintlify/api/og/v2?division=Custom+objects\u0026amp;title=Batch+upsert+objects\u0026amp;description=Upsert+up+to+1000+custom+objects+in+one+request.+Idempotent+and+safely+retryable.+By+DEFAULT+each+item+REPLACES+that+object%27s+entire+%60attributes%60+blob%2C+so+an+it\u0026amp;theme=83c6d51bda2a99f16cf59c6e\u0026amp;signature=ecf925fb981a818098f17226cce2fb543d31ee7a84dd0a3030543b55e670b269\">\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=\"Batch upsert objects - Boom\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Upsert up to 1000 custom objects in one request. Idempotent and safely retryable. By DEFAULT each item REPLACES that object\u0026#x27;s entire attributes blob, so an item carrying only the fields you want to change DELETES every other attribute on that object. To add or change a subset across many objects, pass mode: \u0026#x27;merge\u0026#x27; — it overlays the keys you send and leaves the rest untouched, with no need to read each object first. Pass createMissing: false to update only objects that already exist; anything unmatched comes back in skipped rather than being created.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://boomai-c1f672dc.mintlify.app/_mintlify/api/og/v2?division=Custom+objects\u0026amp;title=Batch+upsert+objects\u0026amp;description=Upsert+up+to+1000+custom+objects+in+one+request.+Idempotent+and+safely+retryable.+By+DEFAULT+each+item+REPLACES+that+object%27s+entire+%60attributes%60+blob%2C+so+an+it\u0026amp;theme=83c6d51bda2a99f16cf59c6e\u0026amp;signature=ecf925fb981a818098f17226cce2fb543d31ee7a84dd0a3030543b55e670b269\">\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/boomai-c1f672dc/nVSaLoJMoPadjXEM/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Boom\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#3B3B3B\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.useboom.ai/api-reference/cdp-custom-objects/batch-upsert-objects\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/cdp-custom-objects/batch-upsert-objects.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.useboom.ai/#organization\",\"name\":\"Boom\",\"url\":\"https://docs.useboom.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/boomai-c1f672dc/2DiZiPkeLvrlfzgs/logo.svg?fit=max\u0026auto=format\u0026n=2DiZiPkeLvrlfzgs\u0026q=85\u0026s=a014030c9acb0f3d8eee9de1fbe632a7\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.useboom.ai#website\",\"name\":\"Boom\",\"url\":\"https://docs.useboom.ai\",\"publisher\":{\"@id\":\"https://docs.useboom.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.useboom.ai/api-reference/cdp-custom-objects/batch-upsert-objects#webpage\",\"url\":\"https://docs.useboom.ai/api-reference/cdp-custom-objects/batch-upsert-objects\",\"name\":\"Batch upsert objects\",\"description\":\"Upsert up to 1000 custom objects in one request. Idempotent and safely retryable. By DEFAULT each item REPLACES that object's entire attributes blob, so an item carrying only the fields you want to change DELETES every other attribute on that object. To add or change a subset across many objects, pass mode: 'merge' — it overlays the keys you send and leaves the rest untouched, with no need to read each object first. Pass createMissing: false to update only objects that already exist; anything unmatched comes back in skipped rather than being created.\",\"dateModified\":\"2026-10-22T19:58:55.703Z\",\"isPartOf\":{\"@id\":\"https://docs.useboom.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.useboom.ai/api-reference/cdp-custom-objects/batch-upsert-objects#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.useboom.ai/api-reference/cdp-custom-objects/batch-upsert-objects#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Custom objects\",\"item\":\"https://docs.useboom.ai/api-reference/cdp-custom-objects/list-objects\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Batch upsert objects\",\"item\":\"https://docs.useboom.ai/api-reference/cdp-custom-objects/batch-upsert-objects\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.useboom.ai/api-reference/cdp-custom-objects/batch-upsert-objects#apireference\",\"headline\":\"Batch upsert objects\",\"name\":\"Batch upsert objects\",\"description\":\"Upsert up to 1000 custom objects in one request. Idempotent and safely retryable. By DEFAULT each item REPLACES that object's entire attributes blob, so an item carrying only the fields you want to change DELETES every other attribute on that object. To add or change a subset across many objects, pass mode: 'merge' — it overlays the keys you send and leaves the rest untouched, with no need to read each object first. Pass createMissing: false to update only objects that already exist; anything unmatched comes back in skipped rather than being created.\",\"url\":\"https://docs.useboom.ai/api-reference/cdp-custom-objects/batch-upsert-objects\",\"mainEntityOfPage\":{\"@id\":\"https://docs.useboom.ai/api-reference/cdp-custom-objects/batch-upsert-objects#webpage\"},\"dateModified\":\"2026-10-22T19:58:55.703Z\",\"publisher\":{\"@id\":\"https://docs.useboom.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.useboom.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Boom\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Boom","nav":{"global":null,"tabs":[{"tab":"Guides","icon":"book-open","pages":[{"title":"Guides","href":"/introduction"}]},{"tab":"Tutorials","icon":"circle-play","pages":[{"title":"Tutorials","href":"/tutorials/overview"}]},{"tab":"CDP","icon":"layers","groups":[{"group":"Overview","pages":[{"title":"Customer Data Platform","sidebarTitle":"Introduction","href":"/cdp/overview"},{"title":"Sensitive fields","href":"/cdp/sensitive-fields"}]},{"group":"People","icon":"user","pages":[{"title":"List people","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/v1/cdp/people","href":"/api-reference/cdp-people/list-people"},{"title":"Search people","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/v1/cdp/people/search","href":"/api-reference/cdp-people/search-people"},{"title":"Get person","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/v1/cdp/people/{externalId}","href":"/api-reference/cdp-people/get-person"},{"title":"Upsert person","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/v1/cdp/people","href":"/api-reference/cdp-people/upsert-person"},{"title":"Batch upsert people","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/v1/cdp/people/batch","href":"/api-reference/cdp-people/batch-upsert-people"},{"title":"Delete person","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /api/v1/cdp/people/{externalId}","href":"/api-reference/cdp-people/delete-person"}]},{"group":"Custom objects","icon":"boxes","pages":[{"title":"List objects","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/v1/cdp/custom-objects","href":"/api-reference/cdp-custom-objects/list-objects"},{"title":"Get object","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/v1/cdp/custom-objects/{type}/{externalId}","href":"/api-reference/cdp-custom-objects/get-object"},{"title":"Upsert object","description":"Create or update a custom object by type and external id. The type must already exist. By default `attributes` is REPLACED wholesale — pass `mode: 'merge'` to add or change a subset without deleting the rest, and `createMissing: false` to update only when the object already exists.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/v1/cdp/custom-objects","href":"/api-reference/cdp-custom-objects/upsert-object"},{"title":"Batch upsert objects","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/v1/cdp/custom-objects/batch","href":"/api-reference/cdp-custom-objects/batch-upsert-objects"},{"title":"Delete object","description":"Soft-delete a custom object and its links. Idempotent.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /api/v1/cdp/custom-objects/{type}/{externalId}","href":"/api-reference/cdp-custom-objects/delete-object"}]},{"group":"Events","icon":"bolt","pages":[{"title":"List events","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/v1/cdp/events","href":"/api-reference/cdp-events/list-events"},{"title":"Get event","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/v1/cdp/events/{externalId}","href":"/api-reference/cdp-events/get-event"},{"title":"Record event","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/v1/cdp/events","href":"/api-reference/cdp-events/record-event"},{"title":"Batch record events","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/v1/cdp/events/batch","href":"/api-reference/cdp-events/batch-record-events"}]},{"group":"Relationships","icon":"link","pages":[{"title":"List relationships","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/v1/cdp/relationships","href":"/api-reference/cdp-relationships/list-relationships"},{"title":"Link relationship","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/v1/cdp/relationships","href":"/api-reference/cdp-relationships/link-relationship"},{"title":"Unlink relationship","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /api/v1/cdp/relationships","href":"/api-reference/cdp-relationships/unlink-relationship"},{"title":"Batch link / unlink","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/v1/cdp/relationships/batch","href":"/api-reference/cdp-relationships/batch-link-unlink"}]},{"group":"Types","icon":"shapes","pages":[{"title":"List object types","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/v1/cdp/custom-objects/types","href":"/api-reference/cdp-custom-objects/list-object-types"},{"title":"Get object type","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/v1/cdp/custom-objects/types/{type}","href":"/api-reference/cdp-custom-objects/get-object-type"},{"title":"List relationship types","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/v1/cdp/relationship-types","href":"/api-reference/cdp-relationships/list-relationship-types"},{"title":"Get relationship type","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/v1/cdp/relationship-types/{relationshipTypeId}","href":"/api-reference/cdp-relationships/get-relationship-type"},{"title":"Create object type","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/v1/cdp/custom-objects/types","href":"/api-reference/cdp-custom-objects/create-object-type"},{"title":"Register relationship type","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/v1/cdp/relationship-types","href":"/api-reference/cdp-relationships/register-relationship-type"}]},{"group":"Sensitive fields","icon":"lock","pages":[{"title":"List sensitive fields","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/v1/cdp/sensitive-fields","href":"/api-reference/cdp-sensitive-fields/list-sensitive-fields"},{"title":"Mark fields sensitive","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/v1/cdp/sensitive-fields","href":"/api-reference/cdp-sensitive-fields/mark-fields-sensitive"}]}]},{"tab":"API","icon":"code","pages":[{"title":"API","href":"/api-reference/overview"}]}]},"title":"Batch upsert objects - Boom","buildId":"dpl_849ArpqvBiCczQiT1Y1stNGpbqHT","deploymentId":"dpl_849ArpqvBiCczQiT1Y1stNGpbqHT","dynamics":["c2aa737661","b0f84f53ff","a9bb46feb3","2b790eda92"],"chunks":["OpenApiReferenceProvider-Bbp7I60D.js","utils-C3RIvJha.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DqD-vLt8.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-B31Loprg.js","snippetPresets-DKpk-b8t.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","Page-n7I5XbKb.js","ApiExamples-Cj65AhOR.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BXtn5gcC.js","shallow-RY2b03Cp.js","getApiPlaygroundDisplay-B0jeiPk3.js","CodeSnippet-CYgBjjwn.js","CodeSnippets-DOngDrYB.js","getPastedJson-DRQbJx-T.js","icon-CQiQCicY.js","MethodPill-BKTLdNtu.js","DuplicateIcon-B9jpAdat.js","createIcon-DCddRrXv.js","DynamicMarkdown-a8hUKrw6.js","SectionHeading-eECVV2eH.js","axios-vUo_bRtp.js","Markdown--GF7ZIpf.js","clsx-DZLdJUrt.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-2LoAhjKH.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-Zwc0ZncM.js"]}