{
"code": "not_found",
"detail": "No asset found for the given id.",
"instance": "/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f",
"requestId": "req_01HZY8Q3M4N5P6R7S8T9V0W1X2",
"status": 404,
"title": "Not Found",
"type": "https://api.secfix.com/problems/not_found"
}
{
"code": "not_found",
"detail": "No asset found for the given id.",
"instance": "/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f",
"requestId": "req_01HZY8Q3M4N5P6R7S8T9V0W1X2",
"status": 404,
"title": "Not Found",
"type": "https://api.secfix.com/problems/not_found"
}
{
"code": "not_found",
"detail": "No asset found for the given id.",
"instance": "/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f",
"requestId": "req_01HZY8Q3M4N5P6R7S8T9V0W1X2",
"status": 404,
"title": "Not Found",
"type": "https://api.secfix.com/problems/not_found"
}
{
"code": "not_found",
"detail": "No asset found for the given id.",
"instance": "/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f",
"requestId": "req_01HZY8Q3M4N5P6R7S8T9V0W1X2",
"status": 404,
"title": "Not Found",
"type": "https://api.secfix.com/problems/not_found"
}
{
"code": "not_found",
"detail": "No asset found for the given id.",
"instance": "/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f",
"requestId": "req_01HZY8Q3M4N5P6R7S8T9V0W1X2",
"status": 404,
"title": "Not Found",
"type": "https://api.secfix.com/problems/not_found"
}
{
"code": "not_found",
"detail": "No asset found for the given id.",
"instance": "/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f",
"requestId": "req_01HZY8Q3M4N5P6R7S8T9V0W1X2",
"status": 404,
"title": "Not Found",
"type": "https://api.secfix.com/problems/not_found"
}
{
"code": "not_found",
"detail": "No asset found for the given id.",
"instance": "/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f",
"requestId": "req_01HZY8Q3M4N5P6R7S8T9V0W1X2",
"status": 404,
"title": "Not Found",
"type": "https://api.secfix.com/problems/not_found"
}
{
"code": "not_found",
"detail": "No asset found for the given id.",
"instance": "/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f",
"requestId": "req_01HZY8Q3M4N5P6R7S8T9V0W1X2",
"status": 404,
"title": "Not Found",
"type": "https://api.secfix.com/problems/not_found"
}
{
"code": "not_found",
"detail": "No asset found for the given id.",
"instance": "/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f",
"requestId": "req_01HZY8Q3M4N5P6R7S8T9V0W1X2",
"status": 404,
"title": "Not Found",
"type": "https://api.secfix.com/problems/not_found"
}
Inventory
Create assets in a batch
Creates up to 100 CUSTOM or INFORMATION assets in one request. Each record is validated and saved on its own, so one invalid record doesnβt stop the others. The response is 200 with one result per record, in request order.
A record whose externalSource and externalAssetId match an existing asset in its category updates that asset instead: its action is UPDATED, and only the fields you send change. So you can resend the same list without creating duplicates. If the same pair appears twice in one request, the whole request is rejected.
A batch counts as one write request for rate limiting. Requires the all:write scope.
{
"code": "not_found",
"detail": "No asset found for the given id.",
"instance": "/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f",
"requestId": "req_01HZY8Q3M4N5P6R7S8T9V0W1X2",
"status": 404,
"title": "Not Found",
"type": "https://api.secfix.com/problems/not_found"
}
{
"code": "not_found",
"detail": "No asset found for the given id.",
"instance": "/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f",
"requestId": "req_01HZY8Q3M4N5P6R7S8T9V0W1X2",
"status": 404,
"title": "Not Found",
"type": "https://api.secfix.com/problems/not_found"
}
{
"code": "not_found",
"detail": "No asset found for the given id.",
"instance": "/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f",
"requestId": "req_01HZY8Q3M4N5P6R7S8T9V0W1X2",
"status": 404,
"title": "Not Found",
"type": "https://api.secfix.com/problems/not_found"
}
{
"code": "not_found",
"detail": "No asset found for the given id.",
"instance": "/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f",
"requestId": "req_01HZY8Q3M4N5P6R7S8T9V0W1X2",
"status": 404,
"title": "Not Found",
"type": "https://api.secfix.com/problems/not_found"
}
{
"code": "not_found",
"detail": "No asset found for the given id.",
"instance": "/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f",
"requestId": "req_01HZY8Q3M4N5P6R7S8T9V0W1X2",
"status": 404,
"title": "Not Found",
"type": "https://api.secfix.com/problems/not_found"
}
{
"code": "not_found",
"detail": "No asset found for the given id.",
"instance": "/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f",
"requestId": "req_01HZY8Q3M4N5P6R7S8T9V0W1X2",
"status": 404,
"title": "Not Found",
"type": "https://api.secfix.com/problems/not_found"
}
{
"code": "not_found",
"detail": "No asset found for the given id.",
"instance": "/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f",
"requestId": "req_01HZY8Q3M4N5P6R7S8T9V0W1X2",
"status": 404,
"title": "Not Found",
"type": "https://api.secfix.com/problems/not_found"
}
{
"code": "not_found",
"detail": "No asset found for the given id.",
"instance": "/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f",
"requestId": "req_01HZY8Q3M4N5P6R7S8T9V0W1X2",
"status": 404,
"title": "Not Found",
"type": "https://api.secfix.com/problems/not_found"
}
{
"code": "not_found",
"detail": "No asset found for the given id.",
"instance": "/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f",
"requestId": "req_01HZY8Q3M4N5P6R7S8T9V0W1X2",
"status": 404,
"title": "Not Found",
"type": "https://api.secfix.com/problems/not_found"
}
A unique key, up to 256 characters, that makes the request safe to retry. Use a new UUID for each distinct request. If you send the same key again, you get the first response back, for at least 24 hours after the first request completes. Only successful (2xx) responses are stored. If the first request is still running, you get 409 idempotency_in_progress: wait the number of seconds in Retry-After, then retry. See Idempotency.
Maximum string length: 256
Example:
"b0f8e5a2-3c1d-4e6f-8a9b-0c1d2e3f4a5b"
Body
application/json
Creates up to 100 CUSTOM or INFORMATION assets. Each record is validated on its own.
The assets to create, 1-100. Each has the same fields as a single create.
Required array length: 1 - 100 elements
Show child attributes
Response
Every record was processed. Check status on each entry in results; each entry has the record's index. Resend only the failed records, with a new Idempotency-Key.
Results of a batch request, one per record. The response is 200 even when some or all records failed. Resend only the failed records, with a new Idempotency-Key.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Secfix Developers (Staging)","description":"Staging documentation for the Secfix Public API β includes the staging environment. For production docs, see developer.secfix.com.","colors":{"primary":"#762EEA","light":"#A47CF3","dark":"#5B21B6"},"logo":{"light":"https://mintcdn.com/developer-staging-secfix/Q-9vTGgOSlO8yeFU/logo/light.svg?fit=max\u0026auto=format\u0026n=Q-9vTGgOSlO8yeFU\u0026q=85\u0026s=b6e2ca2f07e816208bdf37e60752ad07","dark":"https://mintcdn.com/developer-staging-secfix/Q-9vTGgOSlO8yeFU/logo/dark.svg?fit=max\u0026auto=format\u0026n=Q-9vTGgOSlO8yeFU\u0026q=85\u0026s=5c7e166ab0ada2db7f0f73e1b98e31d1"},"favicon":"https://mintcdn.com/developer-staging-secfix/wXpLA7sRWupSLgpu/favicon.svg?fit=max\u0026auto=format\u0026n=wXpLA7sRWupSLgpu\u0026q=85\u0026s=16e9bb91916a31f20ccae9e1dee085ec","navbar":{"links":[{"href":"mailto:support@secfix.com","label":"Support"}],"primary":{"type":"button","label":"Open Secfix","href":"https://app.secfix.com"}},"footer":{"socials":{"website":"https://secfix.com","linkedin":"https://www.linkedin.com/company/secfix"}},"banner":{"content":"π§ Staging documentation β includes the staging environment. Production docs live at [developer.secfix.com](https://developer.secfix.com).","dismissible":true},"contextual":{"options":["copy","view"],"display":"header"},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"Support","icon":"envelope","href":"mailto:support@secfix.com"},{"anchor":"Secfix.com","icon":"globe","href":"https://secfix.com"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"developer-staging-secfix","hasAudioNarration":false,"actualSubdomain":"developer-staging-secfix","customDomains":["developer-staging.secfix.com"],"gitSource":{"type":"gitlab","owner":"secfix/core","repo":"secfix-developers-docs","deployBranch":"staging","contentDirectory":"staging","isPrivate":true,"projectId":81651564,"mountPath":"","label":"","_id":"6adb56a2fef607a661886cb7"},"entitlements":{},"buildId":"6aeb4c849649d32714d386ca","clientVersion":"0.0.4088","searchFilterCounts":[{"language":"default","tag":"API reference","count":18},{"language":"default","tag":"Endpoints","count":17},{"language":"default","tag":"Documentation","count":14},{"language":"default","tag":"Inventory","count":9},{"language":"default","tag":"Core concepts","count":6},{"language":"default","tag":"Guides","count":5},{"language":"default","tag":"Get started","count":3},{"language":"default","tag":"Changelog","count":2},{"language":"default","tag":"Computers","count":2},{"language":"default","tag":"Employees","count":2}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/inventory/create-assets-in-a-batch","slug":"/api-reference/inventory/create-assets-in-a-batch","pageMetadata":{"title":"Create assets in a batch","description":"Creates up to 100 `CUSTOM` or `INFORMATION` assets in one request. Each record is validated and saved on its own, so one invalid record doesn't stop the others. The response is 200 with one result per record, in request order.\n\nA record whose `externalSource` and `externalAssetId` match an existing asset in its category updates that asset instead: its `action` is `UPDATED`, and only the fields you send change. So you can resend the same list without creating duplicates. If the same pair appears twice in one request, the whole request is rejected.\n\nA batch counts as one write request for rate limiting. Requires the `all:write` scope.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/inventory/assets/batch-create","href":"/api-reference/inventory/create-assets-in-a-batch","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Creates up to 100 \", _jsx(_components.code, {\n children: \"CUSTOM\"\n }), \" or \", _jsx(_components.code, {\n children: \"INFORMATION\"\n }), \" assets in one request. Each record is validated and saved on its own, so one invalid record doesnβt stop the others. The response is 200 with one result per record, in request order.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"A record whose \", _jsx(_components.code, {\n children: \"externalSource\"\n }), \" and \", _jsx(_components.code, {\n children: \"externalAssetId\"\n }), \" match an existing asset in its category updates that asset instead: its \", _jsx(_components.code, {\n children: \"action\"\n }), \" is \", _jsx(_components.code, {\n children: \"UPDATED\"\n }), \", and only the fields you send change. So you can resend the same list without creating duplicates. If the same pair appears twice in one request, the whole request is rejected.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"A batch counts as one write request for rate limiting. Requires the \", _jsx(_components.code, {\n children: \"all:write\"\n }), \" scope.\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Create assets in a batch","description":"Creates up to 100 `CUSTOM` or `INFORMATION` assets in one request. Each record is validated and saved on its own, so one invalid record doesn't stop the others. The response is 200 with one result per record, in request order.\n\nA record whose `externalSource` and `externalAssetId` match an existing asset in its category updates that asset instead: its `action` is `UPDATED`, and only the fields you send change. So you can resend the same list without creating duplicates. If the same pair appears twice in one request, the whole request is rejected.\n\nA batch counts as one write request for rate limiting. Requires the `all:write` scope.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/inventory/assets/batch-create","href":"/api-reference/inventory/create-assets-in-a-batch","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Inventory"],"summary":"Create assets in a batch","description":"Creates up to 100 `CUSTOM` or `INFORMATION` assets in one request. Each record is validated and saved on its own, so one invalid record doesn't stop the others. The response is 200 with one result per record, in request order.\n\nA record whose `externalSource` and `externalAssetId` match an existing asset in its category updates that asset instead: its `action` is `UPDATED`, and only the fields you send change. So you can resend the same list without creating duplicates. If the same pair appears twice in one request, the whole request is rejected.\n\nA batch counts as one write request for rate limiting. Requires the `all:write` scope.","operationId":"createAssetsBatch","parameters":["32058051-75a9-4a11-b7fd-69c8d5ece3b4"],"requestBody":"f14c0343-be61-4a91-a2e7-6416ae5ab329","responses":{"200":"3a1dc8a5-7d4b-43b4-992f-7786e7636cd2","400":"03d6594d-15f0-441c-8be7-8133d9b77598","401":"62aef6ab-555d-4709-a20c-230e47dcf64d","403":"f0af76e4-21b9-4369-969e-8e370b7bd3b7","405":"35699832-d85e-4ccd-be10-56f685252d78","409":"627140d7-e7f0-496c-98b4-18134ad79765","413":"b22181bc-3203-46df-b006-9fad4a7fd954","415":"74feed64-4a47-410c-a24d-23960eca7798","429":"66ea7d39-85bf-4420-8170-55f7c848999f","500":"53dbdb08-34bf-4f0c-a3c7-b158c90a52a6"},"method":"post","type":"path","servers":["4f2cec6e-2289-49a2-8248-1dc79040f3ad","790bd194-79b5-4d3d-b43a-ec342482981e"],"security":["a0177fc0-042b-4625-a1c4-9a855bdea4a9"],"path":"/v1/inventory/assets/batch-create","baseUrlOptions":["https://api.secfix.com","https://api-staging.secfix.com"],"title":"Create assets in a batch","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"32058051-75a9-4a11-b7fd-69c8d5ece3b4":{"name":"Idempotency-Key","in":"header","description":"A unique key, up to 256 characters, that makes the request safe to retry. Use a new UUID for each distinct request. If you send the same key again, you get the first response back, for at least 24 hours after the first request completes. Only successful (2xx) responses are stored. If the first request is still running, you get `409 idempotency_in_progress`: wait the number of seconds in `Retry-After`, then retry. See [Idempotency](/idempotency).","required":true,"schema":{"maxLength":256,"type":"string","example":"b0f8e5a2-3c1d-4e6f-8a9b-0c1d2e3f4a5b","isRequired":true,"description":"A unique key, up to 256 characters, that makes the request safe to retry. Use a new UUID for each distinct request. If you send the same key again, you get the first response back, for at least 24 hours after the first request completes. Only successful (2xx) responses are stored. If the first request is still running, you get `409 idempotency_in_progress`: wait the number of seconds in `Retry-After`, then retry. See [Idempotency](/idempotency).","uniqueKey":"","typeLabel":"string"}}},"requestBody":{"content":{"application/json":{"schema":{"required":["records"],"type":"object","properties":{"records":{"maxItems":100,"minItems":1,"type":"array","description":"The assets to create, 1-100. Each has the same fields as a single create.","items":{"required":["categoryKey","name"],"type":"object","properties":{"categoryKey":{"type":"string","description":"Category to create the asset in: `CUSTOM` or `INFORMATION`, in any letter case.","example":"CUSTOM","enum":["CUSTOM","INFORMATION"],"isRequired":true,"uniqueKey":"records.items.[INDEX].categoryKey","typeLabel":"enum\u003cstring>"},"name":{"maxLength":255,"minLength":0,"type":"string","description":"Asset name, 1-255 characters. Leading and trailing spaces are removed.","example":"Office badge printer","isRequired":true,"uniqueKey":"records.items.[INDEX].name","typeLabel":"string"},"classification":{"type":"string","description":"Data classification, in any letter case. Defaults to `INTERNAL`.","example":"CONFIDENTIAL","enum":["RESTRICTED","CONFIDENTIAL","INTERNAL","PUBLIC","UNKNOWN"],"uniqueKey":"records.items.[INDEX].classification","typeLabel":"enum\u003cstring>"},"customIdentifier":{"maxLength":255,"minLength":0,"type":"string","description":"Serial number or asset ID, shown in Secfix as **ID/Serial No.** Up to 255 characters. Free text and not unique: to identify the asset in your system, use `externalSource` and `externalAssetId`.","example":"SN-48213","uniqueKey":"records.items.[INDEX].customIdentifier","typeLabel":"string"},"dataStored":{"type":"object","properties":{"containsPatientData":{"type":"boolean","description":"Whether the asset stores patient data.","example":false,"uniqueKey":"records.items.[INDEX].dataStored.containsPatientData","typeLabel":"boolean"},"containsUserData":{"type":"boolean","description":"Whether the asset stores user data.","example":true,"uniqueKey":"records.items.[INDEX].dataStored.containsUserData","typeLabel":"boolean"},"userDataInfo":{"maxLength":500,"minLength":0,"type":"string","description":"What kind of user data the asset stores, up to 500 characters.","example":"Customer names and email addresses.","uniqueKey":"records.items.[INDEX].dataStored.userDataInfo","typeLabel":"string"}},"description":"What data the asset stores. On create, fields you leave out stay unset.","uniqueKey":"records.items.[INDEX].dataStored","typeLabel":"object"},"description":{"maxLength":500,"minLength":0,"type":"string","description":"Asset description, up to 500 characters.","example":"Printer in the front office.","uniqueKey":"records.items.[INDEX].description","typeLabel":"string"},"externalAssetId":{"maxLength":255,"minLength":0,"type":"string","description":"The asset's id in your system. Up to 255 characters; leading and trailing spaces are removed. Must be unique per workspace, category and `externalSource` among assets that haven't been deleted. Matched exactly. Send it with `externalSource`. You can't change it later.","example":"CI-1042","uniqueKey":"records.items.[INDEX].externalAssetId","typeLabel":"string"},"externalSource":{"maxLength":255,"minLength":0,"type":"string","description":"A name you choose for the system the asset comes from, such as `servicenow`. Up to 255 characters; leading and trailing spaces are removed. Matched exactly, so send the same value every time. Send it with `externalAssetId`.","example":"servicenow-cmdb","uniqueKey":"records.items.[INDEX].externalSource","typeLabel":"string"},"ownerEmail":{"maxLength":320,"minLength":0,"type":"string","description":"Owner's email address, case-insensitive. Send `ownerId` or `ownerEmail`, not both.","example":"alex@example.com","uniqueKey":"records.items.[INDEX].ownerEmail","typeLabel":"string"},"ownerId":{"type":"string","description":"Owner's employee `id`. Send `ownerId` or `ownerEmail`, not both. An asset without an owner shows as incomplete.","format":"uuid","example":"a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d","uniqueKey":"records.items.[INDEX].ownerId","typeLabel":"string\u003cuuid>"}},"description":"Creates one `CUSTOM` or `INFORMATION` asset. It appears in Secfix like an asset added in the app. Send `externalSource` and `externalAssetId` to link it to a record in your system: a later create with the same pair in the same category updates this asset instead of adding another, and changes only the fields you send.","uniqueKey":"records.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"records","typeLabel":"object[]"}},"description":"Creates up to 100 `CUSTOM` or `INFORMATION` assets. Each record is validated on its own.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"records":[{"categoryKey":"CUSTOM","name":"Office badge printer","classification":"CONFIDENTIAL","customIdentifier":"SN-48213","dataStored":{"containsPatientData":false,"containsUserData":true,"userDataInfo":"Customer names and email addresses."},"description":"Printer in the front office.","externalAssetId":"CI-1042","externalSource":"servicenow-cmdb","ownerEmail":"alex@example.com","ownerId":"a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d"}]}}},"exampleType":"generated"}},"required":true,"exampleType":"generated"},"responses":{"3a1dc8a5-7d4b-43b4-992f-7786e7636cd2":{"description":"Every record was processed. Check `status` on each entry in `results`; each entry has the record's `index`. Resend only the failed records, with a new `Idempotency-Key`.","headers":{"X-RateLimit-Limit":{"description":"Requests allowed in the current rate-limit window.","style":"simple","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","style":"simple","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the rate-limit window resets.","style":"simple","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"results":{"type":"array","description":"One result per record, in request order.","items":{"type":"object","properties":{"action":{"type":"string","description":"For a successful create: whether the asset was created or updated.","enum":["CREATED","UPDATED"],"uniqueKey":"results.items.[INDEX].action","typeLabel":"enum\u003cstring>"},"code":{"type":"string","description":"Why the record failed. Only set when it failed.","example":"validation_failed","enum":["validation_failed","resource_not_writable","not_editable","not_found","write_conflict","internal_error"],"uniqueKey":"results.items.[INDEX].code","typeLabel":"enum\u003cstring>"},"field":{"type":"string","description":"The request field that failed validation. Only set for `validation_failed`.","example":"ownerEmail","uniqueKey":"results.items.[INDEX].field","typeLabel":"string"},"id":{"type":"string","description":"For a create, the `id` of the new or matched asset; left out when the create failed. For a delete or update, the `id` you sent.","format":"uuid","uniqueKey":"results.items.[INDEX].id","typeLabel":"string\u003cuuid>"},"index":{"type":"integer","description":"Position of the record in `records`, starting at 0.","format":"int32","example":0,"uniqueKey":"results.items.[INDEX].index","typeLabel":"integer\u003cint32>"},"message":{"type":"string","description":"Short explanation of the failure. Only set when the record failed.","example":"unknown owner","uniqueKey":"results.items.[INDEX].message","typeLabel":"string"},"skippedFields":{"type":"array","description":"Batch updates only. Fields you sent that weren't changed, because the asset's category doesn't allow bulk editing them: the field isn't configured, a Secfix tag sets it, or it's marked not editable. On a `SUCCESS` record the other fields were saved; on a `not_editable` record nothing was. Left out when every change was applied.","items":{"type":"string","example":"description","uniqueKey":"results.items.[INDEX].skippedFields.items.[INDEX]","typeLabel":"string"},"uniqueKey":"results.items.[INDEX].skippedFields","typeLabel":"string[]"},"status":{"type":"string","description":"Outcome of the record.","enum":["SUCCESS","ERROR"],"uniqueKey":"results.items.[INDEX].status","typeLabel":"enum\u003cstring>"}},"description":"The result of one record in a batch.","uniqueKey":"results.items.[INDEX]","typeLabel":"object"},"uniqueKey":"results","typeLabel":"object[]"}},"description":"Results of a batch request, one per record. The response is 200 even when some or all records failed. Resend only the failed records, with a new `Idempotency-Key`.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"results":[{"action":"CREATED","code":"validation_failed","field":"ownerEmail","id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","index":0,"message":"unknown owner","skippedFields":["description"],"status":"SUCCESS"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"03d6594d-15f0-441c-8be7-8133d9b77598":{"description":"The request is invalid: `records` is missing, empty or has more than 100 entries, the same `categoryKey`, `externalSource` and `externalAssetId` appear twice, or the `Idempotency-Key` header is missing or longer than 256 characters. Code: `validation_failed` or `malformed_request`.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"Error code for your error handling. It doesn't change between releases.","example":"not_found","uniqueKey":"code","typeLabel":"string"},"detail":{"type":"string","description":"What went wrong in this request.","example":"No asset found for the given id.","uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"URI that identifies this occurrence of the error.","example":"/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","uniqueKey":"instance","typeLabel":"string"},"requestId":{"type":"string","description":"The request's id, also sent in the `X-Request-Id` header. Include it when you contact support.","example":"req_01HZY8Q3M4N5P6R7S8T9V0W1X2","uniqueKey":"requestId","typeLabel":"string"},"status":{"type":"integer","description":"HTTP status code.","format":"int32","example":404,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"title":{"type":"string","description":"Short summary of the error type.","example":"Not Found","uniqueKey":"title","typeLabel":"string"},"type":{"type":"string","description":"URI that identifies the error type.","example":"https://api.secfix.com/problems/not_found","uniqueKey":"type","typeLabel":"string"}},"description":"The JSON body of every error response.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"not_found","detail":"No asset found for the given id.","instance":"/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","requestId":"req_01HZY8Q3M4N5P6R7S8T9V0W1X2","status":404,"title":"Not Found","type":"https://api.secfix.com/problems/not_found"}}},"exampleType":"generated"}},"exampleType":"generated"},"62aef6ab-555d-4709-a20c-230e47dcf64d":{"description":"The access token is missing, invalid or replaced by a newer one. Code: `unauthorized` or `token_superseded`.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"Error code for your error handling. It doesn't change between releases.","example":"not_found","uniqueKey":"code","typeLabel":"string"},"detail":{"type":"string","description":"What went wrong in this request.","example":"No asset found for the given id.","uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"URI that identifies this occurrence of the error.","example":"/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","uniqueKey":"instance","typeLabel":"string"},"requestId":{"type":"string","description":"The request's id, also sent in the `X-Request-Id` header. Include it when you contact support.","example":"req_01HZY8Q3M4N5P6R7S8T9V0W1X2","uniqueKey":"requestId","typeLabel":"string"},"status":{"type":"integer","description":"HTTP status code.","format":"int32","example":404,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"title":{"type":"string","description":"Short summary of the error type.","example":"Not Found","uniqueKey":"title","typeLabel":"string"},"type":{"type":"string","description":"URI that identifies the error type.","example":"https://api.secfix.com/problems/not_found","uniqueKey":"type","typeLabel":"string"}},"description":"The JSON body of every error response.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"not_found","detail":"No asset found for the given id.","instance":"/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","requestId":"req_01HZY8Q3M4N5P6R7S8T9V0W1X2","status":404,"title":"Not Found","type":"https://api.secfix.com/problems/not_found"}}},"exampleType":"generated"}},"exampleType":"generated"},"f0af76e4-21b9-4369-969e-8e370b7bd3b7":{"description":"The access token doesn't have the scope this endpoint needs. Code: `scope_required`.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"Error code for your error handling. It doesn't change between releases.","example":"not_found","uniqueKey":"code","typeLabel":"string"},"detail":{"type":"string","description":"What went wrong in this request.","example":"No asset found for the given id.","uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"URI that identifies this occurrence of the error.","example":"/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","uniqueKey":"instance","typeLabel":"string"},"requestId":{"type":"string","description":"The request's id, also sent in the `X-Request-Id` header. Include it when you contact support.","example":"req_01HZY8Q3M4N5P6R7S8T9V0W1X2","uniqueKey":"requestId","typeLabel":"string"},"status":{"type":"integer","description":"HTTP status code.","format":"int32","example":404,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"title":{"type":"string","description":"Short summary of the error type.","example":"Not Found","uniqueKey":"title","typeLabel":"string"},"type":{"type":"string","description":"URI that identifies the error type.","example":"https://api.secfix.com/problems/not_found","uniqueKey":"type","typeLabel":"string"}},"description":"The JSON body of every error response.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"not_found","detail":"No asset found for the given id.","instance":"/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","requestId":"req_01HZY8Q3M4N5P6R7S8T9V0W1X2","status":404,"title":"Not Found","type":"https://api.secfix.com/problems/not_found"}}},"exampleType":"generated"}},"exampleType":"generated"},"35699832-d85e-4ccd-be10-56f685252d78":{"description":"This path doesn't support the HTTP method. The `Allow` header lists the methods it supports. Code: `method_not_allowed`.","headers":{"Allow":{"description":"Comma-separated list of the HTTP methods this path supports.","style":"simple","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"Error code for your error handling. It doesn't change between releases.","example":"not_found","uniqueKey":"code","typeLabel":"string"},"detail":{"type":"string","description":"What went wrong in this request.","example":"No asset found for the given id.","uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"URI that identifies this occurrence of the error.","example":"/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","uniqueKey":"instance","typeLabel":"string"},"requestId":{"type":"string","description":"The request's id, also sent in the `X-Request-Id` header. Include it when you contact support.","example":"req_01HZY8Q3M4N5P6R7S8T9V0W1X2","uniqueKey":"requestId","typeLabel":"string"},"status":{"type":"integer","description":"HTTP status code.","format":"int32","example":404,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"title":{"type":"string","description":"Short summary of the error type.","example":"Not Found","uniqueKey":"title","typeLabel":"string"},"type":{"type":"string","description":"URI that identifies the error type.","example":"https://api.secfix.com/problems/not_found","uniqueKey":"type","typeLabel":"string"}},"description":"The JSON body of every error response.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"not_found","detail":"No asset found for the given id.","instance":"/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","requestId":"req_01HZY8Q3M4N5P6R7S8T9V0W1X2","status":404,"title":"Not Found","type":"https://api.secfix.com/problems/not_found"}}},"exampleType":"generated"}},"exampleType":"generated"},"627140d7-e7f0-496c-98b4-18134ad79765":{"description":"The `Idempotency-Key` was already used with a different body (`idempotency_conflict`), or the first request with this key is still running (`idempotency_in_progress`). For `idempotency_in_progress`, retry after `Retry-After`.","headers":{"Retry-After":{"description":"Seconds to wait before retrying. Sent with `idempotency_in_progress`. A `write_conflict` on one record is reported in that record's result, not as a 409.","style":"simple","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"Error code for your error handling. It doesn't change between releases.","example":"not_found","uniqueKey":"code","typeLabel":"string"},"detail":{"type":"string","description":"What went wrong in this request.","example":"No asset found for the given id.","uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"URI that identifies this occurrence of the error.","example":"/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","uniqueKey":"instance","typeLabel":"string"},"requestId":{"type":"string","description":"The request's id, also sent in the `X-Request-Id` header. Include it when you contact support.","example":"req_01HZY8Q3M4N5P6R7S8T9V0W1X2","uniqueKey":"requestId","typeLabel":"string"},"status":{"type":"integer","description":"HTTP status code.","format":"int32","example":404,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"title":{"type":"string","description":"Short summary of the error type.","example":"Not Found","uniqueKey":"title","typeLabel":"string"},"type":{"type":"string","description":"URI that identifies the error type.","example":"https://api.secfix.com/problems/not_found","uniqueKey":"type","typeLabel":"string"}},"description":"The JSON body of every error response.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"not_found","detail":"No asset found for the given id.","instance":"/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","requestId":"req_01HZY8Q3M4N5P6R7S8T9V0W1X2","status":404,"title":"Not Found","type":"https://api.secfix.com/problems/not_found"}}},"exampleType":"generated"}},"exampleType":"generated"},"b22181bc-3203-46df-b006-9fad4a7fd954":{"description":"The request body is too large. Code: `payload_too_large`.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"Error code for your error handling. It doesn't change between releases.","example":"not_found","uniqueKey":"code","typeLabel":"string"},"detail":{"type":"string","description":"What went wrong in this request.","example":"No asset found for the given id.","uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"URI that identifies this occurrence of the error.","example":"/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","uniqueKey":"instance","typeLabel":"string"},"requestId":{"type":"string","description":"The request's id, also sent in the `X-Request-Id` header. Include it when you contact support.","example":"req_01HZY8Q3M4N5P6R7S8T9V0W1X2","uniqueKey":"requestId","typeLabel":"string"},"status":{"type":"integer","description":"HTTP status code.","format":"int32","example":404,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"title":{"type":"string","description":"Short summary of the error type.","example":"Not Found","uniqueKey":"title","typeLabel":"string"},"type":{"type":"string","description":"URI that identifies the error type.","example":"https://api.secfix.com/problems/not_found","uniqueKey":"type","typeLabel":"string"}},"description":"The JSON body of every error response.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"not_found","detail":"No asset found for the given id.","instance":"/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","requestId":"req_01HZY8Q3M4N5P6R7S8T9V0W1X2","status":404,"title":"Not Found","type":"https://api.secfix.com/problems/not_found"}}},"exampleType":"generated"}},"exampleType":"generated"},"74feed64-4a47-410c-a24d-23960eca7798":{"description":"Send the request body as `application/json`. Code: `unsupported_media_type`.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"Error code for your error handling. It doesn't change between releases.","example":"not_found","uniqueKey":"code","typeLabel":"string"},"detail":{"type":"string","description":"What went wrong in this request.","example":"No asset found for the given id.","uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"URI that identifies this occurrence of the error.","example":"/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","uniqueKey":"instance","typeLabel":"string"},"requestId":{"type":"string","description":"The request's id, also sent in the `X-Request-Id` header. Include it when you contact support.","example":"req_01HZY8Q3M4N5P6R7S8T9V0W1X2","uniqueKey":"requestId","typeLabel":"string"},"status":{"type":"integer","description":"HTTP status code.","format":"int32","example":404,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"title":{"type":"string","description":"Short summary of the error type.","example":"Not Found","uniqueKey":"title","typeLabel":"string"},"type":{"type":"string","description":"URI that identifies the error type.","example":"https://api.secfix.com/problems/not_found","uniqueKey":"type","typeLabel":"string"}},"description":"The JSON body of every error response.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"not_found","detail":"No asset found for the given id.","instance":"/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","requestId":"req_01HZY8Q3M4N5P6R7S8T9V0W1X2","status":404,"title":"Not Found","type":"https://api.secfix.com/problems/not_found"}}},"exampleType":"generated"}},"exampleType":"generated"},"66ea7d39-85bf-4420-8170-55f7c848999f":{"description":"Too many requests. Wait the number of seconds in `Retry-After`, then retry. Code: `rate_limited`.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","style":"simple","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"Error code for your error handling. It doesn't change between releases.","example":"not_found","uniqueKey":"code","typeLabel":"string"},"detail":{"type":"string","description":"What went wrong in this request.","example":"No asset found for the given id.","uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"URI that identifies this occurrence of the error.","example":"/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","uniqueKey":"instance","typeLabel":"string"},"requestId":{"type":"string","description":"The request's id, also sent in the `X-Request-Id` header. Include it when you contact support.","example":"req_01HZY8Q3M4N5P6R7S8T9V0W1X2","uniqueKey":"requestId","typeLabel":"string"},"status":{"type":"integer","description":"HTTP status code.","format":"int32","example":404,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"title":{"type":"string","description":"Short summary of the error type.","example":"Not Found","uniqueKey":"title","typeLabel":"string"},"type":{"type":"string","description":"URI that identifies the error type.","example":"https://api.secfix.com/problems/not_found","uniqueKey":"type","typeLabel":"string"}},"description":"The JSON body of every error response.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"not_found","detail":"No asset found for the given id.","instance":"/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","requestId":"req_01HZY8Q3M4N5P6R7S8T9V0W1X2","status":404,"title":"Not Found","type":"https://api.secfix.com/problems/not_found"}}},"exampleType":"generated"}},"exampleType":"generated"},"53dbdb08-34bf-4f0c-a3c7-b158c90a52a6":{"description":"Unexpected server error. Code: `internal_error`.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"Error code for your error handling. It doesn't change between releases.","example":"not_found","uniqueKey":"code","typeLabel":"string"},"detail":{"type":"string","description":"What went wrong in this request.","example":"No asset found for the given id.","uniqueKey":"detail","typeLabel":"string"},"instance":{"type":"string","description":"URI that identifies this occurrence of the error.","example":"/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","uniqueKey":"instance","typeLabel":"string"},"requestId":{"type":"string","description":"The request's id, also sent in the `X-Request-Id` header. Include it when you contact support.","example":"req_01HZY8Q3M4N5P6R7S8T9V0W1X2","uniqueKey":"requestId","typeLabel":"string"},"status":{"type":"integer","description":"HTTP status code.","format":"int32","example":404,"uniqueKey":"status","typeLabel":"integer\u003cint32>"},"title":{"type":"string","description":"Short summary of the error type.","example":"Not Found","uniqueKey":"title","typeLabel":"string"},"type":{"type":"string","description":"URI that identifies the error type.","example":"https://api.secfix.com/problems/not_found","uniqueKey":"type","typeLabel":"string"}},"description":"The JSON body of every error response.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"not_found","detail":"No asset found for the given id.","instance":"/v1/inventory/assets/3f1c9a2e-8b4d-4e7a-9c1f-2a5b6c7d8e9f","requestId":"req_01HZY8Q3M4N5P6R7S8T9V0W1X2","status":404,"title":"Not Found","type":"https://api.secfix.com/problems/not_found"}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"a0177fc0-042b-4625-a1c4-9a855bdea4a9":{"bearerAuth":{"type":"http","description":"Access token from `POST /oauth/token`.","scheme":"bearer","bearerFormat":"JWT","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"4f2cec6e-2289-49a2-8248-1dc79040f3ad":{"url":"https://api.secfix.com","description":"Production"},"790bd194-79b5-4d3d-b43a-ec342482981e":{"url":"https://api-staging.secfix.com","description":"Staging"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","description":"Access token from `POST /oauth/token`.","scheme":"bearer","bearerFormat":"JWT","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Access token from `POST /oauth/token`.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"api-reference/openapi.yaml"},"subdomain":"developer-staging-secfix","siteName":"Secfix Developers (Staging)","title":"Create assets in a batch - Secfix Developers (Staging)","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-04T15:17:32.758Z","originalFileLocation":"api-reference/inventory/create-assets-in-a-batch.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=\"Creates up to 100 CUSTOM or INFORMATION assets in one request. Each record is validated and saved on its own, so one invalid record doesn\u0026#x27;t stop the others. The response is 200 with one result per record, in request order. A record whose externalSource and externalAssetId match an existing asset in its category updates that asset instead: its action is UPDATED, and only the fields you send change. So you can resend the same list without creating duplicates. If the same pair appears twice in one request, the whole request is rejected. A batch counts as one write request for rate limiting. Requires the all:write scope.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Secfix Developers (Staging)\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/developer-staging-secfix/Q-RAuUtgnc9yPmKP/_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/developer-staging-secfix/Q-RAuUtgnc9yPmKP/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/developer-staging-secfix/Q-RAuUtgnc9yPmKP/_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/developer-staging-secfix/Q-RAuUtgnc9yPmKP/_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/developer-staging-secfix/Q-RAuUtgnc9yPmKP/_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/developer-staging-secfix/Q-RAuUtgnc9yPmKP/_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/developer-staging-secfix/Q-RAuUtgnc9yPmKP/_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/developer-staging-secfix/Q-RAuUtgnc9yPmKP/_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/developer-staging-secfix/Q-RAuUtgnc9yPmKP/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create assets in a batch - Secfix Developers (Staging)\">\u003cmeta data-mint-head property=\"og:description\" content=\"Creates up to 100 CUSTOM or INFORMATION assets in one request. Each record is validated and saved on its own, so one invalid record doesn\u0026#x27;t stop the others. The response is 200 with one result per record, in request order. A record whose externalSource and externalAssetId match an existing asset in its category updates that asset instead: its action is UPDATED, and only the fields you send change. So you can resend the same list without creating duplicates. If the same pair appears twice in one request, the whole request is rejected. A batch counts as one write request for rate limiting. Requires the all:write scope.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Secfix Developers (Staging)\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://developer-staging.secfix.com/api-reference/inventory/create-assets-in-a-batch\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://developer-staging-secfix.mintlify.site/_mintlify/api/og/v2?division=Inventory\u0026amp;title=Create+assets+in+a+batch\u0026amp;description=Creates+up+to+100+%60CUSTOM%60+or+%60INFORMATION%60+assets+in+one+request.+Each+record+is+validated+and+saved+on+its+own%2C+so+one+invalid+record+doesn%27t+stop+the+others.\u0026amp;theme=d051878f67505cd781ea0506\u0026amp;signature=d5ecfc09ccb458822f1205f1cdb416dc0692d4d6e97fe2fb6c6342749f601a24\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Create assets in a batch - Secfix Developers (Staging)\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Creates up to 100 CUSTOM or INFORMATION assets in one request. Each record is validated and saved on its own, so one invalid record doesn\u0026#x27;t stop the others. The response is 200 with one result per record, in request order. A record whose externalSource and externalAssetId match an existing asset in its category updates that asset instead: its action is UPDATED, and only the fields you send change. So you can resend the same list without creating duplicates. If the same pair appears twice in one request, the whole request is rejected. A batch counts as one write request for rate limiting. Requires the all:write scope.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://developer-staging-secfix.mintlify.site/_mintlify/api/og/v2?division=Inventory\u0026amp;title=Create+assets+in+a+batch\u0026amp;description=Creates+up+to+100+%60CUSTOM%60+or+%60INFORMATION%60+assets+in+one+request.+Each+record+is+validated+and+saved+on+its+own%2C+so+one+invalid+record+doesn%27t+stop+the+others.\u0026amp;theme=d051878f67505cd781ea0506\u0026amp;signature=d5ecfc09ccb458822f1205f1cdb416dc0692d4d6e97fe2fb6c6342749f601a24\">\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/developer-staging-secfix/Q-RAuUtgnc9yPmKP/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Secfix Developers (Staging)\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#762EEA\">\u003clink data-mint-head rel=\"canonical\" href=\"https://developer-staging.secfix.com/api-reference/inventory/create-assets-in-a-batch\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/inventory/create-assets-in-a-batch.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://developer-staging.secfix.com/#organization\",\"name\":\"Secfix Developers (Staging)\",\"url\":\"https://developer-staging.secfix.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/developer-staging-secfix/Q-9vTGgOSlO8yeFU/logo/light.svg?fit=max\u0026auto=format\u0026n=Q-9vTGgOSlO8yeFU\u0026q=85\u0026s=b6e2ca2f07e816208bdf37e60752ad07\"}},{\"@type\":\"WebSite\",\"@id\":\"https://developer-staging.secfix.com#website\",\"name\":\"Secfix Developers (Staging)\",\"url\":\"https://developer-staging.secfix.com\",\"publisher\":{\"@id\":\"https://developer-staging.secfix.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://developer-staging.secfix.com/api-reference/inventory/create-assets-in-a-batch#webpage\",\"url\":\"https://developer-staging.secfix.com/api-reference/inventory/create-assets-in-a-batch\",\"name\":\"Create assets in a batch\",\"description\":\"Creates up to 100 CUSTOM or INFORMATION assets in one request. Each record is validated and saved on its own, so one invalid record doesn't stop the others. The response is 200 with one result per record, in request order. A record whose externalSource and externalAssetId match an existing asset in its category updates that asset instead: its action is UPDATED, and only the fields you send change. So you can resend the same list without creating duplicates. If the same pair appears twice in one request, the whole request is rejected. A batch counts as one write request for rate limiting. Requires the all:write scope.\",\"dateModified\":\"2026-11-04T15:17:32.758Z\",\"isPartOf\":{\"@id\":\"https://developer-staging.secfix.com#website\"},\"breadcrumb\":{\"@id\":\"https://developer-staging.secfix.com/api-reference/inventory/create-assets-in-a-batch#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://developer-staging.secfix.com/api-reference/inventory/create-assets-in-a-batch#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://developer-staging.secfix.com/api-reference/oauth/get-an-access-token\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Inventory\",\"item\":\"https://developer-staging.secfix.com/api-reference/inventory/list-assets\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Create assets in a batch\",\"item\":\"https://developer-staging.secfix.com/api-reference/inventory/create-assets-in-a-batch\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://developer-staging.secfix.com/api-reference/inventory/create-assets-in-a-batch#apireference\",\"headline\":\"Create assets in a batch\",\"name\":\"Create assets in a batch\",\"description\":\"Creates up to 100 CUSTOM or INFORMATION assets in one request. Each record is validated and saved on its own, so one invalid record doesn't stop the others. The response is 200 with one result per record, in request order. A record whose externalSource and externalAssetId match an existing asset in its category updates that asset instead: its action is UPDATED, and only the fields you send change. So you can resend the same list without creating duplicates. If the same pair appears twice in one request, the whole request is rejected. A batch counts as one write request for rate limiting. Requires the all:write scope.\",\"url\":\"https://developer-staging.secfix.com/api-reference/inventory/create-assets-in-a-batch\",\"mainEntityOfPage\":{\"@id\":\"https://developer-staging.secfix.com/api-reference/inventory/create-assets-in-a-batch#webpage\"},\"dateModified\":\"2026-11-04T15:17:32.758Z\",\"publisher\":{\"@id\":\"https://developer-staging.secfix.com/#organization\"},\"isPartOf\":{\"@id\":\"https://developer-staging.secfix.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Secfix Developers (Staging)\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Secfix Developers (Staging)","nav":{"global":{"anchors":[{"anchor":"Support","icon":"envelope","href":"mailto:support@secfix.com"},{"anchor":"Secfix.com","icon":"globe","href":"https://secfix.com"}]},"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":""}]},{"tab":"API reference","groups":[{"group":"Overview","pages":[{"title":"Overview","href":"/api-reference/overview"}]},{"group":"Endpoints","pages":[{"group":"OAuth","pages":[{"title":"Get an access token","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /oauth/token","href":"/api-reference/oauth/get-an-access-token"}]},{"group":"Computers","pages":[{"title":"List computers","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/computers","href":"/api-reference/computers/list-computers"},{"title":"Get a computer","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/computers/{id}","href":"/api-reference/computers/get-a-computer"}]},{"group":"Employees","pages":[{"title":"List employees","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/employees","href":"/api-reference/employees/list-employees"},{"title":"Get an employee","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/employees/{id}","href":"/api-reference/employees/get-an-employee"}]},{"group":"Groups","pages":[{"title":"List groups","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/groups","href":"/api-reference/groups/list-groups"},{"title":"Get a group","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/groups/{id}","href":"/api-reference/groups/get-a-group"}]},{"group":"Health","pages":[{"title":"Check API health","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/health","href":"/api-reference/health/check-api-health"}]},{"group":"Inventory","pages":[{"title":"List assets","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/inventory/assets","href":"/api-reference/inventory/list-assets"},{"title":"Create or update an asset","description":"Creates a `CUSTOM` or `INFORMATION` asset. It appears in Secfix like an asset added in the app. Set the owner with `ownerId` or `ownerEmail`.\n\nTo link the asset to a record in your own system, send `externalSource` and `externalAssetId`. If an asset in the same category already has that pair, the call updates it instead: only the fields you send change, and the response is 200 instead of 201.\n\nRequires the `all:write` scope.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/inventory/assets","href":"/api-reference/inventory/create-or-update-an-asset"},{"title":"Create assets in a batch","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/inventory/assets/batch-create","href":"/api-reference/inventory/create-assets-in-a-batch"},{"title":"Delete assets in a batch","description":"Deletes up to 100 `CUSTOM` or `INFORMATION` assets in one request. Each record is processed on its own. An unknown or already deleted `id` fails with `not_found` in its result. Each `id` can appear only once. A batch counts as one write request for rate limiting. Requires the `all:write` scope.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/inventory/assets/batch-delete","href":"/api-reference/inventory/delete-assets-in-a-batch"},{"title":"Update assets in a batch","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /v1/inventory/assets/batch-update","href":"/api-reference/inventory/update-assets-in-a-batch"},{"title":"Get an asset","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/inventory/assets/{id}","href":"/api-reference/inventory/get-an-asset"},{"title":"Delete an asset","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/inventory/assets/{id}","href":"/api-reference/inventory/delete-an-asset"},{"title":"Update an asset","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /v1/inventory/assets/{id}","href":"/api-reference/inventory/update-an-asset"},{"title":"List asset categories","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/inventory/categories","href":"/api-reference/inventory/list-asset-categories"}]}]}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog"}]}]},"basePath":"","title":"Create assets in a batch - Secfix Developers (Staging)","buildId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","deploymentId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","dynamics":["10e4515597","c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["BannerMarkdown-Cj6eAYhz.js","dist-CdrJecqK.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","clsx-D-TRO5q5.js","html-void-elements-mCSPHezU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","OpenApiReferenceProvider-5FCzAcfS.js","utils-SLtAG4EZ.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-2DZi8ZMu.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-D7J3nkzE.js","snippetPresets-D0Alv0AH.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BI4qNJ2c.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BD3uyr8j.js","shallow-D8iEBr5z.js","getApiPlaygroundDisplay-CgNP4lzR.js","CodeSnippet-CX-QHuMs.js","CodeSnippets-VlXE-ZUf.js","Page-D9ithiIZ.js","getPastedJson-DYNQkZ1M.js","icon-CzacdwOi.js","MethodPill-2JVqoYKi.js","DuplicateIcon-_xVXs-U8.js","createIcon-BRHrweLo.js","DynamicMarkdown-mQG_iQiE.js","SectionHeading-DMpJzv8f.js","axios-vUo_bRtp.js","Markdown-5FGIym-8.js","AssistantPageLink-CHlcWBLM.js"]}